如何檢查多久的過程花費在Linux中等待CPU?CPU爭(等待時間),在Linux中
例如,在加載的系統我想檢查SQL*Loader(SQLLDR)過程中等待的時間。
,如果有一個命令行工具來做到這一點這將是有益的。
如何檢查多久的過程花費在Linux中等待CPU?CPU爭(等待時間),在Linux中
例如,在加載的系統我想檢查SQL*Loader(SQLLDR)過程中等待的時間。
,如果有一個命令行工具來做到這一點這將是有益的。
我很快就把這一起打了一遍。它打印出任務切換中最小和最大的「干擾」...
#include <sys/time.h>
#include <stdio.h>
double seconds()
{
timeval t;
gettimeofday(&t, NULL);
return t.tv_sec + t.tv_usec/1000000.0;
}
int main()
{
double min = 999999999, max = 0;
while (true)
{
double c = -(seconds() - seconds());
if (c < min)
{
min = c;
printf("%f\n", c);
fflush(stdout);
}
if (c > max)
{
max = c;
printf("%f\n", c);
fflush(stdout);
}
}
return 0;
}
下面介紹如何進行測量。有多個進程,大於你的processors * cores * threading capability
等待(阻止)事件的數量,這些事件會同時喚醒它們。一個這樣的事件是多播網絡分組。使用類似PAPI(或更符合您的需求的儀器庫)來測量您的流程之間實際和虛擬「喚醒」時間的差異。從實驗的幾次迭代中,您可以估算出您的過程的CPU爭用時間。很明顯,對於多核處理器來說,這並不準確,但它可能會對你有所幫助。
乾杯。
我有一段時間回到這個問題。我結束了使用getrusage: 您可以得到詳細的幫助: http://www.opengroup.org/onlinepubs/009695399/functions/getrusage.html
getrusage填充rusage結構。
測量等待時間用的getrusage
你可以在你的代碼的開頭調用的getrusage,然後再在最後調用它,或者在執行過程中的一些合適的點。你有initial_rusage和final_rusage。您的進程花費的用戶時間用rusage-> ru_utime.tv_sec表示,進程花費的系統時間用rusage-> ru_stime.tv_sec表示。
因此,通過該過程花費的總的用戶的時間將是: user_time = final_rusage.ru_utime.tv_sec - initial_rusage.ru_utime.tv_sec
由過程所花費的總系統時間將是: SYSTEM_TIME = final_rusage.ru_stime.tv_sec - initial_rusage.ru_stime.tv_sec
如果TOTAL_TIME是的getrusage的兩個電話之間經過,則等待時間會 WAIT_TIME = TOTAL_TIME時間 - (user_time + SYSTEM_TIME)
希望這會他lps
你測量的是調度延遲,而不是爭用延遲。 – 2010-07-14 11:00:37
我錯過了「我想檢查一下sqlldr進程等待的時間」部分。 我的測試顯示了它沒有花費在CPU上的最長時間。 ps -elF顯示花費的CPU總時間。 我想知道更準確的是/ proc/ /。 可以拍攝快照,運行長查詢並再次檢查。 未花費在CPU上的數量是時間流逝減去與CPU一起花費的時間,類似的東西。 –
Mike
2010-07-15 01:10:58