Hello LOonux3(四):优化了的性能

九 28, 2012   //   by admin   //   新闻

上一篇:Hello LOonux3 (三): 笔记本功能键支持

LOonux3针对软件启动速度和部分应用做了优化:

  • 系统启动性能优化
  • 桌面环境的启动性能优化
  • 文件管理器和网页浏览器启动性能优化
  • MPEG4和H264的视频解码优化
  • Firefox Javascript性能优化

系统启动性能优化

系统上电后,PMON初始化基本硬件环境并加载内核和可能的initramfs镜像,加载完毕后交由内核启动,内核完成部分初始化后进一步交由init进程。init进程负责加载系统服务。当用户交互服务启动完毕,例如文本环境getty,图形环境gdm,可以认为系统启动完成。

这个过程中,initramfs镜像通常含有启动早期所需功能,例如开机动画、设备相关的初始化,磁盘挂载等。由于PMON加载镜像文件的速度有限,LOonux3并未使用initramfs镜像。LOonux3使用了一个自定义的init,位于/sbin/LOonux3。这个独有的init先挂载必要文件系统和挂载必要模块,之后唤醒开机动画plymouth和真正的init程序。

LOonux3使用了systemd作为默认的init,systemd带来了启动过程的更大并行化,以及一些按需启动特性,例如基于socket的服务激活机制。服务通信的socket被init接管,当有请求时,init激活服务。

从用户角度而言,系统启动过程即是启动用户交互服务及必要依赖。systemd启动规则反映这个观察 — 直接启动的目标为default.target,追踪default.target依赖的服务并尽可能地并发启动。

另外,LOonux3源上的bootchart和 systemd自带systemd-analyze有助于发现启动过程的瓶颈。

桌面环境的启动性能优化

用户在gdm登录或是自动登录后,一个用户的会话被启动。会话启动过程中,用户的桌面环境被加载,例如面板、文件管理器、窗口管理器、dock各种applets等。

桌面环境的加载是由会话管理器来完成。LOonux3 使用了gnome2.32桌面环境,其会话管理器是gnome-session

同系统启动不同的是,gnome-session加载桌面程序时不考虑依赖,是一个完全并行的过程 — 程序启动文件被读取,子进程被迅速fork,桌面程序在各个子进程中疯狂地启动,争抢有限的内存、CPU,以及,IO资源。

同系统启动相同的是,桌面环境的加载过程也是为了尽快启动一个供用户交互的图形界面,例如面板程序gnome-panel,dock程序cairo-dock,窗口管理器compiz和文件浏览器nautilus。

在LOonux3中,gnome-session优先启动面板、dock、窗口管理器和文件浏览器,随后才是其余桌面程序。这种“错峰”启动的方式,使得交互图形界面尽早地呈现给用户。

文件管理器和网页浏览器启动性能优化

在LOonux3中,文件浏览器nautilus能够将关闭的窗口缓存起来。新打开的文件浏览器窗口,其实是加载新URL的缓存窗口。

在LOonux3中,网页浏览器Firefox的“faststart”选项被启用,加载桌面时会在后台自动启动Firefox进程,从而加速后续Firefox新窗口的打开。注意,启用本特性,需要使能Firefox的IPC通信选项

MPEG4和H264的视频解码优化

LOonux3全面导入了gstreamer — 一个插件式的、基于管道多媒体框架。gst–ffmpeg将著名的ffmpeg解码器封装成gstreamer插件,从而提供了丰富的解码器。

LOonux3通过嵌入龙芯3A的多媒体指令的方式,优化了gst-ffmpeg内置的MPEG4和H264解码器,从而能够流畅回放720p MPEG4编码的影片和大部分480p H264编码的影片。

Update:

* 3.3.6版本以后借助多线程版本的gst-libav,初步能够播放720P的H264编码的视频。

* 关于龙芯3A平台硬件视频解码的实验性支持,参见此处

注意,龙芯3A部分指令支持,需要binutils 2.22以上版本和gcc 4.7以上版本。gcc 4.7版本可从LOonux3源上的实验性的gcc4.7 Section获取。

尽管进行了一定的优化,我们注意到,目前龙芯3A平台的视频能力仍然较为有限。这是由于:

  1. 硬解码单元无法开启。目前龙芯3A平台搭配的AMD RS780E桥片集成了硬解码单元,但是由于相应功能的开发文档目前暂未开放,而其专有驱动X86驱动也无法运行于龙芯平台,故无法使用。同时,目前开源多媒体栈对硬解码支持尚显混乱,待gstreamer 1.2带来此方面的增强。
  2. 多核的利用率有限。一方面解码器自身对多线程支持有限;另一方面,也观察到部分编码的影片由于复杂性不利于多线程来解码。libav从ffmpeg fork出来以后,据说逐步增强多线程支持,期待能逐步发挥多核计算效能。
  3. 多媒体指令待丰富。相比其他CPU,目前龙芯3A多媒体指令种类和执行仍需增强来更好支持多媒体解码。然而专利的原因可能会阻碍这一方式。另一方面,嵌入汇编优化的工作量强度、正确性验证以及调试代价比较大,于此,各种JIT方案正在兴起,例如ORC
  4. 缺少OpenCL类似方案。OpenCL提供了利用包括GPU、DSP(以及CPU)在内各种计算资源来进行大规模计算的能力。相比CPU,现代GPU能够高效率地处理大规模计算。然而,相应的方案目前空白。

Firefox Javascript性能优化

在LOonux3的网页浏览器Firefox中,导入了来自webkit的mips JIT引擎。另一方面,中科龙芯公司进一步优化了Firefox JIT引擎,带来了明显的性能提升,LOonux3将在后续版本集成此优化:

SunSpider测试,单位毫秒,时间越小越好。

 

V8 测试,得分越大越好。

 下一篇:Hello LOonux3(五):磁盘管理

Comments are closed.

文章归档