日期:2014-05-16  浏览次数:20790 次

好记性不如烂笔头---Archlinux优化简介
分析瓶颈

要优化系统,先要找到性能瓶颈。通过分析系统配置能够获取这些信息。这里给出几条分析系统性能的简单方法:

    运行大型软件(比如 openoffice、firefox)时,如果系统变卡,很可能是内存不足。以下命令用来查询内存使用信息(-/+buffers 一栏):

$ free -m

    如果开机时间很长,或者第一次加载某个程序十分缓慢,则很可能是硬盘太慢了。以下命令用来测试硬盘速度:

$ hdparm -t /dev/硬盘设备

该命令仅测试读取速度,并不能准确测试硬盘。一般来讲,测试结果在40MB/s以上是比较合理的。

    如果内存充足,系统还是很迟钝,那么看看是不是CPU的问题。以下命令可以监视CPU使用:

$ top

    如果看电影、玩游戏、使用图形软件时比较卡,应该是显卡的问题。首先,请使用以下命令,检查是否开启了直接渲染:

$ glxinfo | grep direct

首选方案

最简单有效的提升系统性能的方法,就是使用轻量级软件。

    不安装桌面环境,仅仅使用窗口管理器,例如:dwm、Openbox、JWM。
    或者选择轻量级桌面环境,例如:LXDE、Xfce。
    安装轻量级软件。参见论坛年度”轻快软件奖“
    在/etc/rc.conf禁用不需要的系统服务。

折衷方案

凡是有两面,轻量级软件做到了”轻“,却往往牺牲”用“。优化可能带来负面影响,是否使用,取决于你。
系统测试

使用系统测试工具,可以帮助用户更好地分析系统瓶颈。
存储设备
选择文件系统

不同文件系统各有利弊,选择合适的文件系统令用户收益良多。新手指南相关章节提供了简单指导。此外,Category:File systems (简体中文) 里也有一些与此相关的信息。
概览

    XFS:适宜存取大型文件,小型文件性能一般。适宜作为/home。
    Reiserfs:存取小型文件性能好。适宜作为/var。
    Ext3:性能一般,稳定可靠。
    Ext4:整体性能极佳。使用sqlite等数据库时,有性能缺陷。
    JFS:整体性能好,CPU使用率低。
    Btrfs:整体性能极佳,优于ext4,拥有许多新特性。但还处于开发阶段,有数据丢失风险。

挂载参数

使用适当的挂载参数也能提高文件系统性能。使用参数的挂载命令如下:

$ mount -o 选项1,选项2,... /dev/分区 /文件夹/路径

修改/etc/fstab,开机时自动使用参数挂载分区:

/dev/分区 /文件夹/路径 分区类型 选项1,选项2,... 0 0

noatime,nodiratime两个优化选项适用于大多数文件系统,开启后禁止记录最近访问时间。前一选项其实已经包含后者(后者近包含文件夹)。极少的情况下,比如使用mutt时,可能出现问题。
Ext3

参见:Ext3 Filesystem Tips。
Ext4

参见:Ext4#Improving performance。
JFS

参见:JFS Filesystem#Optimizations.
XFS

使用下列参数创建XFS文件系统,能获得更好的性能:

$ mkfs.xfs -l internal,lazy-count=1,size=128m -d agcount=2 /dev/分区

此外,设置logbufs=8挂载选项也能提升XFS性能:

#/etc/fstab
LABEL=XFSHOME /home xfs noatime,logbufs=8 0 1

Reiserfs

使用挂载参数data=writeback可以提高性能,但断电时有数据损坏风险。notail参数会额外占用5%左右的磁盘空间,但也有益于改善磁盘性能。把日志和数据放在不同的分区可以减少磁盘负载,这需要使用如下命令创建文件系统:

$ mkreiserfs –j /dev/分区1 /dev/分区2

其中,分区1存放日志,分区2存放数据。详细信息参见此文。
BTRFS

新型文件系统Btrfs拥有在线碎片整理、无损伸缩分区、SSD优化等诸多特性,拥有极佳的性能。但它尚处于开发阶段,不建议普通用户使用。更多信息参见:Btrfs主页。
提供btrfs支持的mkinitcpio.conf

如果只是把brtfs作为非root分区,那么只需在挂载时加载模块即可。但要想把brtfs分区作为root,就需要把模块打包在内核中。brtfs模块还依赖于libcrc32c模块。修改/etc/mkinitcpio.conf,加入brtfs模块及其依赖:

MODULES="crc32c libcrc32c zlib_deflate btrfs"

如果懒得修改,有一个专门的AUR软件包:mkinitcpio-btrfs。
压缩 /usr

磁盘IO通常比内存操作、CPU操作要慢很多,所以有些时候牺牲CPU和内存资源减少磁盘IO是值得的。通过压缩文件系统,可以减少磁盘IO(但使用更多CPU资源)。btrfs、reiserfs4等文件系统支持直接压缩,但压缩率受文件系统4k块大小限制,往往不是很高。更好的方式是使用squashfs压缩文件系统,支持64k甚至128k块大小。Gentoo论坛帖子提供了相关信息。

下面讲解如何使用squashfs压缩/usr分区。通过压缩/usr,可以节约三分之二的磁盘空间,并加快程序加载。囿于squashfs文件创建的是只读的文件系统镜像,而/usr在安装、升级软件时需要重写文件,我们还需要使用aufs提供写入支持。aufs用于合并只读文件系统和可写文件系统,从而使只读文件系统变得可读写。内核已经提供squashfs支持,extra软件仓库提供了aufs2软件包。

安装aufs模块和创建squashfs的工具:

# pacman -S aufs2 squashfs-tools

然后创建用于挂载squashfs的目录(ro)和可写的记录更改的目录(rw):

# mkdir -p /squashed/usr/{ro,rw}

现在做一次系统升级,把需要的软件尽量都安装好(减少未来对/usr的写入)。如果使用prelink,还需要重新prelink一下。现在使用下面的命令创建squashfs:

# mksquashfs /usr /squashed/usr/usr.sfs -b 65536

还有一些其他参数,可以获得更高的压缩比。参见:here。然后修改/etc/fstab,设置开机挂载:

/squashed/usr/usr.sfs   /squashed/usr/ro   squashfs   loop,ro   0 0
usr    /usr    aufs    udba=reval,br:/squashed/usr/rw:/squashed/usr/ro  0 0

接下来重启动即可。

这里提供了自动化bash脚本,包含配置自动重新压缩(使用cron计划任务)。
SSD优化

SSD#Tips_for_Maximizing_SSD_Performance
CPU

超频是唯一提升CPU速度的方法。但它存