Windows Subsystem for Linux(WSL)是一套將Linux集成在Windows上面的解決方案,在去年的build大會(huì)上面,微軟宣布推出第二代WSL,將原本的兼容層實(shí)現(xiàn)方式改成了通過(guò)輕量化虛擬機(jī)來(lái)實(shí)現(xiàn),同時(shí)也能夠?qū)⑼暾腖inux內(nèi)核帶入Windows平臺(tái),這也使得WSL2將擁有比原來(lái)更多的Linux特性,而今天他們就宣布了會(huì)給WSL2引入DirectX。 WSL2中引入了新的內(nèi)核驅(qū)動(dòng)Dxgkrnl,它會(huì)給用戶層暴露出一個(gè)可調(diào)用的設(shè)備——/dev/dxg,它提供一系列類似于Windows原生WDDM D3DKMT內(nèi)核服務(wù)的IOCTL。而位于內(nèi)核中的Dxgkrnl則是通過(guò)虛擬機(jī)總線(VM Bus)與宿主機(jī)內(nèi)核中的Dxgkrnl相連,可以直接與物理GPU進(jìn)行通信。這也讓運(yùn)行于WSL2環(huán)境中的應(yīng)用程序有了像原生Win32程序一樣訪問(wèn)GPU的能力,系統(tǒng)對(duì)它們是無(wú)差別對(duì)待的,即使是WSL2中的程序也可享有完整的宿主機(jī)GPU資源。WSL2下面的Dxgkrnl是開源的全新實(shí)現(xiàn),與Windows上面的版本沒(méi)有任何的共同點(diǎn)。 為WSL2引入WDDM的兼容層意味著它能夠使用原本在Windows上才能夠使用的很多API,比如說(shuō),WSL2中的應(yīng)用可以調(diào)用D3D12 API了。是的,微軟直接給WSL2引入了完整的、真正的D3D12 API,這個(gè)特性是通過(guò)給WSL2引入新的閉源庫(kù)——DxCore(libdxcore.so)和libd3d12.so實(shí)現(xiàn)的,他們兼容基于glibc的發(fā)行版,由于是預(yù)編譯的,可以做到開箱即用。當(dāng)然,沒(méi)有用戶模式驅(qū)動(dòng)的話,在WSL2里面還是沒(méi)有辦法讓GPU跑D3D12這種API,微軟直接和合作伙伴合作,在支持WDDM 2.9標(biāo)準(zhǔn)的驅(qū)動(dòng)中直接集成了一個(gè)為L(zhǎng)inux編譯的DX12用戶模式驅(qū)動(dòng),會(huì)自動(dòng)安裝進(jìn)WSL2中。 DirectX團(tuán)隊(duì)還將DirectML這個(gè)機(jī)器學(xué)習(xí)庫(kù)移植上了Linux,它可以借助GPU進(jìn)行加速。 當(dāng)然,因?yàn)閭鹘y(tǒng)Linux圖形環(huán)境跑的比較多的還是OpenGL,對(duì)于OpenGL、OpenCL等,這里開發(fā)團(tuán)隊(duì)引入了他們此前就已經(jīng)開始開發(fā)的OpenGL和OpenCL向DX12的轉(zhuǎn)換層。通過(guò)對(duì)Mesa進(jìn)行升級(jí),用戶可以輕松享受到WSL2帶來(lái)的新圖形體驗(yàn)。不過(guò)對(duì)于Vulkan,開發(fā)團(tuán)隊(duì)還在繼續(xù)找尋方法。 現(xiàn)在很多做深度學(xué)習(xí)開發(fā)的人都會(huì)選擇使用Linux環(huán)境,而不是Windows,如果WSL2能夠讓CUDA也輕松運(yùn)行就好了。開發(fā)團(tuán)隊(duì)當(dāng)然注意到了這一點(diǎn),他們與NVIDIA進(jìn)行合作,在NVIDIA的WDDM 2.9驅(qū)動(dòng)中就會(huì)自動(dòng)帶有l(wèi)ibcuda.so,可以讓基于CUDA的計(jì)算應(yīng)用如同在原生平臺(tái)上一樣,輕松調(diào)用GPU。 有了完整的GPU加速方案之后,在WSL2中運(yùn)行Linux的圖形應(yīng)用也不是什么難事了,所以WSL2還會(huì)加上對(duì)GUI應(yīng)用的支持,以后很有可能會(huì)在Windows桌面環(huán)境下直接看到一個(gè)Linux程序的窗口。 微軟在WSL上面還是付出了較大開發(fā)精力的,他們?cè)谂o開發(fā)者帶去更好的開發(fā)體驗(yàn)。WSL可以讓他們?cè)谑褂肳indows的同時(shí)利用好Linux的優(yōu)勢(shì)。 |
|