我有一台使用 Arch Linux 和 Ubuntu (16.04) 双启动的机器。
我最近开始使用Kakoune 文本编辑器,并注意到它的启动时间因我使用的操作系统而异。但是,我认为根本问题不是直接由 kakoune 引起的。
在启动时,kakoune 会运行一堆 shell 脚本来启用与 x11 和 tmux、git、语法高亮/颜色方案等的集成。可以禁用此功能以仅使用-n
标志加载“香草”编辑器。
命令:kak -e q
将启动 kakoune,运行所有启动脚本并立即退出。
在 Arch 上:
time kak -e q
需要1 秒
time kak -n -e q
(无 shell 脚本)在20 毫秒内完成。
在 Ubuntu 上:
time kak -e q
需要大约450 毫秒
time kak -n -e q
再次低于20 毫秒
在修剪脂肪并删除一些启动脚本后,我确实看到两个操作系统的改进与删除的数量成正比。
我用UnixBench运行了一些基准测试,发现两个系统之间的主要差异体现在“进程创建”和“shell 脚本”测试中。
shell 脚本测试测量每分钟进程可以启动并获得一组一个、两个、四个和八个 shell 脚本的并发副本的次数,其中 shell 脚本将一系列转换应用于数据文件。
这是相关的输出。“每秒循环数”中的单位越多越好:
Process creation (1 parallel copy of tests)
Arch: 3,822
Ubuntu: 5,297
Process creation (4 parallel copies of tests)
Arch: 18,935
Ubuntu: 30,341
Shell Scripts (1 concurrent) (1 parallel copy of tests)
Arch: 972
Ubuntu: 5,141
Shell Scripts (1 concurrent) (4 parallel copies of tests)
Arch: 7,697
Ubuntu: 24,942
Shell Scripts (8 concurrent) (1 parallel copy of tests)
Arch: 807
Ubuntu: 2,257
Shell Scripts (8 concurrent) (4 parallel copies of tests)
Arch: 1,289
Ubuntu: 3,001
如您所见,Ubuntu 系统的性能要好得多。
我已经使用不同的登录 shell、终端仿真器、重新编译 kakoune、删除不需要的软件来清理磁盘等进行了测试。我确信这是瓶颈。
我的问题是:我可以做些什么来进一步调查并提高 Arch Linux 系统的性能以匹配 Ubuntu?我应该考虑调整内核吗?
补充说明:
- 两个系统都使用相同类型的文件系统(ext4)
- 我倾向于更多地使用 Archlinux 系统,并且注意到性能随着时间的推移而下降
- Arch 位于 /dev/sda1 上,约为 200GB。Ubuntu 在 /dev/sda2,~500GB。1TB 硬盘。
- 拱门
uname -a
:Linux ark 4.14.13-1-ARCH #1 SMP PREEMPT Wed Jan 10 11:14:50 UTC 2018 x86_64 GNU/Linux
- Ubuntu
uname -a
:Linux sierra 4.4.0-62-generic #83-Ubuntu SMP Wed Jan 18 14:10:15 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
谢谢
Debian 和 Ubuntu 使用 dash as
/bin/sh
,它比 Bash 快一些:这与您的数字大致相同(按比例)。
/bin/sh
在 Debian 和 Ubuntu 中更改为 dash 而不是 Bash 很大程度上是因为性能:(https://wiki.ubuntu.com/DashAsBinSh)
正如 ilkkachu 所解释的,Arch 使用 bash
/bin/sh
,而 Ubuntu 默认使用 dash。为了进一步调查,并确定这是否解释了差异,您可以将您的 Ubuntu 系统配置为使用 bash,然后查看基准测试是否报告了与在 Arch 上获得的结果相似的结果。为此,请运行
并选择“否”。然后,您可以验证
/bin/sh
指向bash
并运行您的测试。要恢复默认值,请再次运行相同的命令并选择“是”。
如果这是性能差异的原因,那么改进 Arch 以匹配 Ubuntu 将是困难的。您可以安装 dash 并使用它,但您可能会遇到许多假定
/bin/sh
是 bash 的脚本并因 dash 而失败 - Debian 和 Ubuntu 花了很长时间来识别和修复所有问题。添加我自己的答案以防其他人有同样的问题:
在使用 zsh 或 fish 作为我的登录 shell的交互式 bash shell运行
for
@ilkkachu 的答案中的循环时,循环大约需要 13 秒。如果我从 root 登录 shell 运行循环,或者将我的登录 shell更改为,我会获得类似于 @ilkkachu 答案中的结果。/bin/bash
/bin/bash
我认为这是因为从登录 shell(或)
/bin/bash
继承了它的环境,但我不确定。/bin/zsh
/bin/fish
无论如何,我通过将登录 shell更改为
/bin/bash
并将终端设置为运行/bin/fish
或/bin/zsh
作为交互式 shell 解决了这个问题。