[转]关于Linux图形的一些消息和废话
点这个标题进来的人请回复是为了看消息还是废话。谢谢。我猜是消息。
刚发在 Arch 版回复了,现整合成一个帖子已备以后解闷,修正了很多错别字和标点。
----------
最近在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. 我只负责说自己的理解,不负责信息的真实有效准确性。
4. 接着重构 X
就算 Kernel 已经足够强捍了,可以高效管理显存,甚至进行2D 绘图,可是还是不能解决 最直观的 3D 图形加速和视频加速问题。如果您跑在图形界面,可以经常top 看看,X 有很大概率是处于占CPU内存的第一位。把众多3D绘图和视频渲染指令直接传给 CPU 来讲是很残忍的。结论是,还要交给 GPU 来做,别管快慢,人家是专业的。
首先需要 Mesa 出场了, openGL 3D 库。这方面的提升是 Gallium3D。据说这种传说中的架构可以极大的减轻系统负担,采取你鸟我我鸟你,你不鸟我我不鸟你的反好莱坞策略,降低沟通成本。这厮目前已经比较成熟了,好像其中某几个 state watcher 代码前天夜里已经进入了 Mesa 的 Mainline。如果不出意外,Gallium3D 可以显著提高 3D 效能,当然,要你的驱动支持才行。
X 也要作极大的改进。包括各种库。libxcb 是比较让人郁闷的一个,它提供一个 xlib 兼容层,可在 1.992 开始去掉了 libxcb-xlib.so 文件,导致很多程序依赖性得不到满足。如果您不幸碰上了,只能 fake 一个该文件。
Xserver 是关注的焦点。
至于 X 显卡 driver 的改进,首先是显卡加速方法,最早是 XAA(ATI 闭源驱动一直再用),之后是 EXA,下一步是UXA。理论上一个比一个快,要不然也没必要换新的了。
接着是 dri2 ,intel 首创的这个东西,可以解决不能同时直接渲染多种需求的问题。比如3D桌面同时放几个视频啊,再开个 Google earth 啊,都没问题了。当然,它必须配合 UXA 加速模式使用。
其它 X 配套驱动的改进也是非常显著的。xf86-input-synaptics 来说,从 0.15 直升 1.0(最新是 1.99),触摸版驱动,加入了自动检测配置的功能。如果你有大屏幕的笔记本电脑,再也不用在触摸版上从左到右划 N 次才能点到屏幕右上角的窗口关闭按钮了。它会自动加速,这一点已经超越 Windows 下面的驱动了。
Xserver 的升级带来的问题是无限的,Xserver 1.6 刚刚升级,由于改动较大,带来很多问题。详见楼上诸贴。首先是实现了显示/输入设备自动检测配置,所以原来的 xorg.conf 会导致各种问题。
首先是禁用无敌3键,这个问题还不大,Xorg 自动重启的几率在我这里远远比我手动重启的几率大。解决方法是在 xorg.conf 中的 server
Section "ServerFlags"
加上
Option "DontZap" "false"
再者就是自动检测输入设备,这个问题比较大,你检测的对也就算了,检测的一般不对。
解决办法就是禁用这个新功能。
还是那个 serverflags 加上
Option "AutoAddDevices" "False"
重启 X 就行了。
如果你愿意试试运气,就让它自动检测配置键盘鼠标,也简单,把原来的 xorg.conf 中 inputdevice 的部分全部去掉。它会用 evdev 来检测,自动加在驱动。
总体来看,这些重构 X 的努力都是比较底层的,集中在驱动和架构。但是无论如何,这些改进都会在 2009 年发生,对于部分 Linux 用户来说,总是一件好事。
阅读(645) | 评论(0) | 转发(0) |