最近、Zynq-7000 プラットフォーム (ARM A9) に QNX Neutrino RTOS を実装し、CPU 負荷なしでさまざまなタスク周波数のスケジューリング ジッターを測定しました。私のテストでは、タイマーによって生成されたパルスを MsgReceive 関数で待ちます。次に、FPGA から高周波クロック (100MHz) を読み取ります。10Hz、100Hz、1kHz、10kHz、100kHz のタスクのスケジューリング ジッタを測定したところ、奇妙な結果が得られました。短期間のタスクでは (-300,+300) ナノ秒のジッターが発生しましたが、長期間のタスクでは次のようになりました。
- 1kHz タスクには (+600、+1300) ナノ秒のジッターがありました
- 100Hz のタスクには (+8, +12) マイクロ秒 (!) のジッターがありました
- 10Hz タスクには (+69,+71) マイクロ秒のジッターがありました
ジッターは、長期間のタスクで大きくなるだけでなく、常にゼロよりも大きくなります。私はそのような違いを期待していませんでした。誰かがそのような行動の説明を提供できますか? タイマーが時期尚早ではなくオーバーヘッドで期限切れになることを可能にするPOSIX標準によって説明されるでしょうか?長期間のタスクでより目立つようになったのはなぜですか?