MyException - 我的异常网
当前位置:我的异常网» Linux/Unix » 好记忆力不如烂笔头-Archlinux优化简介

好记忆力不如烂笔头-Archlinux优化简介

www.MyException.Cn  网友分享于:2015-08-26  浏览:40次
好记性不如烂笔头---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速度的方法。但它存在一定危险性,不建议盲目使用。通常在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添加服务就完事了。
Readahead

Readahead提供文件预读,从而加速程序加载。
系统启动

参见:加速系统启动。
待机

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

使用fastboot参数可以节约一两秒开机时间。如果开机时总是显示“Waiting 8s for device XXX”之类的信息,可以使用rootdelay=1参数减少等待时间。通过编辑/boot/grub/grub.cfg(Grub)、/boot/grub/menu.lst(Grub)或/etc/lilo.conf(Lilo)应用参数。
自己编译内核

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

文章评论

每天工作4小时的程序员
每天工作4小时的程序员
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
程序员必看的十大电影
程序员必看的十大电影
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
总结2014中国互联网十大段子
总结2014中国互联网十大段子
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
代码女神横空出世
代码女神横空出世
Java程序员必看电影
Java程序员必看电影
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
我是如何打败拖延症的
我是如何打败拖延症的
老程序员的下场
老程序员的下场
中美印日四国程序员比较
中美印日四国程序员比较
编程语言是女人
编程语言是女人
程序员都该阅读的书
程序员都该阅读的书
旅行,写作,编程
旅行,写作,编程
程序员的鄙视链
程序员的鄙视链
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
漫画:程序员的工作
漫画:程序员的工作
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
那些争议最大的编程观点
那些争议最大的编程观点
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
如何成为一名黑客
如何成为一名黑客
鲜为人知的编程真相
鲜为人知的编程真相
10个调试和排错的小建议
10个调试和排错的小建议
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
程序员应该关注的一些事儿
程序员应该关注的一些事儿
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
我的丈夫是个程序员
我的丈夫是个程序员
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
一个程序员的时间管理
一个程序员的时间管理
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有