教你如何优化Linux运行速度
现在已经有越来越多的人开始使用桌面Linux发行版了,也经常会听到有人抱怨各种桌面Linux的运行速度比他们想象的慢。实际上,在使用桌面Linux系统时,你必须记住一个关键的问题:
桌面端Linux的快慢主要取决于系统响应速度,而不是硬件配置。
在使用服务器端Linux时,你确实可以通过提高硬件性能获取更快的系统运行速度,这是Linux得以在服务器端压倒众多竞争对手的最重要原因,通过优化调整硬件配置获得最佳的系统性能。
但在桌面端情况就不一样了,比如在把一个20GB的大文件复制到U盘,或者解压一个大文件的时候,你会很奇怪为什么Linux比Windows和MacOS表现的还要差劲。一般来说,绝大多数桌面端Linux用户在感到系统运行不够快的时候,首先就会想到和配置服务器一样添加硬件配置,然而这么做是不对的。
真正的瓶颈在哪里?
CPU一般不是瓶颈所在,除非你做的是密集计算任务,比如视频压缩、数据科学、遗传学和神经网络分析等。
GPU也很少产生瓶颈,除非你拿计算机玩大型游戏或超高精度渲染效果图,大多数时候你并不会真的需要一个7000美元的专用GTX 1080显卡。
如果测试一下CPU和GPU的使用情况,你就会发现它们大部分时间都是空闲的,没错,绝大多数时间计算机的核心都不会满载运行。
真正的瓶颈出现在内存与硬盘的I/O(输入/输出)这里。
RAM与SWAP
只要一打开光鲜亮丽的Chromium浏览器,你肯定会在几分钟之内打开十几个网页标签或者更多,这会在不知不觉中发生。
然而这样会超级快速的吃完8GB的内存。每当出现这种情况时,操作系统就开始把数据分载到硬盘的缓存中,此时你就会发现机器的速度严重下降。
所以你可能要做的第一件事就是安装一个扩展,比如Chrome的内存优化插件Great Suspender。它会暂时关闭掉所有标签的网页响应,除了现在你正在阅读的这个,而当你切换到另一个标签时,它就会重载这个标签的网页。Great Suspender的目的是节省内存,效果很好。
(内存优化插件Great Suspender)
这个扩展可以帮你节省几个G的内存,对于平均配置内存为8GB的Linux系统来说,这可不是个小事。
另外需要考虑的是Linux的预配置会将应用数据平均分派到swap来利用文件系统的缓存。所以如果你解压一个大文件,一些数据就会进入到RAM缓存,应用数据也会进入硬盘,而在解压完成后,重新切换到应用程序时往往出现无法响应的问题。
所以你需要配置一下操作系统,让应用程序的状态充分保存在RAM中。在控制台中进行如下操作:
sudo tee -a /etc/sysctl.d/99-sysctl.conf
vm.swappiness=1
vm.vfs_cache_pressure=50
EOF
在存储方面,有时你会发现一些使用旧核心的存储器比如U盘或SD卡拖慢了机器的速度,这时可以进行如下操作:
sudo tee -a /etc/sysctl.d/99-sysctl.conf
vm.dirty_background_bytes=16777216
vm.dirty_bytes=50331648
EOF
如果不想立刻重新启动,可以在终端上运行如下命令:
sudo sysctl -w vm.swappiness=1
sudo sysctl -w vm.vfs_cache_pressure=50
sudo sysctl -w vm.dirty_background_bytes=16777216
sudo sysctl -w vm.dirty_bytes=50331648
对RAM和SWAP的调整不宜做的太过,比如千万不要禁用文件系统日志,因为这样会增加数据遭受破坏的风险。
优化调度程序
Linux中配置了过程调度程序(Process Scheduler)和I/O调度程序(I/O Scheduler)。过程调度程序负责管理内核的预处理级别与不同计算任务之间的切换。而I/O调度程序则帮助不同的过程比如从硬盘读取和写入内存等共享I/O资源。
桌面端Linux中使用的调度程序一直在更新,最通用的过程调度程序是Completely Fair Scheduler (CFS) ,它在许多版本中是默认配置,其后还有更新发布的Staircase,BFS和MuQSS等。同样的,I/O调度程序也在不断进步,除了通用的Completely Fair Queueing (CFQ)之外,还有更新的Noop Scheduler和BFQ等。
你可以应用这些最新的调度程序来优化系统,最好的办法是安装Linux Zen 内核,Liquorix版本。它用MuQSS 调度程序替换了CFS,用BFQ替换了CFQ,同时还加入了更多的响应性调整比如QoS over TCP,用来避免TCP堵塞。
如果你用的是Arch Linux,要做的非常简单:
sudo pacman -Sy linux-zen
sudo grub-mkconfig -o /boot/grub/grub.cfg
如果是Ubuntu,那就需要参考一下Liquorix的安装说明,因为如果CPU不同,安装方式也略有不同,对于64位的机器一般这样安装:
sudo apt-get install liquorix-keyring
apt-get install linux-image-liquorix-amd64 linux-headers-liquorix-amd64
是因为GNOME 3太慢吗?
GNOME 3.22不仅让桌面Linux变得漂亮,内置的应用也带来了使用上的方便。当然,使用上的便捷是以牺牲响应速度为代价的。高端机器会受益,而老旧的机器就会遭罪,因为那些在后端运行的额外功能。
那么怎样才能在老旧机器上更好的应用GNOME 3呢?
同样的,首先必须要搞清楚发生了什么。必须要做的第一件事是安装htop 和 iotop。htop用来观察后台运行的情况,找到是哪些进程吃掉了你的CPU或RAM。而iotop用来观察哪些进程阻塞了文件和网络操作时的I/O队列。
在我的系统里,我发现了两个主要的“罪犯”:Dropbox 和 Tracker。接下来就来解决这两个问题。
Dropbox在安装时是可选的,但大多数人都会选择安装,Dropbox第一次安装时要下载所有的文件,过程极其缓慢,所以要记住最好在星期五的晚上去安装它。
安装之后,编辑 /usr/share/applications/dropbox.desktop这个文件,把Exec=dropbox这行替换为下面这行:
Exec=ionice -c 3 -n 7 dropbox start -i && cpulimit -b -e dropbox -l 10
好了,这样就可以让Dropbox占用最少的CPU时间,而且只有在系统空闲时才拥有I/O权限。
然后是Tracker,这个工具的目的是索引文件以便于通过GNOME应用(例如Nautilus File Manager)来快速搜索到文件。
首次安装新的GNOME环境时第一次建立索引是非常耗费时间的,所以最好还是在周五的晚上进行,和Dropbox同时安装。
然后把它调整为只在系统空闲时才运行。运行 Alt-F2,键入tracker-preferences,然后这样配置它:
在同一个面板中,把它配置为忽略log目录和*.log文件模式。
如果你的机器用的是慢速的机械硬盘,最好尽量关闭掉那些在后台占用I/O的应用进程,这样才能使机器的反应变得敏捷。
GNOME还有其它后台服务,例如下面这些:
gnome-session
gnome-shell
gnome-settings-daemon
gnome-online-accounts
evolution-data-server
gjs-console
这些都会根据你所安装的应用变化,GNOME Shell和GJS很占资源,但是你无法关闭它们,因为这些都是GNOME的核心,所以唯一能做的事情就是避免安装太多的GNOME扩展。
经常有人说GNOME甚至KDE是引起桌面Linux速度变慢的罪魁祸首,但是如果你的目标是为了节省资源,那么完全不需要按照他们所说去选择XFCE或是LXQt。实际情况是I/O才是问题的关键,对GNOME进行适当调整就可以了。最应该注意的还是网络浏览器的使用,只需要五六个网页标签就能吃掉你一大半的RAM,这就是我为什么首先建议安装Great Suspender的原因。
总结
简短地说,要记住以下几件事:
在使用前端应用尤其是网络应用时,调整swap和缓存的压力设置,避免出现页面错误,在性能与反应速度之间只能寻求妥协。
安装Linux-Zen或Liquorix内核(根据你使用的发行版),获取更好的MuQSS过程调度程序和BFQ I/O调度程序。如果使用的是SSD硬盘,检查一下是否使用的是NOOP或Deadline I/O调度程序,这是针对SSD硬盘的更好的配置。
配置Dropbox和Tracker,让它们只在系统空闲时运行,也可以安装Ananicy和rejoice来做进一步优化。
由于性能问题,不要选择Desktop Manager,因为如果你使用Chromium上网或是其它Web应用,问题就已经无可避免了。不要惊慌,放心使用GNOME 3.22,做一些适当的后台I/O调整就行了。
如果可以的话,买一块好的SSD硬盘。如果机器是PCI Express X4插槽的话,那么买一块M.2 SSD硬盘更好,比如三星950 EVO M.2。如果拥有超过8GB的内存(最好16GB)和一块非常快的SSD硬盘,那么许多性能问题就会迎刃而解。