Shell-Script

程序創建時間、shell腳本和系統呼叫成本

  • January 20, 2018

我有一台使用 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 -aLinux ark 4.14.13-1-ARCH #1 SMP PREEMPT Wed Jan 10 11:14:50 UTC 2018 x86_64 GNU/Linux
  • Ubuntu uname -aLinux 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 快一些:

$ time for x in {1..1000} ; do /bin/bash -c 'true' ; done                                                                                                                                                                                                                                                      
real    0m1.894s

$ time for x in {1..1000} ; do /bin/sh -c 'true' ; done 
real    0m1.057s

這與您的數字大致相同(按比例)。

/bin/sh在 Debian 和 Ubuntu 中更改為 dash 而不是 Bash 很大程度上是因為性能:

切換預設 shell 的主要原因是效率。bash 是一個優秀的全功能 shell。但是,與 dash 相比,它的啟動和執行速度都比較大而且速度很慢。

(https://wiki.ubuntu.com/DashAsBinSh)

引用自:https://unix.stackexchange.com/questions/418400