2

私はモジュールプログラミングをしています。私が行っているいくつかのprintkのパフォーマンスへの影響を測定したい時間があります。私はこのようなコードでセットアップをしています。

コードの最初の部分である「declare-y」:

struct timespec ts_start,ts_end,test_of_time;

方法では:

{
    //..other stuff
    getnstimeofday(&ts_start);
    printk("mkdir being hijacked\n");
    printk("pid is %d ", current->pid);
    printk("call #: 39 \n");
    printk("user_id of process: %d, effuid: %d\n\n", current->uid, current->euid);
    getnstimeofday(&ts_end);
    test_of_time = timespec_sub(ts_end,ts_start);
    printk("%lu", test_of_time.tv_nsec);
    return val;
}

私はdmesgし、奇妙なことに値0が表示されます。これが発生するのに0ナノ秒かかったのではないかと疑っています。ここで何が悪いのですか?

ありがとう

4

1 に答える 1

3

使用しているカーネルのバージョンは何ですか? 実際には、タイマーにナノ秒の解像度がない可能性があります。printk にかかる時間を測定したい場合は、有限で測定可能な時間がかかるように、それらをループで実行する必要があります。完全に正確というわけではありませんが (たとえば、最初のプリンクはキャッシュ ミスなどにより後続のプリンクよりも遅くなる可能性があります)、大まかなアイデアが得られるはずです。

なぜこれが起こるのかを知りたい場合は、大きなバッファを割り当てて、 getnstimeofday の値をしばらくの間バッファに書き込んでループを回してから、分析できる場所にバッファを出力してみてください。おそらく、データの実際のクロック解像度を確認できるでしょう。

于 2012-10-20T23:42:19.877 に答える