[英]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.