- リンクを取得
- ×
- メール
- 他のアプリ
まだベータですが、時期 VirtualBox のバージョンでは PCI パススルーが実装されます。
つまり USB デバイスのように PCI デバイスを仮想マシンに割り当てることができます。とりあえずは Linux がホストの場合のみです。PCI デバイスと言っても、PCIexpress や AGP も割り当てられると思います。
なお、ハードウェアの対応が必要となります。AMD なら IOMMU、Intel なら VT-d (Extended page tables (EPT))、当然 Intel-VT/AMD-V も必要です。Intel なら Core i7 以降、AMD なら Barcelona 以降で対応するようです。メモリー関連の機能なので、メモリーコントローラーを CPU に組み込んでいた AMD の CPU の方が対応が早かったのでしょう。
今回は AMD Fusion APU E350 のシステムで実施してみます。
・まずは BIOS の設定です。(マザーによっては設定項目に違いがあるかもしれません)
Advanced > CPU Configuration > SVM Mode を Enable に
Chipset > North Bridge > IOMMU Mode を適当な値に (今回は 512MB を選択しましたが、もっと少なくても大丈夫かと思います)
・カーネルの設定を確認し、必要なら再構築します。
Bus options (PCI etc.) --->
>>Support for DMA Remapping Devices を有効に
>>PCI Stub driver を有効に
>>PCI IOV support を有効に (必要かどうか不明ですが、とりあえず関係ありそうなので)
Processor type and features --->
>>AMD IOMMU support を有効に
必要に応じてカーネルを再構築します。
・起動オプションを追加する
grub (など) の起動オプションに、「amd_iommu=on」を追加します。
・VirtualBox の仮想マシンのオプションで、「ネステッドページング」を有功にする
・コマンドラインから、以下のコマンドで PCI デバイスを割り当てる
仮想マシンが「電源オフ」の状態であることを確認して、以下のコマンドを実行します。
VBoxManage modifyvm [VM名] --pciattach [Bus ID]
VM 名は割り当てたい仮想マシンの名称。Bus ID は割り当てたいデバイスのデバイス ID です。lspci コマンドで一番左に表示される値です。例えば lspci コマンドの結果に
03:00.0 Ethernet controller: Marvell Technology Group Ltd. Device 4380 (rev 10)
と出力される PCI デバイスがあれば、「03:00.0」と割り当てることができます。また、ホストと仮想マシンとで異なる Bus ID を割り当てることもできます。その場合は「03:00.0@02:00.0」のように、@ 以降に仮想マシン側で割り当てたい Bus ID を指定します。
結構ハードルは高いですが、機能としてはおもしろそうですよね。ちなみにビデオカードをパススルーしようとしたら、X がフリーズしました。
つまり USB デバイスのように PCI デバイスを仮想マシンに割り当てることができます。とりあえずは Linux がホストの場合のみです。PCI デバイスと言っても、PCIexpress や AGP も割り当てられると思います。
なお、ハードウェアの対応が必要となります。AMD なら IOMMU、Intel なら VT-d (Extended page tables (EPT))、当然 Intel-VT/AMD-V も必要です。Intel なら Core i7 以降、AMD なら Barcelona 以降で対応するようです。メモリー関連の機能なので、メモリーコントローラーを CPU に組み込んでいた AMD の CPU の方が対応が早かったのでしょう。
今回は AMD Fusion APU E350 のシステムで実施してみます。
・まずは BIOS の設定です。(マザーによっては設定項目に違いがあるかもしれません)
Advanced > CPU Configuration > SVM Mode を Enable に
Chipset > North Bridge > IOMMU Mode を適当な値に (今回は 512MB を選択しましたが、もっと少なくても大丈夫かと思います)
・カーネルの設定を確認し、必要なら再構築します。
Bus options (PCI etc.) --->
>>Support for DMA Remapping Devices を有効に
>>PCI Stub driver を有効に
>>PCI IOV support を有効に (必要かどうか不明ですが、とりあえず関係ありそうなので)
Processor type and features --->
>>AMD IOMMU support を有効に
必要に応じてカーネルを再構築します。
・起動オプションを追加する
grub (など) の起動オプションに、「amd_iommu=on」を追加します。
・VirtualBox の仮想マシンのオプションで、「ネステッドページング」を有功にする
・コマンドラインから、以下のコマンドで PCI デバイスを割り当てる
仮想マシンが「電源オフ」の状態であることを確認して、以下のコマンドを実行します。
VBoxManage modifyvm [VM名] --pciattach [Bus ID]
VM 名は割り当てたい仮想マシンの名称。Bus ID は割り当てたいデバイスのデバイス ID です。lspci コマンドで一番左に表示される値です。例えば lspci コマンドの結果に
03:00.0 Ethernet controller: Marvell Technology Group Ltd. Device 4380 (rev 10)
と出力される PCI デバイスがあれば、「03:00.0」と割り当てることができます。また、ホストと仮想マシンとで異なる Bus ID を割り当てることもできます。その場合は「03:00.0@02:00.0」のように、@ 以降に仮想マシン側で割り当てたい Bus ID を指定します。
結構ハードルは高いですが、機能としてはおもしろそうですよね。ちなみにビデオカードをパススルーしようとしたら、X がフリーズしました。
コメント
コメントを投稿