ターゲットからホストへの DMA FIFO からデータを読み取るときに CPU 使用率が高くなる

更新しました May 8, 2024

使用製品

ソフトウェア

  • LabVIEW FPGA Module

問題

ターゲットからホストへのDMA FIFO を使用して、FPGAからLabVIEW Real-Time VIにデータを読み込んでいます。 分散システムマネージャで、リアルタイム ターゲットの CPU 使用率が 100% に近づいていることを確認しました。これにより、プロセッサリソースが枯渇し、他のループが実行できなくなります。

解決策

タイムアウトを使用するのではなく、FIFO にサンプルがある場合にのみ FIFO を読み取るために、次の組み方を実装することを検討してください。

追加情報

ポーリングまたはブロックとして構成できるRT FIFO とは異なり、DMA FIFO の動作は実行中のハードウェアによって決定されます。

National Instruments の Real-Time コントローラの大半では、DMA FIFO は、タイムアウトを設定すると新しいサンプルをポーリングします。これにより、Real-Timeプロセッサの負荷が高くなり、実行時に望ましくない動作となる可能性があります。

NI-STC3 タイミング エンジンを搭載したリアルタイム コントローラ (cRIO-903x シリーズなど) は割り込みを使用して DMA 転送を実行するため、転送するデータの準備ができているかどうかを確認するためにプロセッサに負荷をかけることはありません。

これは予期された動作であるため、他のスレッドリソースが枯渇するということは、スレッドのタイミングをより慎重に検討する必要があることを示唆しています。この問題を解決する適切な方法は、上記の解決策で示されているように、暫定的にターゲットからホストへの FIFO読み取りのメソッドを使用してプログラムで DMA FIFO をチェックし、必要なデータが利用可能かどうかを確認してから、FIFOのデータを読み取ることです。