Netzwerkperformance mit alten Macs und Linux

Aus Knowledgebase
Version vom 29. Juni 2016, 21:13 Uhr von PoC (Diskussion | Beiträge) (Fehlerkorrektur)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen
AFP-Performance nach dem Abschalten von Windowscaling - immerhin knapp 1,6MBytes/s beim Schreiben statt nur knapp 11KBytes/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.

Test haben gezeigt, dass MacTCP als auch OpenTransport bis einschliesslich Version 1.2 mit TCP Windowscaling 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.

Leider gibt es keine (bekannte) Möglichkeit, Windowscaling unter Linux einzelfallbezogen zu deaktivieren. Global geht dies 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.

Alternativen zum globalen Abschalten

Als Alternative zum harten Abschalten des Windowscaling 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).

Eine andere Möglichkeit wäre durch eine virtuelle Maschine mit wie oben gezeigt, global abgeschaltetem Windowscaling 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.

Weblinks