关于Linux图形的一些消息及源码编译
原文:关于Linux图形的一些消息和废话
地址:http://www.linuxsir.org/bbs/thread345792.html
最近在openSUSE里面直接下源码编译 X 等等折腾了 1 个月,道听途说了很多东西,事情是这个样子的,现在 X 开发界大家对现在的 Xorg 充满了绝望和期待。
事情要回溯到很久很久以前,在很长一段历史时期,*nix 的用户们对 X 不吝赞美之辞,什么20年前到现在一直是最先进的客户端/服务器架构,要关就关不占资源没了图形更坚强(自然是和 Windows 比了)。后来用的人越来越多了,做什么的都有了,图形操作成了大多数人的计算机使用习惯了,问题逐渐暴露了。
主要问题都体现在Linux论坛上各帖子的问题中,存在于N个层面:
1. kernel 级别的驱动 module 支持。
就说显卡,官方开源的只有 Intel 的显卡。但是编译一个 Intel 的显卡过程极为复杂。相对于闭源驱动而言。因为它的驱动因为开源,在各个层次上和很多东西都是捆绑在一起的。具体来说,首先是Intel 在 kernel 里面的驱动 module,要打上 patch 编译内核才行。之后是 libdrm,要有相应的新版本。之后是Mesa+Patch或者新版 Mesa,不然 3D 性能没有提升。再之后是 Xserver,想想这堆依赖性就让人头疼。Xserver 完了再编译新的 Intel Xdriver。这才算完成了。如果您不幸编译了新版 Xserver 没有编译其它配套 Xdriver 的话,极有可能机器很华丽的启动到了图形界面,然后发现鼠标键盘都没反应,被废掉了。于是再进 runlevel 3 重新编译 键盘鼠标的 X 驱动。一套下来感觉挺值得了,可以用两天了。结果今天 Intel Xdriver 发了 2.6.3 ,离 2.6.2 只有一周,修复了几个挺严重的 bug。怎么办,再编一次吧,机器总要能看看顺畅点的视频吧。编了装上了,发现视频还是那么卡,tearing video 是最经典的问题,常见于 965 系列,而且还不如 2.6.1 了,Video Overlay 不能用了。总之,这时间装2遍 XP 都够了。不过自己愿意折腾,没什么好说的。而且最近 Intel 的 GEM/dri2/KMS 相关的 Mallium3d 都挺好的,起码比原来 Linux 驱动好。
闭源的驱动质量大家都知道,nVidia 的闭源驱动就是个笑话,在很多型号上出现花屏。比如,GDM 登录界面显示多个登录输入框,本来出现在屏幕中央的出现在左上角等等,很搞笑的,适合幸灾乐祸的人放松用。
实事求是的来讲,有个笑话总比让人想哭好。传说中的 ATI 的闭源 Catalyst 驱动就让人想哭,suse 版上可以看到月_经贴的,受害者集中营啊,纷纷进来诉苦。
虽然闭源驱动有种种不是,比开源驱动在性能上还是有优势的,甚至是几十倍的优势。当然,随着 radeonhd/ati/nouveau 的快速开发,也或多或少得到了硬件制造商的支持,这些问题都会成为历史,如果顺利的话。距离来说,radeon 驱动就在 catalyst 之前实现了 Xvmc 的支持。
注:可能闭源驱动在您的硬件上运行的很好,这是应该的,可看看他人众多的抱怨,质量还是不能和 Windows 上同版本的驱动质量相提并论。
2. X 架构严重老化
X 没有一直说的那么神奇,CS 架构确实有方便的地方但是整个架构严重老化。比较实在的例子,您先 glxgears 然后 转转立方体桌面。如果没有 Dri2 的话应该看出来不正常了吧。还有,如果用 compiz 之类,开了桌面 Composite 以后放个大一点的视频看看,卡。。而且不是一般的卡。当然,很多人连卡的效果都没有,因为视频直接就黑/绿了只能听声音。Google Earth 也是受害者之一,什么问题都有。
简单一点说就是(这么说在技术上基本不正确),X 在 openGL 显卡硬件加速您3d桌面的时候,没法同时加速视频播放。更严重的情况是,在加速一个视频播放的时候没法同时加速另外的视频播放。当然也不是不能解决,就是要麻烦用户手动去指定 video output 端口,而对于大多只是想同时放多个视频的人来说,这一点是不可理解的。何况,即使指定不同 vo 也不能保证都是直接渲染。
这几天被 X 折腾的够呛,言语多有不敬,见谅。待续。。。
3. X.org 的重构之路。
鉴于在性能和功能方面出现的种种瓶颈,和 X 关系最紧密的 intel 终于开始了重构 X 之路。准备给 Linux 图形带来飞跃。
在 FOSDEM 2009 大会上 Intel 的核心驱动开发者 Keith Packard 就做了这么一轮演讲,从基础的外接显示器自动检测(xrandr),到 composite 3D 效果方面的进展,还有 2D/3D/media 共享 object,基于内核的 2D 绘图。 在 2.6.28 kernel 出现的 GEM 内核内存管理将替代 TTM,在 2.6.29 中的 KMS(内核图形模式设定)。
基本就是从 Kernel 到 X driver各个层面都要提升,甚至重写,重写的多了就成了重构。虽然在会上没讲,但是当时 Intel 被打击的 UXA 加速架构现在由于再次投入了 GEM 的怀抱(原来基于 TTM),先在看来也是一个不错的主意。
就 Kernel 来讲,可以预见的是两大提升:1. GEM 实现了由 kernel 直接管理显存,更加高效。(这一块道听途说的不够)2. KMS,mode setting 一直是 X 面临的“重大”问题。换句话说,当一款显示器支持 1024x768, 800x600 分辨率,同时支持众多刷新律,到底用那种分辨率刷新律显示位置的组合来在显示器上显示。在 2.6.29 内核里面,这个问题被交给了 Kernel 具体好处未知。具体的例子就是,当你在启动的时候,如果有 bootsplash,你会发现在进入 X 的时候一定会闪一下(好吧,至少一下),在从黑色闪成 X 的画面(好吧,有时候直接黑了,闪不回去了)。这就是 mode setting 改变了,因为画面从 Framebuffer 交到了 X 手里。如果交给内核处理,KMS 可以让这玩意不闪了。。。。
据说 Fedora 10 已经通过 Plymouth ,在 2.6.27.5 kernel 实现了这种不闪的效果。一开机,屏幕上黑黑的,只有下方一个进度条,三个色块互相覆盖着往右边填充。白色在最上面,跑得最慢;浅蓝在白色覆盖的下面,稍微快一点;深蓝色在最下,但总是第一个到达重点。等白色条也跑到了终点,就可以看到登录界面了。重点是,过程一点都不闪。这太令人震撼了,太令人感动了,太令人发指了。要知道在 Vista 装/删个软件都要闪黑两次啊,这真是 Fedora 带给 Linux 桌面革命性的创新啊!!!!
好了,笑话讲完了。KMS 最大的好处是,休眠唤醒以后不会出现显示错乱,自然唤醒休眠的过程也会加速。而且在虚拟控制台和图形界面间切换也不会有类似花屏的问题了,因为交给 kernel 而不是显卡驱动处理了。
ps. 我只负责说自己的理解,不负责信息的真实有效准确性。