- Home
- Packages
- Forums
- Wiki
- Bugs
- AUR
- Download

# Maximizing Performance (简体中文)

From ArchWiki

本文题为“性能最大化”，将提供性能分析、系统优化方面的实用技巧。

## 绪论

### 分析瓶颈

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

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

    $ free -m

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

    $ hdparm -t /dev/硬盘设备

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

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

    $ top

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

    $ glxinfo | grep direct

### 首选方案

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

- 不安装桌面环境，仅仅使用窗口管理器，例如：dwm、Openbox、JWM。
- 或者选择轻量级桌面环境，例如：LXDE、Xfce。
- 安装轻量级软件。参见论坛年度”轻快软件奖“： 2007，2008，2009，2010，2011。
- 在`/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速度的方法。但它存在一定危险性，不建议盲目使用。通常在BIOS中设置超频（有些CPU可能禁止超频），本文不再叙述。

从另一方面看，通过优化CPU资源分配，也可以“提升”CPU性能。

用户可以使用优化的Linux内核，它们针对特定用途做了优化。Con Kolivas的内核补丁集针对桌面应用做了优化；用Brain Fuck Scheduler（BFS）代替默认的Completely Fair Scheduler（CFS），可以优化系统资源调度。

AUR中提供了打补丁内核的PKGBUILD，可以很方便的编译安装。比较著名的有：打了CK补丁包和BFS补丁的kernel26-ck ，打了BFS补丁的kernel26-bfs，打了pf补丁集的kernel26-pf。

Note: BFS/CK适用于桌面机、笔记本，不适用于服务器。少于16个CPU时，这些补丁能起到比较好的效果。此外，Con Kolivas建议把HZ（时钟中断周期）设置为1000。参见：BFS FAQ、ck patches。

### Verynice

Verynice（软件包：verynice）服务通过调整进程nice（优先级）动态分配CPU资源。`/etc/verynice.conf`是配置文件，Verynice会分给其中goodexe（比如X、多媒体软件）更多的CPU资源，badexe反之。

### Ulatencyd

Ulatencyd（软件包：ulatencyd）服务同样通过动态分配CPU资源缓解系统负载。但它使用更先进的cgroup功能（需要内核支持）。该功能把进程分组，并对不同的组使用不同的系统资源分配策略。

## 网络

参见：General Recommendations (简体中文)#网络。

## 图形

### xorg.conf

xorg.conf是Xorg的配置文件，对图形界面性能至关重要。不同显卡的设置，参见：Nvidia、ATI (简体中文)、Intel (简体中文)。谨慎设置，错误设置可能导致X崩溃。

### Driconf

Driconf是用于开源驱动的直接渲染设置工具。开启HyperZ功能可以大幅提高性能。

### 显卡超频

显卡超频比CPU超频更简单一些，有专门的软件可以设置超频。ATI显卡使用rovclock，Nvidia用户使用nvclock，Intel用户使用gmabooster。

可以在`~/.xinitrc`添加超频命令，使X启动时自动超频。但不建议这么做，因为超频总是有风险的。

## 内存和虚拟内存

### Swappiness

swappiness数值决定内核使用交换空间和物理内存大小的比率。如果设置成较小的值，CPU会尽量完全使用内存，从而加速系统性能（物理内存比虚拟内存快得多）。该值在`/etc/sysctl.conf`中设定（如果没有相似内容，请自行添加）：

    vm.swappiness=20
    vm.vfs_cache_pressure=50

此文介绍了这种优化的原理。

### Compcache

Compcache（软件包：compcache），也就是ramzswap内核模块，在内存中建立压缩的交换空间文件系统。通俗来讲，就是设置一部分内存可以压缩数据，从而容纳更多数据。这种优化对内存紧张的用户很有帮助。

使用Compcache后，仍然可以（且推荐）使用硬盘交换空间作为补充。不要在/etc/fstab设置备用交换空间，Compcache有专门的配置文件。

该方法有利于减少由于交换空间造成的固态硬盘读写。

### /tmp 使用内存空间

如果内存很充足，使用内存文件系统作为/tmp储存临时文件能小幅改善系统性能（同样，能减少磁盘读写）。办法是在`/etc/fstab`中添加：

    tmpfs /tmp tmpfs defaults,noatime,nodev,nosuid,mode=1777 0 0

### 使用显存

这听起来很奇特，如果显存过剩，还可以把显存作为交换空间。参见：Swap on video ram。

### 预读

通过预读程序、库到内存中，能有效加快程序加载速度。预读通常用于常用的程序，如浏览器。

#### Go-preload

Go-preload是来自gentoo的一个预读服务。安装后，通过下列命令采集预读信息：

    # gopreload-prepare program

运行需要预读的程序，收集结束后按回车键。

然后会生成一个预读列表：`/usr/share/gopreload/enabled`。在`/etc/rc.conf`设置开机启动gopreload，Go-preload就会在每次开机时预读列表中的程序。要禁止预读某个程序，只需从`/usr/share/gopreload/enabled`删除项目，或者移入`/usr/share/gopreload/disabled`。

#### Preload

比起Go-preload，Preload更自动化（尽管有违KISS）：只需要在`/etc/rc.conf`添加服务就完事了。

## 系统启动

参见：加速系统启动。

### 待机

想要加快系统启动，最好的方法就是不要关电脑，而选择待机。当然，为了可持续发展（至少是电费），不用电脑时还是关了吧。

### 自己编译内核

自己编译内核，删除不需要的模块，可以减少引导时间和内存占用。但通常这是个耗时、枯燥甚至令人厌烦的事情，你可能面临各种错误——甚至最终节约的开机时间还不如你浪费的时间多。但通过自己编译内核，可以学习到不少知识。参见：here。

## 针对特定程序的优化技巧

### Firefox

Firefox (简体中文)一文提供了不少技巧。常用的有：禁用 pango，清理sqlite数据库，使用firefox-pgo。另见：Speed-up Firefox using tmpfs、关闭反钓鱼功能。

### Gcc/Makepkg

参见：Ccache。

### LibreOffice

参见：LibreOffice#Speed up LibreOffice。

### Pacman

参见：Improve Pacman Performance。

### SSH

参见：Speed up SSH。

Retrieved from "https://wiki.archlinux.org/index.php?title=Maximizing_Performance_(简体中文)&oldid=263707"
Categories:

- Hardware (简体中文)
- Software (简体中文)
- 简体中文

## Navigation menu