Linux

Linux 時間包裝器的結果告訴我這個 cp 命令發生了什麼?

  • March 29, 2022

我對這個問題的看法來自開發者方面。我編寫的程式碼放置在作為企業系統中眾多虛擬機之一執行的 RHEL 虛擬機上。正在使用的文件系統是一個遠端的、網路連接的儲存設備。

在批處理過程中,我們對簡單命令有一些高度可變性。所以我們設置了一個測試來獲取更多資訊,但現在我不知道我們發現了什麼。

我們每 30 分鐘執行一次以下命令並記錄輸出。它是一個 6 GB 文件的副本。我看到的是當系統忙於執行大量作業並且此測試命令獲得低 CPU 時間時,經過的時間從 11 秒躍升至 190 秒。

我可以看到的是,當 CPU 較低時,“I”列(文件系統輸入)會被填充,但在 CPU 較高時則不會。“w”列(非自願掉期)也高得多。

我的問題是,當 CPU 時間下降時,這個作業/命令發生了什麼迫使它執行這麼長時間?換入/換出是否將所有數據儲存在其他速度慢得多的設備上?通常,在換入/換出期間會發生什麼?

正在執行的命令:

/usr/bin/time -a -o filename.txt cp file.txt fileCopy.txt

/usr/bin/time 手冊頁中的列描述

e   Elapsed real time (in seconds).
S   Total number of CPU-seconds that the process spent in kernel mode.
U   Total number of CPU-seconds that the process spent in user mode.
P   Percentage of the CPU that this job got, computed as (%U + %S) / %E.
c   Number of times the process was context-switched involuntarily (because the time slice expired).
w   Number of waits: times that the program was context-switched voluntarily, for instance while waiting for an I/O operation to complete.
I   Number of filesystem inputs by the process.
O   Number of filesystem outputs by the process.

在此上下文中,P 表示此作業獲得的 CPU 時間與已用總時間的比率。接近 100% 意味著幾乎所有時間都在 CPU 上,因此 CPU 受限於這些執行。與其他限制因素的其他執行相反。系統(又名核心)時間多於系統時間,這是 I/O 繁重任務的典型特徵。

假設工作負載是複制一個 6 GB 的文件,我們可以推斷 11 秒的執行平均每秒寫入超過 0.5 GB。O 列每次確認相同的寫入次數,與簡單的複制一個文件過程一致。

然而,輸入欄有很大的波動。慢速執行的讀取與寫入大致相同。但是快速執行不做任何讀取!我假設該文件從上次讀取時仍記憶體在 RAM 中。DRAM 甚至比固態儲存快得多。這是一個很大的速度提升,直到在記憶體壓力下作業系統丟棄記憶體的數據,並且必須再次從慢速儲存中讀取。

所以這是一個 200 秒的任務,有時可能需要 12 秒。可能是由於 Linux 頁面記憶體。


找出性能問題的根本原因通常需要對整個系統有更深入的了解,而不是任何特定的指標集。

正在使用的文件系統是一個遠端的、網路連接的儲存設備。

請注意,您的副本是通過網路儲存進行的,因此它也可能是遠端系統或兩者之間的網路上的任何內容。遠端儲存性能。網路(可能是 IP)速度和使用率。或者它可能是這個 VM 的本地,來賓正在與在您的基礎架構上執行的所有其他東西競爭資源。

總是可以更深入地了解事物的運作方式。網路儲存(NFS?)是否重要,或者您是否也看到本地磁碟?0.7 秒的使用者 CPU 時間實際上是相當多的工作,管理許多系統呼叫需要多少會計費?當大部分時間都在等待慢速記憶體和非常慢的儲存時,CPU 繁忙實際上意味著什麼?不容易回答的問題,但是一旦事情充分發揮,也許不需要深入探勘。

引用自:https://serverfault.com/questions/1097250