2.6. システムタイムスタンプでのハードウェアクロックの使用
/sys/devices/system/clocksource/clocksource0/available_clocksource
ファイルを参照してください。
cat /sys/devices/system/clocksource/clocksource0/available_clocksource tsc hpet acpi_pm
~]# cat /sys/devices/system/clocksource/clocksource0/available_clocksource
tsc hpet acpi_pm
/sys/devices/system/clocksource/clocksource0/current_clocksource
ファイルを読み取ることで検査できます。
cat /sys/devices/system/clocksource/clocksource0/current_clocksource tsc
~]# cat /sys/devices/system/clocksource/clocksource0/current_clocksource
tsc
クロックソースの変更
システムメインアプリケーションの最適なクロックは、クロックの既知の問題により使用されないことがあります。すべての問題のあるクロックを実行した後、システムはリアルタイムシステムの最低要件を満たすことができないハードウェアクロックで残すことができます。
/sys/devices/system/clocksource/clocksource0/available_clocksource
ファイルに表示されるリストからクロックソースを選択し、クロックの名前を /sys/devices/system/clocksource/clocksource0/current_clocksource
ファイルに書き込みます。たとえば、以下のコマンドは、使用中のクロックソースとして HPET を設定します。
echo hpet > /sys/devices/system/clocksource/clocksource0/current_clocksource
~]# echo hpet > /sys/devices/system/clocksource/clocksource0/current_clocksource
TSC クロックの追加ブートパラメーターの設定
すべてのシステムに理想的なシングルクロックはありませんが、一般的に TSC が優先されるクロックソースです。TSC クロックの信頼性を最適化するには、カーネルのブート時に追加のパラメーターを設定します。以下に例を示します。
idle=poll
: クロックがアイドル状態にならないように強制します。processor.max_cstate=1
: クロックがより深い C ステート (省エネモード) に入るのを防ぎ、同期がずれないようにします。
電源管理移行の制御
最新のプロセッサーは、低からの省電力状態 (C-state) にアクティブに移行します。ただし、高い省電力状態から稼働状態に戻ると、リアルタイムアプリケーションの理想よりも多くの時間を消費してしまいます。アプリケーションは Power Management Quality of Service (PM QoS) インターフェイスを使用して、これらの移行を防ぐことができます。
idle=poll
と processor.max_cstate=1
パラメーターの動作をエミュレートできます (TSC クロックの追加ブートパラメーターの設定) と同等ですが、省電力状態をより細かく制御できます。
が/dev/cpu_dma_latency
ファイルを開いたままにすると、PM QoS インターフェイスはプロセッサーがディープスリープ状態に入るのを防ぎ、ディープスリープ状態から抜け出すときに予期しない遅延が発生します。ファイルが閉じられると、システムは省電力状態に戻ります。
/dev/cpu_dma_latency
ファイルを開きます。ファイル記述子を低レイテンシー操作の期間中開いたままにします。- 32 ビットの数字を書き込みます。この数は、最大応答時間 (マイクロ秒単位) を表します。可能な限り最速の応答時間を得るには、
0
を使用します。/dev/cpu_dma_latency
ファイルの例は次のとおりです。Copy to Clipboard Copied! Toggle word wrap Toggle overflow アプリケーションは最初に start_low_latency() を呼び出し、必要なレイテンシーに敏感な処理を実行してから、stop_low_latency() を呼び出します。
関連する man ページ
詳細情報や参照文書は、以下の文書が、このセクションの情報に関連しています。
- 『Linux System Programming』 by Robert Love