您的位置:首页 > 运维架构 > Linux

在 PlayStation 3 上进行 Linux 开发,第 3 部分: 采用小工具来瘦身 X11

2008-06-02 11:18 543 查看
索尼的 PlayStation 3(PS3)能运行 Linux®,但是要运行良好,还需要做些调整。在本 系列 的第三篇文章中,Peter Seebach 介绍了如何为 X11 瘦身,使之能适合更小的内存预算。
第 1 和第 2 部分 中,您看到了如何使用 runlevel 系统和相关工具显著减少运行 Linux 的 PS3 的内存使用量,以留出更多的内存用于编译和类似的服务。最后,我们再看一些值得去做的事情,至少包括一项相当重要的任务:减少 X11 的内存占用(footprint)。

X11 的问题是,您可能太需要它了。之所以说这是一个问题,是因为我观察到 X 服务器本身在我的 PS3 上的最低内存占用也达到 40MB 左右,其中有太多的内存牺牲在漂亮的图片上。(是的,我的确学过在纯文本终端上使用 UNIX®。为什么要那么奇怪地看着我呢?)尽管如此,有时候它确实非常有用,有些程序离开了图形就不能运行。

在另一台机器上运行 X11

您需要 X11,但是 PS3 又没有足够的内存来恰当地运行它。于是您只有一种选择:通过网络运行。可以通过配置,使 X 客户机在 PS3 上运行,而将 X 服务器放在一个远程系统上。这样做并不能真正获得特别快的速度 — hypervisor 似乎还会使网络速度有所下降,使之略低于硬件理论上具有的千兆比特的性能 — 但是如果您不需要最快的速度,那么这种配置实际上是很不错的。在设置这种配置时,有一些选择。首先,需要在另一台机器上运行一个 X 服务器。


关于本系列

本系列的三篇文章 将 PS3 Linux 作为未来的开发环境。

第一篇文章,即 第 1 部分,介绍了特定于 PS3 的基本配置项和 widget,展示了如何有效地使用它们,并给出了一些可以改进性能或显示效果的建议技巧。

第 2 部分 和本文则深入介绍一些性能和调优问题,尽管这些问题适合于任何系统,但在 PS3 上应用时会特别有用,能够将 PS3 从一个概念证明演示变成真正能工作的系统。

一直以来都有这样一个传言,说 OS X 将在 PS3 上运行,因为在一个业内展览上曾在 Mac 上播放过一个 Cell/B.E. 技术演示电影,人们不断张贴这一海报,并坚称那就是证据。现在,这个传闻愈演愈烈。我将使用一台 OS X 机器上的本地 X11 服务器来演示这一点。实际上,X 的可移植性很好,一些基本的技巧在哪里都是一样的。

首先,启动 X 服务器,进入提示符。运行一个终端程序,程序的类型随您喜好而定。我选择 xterm。现在有两种方法可选。一种方法是使用 ssh 的 X 隧道(tunneling)特性将 X 请求从客户机(即 PS3)转发到服务器(即 Mac)。另一种方法是直接通过网络使用 X。两种方法各有优缺点。对于局域网,网络可能更容易解释和使用。首先,弄清楚 X 服务器的 DISPLAY 是什么。在 X 终端中,回显环境变量 DISPLAY。这个变量的值可能是 “:0.0”。这意味着 X 服务器在运行一个名为 “0.0” 的显示器。冒号将主机名与显示器名称分隔开。如果您的笔记本电脑的名称为 “laptop”,那么该显示器的全称为 “laptop:0.0”。(如果不提供这个名称,那么 X 会聪明地以更快的速度访问一个本地显示器。)


等等,哪一个是服务器?

在大多数计算中,“服务器” 是没有直接用户界面的程序,而 “客户机” 是有图形化界面的程序。然而,在 X 中,刚好是反过来的 — 如果您对此感到困惑,不必担心。很多用户一开始都会受此困惑。

要理解为什么图形化程序是 “服务器”,而处理计算的程序却是 “客户机”,先问自己一个问题:它要提供什么?X 服务器要提供一个图形化显示器。因此,服务器处理从客户机传入的诸如 “画一些像素” 或 “显示一个窗口” 之类的请求,而客户机则使用它们需要的这些服务。

现在,如果您要转到 PS3 上,将环境变量 DISPLAY 设置为 “laptop:0.0”,然后运行一个 xterm,那么您会发现一个缺陷:许可被拒绝。默认情况下,X 不允许远程主机上的任意客户机在本地显示器上运行。这是一个安全特性;显然,您希望改变这种情况。最简单的方法是允许 PS3 上的客户机访问 X 服务器。在本地机器上,运行命令
xhost +<machine>
,其中
<machine>
是 PS3 的主机名或 IP 地址。我从来不会为不可路由的动态块设置 DNS,所以我使用了
xhost +10.10.10.134
。然后,在 PS3 上就可以运行 X 命令。它们在 Mac 上显示,从而避免了 X 服务器在 PS3 上占用大量的内存开销。

转发 X11 请求

现在,还有另一种选项。
ssh
命令(sshd 仍然在运行,对吗?)可以转发 X11 请求。在访问 X 服务器时运行
ssh
,使用
-X
选项将导致转发 X 请求;实际上,
-Y
选项可能更可取,因为它会支持 “受信任” 转发,从而绕过更多的安全特性。(您需要绕过这些特性,否则就不能执行一些操作,例如打开窗口。)也可以了解一下
-C
选项,该选项指定数据压缩,包括 X11 包。该选项对于较慢的网络比较有用,但是对于较快的网络则不适合。您可以两种方法都试试看。这个命令的语法更容易一些;其语法为
ssh -X <ps3>
,并在 PS3 上开始运行使用 X 的命令。通过使用这种方法,PS3 不存在服务器的内存开销,而只有客户机的内存开销。是时候启动 konquerer 了,对吗?但是 konqueror 要占大约 20MB 的内存空间,kded 占 7.5MB,klauncher 占 5.8MB,kio_file 占 5MB,kdeinit 占 4.7MB……

当然,这就凸显出第二个问题:即使没有服务器,X 应用程序也会消耗不少内存。去掉服务器的确可以增加可用内存,但是还不能完全解决问题。








回页首
尝试为服务器瘦身

远程访问可能不够快,或者您可能没有一个便于使用的 X 服务器。其实还有另外一个选项:本地运行服务器,但是不使用 KDE 或 Gnome。为此,很可能必须省略 runlevel 5 X 显示器管理器和登录窗口;但是可以在控制台上登录,并自己启动 X。通常的方法是只运行
xinit
程序,该程序运行 home 目录的 .xinitrc 文件中的命令。注意,这些命令是按顺序运行的;如果想一次运行不止一个程序,那么前几个程序要以后台的方式运行(在行的末尾加一个 &)。例如,可以使用下面的 .xinitrc:

本文转自IBM Developerworks中国

请点击此处查看全文
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐