WANへの高速IP転送、ただしLANサブネット間の崖から落ちる


0

コンシューマーワイヤレスルーターを、マザーボード上のWAN用のクアッドギガビットNIC PCIeカードとシングルギガビットNICを備えたLinuxボックスに置き換えました。IP転送、マスカレード(経由iptables)をオンにし、4つのLANインターフェイスのそれぞれでサブネットを設定した後、いくつかの速度テストを実行しました。

$ ip route
default dev ppp0 scope link 
10.0.0.0/16 dev enp3s0f0 proto kernel scope link src 10.0.0.1 
10.64.0.0/16 dev enp3s0f1 proto kernel scope link src 10.64.0.1 
10.192.0.0/16 dev enp4s0f1 proto kernel scope link src 10.192.0.1 
aaa.bbb.ccc.ddd dev ppp0 proto kernel scope link src www.xxx.yyy.zzz 
  • LANサブネットの1つにあるワイヤレスデバイスからWANの速度テストサーバーに至るまで、ISPに支払う40 Mbps / 5 Mbpsの全帯域を取得します。

  • ルーターホストから有線LANホストを使用してiperf3、数分間930+ Mbpsを一貫して維持できます。

  • LANサブネットの1つの有線デバイスから別のLANサブネットの有線デバイスiperf3へ、最初の数秒間は最初に80〜95 Mbpsを使用しますが、急速にゼロになります。

  • LANサブネットの1つの有線デバイスから、iperf320 Mbpsのターゲットビットレートで使用する別のLANサブネットの有線デバイスまで、同様の結果が表示されます(最後の更新を参照)が、約10 Mpbsを維持できます

Connecting to host 10.0.0.2, port 5201
[  5] local 10.192.128.3 port 35620 connected to 10.0.0.2 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  10.2 MBytes  85.9 Mbits/sec    0   73.5 KBytes       
[  5]   1.00-2.00   sec  9.01 MBytes  75.6 Mbits/sec    0   82.0 KBytes       
[  5]   2.00-3.00   sec  8.26 MBytes  69.3 Mbits/sec    0   79.2 KBytes       
[  5]   3.00-4.00   sec  9.01 MBytes  75.6 Mbits/sec    0   73.5 KBytes       
[  5]   4.00-5.00   sec  5.28 MBytes  44.3 Mbits/sec    1   1.41 KBytes       
[  5]   5.00-6.00   sec  0.00 Bytes  0.00 bits/sec    1   1.41 KBytes       
[  5]   6.00-7.00   sec  0.00 Bytes  0.00 bits/sec    1   1.41 KBytes       
[  5]   7.00-8.00   sec  0.00 Bytes  0.00 bits/sec    1   1.41 KBytes       
[  5]   8.00-9.00   sec  0.00 Bytes  0.00 bits/sec    0   1.41 KBytes       
^C[  5]  10.00-13.63  sec  0.00 Bytes  0.00 bits/sec    1   1.41 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-13.63  sec  41.8 MBytes  25.7 Mbits/sec    5             sender
[  5]   0.00-13.63  sec  0.00 Bytes  0.00 bits/sec                  receiver
iperf3: interrupt - the client has terminated

これは、サブネット間でパケットを転送する際に問題があることを示唆しています。最初に、iptablesルールが可能な限り最小限であることを確認しました。

-t nat -A POSTROUTING -o ppp0 -j MASQUERADE
# WAN connection is PPPoE and VLAN tagged
-t filter -A FORWARD -o ppp0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS  --clamp-mss-to-pmtu

iptables状態をダンプすると、両方のルールのパケット数が少なくなります。

次に、パケット損失をチェックしました。パケット損失/再送信の量は少ないが一貫しているようです。

$ sudo netstat -s | egrep -i 'retransmit|drop'
    498 outgoing packets dropped
    25848 fast retransmits

それから、バッファまたはキューがいっぱいになり、パケットがドロップされたのではないかと考えました。平均帯域幅遅延積を計算し、予約メモリと比較しました。

$ sudo ping -f 10.0.0.2 -s $((1500-28))               
PING 10.0.0.2 (10.0.0.2) 1472(1500) bytes of data.
.^C
--- 10.0.0.2 ping statistics ---
9036 packets transmitted, 9035 received, 0% packet loss, time 26512ms
rtt min/avg/max/mdev = 1.742/2.817/12.057/0.758 ms, pipe 2, ipg/ewma 2.934/3.091 ms

$ echo "1*(1024^3) * 0.003" | bc 
3221225.472

$ cat /proc/sys/net/ipv4/tcp_mem
18396   24529   36792

$ getconf PAGESIZE
4096

それで十分のようです。だから今、私は少し立ち往生しています。私はクライアントで走りtcpdumpましたが、iperf3物事が少し順調に進んでいるのを見ることができます。その後、大量の再送信と確認応答の重複の前に、長い(ほぼ250ミリ秒)の沈黙が見られます。

WANから十分なダウンロード速度を引き出すことができるので、オンボードNICに障害があるとは思わない。このクアッドNIC(詳細は下記)と、場合によってはダムレイヤー2ギガビットスイッチ(Netgear GS-108)および障害になる可能性のある他のカーネル構成を診断するためのヘルプを探しています。以前は問題にならなかったので、私はそれがスイッチだとは思わず、ルーターのループバックからそのサブネットまでの速度を維持できます。サブネット間パフォーマンスのみが影響を受けるようです。

  *-network:0               
       description: Ethernet interface
       product: 82571EB Gigabit Ethernet Controller (Copper)
       vendor: Intel Corporation
       physical id: 0
       bus info: pci@0000:03:00.0
       logical name: enp3s0f0
       version: 06
       serial: 00:26:55:xx:xx:xx
       size: 1Gbit/s
       capacity: 1Gbit/s
       width: 32 bits
       clock: 33MHz
       capabilities: pm msi pciexpress bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=e1000e driverversion=3.2.6-k duplex=full firmware=5.12-2 ip=10.0.0.1 latency=0 link=yes multicast=yes port=twisted pair speed=1Gbit/s
       resources: irq:24 memory:fe920000-fe93ffff memory:fe880000-fe8fffff ioport:d020(size=32)

更新:

$ iperf3 -b 20m -c 10.0.0.2
Connecting to host 10.0.0.2, port 5201
[  5] local 10.192.128.3 port 36554 connected to 10.0.0.2 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  2.49 MBytes  20.9 Mbits/sec    0    158 KBytes       
[  5]   1.00-2.00   sec  2.38 MBytes  19.9 Mbits/sec    0    150 KBytes       
[  5]   2.00-3.00   sec  2.38 MBytes  19.9 Mbits/sec    1    133 KBytes       
[  5]   3.00-4.00   sec  2.38 MBytes  19.9 Mbits/sec    0   73.5 KBytes       
[  5]   4.00-5.00   sec  2.38 MBytes  19.9 Mbits/sec    0   70.7 KBytes       
[  5]   5.00-6.00   sec  1.12 MBytes  9.44 Mbits/sec    2   1.41 KBytes       
[  5]   6.00-7.00   sec  0.00 Bytes  0.00 bits/sec    2   1.41 KBytes       
[  5]   7.00-8.00   sec  0.00 Bytes  0.00 bits/sec    0   1.41 KBytes       
[  5]   8.00-9.00   sec  0.00 Bytes  0.00 bits/sec    1   1.41 KBytes       
iperf3: error - control socket has closed unexpectedly

$ iperf3 -b 10m -c 10.0.0.2 
Connecting to host 10.0.0.2, port 5201
[  5] local 10.192.128.3 port 36564 connected to 10.0.0.2 port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  1.24 MBytes  10.4 Mbits/sec    0    201 KBytes       
[  5]   1.00-2.00   sec  1.25 MBytes  10.5 Mbits/sec    0    118 KBytes       
[  5]   2.00-3.00   sec  1.12 MBytes  9.44 Mbits/sec    0    127 KBytes       
[  5]   3.00-4.00   sec  1.25 MBytes  10.5 Mbits/sec    0    107 KBytes       
[  5]   4.00-5.00   sec  1.12 MBytes  9.44 Mbits/sec    0    110 KBytes       
[  5]   5.00-6.00   sec  1.25 MBytes  10.5 Mbits/sec    0   90.0 KBytes       
[  5]   6.00-7.00   sec  1.12 MBytes  9.44 Mbits/sec    0   87.2 KBytes       
[  5]   7.00-8.00   sec  1.25 MBytes  10.5 Mbits/sec    0   81.6 KBytes       
[  5]   8.00-9.00   sec  1.12 MBytes  9.44 Mbits/sec    0   78.8 KBytes       
[  5]   9.00-10.00  sec  1.25 MBytes  10.5 Mbits/sec    0    112 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  12.0 MBytes  10.1 Mbits/sec    0             sender
[  5]   0.00-10.04  sec  12.0 MBytes  10.0 Mbits/sec                  receiver

iperf Done.

「4つのLANインターフェイスのそれぞれにサブネットを設定する」とはどういう意味ですか?4つまたは1つのLANを作成しましたか?そして、1つの場合、同じLANに4つのインターフェースがある場合、1つのIPアドレスと1つのサブネットのみをセットアップする必要があります。
デビッドシュワルツ

@DavidSchwartz 4つのサブネット。インターフェイスは10.0.0.1、10.64.0.1、10.128.0.1、および10.192.0.1として構成されています。
ハックル

ifconfig -aまたはを与えてくださいip addr。クアッドNICでMACアドレスを探しています。
ペドロ

1
@Pedro-両方が異なるサブネットに直接接続されている2つの有線デバイスから再テストされました(今回は1つのサブネットでレイヤー2スイッチはありません)。本質的に同一の結果
ハックル

1
@Pedro 20 Mbpsおよび10 Mbpsテストが投稿されました。20はノーゴーです。12の周囲10にブレークダウンを維持すると思われる
ハックル

回答:


0

掘り下げを手伝ってくれた@Pedroに感謝します。もともとこれは悪いハードウェアだと思っていましたが、別のハードウェアに交換した後、ドライバーの問題だと確信しています。これが既に報告されているバグかどうか(および修正が存在するかどうか)を調べるために、私はまだ掘り下げています。それまでの間、いくつかのオフロード機能をオフにすることを提案するバグレポートにリンクしているサーバー障害の質問を見つけました。これにより、少なくとも0 bpsから270 Mbpsまで安定して取得できました。〜940 Mbpsにはまだ及ばないが、研究を続けている間は何もないよりはましだ。

ethtool -K eth0 gso off gro off tso off
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.