之前,zx 长期的抱怨过 GeForce 6600GT 和 GeForce 8600GTS 糟糕的 Fx 及 Compiz 性能表现,这件事 werner 和 whans 都比较清楚,而且万恶的 whans 同学之前还使用过令 zx 一度眼红的 Intel 板载显卡(什么毛病)。最终发现问题出现在 Nvidia 显卡驱动的 2D 部分。这是怎么一会事呢,让 zx 来告诉你。
Linux 下典型的窗口管理器(window manager)有 Gnome 和 KDE,这两者 wm 虽然外观风格差异甚大,各自使用的绘图函数却是建立再共同的基础 X11 上的。2000 年,XFree86 上出现了 xrender 扩展,之后高质量的抗锯齿和颜色混合绘图函数渐渐替代了传统 X11 绘图函数(现在不知道 GDI 的绘图函数水准怎么样了,反正 2k 时代是没有抗锯齿绘图函数的(求证,召唤tc))。而 Nvidia 现在的驱动对这些新的带有 alpha 混合的 xrender api 的支持可以说是很糟糕的,这就导致了在处理如下工作:带有次像素平滑的字体渲染、面积较大的逐像素通道透明位图绘制时,速度非常的慢——而这正好是 Fx 和 Compiz 的典型任务。
这个问题随着 wm 技术的发展而变的越来越明显和不能忍受:譬如 zx 酷爱使用的 Gvim,在使用了稍微复杂一点的语法高亮以后,移动光标这种平淡到让人睡着的操作,都充满了跳跃感;这里就不提 Fx 里 YY 同学的毒熊空间的卷动速度了。
[好吧,不要老抱怨,有点建设性吧]
KDE 4 推出后,N 系显卡惊人的性能问题终于完全表现出来(托 plasma 的福),就连 Intel 都能在评测中数倍领先于这个 GPU 的发明者;独立显卡(2d+3d)奠基者;3dfx 衣钵的接替者(就不用说 ATI 了)。Nvidia 继续忽视下去就太不像样了,终于开始着手处理这个问题,现在已经有了一些比较可行的处理方法。
1、使用新的 Nvidia 驱动(要编译)177.67
2、修改 xorg.conf
Option “PixmapCacheSize” “1000000”
Option “AllowSHMPixmaps” “0”
3、修改启动配置文件
# nvidia-settings -a InitialPixmapPlacement=2 -a GlyphCache=1
第三条 zx 曾今介绍过,对 Fx 和 Compiz 确实有一定的效果,这里的第二条也是非常有道理的。
Nvidia,你还是把 linux 驱动开源吧。就你这驱动的水平,和 5 年前的情况已经不同了——那时你领先,现则变成了落后,还是远远落后。