Linux カーネルにおける jiffie の解像度は何ですか?
現在のタイマーソース()によるとcat /sys/devices/system/clocksource/clocksource0/current_clocksource
、LinuxはTSCを使用し、ナノ秒の分解能を持っています。
によるとhttp://lxr.free-electrons.com/source/include/linux/jiffies.hjiffie は 1us より小さくはありませんが、それより大きくなる可能性があります。
現在の解像度を確認する方法はありますか。
答え1
manページを見てみるとman 7 time
HZ の値はカーネルのバージョンやハードウェア プラットフォームによって異なります。i386 では状況は次のようになります。カーネル 2.4.x までは HZ は 100 で、jiffy 値は 0.01 秒でした。2.6.0 以降では HZ は 1000 に上げられ、jiffy は 0.001 秒になります。カーネル 2.6.13 以降では、HZ 値はカーネル構成パラメータで、100、250 (デフォルト)、または 1000 に設定でき、jiffy 値はそれぞれ 0.01、0.004、または 0.001 秒になります。カーネル 2.6.20 以降では、さらに周波数が 300 に設定され、これは一般的なビデオ フレーム レート (PAL、25 HZ、NTSC、30 HZ) を均等に割り切れる数値です。
times(2) システムコールは特別なケースです。カーネル定数 USER_HZ で定義された粒度で時間を報告します。ユーザー空間アプリケーションは
sysconf(_SC_CLK_TCK) を使用してこの定数の値を決定できます。
定数を問い合わせることができますCLK_TCK
:
$ getconf CLK_TCK
100
これは HZ の値、つまり 100 を示します。この値は 1 秒あたりの jiffy 数です。
参考文献
答え2
これらの情報源によると、ジフィー1/HZ
(値が何でHZ
あれ)次のようになります。
これはカーネル依存のヘッダーファイルの1つで定義されます。例:
/usr/include/asm-generic/param.h
含まれるもの
/usr/include/linux/param.h
そして最終的には<sys/param.h>
、アーキテクチャ固有のディレクトリにある から取得されます。例:
/usr/include/x86_64-linux-gnu/sys/param.h
ソースを見ると、これはコンパイル時の定数であり、特定のシステムに依存することがわかります。