WSLg 的 OpenGL 環境:感覺不太堪用啊


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

對「WSLg 的 OpenGL 環境:感覺不太堪用啊」的想法

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.