Más contenido relacionado
La actualidad más candente (20)
Similar a BitVisor Summit 8「2. BitVisor 2019年の主な変更点」 (20)
BitVisor Summit 8「2. BitVisor 2019年の主な変更点」
- 2. BitVisor 2019年の主な変更点
◼ 新規対応
– CPU新機能対応
– 仮想PCIデバイス対応
– 10GbE Aquantia AQC107対応
◼ ネットワーク性能改善
◼ NVMeドライバー改良
– ANS2対応、ファームウェアの問題回避、割り込みの対策
◼ その他細かな修正
– NVMeバグ修正、UEFI用の実装の改良など
◼ 未完了の修正
– panic改良、VT-d対策
2
- 5. 仮想virtio-netデバイス: 構成
◼ 既存のpara pass-throughネットワークドライバーと同様
にnetおよびttyパラメーターがある
– 物理インターフェイス側が仮想デバイスのインターフェイスとなり、
仮想インターフェイス側は何も接続されていない扱い
– 外部ホストがなければ使用できなかった、ログ出力やTCP/IPス
タックの機能を、1台のホストで使用可能
5
virt
phys
TCP/IPログ出力
ネットワーク
仮想マシン
既存のnet=ip (net=ippass)
phys
TCP/IPログ出力
仮想マシン
仮想virtio-netデバイスのnet=ip
- 6. 仮想virtio-netデバイス: 使用方法
◼ vmm.driver.pci_virtualを設定する
◼ bitvisor.conf記述例
– ひとつの仮想virtio-netデバイスが生成され、そのデバイスは
BitVisorのTCP/IPスタックに接続されログ出力にも使用する:
vmm.driver.pci_virtual=driver=virtio-net, net=ip, tty=1
– ふたつの仮想virtio-netデバイスが生成され、ひとつはTCP/IPス
タックに、もうひとつはログ出力に使用する:
vmm.driver.pci_virtual=driver=virtio-net, net=ip, and,
driver=virtio-net, tty=1
6
- 7. 仮想PCIデバイス: 実装
◼ PCIアドレスの割り当て
– バスアドレス0の中で使われていないデバイス番号を使用する
– 複数デバイスの場合はマルチファンクションとする
◼ 割り込み
– MSI/MSI-Xが使用されるものとする
– 割り込み番号をMSI-Xのテーブルから取得しself-IPIで生成する
◼ Virtio-net
– Para pass-through用の実装を流用
– PCI configuration spaceの未実装部分 (pass-throughの部分)
を実装
7
- 8. 10GbE Aquantia AQC107対応
◼ bitvisor.conf記述例
– vmm.driver.pci=driver=aq, net=ippass, virtio=1, tty=1
– 現状virtio=1のみ対応
◼ 実装詳細は省略
8
- 10. NVMeドライバー改良: ANS2対応
(ハードウェア暗号化機能隠ぺい)
◼ bitvisor.conf記述例
– vmm.driver.pci=driver=nvme_apple, ans2_wrapper=1
◼ 実装: 特定のデバイスIDに限り以下の動作とする:
– コマンドサイズを通常の64バイトではなく128バイトにする
(後半の64バイトがハードウェア暗号化関連に使われるらしい)
– PCIe configuration spaceのサブクラスの値を0x80ではなく
0x08 (Non-Volatile memory controller) にする
10
diskutil apfs listでの表示 暗号化方法 機能隠ぺい時
FileVault: no なし アクセスできる
FileVault: no (Encrypted at rest) ハードウェア FileVault: yesとなり復号できない
FileVault: yes ハードウェア キーがあっても復号できない
FileVault: yes ソフトウェア キーがあればアクセスできる
- 17. その他細かな修正: Intel CPUで
のマイクロコードアップデート関連
◼ Intel CPUでマイクロコードアップデートの前にキャッシュ
フラッシュするようにした
– 修正のきっかけ: Intel Broadwell世代のプロセッサを搭載した
Macで、macOSが起動中に時々フリーズする事象が発生し、デ
バッグの結果、マイクロコードアップデートの処理中あるいは直
後にすべてのコアがいっせいにフリーズしているらしいことが分
かった
– 修正内容: wbinvd命令を入れるだけでかなり改善したが、さらに
改善するため、suspend-to-RAM用に作った、VMM内をすべて
読み取ってからwbinvd命令を実行する関数を2回呼び出すよう
にした
• 時間がかかりすぎて問題が発生したため、キャッシュ無効状態で
アップデートを行うようにした
17
- 19. 未完了の修正: IOMMU対策
◼ 現状: para pass-throughドライバーが正常に動作するた
めにはIOMMU (Intel VT-d/AMD-Vi) の隠ぺいが必須
◼ これを見せられるようにしたい。対応方法:
– RMRR(Intel)/IVMD(AMD) にアドレス範囲を追加し、VMMの領
域を予約済み (1:1マッピングが必要な領域) として、ゲストオペ
レーティングシステムに通知する
• VMM領域内の (シャドウ) バッファーへのDMAアクセスに必要
– mapmem関数の仕様を変更してアドレス空間を指定できるよう
にし、ゲストオペレーティングシステムが使用しているIOMMUの
マッピングをもとにマップできるようにして、ドライバーも修正する
• 仮想マシン上のバッファーへのアクセスに必要
– ファームウェアがIOMMUを使用している場合、あとから予約済
み領域を追加することはできないので一時的にオフにする
– VMMの領域全体を予約にするのではなく、DMA用の領域を分
離して割り当てられれば理想的 19
- 20. BitVisor 2019年の主な変更点
まとめ
◼ 新規対応
– CPU新機能対応
– 仮想PCIデバイス対応
– 10GbE Aquantia AQC107対応
◼ ネットワーク性能改善
◼ NVMeドライバー改良
– ANS2対応、ファームウェアの問題回避、割り込みの対策
◼ その他細かな修正
– NVMeバグ修正、UEFI用の実装の改良など
◼ 未完了の修正
– panic改良、VT-d対策
20
最新リポジトリ
http://bitvisor.sf.net