X的变革-旧文

事情要回溯到很久很久以前,在很长一段历史时期,*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 Xdriver各个层面都要提升,甚至重写,重写的多了就成了重构。虽然在会上没讲,但是当时 Intel 被打击的 UXA 加速架构现在由于再次投入了 GEM 的怀抱(原来基于 TTM),先在看来也是一个不错的主意。

Kernel 来讲,可以预见的是两大提升:1. GEM 实现了由 kernel 直接管理显存,更加高效。(这一块道听途说的不够)2. KMSmode 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 的改进,首先是显卡加速方法,最早是 XAAATI 闭源驱动一直再用),之后是 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 用户来说,总是一件好事。

------------------------------------------------------------------------------------------------------

以往,Linux的图形能力完全依赖于X.org
现在,Linux的内核开发小组正在开发 KMS (kernelmode-setting,内核视频模式设置),把显卡工作模式的转化从X.org移到内核。
这样带来的好处是
1:系统启动的时候只有一次分辨率切换:启动 logo可以用你现在工作所使用的模式,启动X server不再切换分辨率
2:平滑启动X server.由于X server不再切换视频模式,这样X 就在原来的终端模式启动,避免了的闪烁和刷屏
3:快速终端切换:由于虚拟终端和 X 使用相同的视频模式,这样可以做到快速切换。
4:图形模式内核崩溃数据输出:在现行内核下,当内核崩溃的时候除非你没有使用X环境,要不然就看不到内核崩溃的输出,这对调试是不利的。有了 KMS,Linux也可以使用蓝屏死机了
5:为将来开发内核模式X server开路:要知道现行X是用户空间的,这样极大影响了X的效率。如果内核直接支持图形模式就没有进程切换的开销,Linux的图形效率才能有质的飞跃。

KMS 就是 内核模式设置
传统上,Linux 是由用户空间的程序设置视频模式的,(也就是分辨率)
所以,切换终端的时候 ..... (Ctrl+Alt + F2)
会闪屏并伴随着分辨率的切换
但是, tty2 - tty6 之间的切换又非常的迅速,没有分辨率的切换有没有可能使 X 界面和 tty 之间也可以快速切换呢?
有!!
这就是 KMS
把 X-server 中切换视频模式的代码移植到内核中来,并在引导的初期就切换视频模式
表现就是,终端和X 图形界面使用相同的分辨率!而且,X-server启动的时候非常平滑!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值