更新檢查的時間分辨率後,我們試圖調試內核空間的問題。
unsigned long long task_sched_runtime(struct task_struct *p)
{
unsigned long flags;
struct rq *rq;
u64 ns = 0;
rq = task_rq_lock(p, &flags);
ns = p->se.sum_exec_runtime + do_task_delta_exec(p, rq);
task_rq_unlock(rq, &flags);
//printk("task_sched runtime\n");
return ns;
}
我們的新實驗表明時間p->se.sum_exec_runtime
沒有立即更新。但是如果我們在函數內部添加printk()
。時間會立即更新。
老
我們正在開發Android程序。 但是,功能threadCpuTimenanos()
測量的時間在我們的平臺上並不總是正確的。
實驗結束後,我們發現從clock_gettime
返回的時間沒有立即更新。 即使經過幾次while循環迭代,我們得到的時間仍然不會改變。
下面是我們的示例代碼:
此代碼運行在x86 PC上的好。但是,在我們的內核2.6.35.13的嵌入式平臺ARM Cortex-A9中,它無法正確運行。
任何想法?
也許計數器只能精確到毫秒?這個循環幾乎不消耗CPU,因此需要多輪才能達到1ms。你是否試圖用忙碌的等待來取代睡眠? – ugoren
你想測量什麼?通過「掛鐘時間」的時間或程序佔用CPU的時間? –
是的,睡眠是不必要的。我們想稍後再衡量一次。時間程序佔用CPU。 – user1247081