English中文

機能

ホスト再起動をまたぐパススルー

できること

VM がデバイスを専有し、自分のドライバーで使います。NAS のゲストには仮想ディスクではなく、SMART、ライトキャッシュ、実際のエラーを含む本物のディスクが見えます。

  • デバイスはスロットではなく、ベンダー、モデル、シリアル番号で登録します。カードを別のスロットに移しても問題ありません。交換したディスクが誤って渡されることはなく、そのディスクを求めていた VM は起動せず、理由を示します。
  • 登録したデバイスは、ホスト自身のドライバーが接続する前に、起動時に確保されます。NAS のゲストに属する ZFS プールをホストがインポートすることはありません。
  • 1 つのデバイスは 1 台の VM に属します。2 台目の VM からの要求は拒否されます。
  • Intel C62x の SATA コントローラーのように、BAR がページより小さいデバイスもパススルーできます。標準の bhyve ではできません。

ホストの再起動を乗り越えるしくみ

IOMMU(Intel VT-d)は、再起動しない keel ハイパーバイザーが管理しています。ホストの再起動中も、デバイスは DMA マッピングを保ったまま、処理中の I/O を完了させます。マスクされるのは割り込みだけで、割り込みはデバイス内で待機し、VM の再開時に届けられます。新しいホストはデバイスをリセットせずに引き継ぎます。

ESXi の DirectPath や Hyper-V の DDA では、パススルーしたデバイスを持つ VM をサスペンドできません。

計測結果

  • NVMe ドライブを丸ごと割り当てた NAS ゲストで、fsync 付きで書き込み:ホスト再起動 4 回、一時停止は各 21〜23 秒、エラーなし。
  • 書き込み 4 本と読み取り 1 本、約 600〜700 MB/s の高負荷:ホスト再起動 10 回、タイムアウトやリセットなし、ZFS scrub のエラー 0。
  • NVMe ドライブとオンボード SATA コントローラーを持つ 1 台の VM:ホスト再起動 5 回、どちらも問題なし。
  • ディスクを接続したオンボード AHCI:ゲストで書き込んだデータを読み戻すと同じチェックサム、scrub のエラー 0。
  • 使用中のデバイスを消失させた場合:ホストは動作を続け、VM はデバイスを失ったと記録されます。

エラーなしでホスト再起動を 14 回終えたあと、デバイスを丸ごと持つ VM は、ホストの再起動時にシャットダウンではなくサスペンドされるのが標準になりました。

制限事項

  • 割り込みリマッピングはまだ有効になっていません。理論上は、ゲストのドライバーが不正な割り込みを送ることができます。自宅や小規模オフィスのように信頼できるゲストだけなら、現時点では許容できると考えています。
  • RMRR を必要とするデバイスは、まだパススルーできません。
  • このような VM のスナップショットには、keelOS が管理するディスクしか含まれません。パススルーしたコントローラーの先にあるディスクは含まれず、メモリを含むスナップショットも取れません。デバイス自体の状態を保存できないためです。
  • HBA カードはまだテストしていません。

記事を読む(中国語) →

← 機能一覧