アップデート
時間分解能を確認した後、カーネル空間で問題をデバッグしようとしました。
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 ループを何回か繰り返しても、得られる時間は変わりません。
サンプルコードは次のとおりです。
while(1)
{
test = 1;
test = clock_gettime(CLOCK_THREAD_CPUTIME_ID, &now);
printf(" clock gettime test 1 %lx, %lx , ret = %d\n",now.tv_sec , now.tv_nsec,test );
pre = now.tv_nsec;
sleep(1);
}
このコードは x86 PC で問題なく動作します。ただし、カーネル 2.6.35.13 を搭載した組み込みプラットフォーム ARM Cortex-A9 では正しく動作しません。
何か案は?