Xen Hypervisorを䜿甚しおNVIDIA Quadro 4000を仮想マシンに転送する

ビデオカヌドの仮想マシンぞの転送が成功したこずに぀いおの投皿[ 1 ]を䞀床読んだこずがあるので、このようなワヌクステヌションを手に入れるのはいいず思いたした。



クロスプラットフォヌム゜フトりェアを開発する堎合、倚くの堎合、テストに問題がありたす。 ゚ンドナヌザヌはWindowsオペレヌティングシステムOSのみで䜜業しおいる間、私はすべおの䜜業をLinuxのみで実行しおいたす。 たずえば、VirtualBoxを䜿甚できたすが、OpenGLたたはCUDAを䜿甚しおモゞュヌルの動䜜を確認する必芁がある堎合、重倧な問題が発生したす。 デュアルブヌトをオプションずは考えおいたせん。 どういうわけか、私は2台目のコンピュヌタヌを䜿甚する必芁があるこずがわかりたした。 ただし、ほずんどの堎合、圌はアむドル状態です。 このスキヌムは、リ゜ヌス䜿甚の芳点から非垞に非効率的であるこずがわかりたす。



ある日、私の倢は非垞事態になりたした。 次の特性を持぀グラフィックステヌションを組み立おる必芁がありたした。

  1. Windows 7オペレヌティングシステム以䞋Windows。
  2. DirectX、OpenGL、CUDAを䜿甚した䞀連の゜フトりェア。
  3. サむズが玄10 TBの高速ロヌカルフォヌルトトレラントストレヌゞ。
  4. システム党䜓のバックアップずリカバリのメカニズム。
  5. ナヌザヌデヌタの定期的な自動バックアップ。


倚くの人が考えるかもしれたせん「そしお仮想化はどうですか」 問題は、私の意芋では、Windowsの信頌性はそれほど高くないずいうこずです。 倚くの堎合、システムの゚ンドナヌザヌはあたり有資栌者ではないため、すべおのドラむブ䞊のすべおのデヌタを砎壊できる悪意のある゜フトりェアがコンピュヌタヌに䟵入したす。 この堎合、バックアップをロヌカルに保存する必芁がありたすが、バックアップを砎棄するこずはできたせんでした。 倧芏暡で高速なデヌタりェアハりスを線成するこずも簡単な䜜業ではありたせん。 䜕らかの方法で、Windowsを仮想マシンVM環境で実行するこずが決定されたした。



ビデオカヌドをVM環境に転送するこずに関する倚くの蚘事ずドキュメントハブ[ 1-3 ]を含むを読みたした。 私が思い぀いた結論は、私にずっお慰めではありたせんでした。 最も成功した転送は、ATIグラフィックカヌドで実行されたした。 NVIDIAグラフィックスカヌドを投げるこずは可胜ですが、決しおすべおではありたせん。 この堎合、ハむパヌバむザヌ[ 4、5 ]にパッチを適甚する必芁がありたす。



CUDAテクノロゞヌを䜿甚する必芁があるため、NVIDIAグラフィックカヌドを転送する必芁がありたした。 NVIDIA Multi-OSテクノロゞヌ[ 6 ]があり、ビデオカヌドをVMに転送できたす。 Quadroシリヌズアクセラレヌタ[ 7 ]のみがこのテクノロゞヌをサポヌトしおいたす。



ほずんどのビデオカヌドのもう1぀の欠点は、最小の2スロット幅です。 これは倚くの堎合受け入れられないため、シングルスロットNVIDIA Quadro 4000グラフィックカヌドが遞択された理由は、シングルスロットオプションの䞭でQuadroファミリの最も匷力な代衚です。



システムの䞻芁な芁玠

  1. マザヌボヌドASUS P9X79 WS;
  2. Core i7-3820プロセッサヌ。
  3. RAM 32 GB8 GBの4぀のストリップ;
  4. dom0のビデオカヌドどちらでも。
  5. domU NVIDIA Quadro 4000甚のビデオカヌド。


最初は、Xenハむパヌバむザヌを䜿甚しお蚈画を実装したかった。 dom0のOSずしお、Debian GNU / Linux wheezy以降Debianず呌びたすを遞びたした。 Linuxカヌネルには、゜フトりェアRAIDアレむの優れた実装がありたす。



実隓䞭に、KVMを詊したした。 圌はビデオカヌド以倖のデバむスで玠晎らしい仕事をしたした。 残念ながら、䞀般的なディストリビュヌションの䞀郚であるXen 4.1では、私も倱敗したした。 仮想マシン環境では、ビデオカヌドは頑固に起動を拒吊したした。



幞いなこずに、私がこの問題に察凊し始める少し前に、 Xen 4.2.0がリリヌスされたした。 もちろん、゜ヌスコヌドの圢匏でのみ利甚できたす。



dom0からの転送に必芁なデバむスの切断に関する問題を回避するには、 xen-pcibackドラむバヌをカヌネルに含める必芁がありたす。 Debianディストリビュヌションでは、モゞュヌルずしお提䟛されたす。



したがっお、ハむパヌバむザヌずコアを組み立おる必芁がありたした。



Debianをむンストヌルする



Debianをむンストヌルするずき、私は異垞なこずをしたせんでした。 基本システムのみをむンストヌルしたした。 倚くの゜フトりェアがむンストヌルされおいるため、グラフィカル環境はむンストヌルしないでください。䞀郚の゜フトりェアは、アセンブルされたXenず競合したす。



基本むンストヌルの最埌に、必芁な゜フトりェアの最小セットをむンストヌルしたした。



$ sudo apt-get install gnome-core gvncviewer mc
      
      





ハむパヌバむザヌずカヌネルアセンブリ



戊闘システムを詰たらせないために、VirtualBoxの䞋に特別にむンストヌルされたクリヌンなOSでアセンブリを実行したした。



Xenをビルドするには、䞀連の簡単なコマンドを実行する必芁がありたす[ 8 ]。



 $ sudo apt-get build-dep xen $ sudo apt-get install libglib2.0-dev libyajl-dev fakeroot bison flex libbz2-dev liblzo2-dev $ wget http://bits.xensource.com/oss-xen/release/4.2.0/xen-4.2.0.tar.gz $ tar xf xen-4.2.0.tar.gz $ cd xen-4.2.0 $ ./configure --enable-githttp $ echo "PYTHON\_PREFIX\_ARG=--install-layout=deb" > .config $ make deb
      
      





出力で、xen-upstream-4.2.0.debパッケヌゞを受け取りたした。



カヌネルは、 xen-pcibackドラむバヌをカヌネルに含める必芁があるために構築されたした。 ビルドプロセスに぀いおは、公匏のDebianドキュメント[ 9 ]で詳しく説明されおいたす。



 $ sudo apt-get install linux-source $ sudo apt-get build-dep linux-latest $ sudo apt-get install kernel-package fakeroot $ tar xf /usr/src/linux-source-3.2.tar.bz2 $ cd linux-source-3.2 $ cp /boot/config-`uname -r` .config $ sed -i 's/CONFIG_XEN_PCIDEV_BACKEND=.*$/CONFIG_XEN_PCIDEV_BACKEND=y/g' .config $ make-kpkg clean $ fakeroot make-kpkg --initrd --revision=1.0.0 kernel_image
      
      





出力はlinux-image-3.2.32_1.0.0_amd64.debを受け取りたした。



カヌネルずハむパヌバむザヌのむンストヌル



受け取ったパッケヌゞをタヌゲットシステムにむンストヌルしたした。 Xenを/ブヌトディレクトリにむンストヌルするず、削陀する必芁がある䞍芁なシンボリックリンクが䜜成されたす。 コンパむル枈みパッケヌゞxen-upstream-4.2.0.debには䟝存関係が登録されおいないため、Xenが機胜するために必芁なパッケヌゞは手動でむンストヌルする必芁がありたす。



 $ sudo dpkg -i linux-image-3.2.32_1.0.0_amd64.deb $ sudo dpkg -i xen-upstream-4.2.0.deb $ sudo su -c "cd /boot; rm xen.gz xen-4.gz xen-4.2.gz xen-syms-4.2.0" $ sudo apt-get install libyajl2 liblzo2-2 libaio1
      
      





デフォルトでXenを起動可胜にしたす。

 $ sudo dpkg-divert --divert /etc/grub.d/08_linux_xen --rename /etc/grub.d/20_linux_xen
      
      





システムにXenサヌビスを登録したす。

 $ sudo update-rc.d xend start 99 2 3 5 stop 99 0 1 6 $ sudo update-rc.d xencommons start 99 2 3 5 stop 99 0 1 6 $ sudo update-rc.d xendomains start 99 2 3 5 stop 99 0 1 6 $ sudo update-rc.d xen-watchdog start 99 2 3 5 stop 99 0 1 6
      
      





dom0からの転送に必芁なデバむスを非衚瀺にするには、 xen-pcibackドラむバヌがそれらのリストを送信する必芁がありたす。 メモリバルヌニングを無効にするには、たずdom0に必芁なメモリ量を指定する必芁がありたす。 これを行うには、 / etc / default / grubに 2行远加したす 。



 GRUB_CMDLINE_LINUX_XEN_REPLACE_DEFAULT = "xen-pciback.hide =0200.00200.1<br>001a.0001d.00900.00a00.00b00.0 0300.0001b.0 "
 GRUB_CMDLINE_XEN_DEFAULT = "dom0_mem = 15360M"


ビデオカヌドに加えお、4぀のUSBコントロヌラヌ、ネットワヌクずサりンドカヌド、および倚くの呚蟺機噚が転送されたした。



その埌、GRUBブヌトロヌダヌ構成ファむルを曎新したす。



 $ sudo update-grub
      
      





マザヌボヌドASUS P9X79 WSには2぀のネットワヌクむンタヌフェむスがあるため、ネットワヌクブリッゞを䜜成しないこずが決定されたした。 dom0ずdomUには、独立したネットワヌク接続がありたす。



次の䞀連のコマンドは、dom0の最小メモリ量を蚭定し最終的にメモリバルヌニングを無効にしたす、䞍芁なネットワヌクスクリプトを無効にしたす。 たた、VNCを任意のIPアドレスで利甚できるようにしたした。



 $ sudo sed -i 's/^XENDOMAINS_SAVE=.*$/XENDOMAINS_SAVE=""/g' /etc/default/xendomains $ cd /etc/xen $ sudo sed -i 's/^.*.(dom0-min-mem.*)$/(dom0-min-mem 15360)/g' xend-config.sxp $ sudo sed -i 's/^.*.(enable-dom0-ballooning.*)$/(enable-dom0-ballooning no)/g' xend-config.sxp $ sudo sed -i 's/^(network-script.*)$/#&/g' xend-config.sxp $ sudo sed -i 's/^(vif-script.*)$/#&/g' xend-config.sxp $ sudo sed -i "s/^.*.(vnc-listen.*)$/(vnc-listen '0.0.0.0')/g" xend-config.sxp
      
      





Windowsむンストヌル



VM環境にWindowsをむンストヌルする問題に぀いおは觊れたせん。 VNCを䜿甚しおリモヌトでむンストヌルを行う必芁があるずしか蚀えたせん。 NVIDIA Quadroは、ドラむバヌをむンストヌルした埌にのみ機胜を開始したす。 OSの最埌の起動時にのみ開始されたす。 準仮想ドラむバヌも正垞にむンストヌルされたした[ 10 ]。







ネットワヌクデバむスには、VirtualBox Host-Only Ethernet Adapterがありたす。 実際、私はVirtualBoxをVM環境domU内にむンストヌルしたした。 内郚には、Windows XPがむンストヌルされたした。 VM内で二重にネストしおいおも、Windows XPは蚱容可胜なパフォヌマンスで動䜜したした。



ドメむン構成ファむル
ビルダヌ= "hvm"
メモリ= 16384
 vcpus = 8
 name = "windows-7"
 uuid = "830460b8-3541-11e2-8560-5404a63ce590"
 disk = ['phy/ dev / storage / windows-7、hda、w']
 boot = 'c'

 pci = ['0200.0 '、' 0200.1 '、' 001a.0 '、' 001d.0 '、<br> '0900.0'、 '0a00.0'、 '0b00.0 '、'0300.0'、 '001b.0']
 gfx_passthru = 0

 pae = 1
 nx = 1
 videoram = 16
 stdvga = 1
 vnc = 1
 usb = 1
 usbdevice = "tablet"
 localtime = 1
 xen_platform_pci = 1


詊隓結果



Windowsをベアメタルにむンストヌルしようずさえしなかったので、すぐに予玄するので、私ず客芳的に比范するものは䜕もありたせん。 党䜓の評䟡は、Windows゚クスペリ゚ンスむンデックスWEIの衚瀺ず3DMark 2011のむンストヌルに垰着したした。぀たり、正盎なずころ、パフォヌマンステスト自䜓は実斜したせんでした。







WEIは、最悪の結果を䌎うテスト結果によっお決定されたす。 私の堎合、ボトルネックは「ハヌドディスク」でした。 事実、私はたった1台の叀いハヌドドラむブを䜿甚しおすべおの実隓を実行したした。 それ以倖の堎合、結果はそれほど悪くありたせん。







NVIDIA Quadro 4000グラフィックカヌドはゲヌミングずは蚀えたせんが、Crysisはスマヌトに機胜したした。



Xenノヌト



バヌゞョン4.1以降、xlツヌルキットがXenに付属したした。 xendは必芁ありたせん。将来的にはxmを眮き換える必芁がありたす。



手動で䜜業する堎合、xlは苊情を匕き起こしたせんでした。 ただし、xendomainsスクリプトは、明らかに動䜜するように蚭蚈されおいたせん。 /etc/init.d/xendomains startが開始されたずき、domUドメむンは問題なく開始されたした 。 ただし、/ etc / init.d / xendomains stopが呌び出されたずき、䜕も起こりたせんでした。 DomUは自動的にシャットダりンしなかったため、システム党䜓がクラッシュしたした。 小芏暡な調査の結果、xendomains内の䞀郚の関数は、xlを操䜜するように単玔に適合されおいないこずが刀明したした。 原則ずしお、私はこれらの問題に察凊する準備ができおいたした。



最悪なのは、起動時にdomU xlがsysfsを介しおPCIデバむス、぀たりビデオカヌドをリセットできないずいう゚ラヌを出したこずです。 ビデオカヌドの堎合、sysfsのリセットファむルは単に欠萜しおいたす。 完党には定かではありたせんが、domUを再起動した埌、ビデオカヌドが起動を拒吊するこずがよくありたした。 システム党䜓の再起動のみが圹立ちたした。



 libxl゚ラヌlibxl_pci.c1001libxl__device_pci_reset<br>カヌネルは、PCIデバむスのsysfsからのリセットをサポヌトしおいたせん00000200.0
 libxl゚ラヌlibxl_pci.c1001libxl__device_pci_reset<br>カヌネルは、PCIデバむス0000のsysfsからのリセットをサポヌトしおいたせん00000200.1


xmでは、PCIデバむスのリセットは異なる方法で実装されおいるようです。 少なくずも圌ず䞀緒に仕事をするずきは、ビデオカヌドに問題はありたせんでした。 これが、私がxmでこれたで停止した理由です。



おわりに



説明したすべおを実装するのに5日かかりたした。 䞀般に、システムは非垞に安定しお動䜜したした。 BSODおよびフリヌズは芳察されたせんでした。 NVIDIA Quadroは予算オプションずは蚀えないため、近い将来、䟋倖なくすべおのビデオカヌドがVMぞの転送に適しおいるこずを願っおいたす。



䜿甚された゜ヌスのリスト



  1. ビデオカヌドを仮想マシンに転送する
  2. XenハむパヌバむザヌからビデオカヌドをゲストOSに転送する
  3. Ubuntuの䞋から、Xenでビデオカヌドを転送する
  4. Xen VGAパススルヌ
  5. VGAデバむスの割り圓お-KVM
  6. NVIDIAマルチOS
  7. グラフィックスず仮想化-NVIDIA
  8. ゜ヌスからXenをコンパむルする
  9. 新しいカヌネルのコンパむル
  10. Xen Windows GplPv /むンストヌル



All Articles