|
我在不打開ACPI時,夾在usleep的打印時間差(實際sleep時間)與希望的睡眠時間的差值,和1/HZ是對應的。HZ越大,比如1000,將精確到1ms一下,100對應10ms一下。
但是編譯內核時打開ACPI功能,在進行測試,發現實際sleep時間與希望的睡眠時間之間的差距總是很小,大概在几微秒到几十微秒之間,與HZ關係不大,為什麼?
int main(int argc,char * argv[])
{
.......
int COUNT;
for(COUNT=0;COUNT<10;COUNT++)
{
// get the time
gettimeofday(&tpstart,NULL);
usleep(sleepTime);
gettimeofday(&tpend,NULL);
// do something here
int v=0;
while(v<1000)
v++;
// Calculate the cost
cost=(tpend.tv_sec-tpstart.tv_sec)*1000000+
tpend.tv_usec-tpstart.tv_usec;
// Print Info
printf("wanted_sleep(us): %d\treal(us): %u\n",sleepTime,cost);
printf("real-wanted=(us): %u\tconv(ms): %8.3f\n",
cost-sleepTime,(cost-sleepTime)/1000.0);
}
return 0;
}
最後使用了lttng進行內核跟蹤:發現是這樣的情況:誰可以解釋一下:
關于下圖的解釋可以看下面部分:
http://ltt.polymtl.ca/files/lttv-doc/user_guide/x81.html
第一張圖的使用內核編譯了ACPI support
第二張圖的使用內核沒有編譯ACPI support |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|