好记性不如烂笔头---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速度的方法。但它存