Netzwerkperformance mit alten Macs und Linux: Unterschied zwischen den Versionen
PoC (Diskussion | Beiträge) (Schreibweise korrigiert, iptables) |
PoC (Diskussion | Beiträge) (Korrekte Syntax für iptables ausfindig gemacht) |
||
Zeile 1: | Zeile 1: | ||
[[Datei:Helios_LANTest.png|thumb|right|AFP-Performance nach dem Abschalten von Window Scaling - immerhin knapp 1, | [[Datei:Helios_LANTest.png|thumb|right|AFP-Performance nach dem Abschalten von Window Scaling - immerhin knapp 1,6 MBytes/s beim Schreiben statt nur knapp 11 KBytes/s vorher.]] | ||
Bei '''älteren Macs''' ist feststellbar, dass ab einer bestimmten '''Linux'''-Kernelversion die Schreibgeschwindigkeit von TCP-Verbindungen (z. B. AFP oder FTP) im unteren zweistelligen Kilobyte/s-Bereich liegt. | Bei '''älteren Macs''' ist feststellbar, dass ab einer bestimmten — älteren — '''Linux'''-Kernelversion die Schreibgeschwindigkeit von TCP-Verbindungen (z. B. AFP oder FTP) im unteren zweistelligen Kilobyte/s-Bereich liegt. | ||
Test haben gezeigt, dass MacTCP als auch OpenTransport bis einschliesslich Version 1.2 mit [https://de.wikipedia.org/wiki/TCP_Receive_Window#TCP_Window_Scale_Option TCP Window Scaling] nicht zurechtkommen. Testumgebung war ein PowerMac 7500 mit 400 MHz MPC750 (G3)-CPU, einer auf einem DEC-Chipsatz basierenden 100MBit/s Netzwerkkarte von Kingston unter MacOS 7.6.1. | Test haben gezeigt, dass MacTCP als auch OpenTransport bis einschliesslich Version 1.2 mit [https://de.wikipedia.org/wiki/TCP_Receive_Window#TCP_Window_Scale_Option TCP Window Scaling] nicht zurechtkommen. Testumgebung war ein PowerMac 7500 mit 400 MHz MPC750 (G3)-CPU, einer auf einem DEC-Chipsatz basierenden 100MBit/s Netzwerkkarte von Kingston unter MacOS 7.6.1. | ||
== Lösungswege == | |||
Die aufgezeigten Lösungswege berücksichtigen (derzeit) nicht, dass zwischen Lesen und Schreiben noch immer fast eine Größenordnung an Übertragungsgeschwindigkeitsunterschied besteht. | |||
=== Iptables === | |||
iptables -t mangle -A OUTPUT -d 192.168.0.128 -p tcp --tcp-option 3 -j TCPOPTSTRIP --strip-options wscale | |||
=== Global (sysctl) === | |||
Global kann Window Scaling deaktiviert werden mit: | |||
echo 0 > /proc/sys/net/ipv4/tcp_window_scaling | echo 0 > /proc/sys/net/ipv4/tcp_window_scaling | ||
bzw. | bzw. | ||
Zeile 13: | Zeile 20: | ||
Transfers zu anderen Maschinen dürften je nach Übertragungsmedium nun auch langsamer werden. | Transfers zu anderen Maschinen dürften je nach Übertragungsmedium nun auch langsamer werden. | ||
=== Middlebox === | |||
== | |||
Als Alternative zum harten Abschalten des Window Scaling besteht die Möglichkeit, durch Zwischenschalten z. B. einer [[Cisco PIX Konfigurationsbeispiele|Cisco PIX]] oder ASA den Paketfluss zu modifizieren (Konfigurationsausschnitt): | Als Alternative zum harten Abschalten des Window Scaling besteht die Möglichkeit, durch Zwischenschalten z. B. einer [[Cisco PIX Konfigurationsbeispiele|Cisco PIX]] oder ASA den Paketfluss zu modifizieren (Konfigurationsausschnitt): | ||
class-map match-any | class-map match-any | ||
Zeile 36: | Zeile 36: | ||
* Lässt kein AppleTalk durch (auch nicht im Transparentmodus). | * Lässt kein AppleTalk durch (auch nicht im Transparentmodus). | ||
=== TCP-Proxy === | |||
Eine andere Möglichkeit wäre durch eine virtuelle Maschine mit wie oben gezeigt, global abgeschaltetem Window Scaling gegeben. Über den ''xinetd'' lassen sich Proxydienste auf IP Layer-4-Ebene abbilden. Ausschnitt aus einer Beispielkonfiguration ''/etc/xinetd.d/afp-proxy'': | Eine andere Möglichkeit wäre durch eine virtuelle Maschine mit wie oben gezeigt, global abgeschaltetem Window Scaling gegeben. Über den ''xinetd'' lassen sich Proxydienste auf IP Layer-4-Ebene abbilden. Ausschnitt aus einer Beispielkonfiguration ''/etc/xinetd.d/afp-proxy'': | ||
service afp-proxy | service afp-proxy |
Aktuelle Version vom 24. Juni 2025, 11:05 Uhr
Bei älteren Macs ist feststellbar, dass ab einer bestimmten — älteren — Linux-Kernelversion die Schreibgeschwindigkeit von TCP-Verbindungen (z. B. AFP oder FTP) im unteren zweistelligen Kilobyte/s-Bereich liegt.
Test haben gezeigt, dass MacTCP als auch OpenTransport bis einschliesslich Version 1.2 mit TCP Window Scaling nicht zurechtkommen. Testumgebung war ein PowerMac 7500 mit 400 MHz MPC750 (G3)-CPU, einer auf einem DEC-Chipsatz basierenden 100MBit/s Netzwerkkarte von Kingston unter MacOS 7.6.1.
Lösungswege
Die aufgezeigten Lösungswege berücksichtigen (derzeit) nicht, dass zwischen Lesen und Schreiben noch immer fast eine Größenordnung an Übertragungsgeschwindigkeitsunterschied besteht.
Iptables
iptables -t mangle -A OUTPUT -d 192.168.0.128 -p tcp --tcp-option 3 -j TCPOPTSTRIP --strip-options wscale
Global (sysctl)
Global kann Window Scaling deaktiviert werden mit:
echo 0 > /proc/sys/net/ipv4/tcp_window_scaling
bzw.
sysctl -w net.ipv4.tcp_window_scaling = 0
Neustartfest wird der Parameter durch einen entsprechenden Eintrag in /etc/sysctl.conf:
net.ipv4.tcp_window_scaling = 0
Transfers zu anderen Maschinen dürften je nach Übertragungsmedium nun auch langsamer werden.
Middlebox
Als Alternative zum harten Abschalten des Window Scaling besteht die Möglichkeit, durch Zwischenschalten z. B. einer Cisco PIX oder ASA den Paketfluss zu modifizieren (Konfigurationsausschnitt):
class-map match-any match any ! tcp-map preset_tcp_map tcp-options window-scale clear ! policy-map global_policy class match-any set connection advanced-options preset_tcp_map
Nachteile dieser Lösung:
- zusätzlicher Stromverbrauch,
- Lässt kein AppleTalk durch (auch nicht im Transparentmodus).
TCP-Proxy
Eine andere Möglichkeit wäre durch eine virtuelle Maschine mit wie oben gezeigt, global abgeschaltetem Window Scaling gegeben. Über den xinetd lassen sich Proxydienste auf IP Layer-4-Ebene abbilden. Ausschnitt aus einer Beispielkonfiguration /etc/xinetd.d/afp-proxy:
service afp-proxy { id = afp-proxy type = UNLISTED disable = no wait = no protocol = tcp user = root group = nogroup log_type = syslog daemon info port = 548 redirect = 192.168.0.1 548 }
Sprich, eine TCP-Verbindung wird nicht zum eigentlichen AFP-Server auf der 192.168.0.1 aufgebaut, sondern auf zur VM, auf der der xinetd läuft. Diese erzeugt dann eine neue TCP-Verbindung zum eigentlichen AFP-Server.
Nachteile dieser Lösung:
- Lästig, weil der AFP-Server via AppleTalk unter anderem Namen angesprochen werden muss als per TCP.