Wir haben 2 Red Hat Server, die für den Speedtest von Kunden vorgesehen sind. Beide verwenden 10-Gbit-Glasfaserverbindungen und sitzen auf 10-Gbit-Verbindungen. Alle Netzwerkgeräte zwischen diesen Servern unterstützen 10 Gbit / s. Mit Iperf oder Iperf3 kann ich nur 6,67 Gbit / s erreichen. Davon abgesehen ist ein Server in Produktion (Kunden treffen ihn) und der andere Server ist online, wird aber nicht verwendet. (Wir verwenden es zum Testen von atm) Die 6,67 Gbit / s sind auch eine Möglichkeit, die ich erwähnen sollte. Wir nennen diese Server A und Server B.
Wenn Server A als iperf-Server fungiert, erhalten wir die Geschwindigkeit von 6,67 Gbit / s. Wenn Server A als Client zu Server B fungiert, kann er nur etwa 20 MBit / s übertragen.
Was habe ich getan:
Bisher habe ich nur die TX / RX-Puffer auf beiden Servern auf das Maximum erhöht. Einer war auf 512 eingestellt, der andere auf 453. (Nur RX, TX wurde bereits ausgereizt). Hier ist also, dass dies nach dem Update bei beiden so aussieht:
Server A:
Ring parameters for em1:
Pre-set maximums:
RX: 4096
RX Mini: 0
RX Jumbo: 0
TX: 4096
Current hardware settings:
RX: 4096
RX Mini: 0
RX Jumbo: 0
TX: 4096
Server B:
Ring parameters for p1p1:
Pre-set maximums:
RX: 4078
RX Mini: 0
RX Jumbo: 0
TX: 4078
Current hardware settings:
RX: 4078
RX Mini: 0
RX Jumbo: 0
TX: 4078
NICS sieht folgendermaßen aus:
Server A:
ixgbe 0000:01:00.0: em1: NIC Link is Up 10 Gbps, Flow Control: RX/TX
Serer B:
bnx2x 0000:05:00.0: p1p1: NIC Link is Up, 10000 Mbps full duplex, Flow control: ON - receive & transmit
Server A ethtool stats:
rx_errors: 0
tx_errors: 0
rx_over_errors: 0
rx_crc_errors: 0
rx_frame_errors: 0
rx_fifo_errors: 0
rx_missed_errors: 0
tx_aborted_errors: 0
tx_carrier_errors: 0
tx_fifo_errors: 0
tx_heartbeat_errors: 0
rx_long_length_errors: 0
rx_short_length_errors: 0
rx_csum_offload_errors: 123049
Server B ethtool stats:
[0]: rx_phy_ip_err_discards: 0
[0]: rx_csum_offload_errors: 0
[1]: rx_phy_ip_err_discards: 0
[1]: rx_csum_offload_errors: 0
[2]: rx_phy_ip_err_discards: 0
[2]: rx_csum_offload_errors: 0
[3]: rx_phy_ip_err_discards: 0
[3]: rx_csum_offload_errors: 0
[4]: rx_phy_ip_err_discards: 0
[4]: rx_csum_offload_errors: 0
[5]: rx_phy_ip_err_discards: 0
[5]: rx_csum_offload_errors: 0
[6]: rx_phy_ip_err_discards: 0
[6]: rx_csum_offload_errors: 0
[7]: rx_phy_ip_err_discards: 0
[7]: rx_csum_offload_errors: 0
rx_error_bytes: 0
rx_crc_errors: 0
rx_align_errors: 0
rx_phy_ip_err_discards: 0
rx_csum_offload_errors: 0
tx_error_bytes: 0
tx_mac_errors: 0
tx_carrier_errors: 0
tx_deferred: 0
recoverable_errors: 0
unrecoverable_errors: 0
Mögliches Problem: Server A hat Tonnen von rx_csum_offload_errors. Server A ist derjenige in der Produktion, und ich kann nicht anders, als zu glauben, dass CPU-Interrupts hier ein zugrunde liegender Faktor sein können und was die Fehler verursacht, die ich sehe.
cat / proc / interrupts von Server A:
122: 54938283 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge em1- TxRx-0
123: 51653771 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge em1-TxRx-1
124: 52277181 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge em1-TxRx-2
125: 51823314 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge em1-TxRx-3
126: 57975011 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge em1-TxRx-4
127: 52333500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge em1-TxRx-5
128: 51899210 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge em1-TxRx-6
129: 61106425 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge em1-TxRx-7
130: 51774758 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge em1-TxRx-8
131: 52476407 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge em1-TxRx-9
132: 53331215 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 IR-PCI-MSI-edge em1-TxRx-10
133: 52135886 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Würde das Deaktivieren der RX-Prüfsumme helfen, wenn dies das Problem sein könnte? Außerdem sehe ich keine CPU-Interrupts auf dem Server, der nicht in Produktion ist, was sinnvoll ist, da die Netzwerkkarte keine CPU-Zeit benötigt.
Server A:
ethtool -k em1
Features for em1:
rx-checksumming: on
tx-checksumming: on
tx-checksum-ipv4: on
tx-checksum-unneeded: off
tx-checksum-ip-generic: off
tx-checksum-ipv6: on
tx-checksum-fcoe-crc: on [fixed]
tx-checksum-sctp: on [fixed]
scatter-gather: on
tx-scatter-gather: on
tx-scatter-gather-fraglist: off [fixed]
tcp-segmentation-offload: on
tx-tcp-segmentation: on
tx-tcp-ecn-segmentation: off
tx-tcp6-segmentation: on
udp-fragmentation-offload: off [fixed]
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: on
rx-vlan-offload: on
tx-vlan-offload: on
ntuple-filters: off
receive-hashing: on
highdma: on [fixed]
rx-vlan-filter: on [fixed]
vlan-challenged: off [fixed]
tx-lockless: off [fixed]
netns-local: off [fixed]
tx-gso-robust: off [fixed]
tx-fcoe-segmentation: on [fixed]
tx-gre-segmentation: off [fixed]
tx-udp_tnl-segmentation: off [fixed]
fcoe-mtu: off [fixed]
loopback: off [fixed]
Was kann ich außer der Verwendung von Jumbo-Frames, die nicht möglich sind, weil unsere Netzwerkgeräte sie nicht unterstützen, noch tun oder überprüfen, um die bestmögliche TCP-Leistung für mein 10-Gbit-Netzwerk zu erzielen? Die 6,67 Gbit / s sind nicht so schlecht, wenn man bedenkt, dass einer der Server in Produktion ist und meine Hypothese über die CPU-Interrupts, die die Netzwerkkarte generiert. Die Geschwindigkeit von 20 Mbit / s in die andere Richtung auf einer 10-Gbit-Verbindung ist jedoch einfach nicht akzeptabel. Jede Hilfe wäre sehr dankbar.
Server A-Spezifikationen: x64 24 V CPU 32 GB RAM RHEL 6.7
Server B Technische Daten: x64 16v CPU 16GB RAM RHEL 6.7
irqbalance
aktiviert? Verwenden Sie ein optimiertes Profil ?