Io

測量程序的磁碟 I/O 使用情況

  • October 25, 2020

time如果您想弄清楚給定命令需要多少 CPU 時間,這是一個絕妙的命令。

我正在尋找可以測量程序和任何子項的磁碟 I/O 的類似東西。最好它應該區分記憶體的 I/O(因此不會導致磁碟旋轉)和未記憶體的 I/O。

所以我想做:

iomeassure my_program my_args

並獲得類似於以下內容的輸出:

Cached read: 10233303 Bytes
Cached write: 33303 Bytes  # This was probably a tmp file that was erased before making it to the disk
Non-cached read: 200002020 Bytes
Non-cached write: 202020 Bytes

我看過vmstatiostatsar,但這些都不是在看一個程序。相反,他們著眼於整個系統。

我看過iotop,但這只能讓我看到這一刻。

    • 編輯 - -

snap的答案似乎很接近。

“文件系統輸入:”是 512 字節塊中的非記憶體讀取。

“文件系統輸出:”是 512 字節塊中的記憶體寫入。

您可以使用以下命令強制記憶體為空:

sync ; echo 3 | sudo tee /proc/sys/vm/drop_caches >/dev/null

我測試過:

seq 10000000 > seq
/usr/bin/time -v bash -c 'perl -e "open(G,\">f\"); print G <>;close G; unlink \"f\";" seq'

您沒有指定您使用的作業系統。

Linux

您可以嘗試使用外部命令,而不是使用time foowhich is (通常) 內置的 shell /usr/bin/time foo。它提供了一些附加資訊,例如文件系統輸入和輸出的數量(但沒有關於記憶體命中或字節量的資訊)。請參閱man timeman getrusage以獲取更多說明。

請注意,此功能需要 Linux 核心版本 2.6.22 或更高版本。

自由BSD

使用/usr/bin/time -l foo. 它給出了輸入和輸出的數量。請參閱man timeman getrusage以獲取更多說明。

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