Linux 平均啟動時讀取了多少數據?
我想知道新安裝的 vanilla Linux 系統(如 32 位 CentOS 5.10)總共讀取了多少數據才能進入虛擬控制台 shell 提示符?你知道,讀取所有配置文件、載入二進製文件、核心映像等。
我正在啟動 100 台 Linux 機器,它們 95% 的系統內容是相同的,並且將保持相同——這些機器是複製的。我想將文件系統的相同/只讀共享部分解除安裝到 NFS 儲存,從那裡掛載它,然後像這樣啟動。只有文件系統的可寫部分,如 /var、/tmp 和 /home,將保持在每台機器的本地。由於可能有數百台機器作為“集群”的一部分同時啟動,我需要估計訪問的 NFS 儲存連結是否會成為啟動時的瓶頸。
我正在尋找數量級的估計。我知道 Linux 引導在過程細節方面差異很大。我們說的是 10Mb 嗎?100MB?1Gb?
安裝一個系統,啟動它並檢查來自
/sys/block/${DEV}/stat
例如的塊層統計資訊/sys/block/sda/stat
。引用文件:
stat 文件由單行文本組成,其中包含 11 個由空格分隔的十進制值。下表匯總了這些欄位,並在下面進行了更詳細的描述:
Name units description ---- ----- ----------- read I/Os requests number of read I/Os processed read merges requests number of read I/Os merged with in-queue I/O read sectors sectors number of sectors read read ticks milliseconds total wait time for read requests write I/Os requests number of write I/Os processed write merges requests number of write I/Os merged with in-queue I/O write sectors sectors number of sectors written write ticks milliseconds total wait time for write requests in_flight requests number of I/Os currently in flight io_ticks milliseconds total time this block device has been active time_in_queue milliseconds total wait time for all requests
讀扇區,寫扇區
這些值計算從此塊設備讀取或寫入的扇區數。有問題的“扇區”是標準的 UNIX 512 字節扇區,而不是任何設備或文件系統特定的塊大小。當 I/O 完成時,計數器會增加。
您可以使用此單線更輕鬆地獲取字節數:
awk '{printf("read %d bytes, wrote %d bytes\n", $3*512, $7*512)}' /sys/block/vda/stat
Scientific Linux 6.1 i386 的結果
我在執行Scientific Linux 6.1 i386(類似於 RHEL)的 KVM/qemu 虛擬機上對此進行了測試。啟用了以下服務:acpid、auditd、crond、network、postfix、rsyslog、sshd 和 udev-post。交換位於單獨的磁碟上,因此不予考慮。
在登錄提示出現幾秒鐘後,使用 SSH 遠端獲取 85 次引導的統計資訊是:
Name Median Average Stdev ------------- ------ ------- ----- read I/Os 1920 1920.2 2.6 read merges 1158 1158.4 1.8 read sectors 85322 85330.9 31.9 >> read MiBytes 41.661 41.665 0.016 read ticks 1165 1177.2 94.1 write I/Os 33 32.6 1.7 write merges 64 59.6 7.4 write sectors 762 715.2 70.9 >> write MiBytes 0.372 0.349 0.035 write ticks 51 59.0 17.4 in_flight 0 0.0 0.0 io_ticks 895 909.9 57.8 time_in_queue 1217 1235.2 98.5
啟動時間約為 20 秒。