Linux での高精度タイミング
国立研究開発法人 情報通信研究機構 時空標準研究室
Last update: 2007/08/02
一般のPCを使って、ジッタ 37ns (標準偏差)でパケット到着時刻を計測するためのテクニックを紹介します。
- Linuxの時刻管理
- Linux 2.4.27
システムクロックの分解能はマイクロ秒。
- Linux 2.6.21
POSIX対応が進み、
システムクロックの分解能がナノ秒となり、
複数のクロック源を利用するようになっている。
更に、SMPやDynamic CPU clockに対応するために、HPETの準備が進められている。
- 水晶の置換
PCに標準で搭載されている水晶は温度変化が激しく、
起動時(常温)にキャリブレーションしても、
使用中(40℃以上にも)には100ppm以上ズレることもあるので、
より精度の高い発振子に換装する。
Cs < Rb < OCXO < TCXO < XO
- 時刻取得関数
RDTSCをベースにした nst_gettai()関数を公開中。
- 時刻取得の位置
イベントの近くで取得する。
例えば、ネットワークパケット受信時なら、
割込みハンドラ < デバイスドライバ < ユーザランド
- リソース競合
- 不要プロセスの停止
- バッファフラッシュのインターバル調整
- 競合検知
- ハードウェア依存
- ノースブリッジとサウスブリッジ
- バスクロック
- CPUクロックのSpread Spectrum
- 省電力モード
- マルチプロセッサシステム
- NICコントローラと「まとめ割込み」
詳しくは、論文をご覧ください。
また、本技術をNSTクライアントに実装し、ライブラリを公開しています。