USRPネットワーク接続時の切断を防ぐ (環境構築編)

高いIQレート時に発生する問題

USRP 292xシリーズはギガビットイーサネットでPCと接続し、IQデータのやり取りを行います。
USRP 292xシリーズを使用するにおいて必ず問題なるのが「高IQレート時にイーサネット接続が間に合わなくなる(切断されてしまう)」問題です。

 

エラーメッセージの例

受信時のエラー : バッファオーバフロー
clip_image001

 

送信時のエラー : バッファアンダーフロー
clip_image002

しかし適切な環境設定・環境構築を行い、ソフトウェア実装も適切に行うことで25MのIQレートで受信することも可能ですし、

  • IQレート 8bit 50M (=800Mbps)で送信しながら
  • IQレート 16bit 25M(=800Mbps)で受信し続けることも可能です。

 

ドルフィンシステムで開発したアプリとUSRP間で、ギガビットイーサネット1本の上り下り 800Mbps x 2 = 1.6Gbpsで通信している様子。
clip_image003

clip_image004

この文書では、USRP 292xシリーズで高IQレートで送受信可能な環境を整備する方法を解説します。
まずは以下に結論を掲げ、詳細は以降で解説します。

 

結論

  1. イーサネットコントローラはインテルを選ぶ。各メーカの中で一番連続送受信が安定している。
  2. ドライバの送受信バッファを最大値に設定する。各メーカの中でインテルが一番バッファ量を多く設定できる。
  3. FastSendDatagramThresholdレジストリ値を設定する。
  4. 音楽は聴かない。Windows メディアプレイヤーで音楽を再生すると、QoSの影響か?UDPが高速転送が間に合わなくなります。
  5. ネットアクセスするアプリを落とす。特に最近(2016年)Windows UpdateでインストールされるSkypeは必ず終了させる。これが起動していると遅いIQレートでも不定期に切断されてしまう。
  6. 省電力設定によるパフォーマンス低下を防ぐ
  7. 不必要なサービスを停止する。Windowsファイアウォールも停止すると良い。

 

環境整備 1. イーサネットコントローラの選定

結論から申し上げますと、ノートPCでもデスクトップPCでも良いのですがイーサネットコントローラは必ずインテル製を選ぶようにして下さい。
USRPでIQデータをやりとりする場合は、連続的継続的にIQレートを維持する必要があります。たとえば25M IQレートで受信する場合は、USRPと接続中常に以下のレートを維持する必要があります。

25Msps x 4バイト=100MB/s=800Mbps

25M IQレートで受信もしくは送信する場合は、ギガビットイーサネットの80%の帯域を連続的継続的に維持する必要があります。

経験上一番安定しており、各メーカの中でデバイスドライバの送受信バッファを一番大きく設定できるのがインテル製コントローラです。

ノートPC等でインテル製のイーサネットコントローラが搭載されていない場合は、CPUが高速でも25Mspsのような高速なIQレートで安定して連続送受信が出来ないかも知れません。

 

おすすめのPCI Expressカード

デスクトップPCで増設できる場合は、

Intel Gigabit Desktop CT Adapter (EXPI9301CT)

を増設して下さい。

 

Realtek製イーサネットコントローラは?

安めのPCに搭載されているのがRealtek製イーサネットコントローラ。
イーサネットのチップで以下のような話を聞いたことはないでしょうか?

  • 「インテルのチップが良い。」
  • 「蟹さん(Realtek)はダメだ。」

このような話は本当なのか?

私の経験上本当です。

数字で表現出来ないのが残念ですが、25Mspsでもそれなりに使えますが安定度はインテルより劣ります。また送受信同時動作に不安定さが残ります。
以下の画像は同じPC上でRealtek、Intelのチップが搭載されているイーサネットカードの送信能力をiperfで計測した結果です。レート自体はインテルと同程度が出ております。

ですが、ドライバで設定できる送受信バッファ量(後述)が以下のようにインテルの半分以下です。

例えば、IQデータを受信しながら信号処理を行うなどのCPUが高負荷な状態にある場合、CPUは信号処理に時間が掛かるため次から次へと来るIQデータを取りこぼします。このときにバッファ量が多ければ多いほど、CPUに余裕が生まれることで取りこぼしが減り安定性が向上します。

 

受信バッファ

送信バッファ

Intel

2048K

2048K

Realtek

256k

128k

 

Intel Desktop CT Adapter
clip_image005

Realtek PCIe GBE Family Controller
clip_image006

 

USB ギガビットイーサネットは?

USB 3.0で簡単に増設できるギガビットイーサネットが各社から販売されています。
デバイス名としては"ASIX AX88179 USB 3.0 to Gigabit Ethernet Adapter"のようになります。

これは高速に連続通信は不可能です。せいぜい5Mspsが上限です。
8Mspsはつながりますが、直ぐに切断されてしまいます。

ブラウジングするレベルでは多少の遅延は全く気になりませんが、連続して800Mbps転送となると直ぐにそのあらが見えてきます。

 

環境整備 2. イーサネットコントローラの設定

インテル製コントローラをご使用なら、デバイスマネージャからイーサネットコントローラを選択し「詳細設定」にある「受信バッファー」・「送信バッファー」の値を2048もしくは設定できる最大値に変更します。
他社製コントローラでも同じように送受信バッファの設定項目がありますので、最大値を設定します。

clip_image007

 

環境整備 3. レジストリの設定

FastSendDatagramThreshold レジストリを確認する

Windows 7 の場合送信する UDP の帯域に制限がかけられており、最大のスループットを出すことが出来ません。この制限を緩和するレジストリキーを作成します。

レジストリエディタを起動し

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\AFD\Parameters

キーの下に、

FastSendDatagramThreshold

という名称の新規 DWORD(32bit) 値を作成し、10進数 1500 を設定し、Windowsを再起動します。

clip_image008

clip_image009

 

環境整備 4. 干渉するソフトウェアを動作させない

USRPで高速IQレート送受信を行う場合、

  1. ネットワークにアクセスするアプリケーション
  2. CPUに高負荷を与えるアプリケーション

を同時に動作させることは控えて下さい。

常駐しているソフトウェアは出来るだけ解除します。特にネットワークを使用するソフトは同時に使用しないで下さい。

 

Windows メディアプレイヤー

メディアプレイヤーなどで音楽を聴きながらLabVIEWプログラミングをしている方はいないでしょうか?(はい。私です。)

これは禁止です。

WindowsメディアプレイヤーはネットワークにアクセスしているのでUSRPに悪影響を与えます。

音楽を再生させたとたんにUSRPがバッファオーバフローになることがあります。

※詳細は不明ですが、Windowsメディアプレイヤーはストリーミング受信にUDPを使用しており、音楽再生中はストリーミングが途切れないようにQoSのために帯域制限をかけているのではないか?と思っています。

 

Skype

Skypeが起動していると、不定期にネットワークにアクセスをしています。

ネットワーク負荷が高いのか?低速IQレート動作時でもネットワークが切断されてしまうので終了かアンインストールして下さい。

 

干渉するサービスを停止する

Windows上のファイアウォールを無効にします。常にネットワーク流量を監視するためスループットの原因になりますので、ファイアウォールを停止して下さい。

ウイルススキャナを無効にします。ウイルス対策ソフトなどは、ネットワークの監視を行なったり不定期にPCパワーを使用する場合があるため起動しないようにして下さい。

 

また私は収録時にこのようなバッチファイルで一時的にサービスを停止しています。

 

仮想ネットワークデバイスなどを使用しない

仮想ネットワークデバイス経由でネットワークに接続されている場合スループット低下の原因になりますので、仮想ネットワークデバイス経由で接続しないで下さい。

例)
clip_image010

 

環境整備 5. 電源のプロパティを設定する

ノートPC等では、電源のプロパティで「省電力」に設定されている場合があります。デスクトップでも「バランス」などに設定され、パフォーマンスが制限された状態にある場合があります。

コントロールパネルの「電源プロパティ」で、電源プランを「高パフォーマンス」にします。

念のために以下の項目も確認しておいて下さい。

「ディスプレイの電源を切る」が有効になっていると、ディスプレイの電源断時にマウスを動かして復帰させたとたんにネットワーク接続が切断されてしまう場合があります。

  1. ディスプレイの電源を切る→なし
  2. コンピュータをスリープ状態にする→なし
  3. 次の時間が経過後ハードディスクの電源を切る→なし
  4. スリープ→しない
  5. USBのセレクティブサスペンド→無効
  6. PCI Expressリンク状態の電源管理→オフ

clip_image001[1]

 

環境整備 6. ネットワークスループットを低下させないための注意点

ネットワークスループットの上限が期待ほどでなかった場合、以下の点をチェックして下さい。

  1. 必ず1000BASE-Tに対応している、CAT5e以上のケーブルを使用して下さい。
  2. PC及びUSRP間にハブを経由せず直結して下さい。

 

まとめ

正しく環境構築を行う事で、USRP間で送受信 25Msps @16bit  (50Msps @8bit) =1.6Gbpsの通信を行う事が出来る。

そのためには以下の項目を整備すること。

  1. イーサネットコントローラはインテルを選ぶ。各メーカの中で一番連続送受信が安定している。
  2. ドライバの送受信バッファを最大値に設定する。各メーカの中でインテルが一番バッファ量を多く設定できる。
  3. FastSendDatagramThresholdレジストリ値を設定する。
  4. 音楽は聴かない。Windows メディアプレイヤーで音楽を再生すると、QoSの影響か?UDPが高速転送が間に合わなくなります。
  5. ネットアクセスするアプリを落とす。特に最近(2016年)Windows UpdateでインストールされるSkypeは必ず終了させる。これが起動していると遅いIQレートでも不定期に切断されてしまう。
  6. 省電力設定によるパフォーマンス低下を防ぐ
  7. 不必要なサービスを停止する。Windowsファイアウォールも停止すると良い。

次は、プログラミング編へ。

コメント