データを要約するループでは、重大なタイミングジッタが発生します。なぜですか? imx8のみ問題がありますか?

データを要約するループでは、重大なタイミングジッタが発生します。なぜですか? imx8のみ問題がありますか?

Cで小さなアプリケーションを作成しました。

  • 5MBの2つの文字バッファを割り当てます。
  • 1000回繰り返す
  • array1またはarray2のすべての要素はループ内で合計(交互)であるため、内部ループでは500万の追加が行われます。
  • この内部ループの時間を測定します(時計の鍛造)。
  • 内部ループに必要な最小/最大時間と平均時間を確認してください。

驚くべきことに、IMX8のジッタ係数はほぼ1.6..2.0なので、1000個のループのうちの1回は約4.5ms、少なくともほぼ9msです。平均は約4.6ミリ秒ですが、時間がかかるのは1つまたは2つのループではありません。

これはスケジューラの設定とは関係がないため、スケジューラ FIFO とは関係ありません。周波数スケーリングは有効ではありません。コア数に依存しません。

バッファはRAM(512MB)に入るのに十分小さいが、レベル1/2キャッシュに収まらないほど大きい。

このジッタの原因が何であるかよくわかりません。 Zynqプロセッサを使用する従来のシステムでは、ジッタがほとんどありませんでした。

-O3 でコンパイルします。 -O0を使用するとジッタはありませんが、実行は非常に遅いです(ループには5msではなく50msかかります)。

Trace-cmdを使って何が起こっているのかを調べようとしていますが、実際に結果を読むことはできません。フィルタリングする必要があります。そうしないと、多くのイベントが失われます。しかし、何を探すべきですか?どんなアイデアがありますか?

また、これを行うには、1つのコアを取り外してみてください。結果は似ています。だから私はスケジューラを信頼していませんが、メモリサブシステムに問題があります。

関連情報