2016-07-08 7 views
-2

NIC割り込みがトリガとして使用される制御システムの作業に取り組んでいます。これは3マイクロ秒以上のサイクル時間で非常にうまく機能します。今私はいくつかのパフォーマンステストを行い、それぞれ2つの割り込みの間の最短時間である伝送時間を測定したい。RealTek 8168(r8169 Linuxドライバ) - Rxディスクリプタリングの混乱

送信者は、できるだけ早く60バイトのパッケージを送信しています。レシーバはパッケージごとに1つの割り込みを生成する必要があります。私は、Rx記述子リングのサイズである256パケットでテストしています。パケットデータは、テスト中は処理されません。割り込みだけが面白いです。

問題は、レセプションが2つの割り込みの間に1マイクロ秒以下ではなく、約70個の割り込み/記述子に対して非常に高速であるということです。次に、NICはRDU(Rx Descriptor Unavailable)ビットを設定し、リングの終わりに達する前に受信を停止します。混乱させることは、Rx記述子リングのサイズを2048(たとえば)まで増加させると、割り込みの数も増えています(約800回)。私はこの行動を理解していません。私は彼が70の割り込みの後に再び止まるべきだと思った。

時間に問題があるようですが、なぜですか?私は何か見落としているが、何?誰かが私を助けることができますか?

ありがとうございます!

答えて

0

大きなRXパケットレートのため、受信割り込みが欠落していると思います。受信したパケットの数を確認するために割り込みをカウントしないでください。受信ディスクリプタの「独自の」ビットに依存してください。 RXディスクリプタのプログラミングで何らかのエラーが発生していない限り(例えば所有権ビットを忘れた)、リングの最後に到達したときにのみ受信ディスクリプタを使用できません。 RXリングに256個のディスクリプタがある場合、 RX記述子をリサイクルすることなく。 リングの終わりに達しているかどうかわからない場合は、最後のRXディスクリプタの完了ビットで割り込みを設定してみてください。この方法では、リングの最後に1つの割り込みしか受け取りません。

+0

ありがとうございます!私はPCIeシステムが遅くなることを認識しました。レイテンシは高いです。パッケージの受信は高速になるため、所有者を変更する前にディスクリプタリングがいっぱいになります。 – Billy

+0

それは素晴らしいです!@ビリー – Adi06411