2015-02-05 40 views
1

我正在使用AM3505處理器(ARM Cortex-A8單核)上的嵌入式Linux系統。我試圖找出爲什麼上下文切換使用更多的CPU時間比我所期望的。把線頭睡得太高的開銷?

雖然得到的LMBench的lat_ctx基準告訴我,上下文切換大約需要40至50 useconds,這個循環是根據HTOP給我約4.3%的CPU使用率。

int main(int argc, char** argv) 
{ 
    while(1) { 
     usleep(2500); 
     printf("tick\n"); 
    } 
    return 0; 
} 

這會導致每個'滴答'107.5個使用時間。

繪製與strace的過程中給了我大約8%的CPU使用率和:

% time  seconds usecs/call  calls errors syscall 
------ ----------- ----------- --------- --------- ---------------- 
93.45 0.292904   29  10038   nanosleep 
    6.55 0.020528   2  10039   write 
------ ----------- ----------- --------- --------- ---------------- 
100.00 0.313432     20077   total 

Linux內核配置爲具有高分辨率定時器支持全preemtible實時。這可能會對測量產生影響嗎? htop中顯示的cpu使用情況僅僅是不準確的?

回答

0

每個記號有兩個上下文切換,一個是從執行進程到等待計時器,另一個是等待計時器再次運行進程。因此每個週期107.5us與上下文切換完全一致,耗時約40-50us,因爲每個週期包括兩個上下文切換和一些輸出。