HZ
(ヘルツ) は
BSD
におけるアプリケーションインタフェースの一部ではありません。
周波数の異なるいろいろな実体をもつクロックおよび仮想的 (計時用) なクロック
があります。
- スケジューリングクロック。
周波数 100 となるはずの実クロックです。
アプリケーションからは参照できません。
- 統計クロック。
周波数 128 となるはずの実クロックです。
アプリケーションから直接参照することはできません。
- clock(3)
によって報告されるクロック。
周波数が通常 128 の仮想クロックです。
実際の周波数は
CLOCKS_PER_SEC
マクロによって与えられます。
CLOCKS_PER_SEC
は浮動小数点値であるかもしれないことに注意してください。
clock(3)
は
FreeBSD
での新しいプログラムには使用しないでください。
これは
getrusage(2)
に比較して機能的に劣っていますが、
ANSI
に適合するために
提供されています。
getrusage(2)
をコールし、情報と結果を受け渡すことによって実装されています。
- times(3)
によって報告されるクロック。
周波数が通常 128 の仮想クロックです。
実際の周波数は
CLK_TCK
マクロ (非推奨です、使用しないでください) と
sysconf(SC_CLK_TCK)
と
sysctl(3)
によって与えられます。
この周波数は
CLOCKS_PER_SEC
とは異なりうることに注意してください。
times(3)
は
FreeBSD
での新しいプログラムには使用しないでください。
これは
getrusage(2)
と組み合わせた
gettimeofday(2)
に比較して機能的に劣っていますが、
POSIX
に適合するために
提供されています。
gettimeofday(2)
と
getrusage(2)
をコールし、情報と結果を受け渡すことによって実装されています。
- プロファイリングクロック。
1024 の周波数をもつ実クロックです。
これは主に
moncontrol(3)
と
kgmon(8)
と
gprof(1)
で使用されます。
アプリケーションはこの実際の周波数を決定するためには
sysctl(3)
を使うか、プロファイリングデータファイルのヘッダを読んで
調べなければなりません。
- mc14618a のクロック。
32768 の公称周波数をもつ実クロックです。
分周されて統計クロックおよびプロファイリングクロックに使われます。
このクロックはアプリケーションからは参照できません。
- マイクロ秒クロック。
1000000 の周波数をもつ仮想クロックです。
これは
BSD
ではほとんどの時間計測に使用され、アプリケーションに対して
getrusage(2)
や
gettimeofday(2)
や
select(2)
や
getitimer(2)
などでエクスポートされています。
これが通常
BSD
のアプリケーションで
使用されるべきクロックです。
- i8254 クロック。
1193182 の公称周波数をもつ実クロック/タイマです。
3 個の独立したタイムカウンタを使用可能です。
分周されてスケジューリングクロックに使われます。
アプリケーションからは参照できません。
- 第 5 世代以降の x86 システムでの、TSC クロック (64 ビットレジスタ)。
CPU の 1 秒あたりのサイクル数に等しい周波数の、実クロックです。
周波数は、使用可能ならば sysctl
machdep.tsc_freq
を使用して得られます。
これはスケジューリングクロックの値の間に挿入するために使用されます。
perfmon(4)
の
PMIOTSTAMP
要求でアクセス可能です。
- ACPI クロック。
3579545 の公称周波数をもつ実クロック/タイマです。
24 または 32 ビットレジスタを介してアクセスされます。
TSC クロックとは異なり、
たとえ CPU がスリープしたり CPU のクロック速度が変わったりしても、
それに関わらず一定のチック速度を維持します。
アプリケーションからは参照できません。
まとめ: もし
HZ
(ヘルツ) が 1000000 でなければ、アプリケーションはおそらく間違った
クロックを使用することになるでしょう。