簡體   English   中英

線程睡眠過多的開銷?

[英]Overhead of putting a thread to sleep too high?

我正在使用AM3505處理器(ARM Cortex-A8單核)上的嵌入式linux系統。 我試圖弄清楚為什么上下文切換使用的CPU時間比我預期的要多。

雖然lmbench的lat_ctx基准告訴我,上下文切換大約需要40到50微秒,但根據htop的說法,此循環使我的CPU使用率達到了4.3%。

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內核配置為具有Hi-res計時器支持的完全可實時顯示。 這會對測量產生影響嗎? htop中顯示的cpu使用情況是否准確?

每個刻度有兩個上下文切換,一個是從執行過程到等待計時器,另一個是從等待計時器到再次運行進程。 因此,每個周期107.5us與上下文切換完全一致,大約需要40-50us,因為每個周期包括兩個上下文切換和一些輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM