ニュース

「WSL 2」に「DirectX」が追加 ~将来的にはLinux GUIアプリへの対応も

“Build 2020”でMicrosoftが発表

 米Microsoftは5月19日(現地時間)、開発者向けオンラインカンファレンス“Build 2020”で、「Windows Subsystem for Linux 2(WSL 2)」に「DirectX」のGPUハードウェアアクセラレーションを導入する計画を発表した。

 ここ数年のWindowsリリースで、MicrosoftはクライアントGPU仮想化の実現に取り組んできた。その結果、GPU仮想化は「WDDM(Windows Display Driver Model)」に統合され、「WDDM 2.5」以降のドライバーはGPU仮想化をネイティブにサポートしている。この技術は「WDDM GPU Paravirtualization」(GPU-PV)と呼ばれており、セキュリティ技術「Windows Sandbox」「Windows Defender Application Guard(WDAG)」や「Hololens 2」のエミュレーターなどで活用されている。

 しかし、従来の「GPU-PV」はWindowsゲスト、つまり仮想マシン(VM)やコンテナーで実行されているWindowsでしか利用できない。「WSL 2」でGPUを扱うには、「GPU-PV」の対応をLinuxゲストにも拡大する必要があった。

 「WDDM 2.9」ではこの問題を解決するため、ユーザーモードLinuxから「DirectX」ハードウェア(/dev/dxg)へアクセスできるようにする新しいカーネルドライバー「dxgkrnl」が導入された。Windowsホストに適切なGPUドライバーがインストールされていれば、“/dev/dxg”は自動で「WSL 2」ディストリビューションで利用可能となり、WindowsアプリとともにGPUを共有する。「WSL 2」アプリとWindowsアプリに扱いの差はなく、WindowsでGPUを利用するアプリがなければ、「WSL 2」アプリですべてのGPUリソースを占有することも可能だという。Linux向けの「dxgkrnl」はオープンソースで開発されており、ソースコードは“GitHub”で公開されている。

Linux向けの「dxgkrnl」でユーザーモードLinuxから「DirectX」ハードウェアへアクセスできるように

 このように「GPU-PV」がLinuxゲストにもたらされたことで、WindowsホストもLinuxゲストもWDDM互換という点では共通となった。そこで次に行われたのが、「DirectX」をLinux向けに再コンパイルして「WSL 2」に持ち込むことだ。実際、Linux向けの「DirectX 12」(libd3d12.so)はWindowsの「DirectX 12」(d3d12.dll)と同じソースコードからコンパイルされているという。唯一の例外は、今のところプレゼンテーションの統合がないこと。要するにオフスクリーンレンダリングの計算は可能だが、ゲームのレンダリングなどはできない。

 ちなみに「libd3d12.so」とともに導入された「libdxcore.so」、「DxCore」はAPIのレガシー部分を最新版に置き換えた「DXGI」(DirectX グラフィックス インフラストラクチャー)の簡略版で、WindowsとLinuxの両方で利用される。これらに加え、GPUメーカーと協力してLinuxターゲットに再コンパイルしたユーザーモードドライバー(UMD)を加え、Linuxゲストにおける「DirectX」対応を実現している。

Linux向けの「DirectX 12」「DxCore」、「UMD」でLinuxゲストにおける「DirectX」対応を実現

 そのほかにも、「WSL 2」は「Mesa」ライブラリを介した「OpenGL」、「OpenCL」および「Vulcun」の利用が可能。NVIDIAの協力で、「NVIDIA CUDA」アクセラレーションもサポートしている。「DirectX」と「DxCore」に加え、機械学習API「DirectML」も移植されているため、当面のあいだは機械学習のトレーニングなどへの応用がメインとなるだろう。

 加えて、将来的にはGUIアプリへの対応も予定されているとのこと。“Build 2020”ではその初期バージョンがデモンストレーションされ、Windows上でシームレスにLinux GUIアプリが動作する様子がお披露目されている。

「WSL 2」は将来的にGUIアプリへも対応