Friday, September 9, 2011

Nvidia Optimus为什么在Linux上是个大问题?

This article is a direct translation from relative pages from “nouveau” wiki. So, thanks to the author first:)
  • Nvidia Optimus
如果你的笔记本电脑有Optimus,说明你的电脑有一块Nividia的显卡和另一块其他品牌的显卡(只可能是Intel的?)。除了Nvidia GPU的PCOPY引擎是新技术外【1】,Optimus可以说就是双显卡笔记本电脑的另一个商业名词。
  • 为什么Optimus是个大问题
简单的说,一塌糊涂。
一个显卡需要有一个GPU,一些内存,这些内存可能是显卡专有的(例如独立显存),也可以直接是一块系统内存(大部分集成显卡就是这么做的),还需要一个输出(比如插口)来连接你的显示器。对于笔记本电脑来说,自带的屏幕也可以认为是一种显示器。
为什么Optimus会变成Linux的噩梦呢?因为你无法知道输出连着哪个GPU。换句话说,如果在不同的硬件(GPU)之间有个多路复用模块的话,这个多路复用模块是由软件控制的!
这个多路复用模块,如果存在的话,用来控制哪个GPU来驱动显示器,或自带的屏幕。如果一个GPU已经连接了显示器,那么这个多路复用模块还应该告诉另一个显卡该屏幕不可用。当我们外接显示器的时候,情况是类似的。当显示器与一个GPU相连,其他的GPU就不能再链接这个显示器了。一种恶心的情况是Intel GPU与自带的屏幕相连,Nvidia GPU与外接显示器相连。当然这种情况就不好处理了。最理想的情况是这个多路复用模块能选择哪个GPU来驱动所有的输出设备。
一般来说,你可以选择任何一种可能的组合(如上文提到的),因为怎么连接屏幕应该是自由的!我们应该有办法来检测链接的情况,当然更应该知道这个多路复用模块是否真的存在和这个模块在哪!但现实是这些相关的文档并没有开放,开发者无从知晓!
目前来说,检测链接情况是唯一的难点!当你用GPU执行渲染的时候麻烦就来了,我们无法将渲染的结果正常输出。或者说GPU根本无法输出。因为要想让一个渲染的图像正常显示,我们需要将这个结果复制到一块驱动显示设备的GPU能找到的地方(内存)。
这么说来我们只少了帧缓存复制这步么?当然不是,我们还缺少整个内核DRM驱动,X驱动和X服务器来支持Optimus。除了一些特例外,这专有的驱动在Linux上还不能支持!
另一方面,省电是Optimus的主要目的,转换GPU是相对容易的。如果多路复用模块存在,而且硬件制造商也清楚,你可能已经能选择在一次会话中专用哪个GPU了,或干脆把不用的那个不用的GPU关了。除了这外,其他所有情况都是很复杂的!
  • 现在什么能正常工作?
如果你笔记本电脑的多路复用模块是硬件实现的,内核switcheroo驱动在启动的时候能自动尝试转换可行的GPU驱动。这种转换还能做些改动,比如ASUS-Switcheroo,但他并没有提供什么额外的功能。如果某个变体碰巧能行,但原本的switcheroo不行,这说明原本的转换还有些问题。针对主流内核的补丁可能已经在开发了。
针对另一些情况,你只能停留在当前默认的配置,当然还是不能转换显卡,不能复制帧缓存。

【1】PCOPY引擎:
我们看下面这段话。
"We needed hardware support to quickly move the graphics data around in the system, so we created a fast copy engine. The Optimus Copy Engine is a new alternative to traditional DMA (Direct Memory Access) transfers between the GPU frame buffer memory and system memory used by the IGP. With Optimus we also removed multiplexers, called MUXs, so we use the integrated graphics as a display adapter or pass through."
“我们需要硬件支持系统内的图形信息快速拷贝,所以我们制造了一种快速的复制引擎。Optimis Copy Engine可以替代传统的DMA(内存直接访问单元)来执行GPU帧缓存与集成显卡使用的系统内存间的复制操作。在Optimus下,我们还移除了多路复用模块,所以我们用集成显卡来做显示器的接口或通路。”
--Sasha Ostojic
Sasha Ostojic是Nvidia的笔记本电脑软件高级总监,上面这段话出Nvidia的博客。

No comments:

Post a Comment