Difference between revisions of "Maximizing performance (简体中文)"

From ArchWiki
Jump to: navigation, search
(Remove dangerous method.)
(Readahead: Change to systemd readhead.)
Line 180: Line 180:
 
====Preload====
 
====Preload====
 
比起Go-preload,[[Preload]]更自动化(尽管有违KISS):只需要在{{ic|/etc/rc.conf}}添加服务就完事了。
 
比起Go-preload,[[Preload]]更自动化(尽管有违KISS):只需要在{{ic|/etc/rc.conf}}添加服务就完事了。
 
====Readahead====
 
[[Readahead]]提供文件预读,从而加速程序加载。
 
  
 
==系统启动==
 
==系统启动==

Revision as of 03:56, 21 June 2013

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

绪论

分析瓶颈

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

  • 运行大型软件(比如 openoffice、firefox)时,如果系统变卡,很可能是内存不足。以下命令用来查询内存使用信息(-/+buffers 一栏):
$ free -m
  • 如果开机时间很长,或者第一次加载某个程序十分缓慢,则很可能是硬盘太慢了。以下命令用来测试硬盘速度:
$ hdparm -t /dev/硬盘设备

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

  • 如果内存充足,系统还是很迟钝,那么看看是不是CPU的问题。以下命令可以监视CPU使用:
$ top
  • 如果看电影、玩游戏、使用图形软件时比较卡,应该是显卡的问题。首先,请使用以下命令,检查是否开启了直接渲染:
$ glxinfo | grep direct

首选方案

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

折衷方案

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

系统测试

使用系统测试工具,可以帮助用户更好地分析系统瓶颈。

存储设备

选择文件系统

不同文件系统各有利弊,选择合适的文件系统令用户收益良多。新手指南相关章节提供了简单指导。此外,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-ckAUR ,打了BFS补丁的kernel26-bfsAUR,打了pf补丁集的kernel26-pfAUR

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

Verynice

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

Ulatencyd

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

网络

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

图形

xorg.conf

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

Driconf

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

显卡超频

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

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

内存和虚拟内存

Swappiness

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

vm.swappiness=20
vm.vfs_cache_pressure=50

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

Compcache

Compcache(软件包:compcacheAUR),也就是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-preloadAUR是来自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