Windows Subsystem for Linux(WSL)在 Heresy 來看,對於跨平台的開發者來說,算是一個相當實用的功能!在更新到 WSL2 後,雖然還是有不少限制,但是其實以 console 程式來說,通用性算是更好了~
而微軟目前則是在進行 WSLg(Windows Subsystem for Linux GUI)的開發,試著將 GPU 以及圖形介面的支援,帶進 WSL 的環境中。
不過目前最新的 Windows 10 21H1 也還沒有支援這項功能,要切換到 Insider 的測試版(build 21362+)、或是直接換到剛推出的 Windows 11 預覽版才可以試用。
Heresy 這邊最近是把一台電腦升級到 Windows 11 Insider Preview 來玩看看,剛好也就來研究一下 WSLg 了。
首先,在 Windows 11 預覽版中,當把 WSL 裝起來後,預設的版本就是 WSL2、而同時也馬上就有支援圖形介面、不需要做其他的設定了!
像下圖就是安裝 nautilus 這個檔案管理工具(apt install nautilus)後、執行起來(nautilus)的結果。
在工作管理員裡可以看到,實際上這邊是使用「遠端桌面連線」(mstsc.exe)來連線、顯示的,不過下方工具列的圖示則是會被修改掉、讓使用者看不太出來。
至於實用性呢?雖然可以動,但是 Heresy 在測試的過程中,也還是不時地會遇到一些問題。
之後,Heresy 則是安裝了「mesa-utils」(apt install mesa-utils)、來做簡單的 OpenGL 確認。
如果執行 glxinfo | grep OpenGL 的話,會得到下面的結果:
OpenGL vendor string: Mesa/X.org OpenGL renderer string: llvmpipe (LLVM 11.0.0, 256 bits) OpenGL core profile version string: 4.5 (Core Profile) Mesa 20.2.6 OpenGL core profile shading language version string: 4.50 OpenGL core profile context flags: (none) OpenGL core profile profile mask: core profile OpenGL core profile extensions: OpenGL version string: 3.1 Mesa 20.2.6 OpenGL shading language version string: 1.40 OpenGL context flags: (none) OpenGL extensions: OpenGL ES profile version string: OpenGL ES 3.2 Mesa 20.2.6 OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20 OpenGL ES profile extensions:
可以看到,實際上是在透過 Mesa 在支援 OpenGL 的。
而在這個環境下,也還是可以執行 glmark2,其結果如下:
** GLX does not support GLX_EXT_swap_control or GLX_MESA_swap_control! ** Failed to set swap interval. Results may be bounded above by refresh rate. ======================================================= glmark2 2021.02 ======================================================= OpenGL Information GL_VENDOR: Mesa/X.org GL_RENDERER: llvmpipe (LLVM 11.0.0, 256 bits) GL_VERSION: 3.1 Mesa 20.2.6 ======================================================= ..... glmark2 Score: 292
而這時候會純粹使用 CPU 繪圖,實體 GPU 是完全不會用到的。
而根據 NVIDIA 的說法(官方文件),只要在 Windows 環境下,安裝好 WSL 版的顯示卡驅動程式(連結),就不需要在 WSL 內另外安裝驅動程式了。
際上 Heresy 這邊測試的狀況,是在這個狀況下,的確只要有正確安裝 Windows 的 NVIDIA Driver(Heresy 用更新版好像也可以?),WSL 下的 CUDA 基本上就可以正常運作!
Heresy 自己隨便跑了幾個 NVIDA CUDA 官方的範例,測試結果的數據感覺不會差太多,應該算是可以實用的等級了。
而如果另外安裝 nvidia-smi 來確認的話,也可以看到實體顯示卡的資訊。
這邊比較有趣的,是他抓到的顯示卡驅動程式版本是 Windows 的版本,感覺上是直接對應到實體顯示卡了?
但是很可惜的,是 OpenGL 的部分應該還是不支援的。CUDA 範例裡面只要是牽涉到 OpenGL 的部分,執行時也都是會有問題的。
以現在狀況來看,要在 WSL 裡面使用 GPU 加速的 OpenGL,應該是需要另外安裝 Mesa 21 以上的版本(官方文件,Ubuntu 20 預設是 Mesa 20)。
要安裝的話,可以透過「add-apt-repository ppa:kisak/kisak-mesa」來加入比較新版的 Mesa PPA,然後再透過 apt update; apt upgrade 來更新,理論上就可以安裝 Mesa 21 版了(參考)。
安裝完成後,執行「glxinfo | grep OpenGL」的結果會變成是:
OpenGL vendor string: Microsoft Corporation OpenGL renderer string: D3D12 (NVIDIA GeForce RTX 3090) OpenGL core profile version string: 3.3 (Core Profile) Mesa 21.1.3 - kisak-mesa PPA OpenGL core profile shading language version string: 3.30 OpenGL core profile context flags: (none) OpenGL core profile profile mask: core profile OpenGL core profile extensions: OpenGL version string: 3.1 Mesa 21.1.3 - kisak-mesa PPA OpenGL shading language version string: 1.40 OpenGL context flags: (none) OpenGL extensions: OpenGL ES profile version string: OpenGL ES 3.0 Mesa 21.1.3 - kisak-mesa PPA OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.00 OpenGL ES profile extensions:
這邊基本上就可以抓到實體的顯示卡了。而之後執行 GPU 相關的程式,也都會用實體 GPU 來計算了~
而 glmark2 的分數也會從之前的 292 升到 445 分。
NVD3D10: CPU cyclestats are disabled on client virtualization NVD3D10: CPU cyclestats are disabled on client virtualization ** GLX does not support GLX_EXT_swap_control or GLX_MESA_swap_control! ** Failed to set swap interval. Results may be bounded above by refresh rate. ======================================================= glmark2 2021.02 ======================================================= OpenGL Information GL_VENDOR: Microsoft Corporation GL_RENDERER: D3D12 (NVIDIA GeForce RTX 3090) GL_VERSION: 3.1 Mesa 21.1.3 - kisak-mesa PPA ======================================================= ...... glmark2 Score: 445
這邊成績看起來增加很多,但是實際上還是低得不像話的…隨便抓台實體機來跑,分數可是直接上萬的…
根據之前官方的說法,這邊是透過把 OpenGL 和 OpenCL 的對應到 Direct 3D 12 來實作的,初期僅會支援 OpenCL 1.2 和 OpenGL 3.3。
同時,目前的版本畫面似乎還是會透過系統記憶體來做交換,所以對於獨立顯示卡來說,效能應該是會掉很多的;但是老實說現在這成績,掉得實在是太誇張了…
不過,在 Heresy 來看,真正的問題可能還是支援度了。雖然上了 Mesa 21 後,的確可以讓實體 GPU 運作,但是支援度看來是滿悲劇的,許多和 OpenGL 相關的程式,都不能正常運作。
像是 CUDA 和 OpenGL 相關的範例,也還是不能動。 orz
而以 UNIGINE 的效能測試程式(官網)來說,2009 的 Heaven 跑得還算順暢,但是也都不到 60fps;2013 的 Valley 則是只有個位數的 fps…至於 2017 的 Superposition?一執行就直接死當了。 XD
在個人來看,感覺上應該是有的 OpenGL Extension 不支援吧?(連 GL-Z(官網)都跑不出內容…目前不知道該怎麼確認)
所以基本上比較新的 OpenGL 程式看來就不能動了…(其實也不用太新)
再加上效能問題…個人是覺得,初期大概是先不要期待 WSLg 的 OpenGL 能做到什麼程度好了… orz