1

できるだけ正確に 10 ミリ秒間隔を維持する必要があります。

私は絶対時間ウェイクアップポイント(各ウェイクアップ後に10ミリ秒増加)とCLOCK_MONOTONICでclock_nanosleepを使用しています。

デスクトップ Ubuntu 11.04 で、起動後に呼び出された clock_gettime は、プログラムが平均 1 ミリ秒遅れて起動することを示しています。

Linuxスケジューラモードで遊んでいます:

  • SCHED_IDLE、プログラムは平均 2 ミリ秒遅れてウェイクアップします
  • SCHED_RR、プログラムは平均で 0.9 ミリ秒遅くウェイクアップします...

システムがアイドル状態であっても、いくつかのコピーを実行していても、結果は同じです: dd if=/dev/zero of=/dev/null 人工的な CPU 負荷の場合。

スケジューラーのパラメーター (スケジュールの最小粒度、ウェイクアップの粒度、スケジュールされたレイテンシー) を可能な限り小さくしましたが、違いはありませんでした。

他のデスクトップで試したことはありません。在庫の Ubuntu と Intel Core i5 で clock_nanosleep を使用して得られる精度が期待できるかどうか、またはシステムに問題があるかどうかはわかりません。

PS。結局のところ、このような clock_nanosleep の動作は、オーディオ デバイスにデータを配信するために非ブロッキング コールが使用される場合、オーディオ再生中のレイテンシの増加 (アンダーラン) につながります。通話をブロックした後に目を覚まします。

4

0 に答える 0