2011-06-30 13 views
3

kernl-spaceとuser-spaceの間のstruct timevalを(netlinkメッセージを通して)交換する必要があります。これは、メッセージの作成からユーザー空間の精緻化。 私はカーネル空間で関数jiffies_to_timevalを使用しています。ユーザー空間で私はgettimeofdayを呼び出します...しかし、私は両方の構造の秒数を印刷する場合、私は200秒の違いを取得...私はこれの理由を理解することはできません。カーネル空間とユーザ空間の時間の差異

アイデア?

ありがとうございました!

+0

Iを解を見つけました...関数 'jiffies_to_timeval'の代わりに私は' do_gettimeofday'を使いましたが、今はすべての仕事...そうですね、この2つの関数の違いは何ですか? – MirkoBanchi

答えて

5

several clocks inside of Linuxがあります。この違いは、マシンが中断されている間、「壁時計の時間」を追跡しようとしているかどうか、そしてそれらがどのくらい高解像度であるかをチェックするかどうかにまでわかります。

do_gettimeofdayは、クロックが "ウォールクロック時間"を追跡しようとしているため、おそらくあなたが使用したいものではありません。つまり、実際には前後にジャンプすることができます。誰か - 何か(NTPのようなもの) - あなたがそれを読む2回の間にシステムクロックを設定することになったら?

タイミングに関しては、CLOCK_MONOTONICクロックIDのPOSIX clock_gettime機能を使用することをお勧めします。 (あなたはしかし、-lrtを使用してユーザー空間のアプリケーションをコンパイルする必要がある場合があります。)私はclock_gettime私は現時点で便利な私のカーネルソースを持っていませんがまた、カーネル関数としての存在を信じている

...

+0

お返事ありがとうございました!あなたはそうですが、clock_gettimeがカーネルとして機能していないようです:(類似の機能があるかもしれませんか?) – MirkoBanchi

+1

オンラインカーネルソースを見つけましたので、これらは 'posix_timers.c'のようです。カーネルで 'do_posix_clock_monotonic_gettime'を試してみてください(私の答えを更新できるように、私に教えてください...) – Nemo

+0

はい、完全に動作します...私は約100〜 200マイクロ秒。ありがとう、Nemo! – MirkoBanchi

関連する問題