我正在使用AM3505处理器(ARM Cortex-A8单核)上的嵌入式Linux系统。我试图弄清楚为什么上下文切换使用的cpu时间比我预期的要多。
虽然lmbench的lat_ctx基准测试告诉我,上下文切换应该需要大约40到50秒,根据htop,这个循环给我大约4.3%的CPU使用率。
int main(int argc, char** argv)
{
while(1) {
usleep(2500);
printf("tick\n");
}
return 0;
}
这将导致每个'tick'产生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内核配置为具有高分辨率计时器支持的完全可预留实时。这会对测量产生任何影响吗? htop中显示的cpu用法是不正确的吗?
答案 0 :(得分:0)
每个tick有两个上下文切换,一个是从执行进程到等待定时器,另一个是等待定时器再次运行进程。因此,每个周期107.5us与上下文切换完全一致,大约需要40-50us,因为每个周期包括两个上下文切换和一些输出。