Ok, die Geschichte hat ein bisschen mehr zu bieten, als der Titel vermuten lässt.
Hintergrund und Umgebung : Ich kopiere mehrere TB von einem älteren Ubuntu-Server über SMB auf einen neueren Windows 2012-Server. (Technisch gesehen handelt es sich um Standardhardware, aber hier gibt es Server.) Jeder befindet sich in einem Gigabit-LAN, und die ältere Ubuntu-Box verfügt über eine verbundene Schnittstelle. Ich glaube, der Ubuntu-Server hat zwei Rosewill PCI-e 1x-Ethernet-Karten und der Windows-Server hat eine einigermaßen schöne PCI Intel-Ethernet-Karte.
Auf dem Zielcomputer (dem Windows-Server) wird ein Speicherpool mit einer Parität von 4 x 2 TB-Laufwerken ausgeführt. Es wird das neue ReFS von Microsoft ausgeführt. Auf dem Quellcomputer (dem Ubuntu-Server) wird ein Software-RAID-Spiegel ausgeführt. Es läuft gut ol 'EXT4.
Die beiden Server laufen über einen einzigen Gigabit-Switch. Ich habe versucht, die Bindung auf dem Quellcomputer (Ubuntu) ohne Verbesserung zu lösen.
Problem : Ich habe keine Probleme beim Übertragen mit angemessener Geschwindigkeit von anderen Computern auf den Windows-Server. Andere Computer können ohne große Schwierigkeiten 50-80 MB / s aufnehmen, aber die Übertragung von diesem Ubuntu-Server erreicht nicht mehr als 20 MB / s. 4 + TB bei 20 MB / s dauert lange (etwa 2,3 Tage), und ich frage mich, was ich tun kann, um herauszufinden, wo der Engpass liegt.
Symptome : Die CPU auf beiden Computern ist ziemlich gering und sicherlich nicht unerschwinglich ausgelastet. Die Festplatten auf beiden Computern sind aktiv, aber nicht überfüllt, und die CPU-IOwait beträgt zumindest auf dem Ubuntu-Server fast 0%.
Ich habe 35 Sekunden lang eine Wireshark-Ablaufverfolgung durchgeführt (vermutlich lang genug, um sicherzustellen, dass alle ACKs für neue Pakete bestimmt sind) und festgestellt, dass es einige Dinge gab, die ich nicht erwartet hatte. (1) Es gab keine Prüfsummen für die ACKs (und einige SMB-Pakete) von Windows bis Ubuntu. Wireshark behauptet jedoch, dass dies möglicherweise auf "IP-Prüfsummen-Offload" zurückzuführen ist. Ok, ich habe eine ziemlich schöne Karte drin. Ich nehme an, es ist möglich, dass die Netzwerkkarte Prüfsummenberechnungen durchführt. Fein. Weiter ... (2) "TCP ACKed unsichtbares Segment." Mit diesem habe ich ein Problem. Die ACK-Nummer liegt in einem akzeptablen Bereich von dem, was ich sagen kann, und es gibt oft große Blöcke dieser Nachrichten. Vielleicht ist Wireshark einfach zu langsam?
Zusammenfassung : Die Übertragungsgeschwindigkeit ist schlecht (20 MB / s über Gigabit-Ethernet) und ich weiß nicht warum. Wireshark behauptet, Windows bestätigt Dinge, die Ubuntu nie gesendet hat.
Vermutungen : Meine anfängliche Vermutung ist, dass die billigeren Rosewill-Karten überfüllt sind. Meine zweite Vermutung ist, dass die Software-RAID-ähnlichen Dinge an dem einen oder anderen Ende mit Aufgaben überschwemmt werden.
sshd
verschlingt 60% eines Prozessors auf der Knoppix-Seite. In jedem Fall steht meine Überweisung kurz vor dem Abschluss. @ Dom: Nun, da Sie es erwähnen, erinnere ich mich nicht daran, dass all diese Daten überhaupt viel schneller als 30 MBit / s dort gespeichert wurden.Antworten:
Ihre Leistungslücke entspricht einer allgemeinen Erfahrung, wenn Samba (nicht sicher, ob dies immer noch die Standardeinstellung ist; es war lange Zeit) mit der Standardgröße des Lese- und Schreibsocketpuffers von 1024 Byte konfiguriert ist.
Ich habe dies häufig bei Linux- und Mac-Computern gesehen. Hoffentlich ist das nicht immer noch so.
In der Konfigurationsdatei von samba gibt es ein Socket-Optionsargument, mit dem Sie die Größe des Lese- und Schreib-Socket-Puffers festlegen können. Schlagen Sie vor, beide auf 8192 Byte (8 KiB) einzustellen. 4 oder 8 KB sind oft ähnlich, aber ich habe das nicht auf einem Gigabit-Link getestet.
Erwarten Sie auch nicht, dass eine einzelne TCP-Verbindung von einer verbundenen Verbindung profitiert. Der Datenverkehr wird fast immer über eine der Verbindungen geleitet. Andernfalls müssen Sie viele Pakete außer Betrieb setzen. Erwarten Sie daher nur dann einen Vorteil beim Lastenausgleich, wenn Sie mehrere Clients bedienen. Selbst dann sollten Sie die verschiedenen Bonding-Modi nachschlagen und wissen, dass es für mindestens "Mode 4" -Bindung (IEEE 802.3ad) grundsätzlich zwei Sende-Hash-Modi gibt, die bestimmen, auf welcher Slave-Schnittstelle gesendet werden soll. Es gibt Layer-2-Hashing (Standard) und Layer-3-Hashing. Wenn Sie den Großteil Ihrer Daten über das Gateway senden, wird der Layer-2-Hash nicht gut verteilt, da die MAC-Adresse des Gateways identisch ist. Verwenden Sie stattdessen Layer-3.
quelle
Ich hatte einmal zwei Ethernet-Karten in einem Ubuntu-Computer und aus irgendeinem Grund funktionierte es nicht richtig - beide wetteiferten um die gleichen Pakete, so dass ich manchmal eine Antwort bekam, manchmal nicht, je nachdem, ob die andere Netzwerkkarte gepackt wurde das gepackt. Es war seltsam. Ich muss es irgendwie falsch konfiguriert haben, aber ich hätte gedacht, es hätte einfach funktioniert. Die Karten hatten natürlich eindeutige IP-Adressen.
Auf jeden Fall wäre es für Sie einfach, es mit nur EINER Ethernet-Karte in dem mit dem Netzwerk verbundenen Gerät zu versuchen, um dies auszuschließen.
quelle