エラー -1074397140: PCIe-1429でグラブ収集中にFIFOオーバフローエラーが発生する

更新しました Nov 30, 2023

使用製品

ハードウェア

  • PCIe-1429

ドライバ

  • NI-IMAQ
  • Vision Acquisition Software

問題

PCIe-1429でグラブ、リング、またはシーケンスを実行すると、次のようなエラーメッセージが表示されます。
 

Error -1074397140: FIFO overflow caused acquisition to halt.
 

このエラーを回避するにはどうすればよいですか?

解決策

特定のマザーボードでこのエラーを排除することはできないかもしれませんが、以下の方法により問題を軽減できる可能性があります。

 

システム選択

ワークステーションクラスのコンピュータを選択します。一般的なデスクトップクラスのシステムにおける最大パケットペイロードサイズが128バイトに対して、ワークステーションクラスのコンピュータでは最大256バイトあります。
 

 

システムセットアップ

  • システムに取り付けられているメモリが正しくペアリングされていることを確認します。最新のチップセットは、正しいメモリスロットに取り付けられていれば、2つのメモリモジュールへ同時にアクセスできます。マザーボードのマニュアルをチェックして、メモリが正しいスロットに取り付けられていることを確認します。不適切な場合は、メモリのスループットが半分になります。
  • コンピュータのBIOSで電源管理機能を無効にします。
  • マザーボードにある別のPCI Expressスロットを試します。MAXでインタフェースを選択し、スロットがx 4レーンで通信することを確認します。
  • マザーボードのBIOSを最新にアップグレードします。
  • 使用しているマザーボードにイーサネットネットワークカードが内蔵されている場合は、Windowsのデバイス マネージャーでそれを無効にし、プラグインイーサネットNICを使用することを検討します。一部のマザーボードでは、内蔵イーサネットネットワークカードがIOスロットのデバイスよりもホストメモリへの優先順位の高いアクセスが与えられていま
    す。
  • マザーボードにビデオカードが内蔵されている場合は、それを無効にして代わりにPCIまたはPCIeビデオカードを使用することを検討します。一部のマザーボードでは、内蔵ビデオカードはメインメモリを使用してフレームバッファを保存します。これはメモリコントローラの負荷を大幅に増加させます。ただし、プラグインカードには、フレームバッファを格納するための独自のオンボードメモリが搭載されています。
  • PCI Expressグラフィックカードを使用している場合:
    • グラフィックスカードには、ネイティブで補間されていないディスプレイ解像度を使用します。詳しくは、グラフィックカードの資料を確認します。解像度が低いとカードではネイティブ解像度ではないことがあるため、CPUの使用が必要になります。
    • ディスプレイの解像度を下げます。
    • PCI ExpressグラフィックカードをPCIグラフィックカードと交換します。一部のコンピュータでは、グラフィックススロットがノースブリッジから切り離され、サウスブリッジよりも優れたメモリアクセスが得られるため、これによってパフォーマンスが向上します。リンクがx4で通信することを確認します。ただし、多くのIntelチップセットでは、リンクがx4で通信しても、双方向のバッファサイズが一致しません(ビデオ出力用に最適化されていますが、入力ではありません)。その結果、コンピュータによっては、グラフィックススロットが他のIOスロットよりも性能が低下することがあります。
    • グラフィックカードへの負荷が多いWindowsの視覚効果(最小化または最大化時のウィンドウのアニメーション化など)を無効にします。スタート>>コントロール パネル>>システム>>詳細設定タブのパフォーマンス設定>>視覚効果タブに移動します。パフォーマンスを優先するラジオボタンを選択して、OKをクリックします。 または、好みに応じてオプションを部分的に無効にします。
  • コンピュータから他のPCI Expressカードを取り外します。


 

カメラ

使用しているカメラが希望するフレームレートを達成しながらそのピクセルクロックレートを下げる機能がある場合、その設定を変更します。 これにより、フレームグラバへのデータロードの最大負荷が軽減されます。
 

 

アプリケーション設計

  • 画像コピーをできるだけ少ない数にします。たとえば、リングアプリケーションは、グラブアプリケーションよりもコピー数が少なくなります。必要に応じてのみ、取得した画像ごとにアプリケーションの画像表示を更新しないでください。
  • 不要な場合は表示しないでください。表示が必要な場合は更新頻度を下げます。これにより、ホストメモリにアクセスするためのプロセッサとIOデバイス間の競合が減少します。

追加情報

エラーはいつ発生しますか?

収集中の場合、NI PCIe-1429は継続的にカメラからデータを収集し、ボード上のメモリに保存します。同時に、先入れ先出し(FIFO: First-In-First-Out)方式でこのデータをコンピュータのメインメモリに送信することを許可するために、PCI Expressバスと継続的に通信します。PCI Expressバスが少なくともカメラからの流入速度と同じ速度でデータを受け取れない場合、オンボードメモリが最終的にいっぱいになり、FIFOオーバーフローエラーが発生します。
 

 

PCI Expressは十分な専用帯域幅以上があると思いますが、エラーが発生するのはなぜですか?

未加工のPCI Express帯域幅を比較すると、あらゆるフルコンフィグレーションのCameraLinkカメラに対応するのに十分な量が常にあると思われます。x 4 Gen 1 PCI Expressリンクの最大スループットは1 GB/秒(1024 MB/秒)であり、フルコンフィグレーションカメラは最大680 MB/秒を生成できます。 最大帯域幅は重要な考慮事項ですが、最大帯域幅を無期限に維持することはできません。考慮しなければならない別の要因があります。


 

バスのオーバーヘッド

PCI Expressバスにはさまざまな種類のオーバーヘッドが必要ですが、最大のもの(パケットヘッダ)に注目します。バスを介して送信されるパケットごとに、バス上のある時間をヘッダ情報の送信に使用する必要があります。画像データをホストメモリに送信するのに最適なタイプのパケットのために、PCI Express規格は20バイトのパケットごとのヘッダを要求します。下表に見られるように、これは小さなパケットサイズに対して達成可能なパフォーマンスを1024 MB/秒をはるかに下回るように大幅に減らすことができます。
 

パケットペイロードサイズ
(バイト)

最大パケットスループット
(Mbytes/秒)

8

286

16

444

32

615

64

762

128

865

256

928

512

962

1024

981

2048

990

4096

995

 

最大パケットサイズは、PCI Expressリンクを共有する2つのデバイス間で通信されます。2008年現在、ほとんどのデスクトップチップセットは最大128バイトのパケットを許可し、ほとんどのワークステーションおよびサーバーチップセットは最大256バイトのパケットを許可します。そのため、一般的なデスクトップPCの場合、この1つの側面のオーバーヘッドを考慮しただけでも、達成可能な最大スループットは865 MB/秒です。
 

この記事の範囲を超えている確認応答パケット、アップデートフロー制御パケットおよびアライメントパケットを含む他の種類のオーバーヘッドもあります。


 

バス階層

デバイスには、他のデバイスと共有されていないパートナーへの独自専用リンクがあります。各デバイスは完全に独立しているように見えますが、これは通常システムが実際に構築される方法ではありません。
 

ホストメモリに到達するために、PCI Expressパケットは通常、複数のPCI Expressリンクを通過します。低価格コンピュータでは、グラフィック以外のPCI Express IOスロットがチップセットのサウスブリッジに接続され、グラフィック用のx16スロットがチップセットのノースブリッジに接続されることがあります。これらのシステムでは、IOスロット内のパケットは、画像収集デバイスからサウスブリッジへ、サウスブリッジからノースブリッジへ、そしてノースブリッジからホストメモリへと進みます。他のシステムでは、もっと実質的なバス階層があるかもしれません。IOスロットは、最終的にサウスブリッジへの接続、そしてそこからノースブリッジおよびホストメモリへの接続を見つける前に、他のスイッチに接続するかもしれないスイッチに接続する可能性があります。
 

階層の各レベルにおいてスイッチまたはブリッジは、画像収集デバイスからのトラフィックを他の接続リンク上のデバイスからのトラフィックと組み合わせることをタスクとしています。これらのデバイスは他のIOスロットに差し込まれているか、マザーボードに組み込まれている可能性があります(たとえば、イーサネットインタフェース)。

ホストメモリに近づく接続のそれぞれのサイズが、その下にあるすべてのリンクの合計(およびスイッチングオーバーヘッドを考慮した追加の容量)と同じ大きさである場合、バス階層によるスループットの低下はありません。ただし、すべてのデバイスが常にフルレートで送信することを要求するシステムはほとんどないため、システム設計者はシステムをこのように設計することはしません。そうすることで平一般的なユーザに見合うようにコストを抑えています。その結果、階層内のステップ数とホストメモリに至るまでの接続サイズが、ハイエンドパフォーマンスに影響を与える可能性があります。通常、ワークステーションとサーバは、デスクトップコンピュータよりもホストメモリまでかなり大きい「パイプ」サイズ用に設計されています。


 

バスのレイテンシ

スイッチ、チップセット、メモリコントローラ間のスループットは、個々のPCI Expressリンクの全スループットの合計よりも小さいことを説明しました。すべてのIOデバイスとプロセッサが最終的に同じリソース(ホストメモリ)にアクセスする必要があるという追加の要因は、同時にホストメモリにアクセスすることを望む複数のデバイスがあることです。

その結果、デバイスがアクセスを要求してから受信するまでに時間がかかることがあります。 PCI Expressデバイスはすべて、この遅延を「待つ」ための少量のメモリを備えています。しかし、このメモリは無限ではありません。ノースブリッジはいくつかのトランザクションをキューに入れます。メモリが満杯になると、サウスブリッジに新しいデータの送信を停止するように指示します。サウスブリッジが満杯になると、スイッチに新しいデータの送信を停止するように指示し、IOスロットに接続されている最後のスイッチがIOスロット内のデバイスにデータの送信を停止するように指示します。これが起こると、画像収集デバイスは、やがて満杯になるまでそのメモリを満杯にし始めます。画像収集デバイスが満杯になると、カメラに満杯であることを知らせることはできません。新しい画像データは送られ続けますが、それを格納する場所がないため、ボードはFIFOオーバーフローエラーを返してユーザーに通知します。これは、他のデバイスがメモリ不足になったときのユーザーエクスペリエンスとは異なります。

たとえば、イーサネットデバイスの場合、ユーザはデバイスがメモリを満杯にしたことさえ気づきません。画像収集デバイスのように、イーサネットTCP/IPプロトコルは欠けているデータをチェックします。ただし、イーサネット上で欠落データが見つかった場合は、データを再送信するように要求が送信側デバイスに送信されます。通常、データが再送信されるまでには、データを保持するためのスペースがあり、アプリケーションはわずかな遅延で続行されます。ただし、CameraLinkでは、カメラにデータの再送信を要求するメカニズムはありません。


 

バスの電源管理

現在のコンピュータの電源管理ポリシーでは、デバイスがアイドル状態のときに推測します。誤って推測した場合、パフォーマンスの問題とFIFOのオーバーフローを引き起こす可能性があります。