こんにちは、
私は、Aquantia 10 Gbps インターフェースを介して、2 つの Imx95 verdin EVK A1 シリコン バージョン ボード間の通信を確立しようとしています。両方のボードは、nxp インストーラー (aquantia-firmware-utility/aq_api_2_9_7 at master · nxp-qoriq/aquantia-firmware-utility · GitHub) を使用して適切にインストールされた aquantia10 G ファームウェア (AQ... ) を実行しています。これらは Cat6a イーサネット ケーブルを使用して物理的にコネクテッドされます。
iperf3 を使用してパフォーマンス テストを実行すると、ターゲット帯域幅を 7 Gbps に指定した場合でも、TCP で約 5 Gbps、UDP で約 1.2 Gbps が得られ、損失は 0% になります。
# TCPテスト
最初のボードで iperf3 -s #
iperf3 -c
# UDPテスト
iperf3 -s
iperf3 -c
ip link set dev enp1s0 mtu 9000 でジャンボ フレームを有効にしようとすると、制限を超えたというエラーが発生します (10Gbps インターフェースがジャンボ フレームを受け入れないのは奇妙です)
また、UDPバッファサイズを増やそうとしましたが、同じビットフレームが発生します
両側でiperf3を実行してもCPU負荷は40%を超えません
最大スループット (10 Gbps 近く) を達成するために、適用する特定の n 構成やインストールする追加ツールはありますか? Aquantia FW バージョンは適切ですか? Linux カーネルのバージョンは適切ですか? FW インストーラーのバージョンは適切ですか?
誰かがすでにこのターゲットで 10Gbps インターフェースを使用しようとしましたか?
よろしくお願いいたします。
アブデルモナエム
1. 両方のシステムで次の設定を構成してみます。
cpufreq-set -g パフォーマンス
sysctl -w net.core.rmem_max=26214400
sysctl -w net.core.wmem_max=26214400
sysctl -w net.core.netdev_max_backlog=250000
sysctl -w net.ipv4.tcp_rmem='409687380 16777216'
sysctl -w net.ipv4.tcp_wmem='409665536 16777216'
2. 可能であれば、iperfサーバーとは異なる参照システムを使用します(例:インテル Xeon
3. iperf3 自体はテスト ストリームごとにシングル Thread なので、-P オプションを使用してみてください。
例えばiperf3 -c
(6つのストリーム)
4. 順方向と逆方向の両方のストリームをチェックする(-R)
iperf3 -c 192.168.1.1 -t 10 -b 10G -u -R
6.12.49へのマイナーバージョンアップグレードとなります
ところで、スループットを向上させるために、DPDK または AF_XDP も検討してみてはいかがでしょうか?
=> TCPとUDPの送信パフォーマンス
iperf3 を使用して TCP パケットを送信する場合、各 TCP パケットは 128 KB であり、パケットは ENETC ハードウェアの LSO 機能によって断片化されます。SO、TCP 転送パフォーマンスが向上します。
iperf3 は、UDP ソケットを作成するときに UDP_SEGMENT を有効にしません。したがって:
- 各 UDP パケットのサイズは、およそ MTU サイズ (≈1500 バイト) です。
- 同じデータ サイズの場合、UDP は TCP よりも多くのパケットを送信する必要があります。
パケット数の増加 → カーネルプロセッシングの増加 → LSO を使用した TCP と比較してパフォーマンスの低下。
=> TCP の場合、受信が送信に比べて大幅に低いのはなぜですか?
- Linux カーネルでは TX パスと RX パスが対称ではないため、カーネル内の各 RX パケットと各 TX パケットのプロセッシング時間は異なります。また、TCP は送信時に LSO オフロードを使用しています。
- RSC はカーネル内でデフォルトで有効になっていません。ENETC の RSC が適切に動作するように、TCP タイムスタンプを無効にする必要があります。現在、i.MX95 の RSC はデフォルトで無効になっています。
a) i.MX95(レシーバ)のRSCを有効にする:
ethtool -K eth1 大容量受信オフロードオン
b) TCPタイムスタンプを無効にする(送信側):
sysctl -w net.ipv4.tcp_timestamps=0
sysctl -p /etc/sysctl.conf
RSC を有効にすると、レシーバの TCP パフォーマンスが向上します。
さらに、より高いスループットを得るためにジャンボ フレームを使用することもできます。(最新リリースを実行していることを願います)。
# 両側のMTUを9000に変更します
IPリンク設定 dev eth1 mtu 9000
# イーサネット ドライバの RX バッファの長さを変更します。
ethtool -G eth1 受信バッファ長 16384
マルチストリーム モードでは、8 ~ 10 Gbps の UDP RX/TX が確認できます。
RSC 設定により UDP パフォーマンスも向上します。
ENETC のジャンボ フレームの変更/修正は、2 週間以内にリリースされる LF-Q4 で利用可能になる予定です。
AF_XDP または DPDK はカーネル ネットワーク スタックを使用しません。
DPDK には特別なドライバがあり、ユーザー空間でのみ動作します。ネットワークとパケットプロセッシングに高度に最適化されています。すべての IP パケットに対して非常に高速なパフォーマンスをCANで提供できます。以下のサイトで確認することができます。
第10章: https://www.nxp.com/docs/en/reference-manual/RM00293.pdf
新しいカーネル ツリーと変更は次の場所で入手できます。
https://github.com/nxp-imx/linux-imx/commits/lf-6.12.49-2.2.0
新しい LF リリースでは A1 サポートが削除されました。
次のオプションがあります。
1. カーネルを個別にビルドし、ビルド内のカーネルのみを置き換えます。(うまくいくかもしれない)
2. マーケティングお問い合わせにボードを B0 に交換してもらい、LF-Q4'2025 リリースを実行できるように SO CAN します。
はい、このようにして結果がテストされました。
MTU はすべてのCASEで両側で同じでした (両方とも 1500 または両方とも 9000)
添付資料参照
また、A1 SOCでも実行していることにも注意してください。
UBOOT ログ: -
U-Boot 2025.04-g8c1de2e1deca(2025年5月9日 - 15:29:26 +0000)
CPU: i.MX95 rev1.1(1800MHz)
CPU: オートモーティブ温度グレード (-40℃~125℃)、30℃
LM ブート理由: sw、オリジン: 2、エラー: 1
LM シャットダウン理由: sw、発生元: 2、エラー: 1
モデル: NXP i.MX95 19X19 ボード
DRAM: 15.8ギブ
--- SMログ
>$ 情報
SM バージョン = ビルド 633、コミット c37b26da
SM 構成 = mx95evk、mSel=0
ボード = i.MX95 EVK、属性 = 0x00000000
シリコン = i.MX95 A1
ブートモード = 通常
ブートデバイス = MMC1
ブートステージ = プライマリ
ブートセット = 1
ECID = 0x6E5F04BA0000000500041D0899123F81
PMIC 0 (0x08) = 0x20、0x09、0x10、0x00、0x01
PMIC 1 (0x2A) = 0x54, 0x22, 0x00, 0x0B
PMIC 2 (0x29) = 0x55, 0x22, 0x00, 0x0A
コンパイラ = gcc 14.2.1 20241119