高転送速度時にUDPパケットが失われる

更新しました Mar 3, 2023

使用製品

ハードウェア

  • Ethernet Device

ソフトウェア

  • LabVIEW Full (Legacy)

問題

UDPパケットを高データレート(2 Mb/s以上)で受信すると、特にCPUが他のタスクによってロードされたときに、パケットが失われ始めます。これらのパケットが失われるのはなぜですか?

解決策

LabVIEWは、高いデータレートでUDPソケットバッファに追いつくことができない場合があります。この問題は、LabVIEWがバッファをキューに移動するか、ファイルに書き込む際にのみ発生します。解決策の1つは、Windowsソケットバッファサイズを増やすことです。これにより、LabVIEWがバッファの内容を操作し、受信データがソケットバッファをオーバーフローする前に次のバッファ読み取りを実行する時間が長くなります。
 

ockwsock32.dllsetsockopt関数を呼び出すことにより、Windowsソケットバッファサイズを設定できます。定義済みのソケット接続のバッファサイズを自動的に設定およびリードバックするVIと、バッファセット/読み取りVIを使用したサンプルVIが添付されています。同様の方法をTCPに使用して、転送速度を上げることができます。これらの例では、ソケットバッファのサイズをバイト単位で設定します。


メモ: UDPはロスレスプロトコルではないため、完全に配信される保証はありません。Windowsソケットバッファサイズを大きくすると、UDPパケットをより高いレートで読み取ることができる場合がありますが、アプリケーションがロスレス接続に依存している場合は、別のプロトコルを使用する必要があります。