Windows Subsystem for Linux(WSL)是一套将Linux集成在Windows上面的解决方案,在去年的build大会上面,微软宣布推出第二代WSL,将原本的兼容层实现方式改成了通过轻量化虚拟机来实现,同时也能够将完整的Linux内核带入Windows平台,这也使得WSL2将拥有比原来更多的Linux特性,而今天他们就宣布了会给WSL2引入DirectX。 WSL2中引入了新的内核驱动Dxgkrnl,它会给用户层暴露出一个可调用的设备——/dev/dxg,它提供一系列类似于Windows原生WDDM D3DKMT内核服务的IOCTL。而位于内核中的Dxgkrnl则是通过虚拟机总线(VM Bus)与宿主机内核中的Dxgkrnl相连,可以直接与物理GPU进行通信。这也让运行于WSL2环境中的应用程序有了像原生Win32程序一样访问GPU的能力,系统对它们是无差别对待的,即使是WSL2中的程序也可享有完整的宿主机GPU资源。WSL2下面的Dxgkrnl是开源的全新实现,与Windows上面的版本没有任何的共同点。 为WSL2引入WDDM的兼容层意味着它能够使用原本在Windows上才能够使用的很多API,比如说,WSL2中的应用可以调用D3D12 API了。是的,微软直接给WSL2引入了完整的、真正的D3D12 API,这个特性是通过给WSL2引入新的闭源库——DxCore(libdxcore.so)和libd3d12.so实现的,他们兼容基于glibc的发行版,由于是预编译的,可以做到开箱即用。当然,没有用户模式驱动的话,在WSL2里面还是没有办法让GPU跑D3D12这种API,微软直接和合作伙伴合作,在支持WDDM 2.9标准的驱动中直接集成了一个为Linux编译的DX12用户模式驱动,会自动安装进WSL2中。 DirectX团队还将DirectML这个机器学习库移植上了Linux,它可以借助GPU进行加速。 当然,因为传统Linux图形环境跑的比较多的还是OpenGL,对于OpenGL、OpenCL等,这里开发团队引入了他们此前就已经开始开发的OpenGL和OpenCL向DX12的转换层。通过对Mesa进行升级,用户可以轻松享受到WSL2带来的新图形体验。不过对于Vulkan,开发团队还在继续找寻方法。 现在很多做深度学习开发的人都会选择使用Linux环境,而不是Windows,如果WSL2能够让CUDA也轻松运行就好了。开发团队当然注意到了这一点,他们与NVIDIA进行合作,在NVIDIA的WDDM 2.9驱动中就会自动带有libcuda.so,可以让基于CUDA的计算应用如同在原生平台上一样,轻松调用GPU。 有了完整的GPU加速方案之后,在WSL2中运行Linux的图形应用也不是什么难事了,所以WSL2还会加上对GUI应用的支持,以后很有可能会在Windows桌面环境下直接看到一个Linux程序的窗口。 微软在WSL上面还是付出了较大开发精力的,他们在努力给开发者带去更好的开发体验。WSL可以让他们在使用Windows的同时利用好Linux的优势。
转载自——超能网 倪嘉声
|