Time

使用 time 命令時如何禁用記憶體?

  • September 8, 2020

在程序/應用程序上執行時間時,它似乎總是記憶體結果/程序,因此沒有給出real程序的時間。

我試過了:

sync; time process

sync -f; time process

但它似乎並沒有真正禁用記憶體。

通過重複執行time process或像上面的範例一樣sync -f; time processsync; time process可以注意到執行時間發生了變化(我懷疑這是因為記憶體)。

有什麼方法可以真正禁用記憶體以提供實時處理時間?

time顯示其子程序的資源使用情況,由核心測量;它用於getrusage這樣做(在 Linux 上,這是使用 實現的wait4。它測量被測量的特定執行所使用的實時時間。

您看到的變化反映了流程執行期間發生的變化。它們有多種原因,通常涉及一種或另一種資源爭用。與任何基準測試一樣,使用time僅在預定義的場景中才有意義。

嘗試在沒有任何外部影響的情況下測量命令的執行時間(大多數情況下)是可能的,但這需要大量工作來設置。在 Linux 上,您可以預先刷新所有磁碟記憶體

echo 3 > /proc/sys/vm/drop_caches

(執行程序的效果不會記憶體在其他任何地方,除了在 CPU 記憶體中的一小部分,除非程序本身執行了自己的記憶,這樣如果再次執行它會做更少的工作 -例如帶有ccache. 你的編譯器大概知道您自己的應用程序是否這樣做。)

您還可以在專用 CPU 上執行您希望測量的命令,否則核心不會使用它,因此它不會受到中斷或重新調度的影響,並且受記憶體刷新的影響較小。其他需要牢記的因素包括 CPU 頻率變化、超執行緒、地址空間隨機化……

我的一位同事 Victor Stinner 寫了關於基準測試主題的筆記和連結,專注於 Python 基準測試;提供一組良好調整的連結是Denis Bakhvalov 的在 Linux 上獲得一致結果的指南

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