Samba Performanceproblem?

Beppo98

Grand Admiral Special
Mitglied seit
13.02.2006
Beiträge
2.268
Renomée
54
  • RCN Russia
  • Spinhenge ESL
Guten Abend,

ich habe momentan ein kleines Problem mit meiner Netzwerkübertragungsrate.
Folgende Konfiguration:

Fileserver:
Pentium III 800EB
GA-6VXE7+ (Rev 3.0)
SpinPoint VL40P 40GB (Systemplatte)
DC 4300 RAID Controller
2 x Samsung HD250HJ im RAID 1
Intel Pro/1000 GT

Client:
AMD Athlon X2 BE-2400 (2,8)
Gigabyte GA-MA69G-S3H (F4)
1 x Samsung HD250HJ
Giga-LAN onboard

Zum testen der Übertragungsrate habe ich das nette kleine Programm "Netio" verwendet, welches mir folgende Daten wiedergab:

Info: Tx = Senderichtung; Rx = Empfangsrichtung

Verbindung von Windows zu Linux:
Packet size 1k bytes: 39528 KByte/s Tx, 11600 KByte/s Rx.
Packet size 2k bytes: 45564 KByte/s Tx, 11602 KByte/s Rx.
Packet size 4k bytes: 51011 KByte/s Tx, 11603 KByte/s Rx.
Packet size 8k bytes: 53358 KByte/s Tx, 11602 KByte/s Rx.
Packet size 16k bytes: 53340 KByte/s Tx, 11600 KByte/s Rx.
Packet size 32k bytes: 49572 KByte/s Tx, 11597 KByte/s Rx.

Verbindung von Linux zu Windows:
Packet size 1k bytes: 11524 KByte/s Tx, 38493 KByte/s Rx.
Packet size 2k bytes: 11523 KByte/s Tx, 46174 KByte/s Rx.
Packet size 4k bytes: 11524 KByte/s Tx, 50270 KByte/s Rx.
Packet size 8k bytes: 11517 KByte/s Tx, 51526 KByte/s Rx.
Packet size 16k bytes: 11525 KByte/s Tx, 51188 KByte/s Rx.
Packet size 32k bytes: 11528 KByte/s Tx, 49030 KByte/s Rx.


Wie man oben erkennen kann, können vom Windows Client aus knappe 50Mb/s über die Leitung gesendet werden und auch vom Server empfangen.

Aus diesen Werten lässt sich für mich schließen, dass das Problem der geringen Datenübertragung von gerade mal 12MB/s am Server liegt. Am Server ist Debian (2.6.18-5-686) zusammen mit Samba (3.0.24) installiert.

Nach dem Durchforsten des Internets, bin ich nun der Meinung, das es am Samba-Server liegt, jedoch könnte ich mich auch irren. Ein Ausschalten des Virenscanners oder der Firewall am Windows PC brachte auch keine Besserung.

Die aktuelle smb.conf

[global]
workgroup = Arbeitsgruppe
server string = Daten
security = user

#log level = 1
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
#read raw = yes
#write raw = yes
#oplocks = yes
#max xmit = 65535
#dead time = 15
#getwd cache = yes
#lpq cache = 30

# Automatischer Passwortabgleich zwischen smbpasswd und passwd
unix password sync = yes
passwd program = /usr/bin/passwd %u

#Druckereinstellungen
printcap name = cups
disable spools = Yes
show add printer wizard = No
printing = cups


#[homes]
#guest ok = no
#read only = no

[puplic]
comment = Data
path = /export
force user = Administrator
guest ok = Yes

[Daten]
path = /mnt/daten
read only = no

# Folgender User hat Zugriff auf das Verzeichnis:
valid users = Administrator

# Intern soll Samba folgenden Benutzer fuer den Zugriff verwenden:
force user = nobody

# Duerfen Gaeste Zugriff erhalten:
; guest ok = yes
# Soll jeder als Gast behandelt werden:
; guest only = yes

[printers]
comment = All Printers
path = /var/spool/samba
printer admin = Administrator
create mask = 0600
guest ok = Yes
printable = Yes
#use client driver = Yes
use client driver = No
browseable = Yes

Vielen Dank schon mal im Voraus für eure Hilfe.

Gruß Beppo
 
Zuletzt bearbeitet:
Ha, das Problem kenn ich!!!!

Erstmal zu Netio, oder auch iperf : Das sind die reinen TCP/IP Verbindungen ohne grossen Overhead.

smb, bzw. cifs hat einen grossen overhead. Da geht schon einiges flöten. Dazu kommt noch, das auch Deine Festplatte mit allen Subsystemen (IDE, bzw. SATA Chip, Bridge zur Netzwerkkarte) wohl nicht auf die ~50Mb/s kommt.
Allerdings fällt bei Dir halt auf, das die Verteilung sehr asynchron ist, obwohl es eigentlich bei Rx und Tx (fast) gleich sein sollte.

Schau Dir mal mit mii-tool oder ethtool die Konfiguration Deiner Netzwerkkarte unter Linux an.
Es kann sein, das eine Deiner Karte auf Half-Duplex steht. Eventuell hilft auch das abschalten von Autonegotation. Das kannst Du auch mal auf deiner Windows Maschine überprüfen.

Generell kann ich aus eigener Erfahrung jedoch sagen, ein Transferwert bei Samba von 13 - 18 Mb/s in einem 1Gbit Lan als normal gilt. Mehr habe ich nur durch FTP, bzw NFS rausgeholt.

Wie gesagt, bei Samba wirft Dir noch SMB, bzw. CIFS einige Klötze in den Weg und dann noch die Festplatten zugriffe. Netio und iperf zeigen nur den ideal Zustand, wobei IP, TCP und UDP auch schon einen gewissen Overhead mitbringen.

Bei deiner Konfig könntest du noch bei

socket options = IPTOS_LOWDELAY

einfügen

read und write raw sind eigentlich eine gute sache....


Gruss,
Bitspyer
 
Schau Dir mal mit mii-tool oder ethtool die Konfiguration Deiner Netzwerkkarte unter Linux an.

Laut ethtool ist die Netzwerkkarte auf 1GiB und Fullduplex eingestellt. Der Windowsrechner ebenso.

ethtool eth0
Settings for eth0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised auto-negotiation: Yes
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: umbg
Wake-on: g
Current message level: 0x00000007 (7)
Link detected: yes

ethtool -a eth0
Pause parameters for eth0:
Autonegotiate: on
RX: on
TX: off



Bei deiner Konfig könntest du noch bei

socket options = IPTOS_LOWDELAY

einfügen

read und write raw sind eigentlich eine gute sache....

Hatte jetzt socket options = IPTOS_LOWDELAY, und die Read/Write Raw wieder aktiviert, es änderte sich aber gar nichts im Durchsatz.

Eventuell hilft auch das abschalten von Autorotationen. Das kannst Du auch mal auf deiner Windows Maschine überprüfen.

Habe jetzt Autonegotiate am Linux-Rechner ausgeschaltet:

Autonegotiate: off
RX: on
TX: off

Und siehe da ;D

Packet size 1k bytes: 45012 KByte/s Tx, 47101 KByte/s Rx.
Packet size 2k bytes: 47563 KByte/s Tx, 49069 KByte/s Rx.
Packet size 4k bytes: 49099 KByte/s Tx, 53658 KByte/s Rx.
Packet size 8k bytes: 50985 KByte/s Tx, 56175 KByte/s Rx.
Packet size 16k bytes: 51849 KByte/s Tx, 57445 KByte/s Rx.
Packet size 32k bytes: 50585 KByte/s Tx, 52354 KByte/s Rx.

Muss jetzt leider weg, werde es heute Abend mal noch genauer überprüfen ob es jetzt wirklich so funktioniert hat. Sieht auf jeden Fall schon mal gut aus ;)

Gruß
Beppo
.
EDIT :
.

Nachdem ich das gleiche mit dem Ausschalten der Autonegotiate nochmal versucht habe, kam die bittere Enttäuschung. Die Transferraten sind wieder gleich schlecht wie vorher.

Nachdem ich dann die History überprüft habe, ob ich noch was anderes in dieser Session gemacht habe, kam ich zu der Erkenntnis, dass ich komplett das gleiche jetzt wieder durchführte. :-/

Nachdem ich jetzt wieder den halben Nachmittag damit verbracht habe, den Fall von heute Mittag zu reproduzieren, kam ich nun zum Ergebnis, dass sich der Fall nicht reproduzieren lässt. :(
 
hmm... strange... wie siehts denn linux <-> linux, bzw. windows <-> windows aus???
 
hmm... strange... wie siehts denn linux <-> linux, bzw. windows <-> windows aus???

Kann ich leider nicht richtig testen, da mein Notebook sowie mein Zweitrechner nur 100MBit LAN haben, und das wäre genau das Niveau der Verbindung von Linux zu Windows.

Habe es mit meinem Laptop jetzt getestet (100MBit-LAN) und komme in beide Richtungen auf ca. 12Mb/s, also das Maximum vom 100MBit-LAN. Linux zu Linux.

Mir ist aber aufgefallen, das sich die Netzwerkkarteneinstellungen am Server geändert haben, obwohl ich diese nicht explizit geändert habe.

Pause parameters for eth0:
Autonegotiate: on
RX: on
TX: on

Welchen Sinn erfüllen eigentlich die beiden Optionen (RX und TX), sind sie für die Verbindungsgeschwindigkeit ausschlaggebend?
 
Rx on
TX on

ist irgendwie keine aussage... :)

Ich kann mir vorstellen das damit die Checksums gemeint sind, die dann der Treiber, bzw. die Hardware macht, ansonsten halt der Kernel, bzw. die CPU. Schalt die mal ab.

Eigentlich soll diese Option das OS entlasten, es kann aber zu Problemen kommen, wenn der andere Adapter das nicht unterstützt.
 
Ich habe bei meinem Netgear Switch ab und zu das der Switch auf 100mbit schaltet wenn ich in einen Rechner von Windows nach Linux boote, erklären kann ich mir das nicht.

Aber prüfe mal die LEDs am Switch ob die wirklich auf Gigabit sind. Und am Kabel kanns auch liegen.

Mehr als 20mb/s schaffe ich auch nicht, wobei hier PCI und ein P3 der begrenzende Faktor im Linux Rechner sind.

Soviel ich weiß geht Gigabit ohne Autonegotiation gar nicht, jedenfalls nicht unter Windows.

rx on|off
Specify if RX checksumming is enabled.

tx on|off
Specify if TX checksumming is enabled.
 
Zuletzt bearbeitet:
Hab jetzt wahrscheinlich alle möglichen Varianten von Rx und Tx sowie Autonegotiate am Windows Rechner sowie Linux Rechner durchgeführt. Die Transferraten haben sich dabei nicht verändert.

Evtl. helfen die Windows Netzwerkeinstellungen noch weiter:

Auto Disable Gigabit (Battery) --> Disabled
Flow Control --> Enabled
Interrupt Moderation --> Enabled
IPv4 Checksum Offload --> Rx & Tx Enabled
Jumbo Frame --> Disabled
Large Send Offload (IPv4) --> Enabled
Network Adress --> Nicht vorhanden
Priority & VLAN --> Priority & VLAN Enabled
Receive Buffers --> 256
Speed & Duplex --> 1.0 Gbps Full Duplex
TCP Checksum Offload (IPv4) --> Rx & Tx Enabled
Transmit Buffesr --> 64
UDP Checksum Offload (IPv4)


Ich habe bei meinem Netgear Switch ab und zu das der Switch auf 100mbit schaltet wenn ich in einen Rechner von Windows nach Linux boote, erklären kann ich mir das nicht.Aber prüfe mal die LEDs am Switch ob die wirklich auf Gigabit sind.

Es hängt momentan kein Switch dazwischen. Der Windows und Linux Rechner sind direkt miteinander verbunden.

Und am Kabel kanns auch liegen.

Was meinst damit genau? Laut den Werten kann er ja in eine Richtung 50Mb/s übertragen. Das dürfte laut Festplattentest auf dem Linux-Rechner das höchste der Gefühle sein ;)
 
Wenn das Kabel nen Wackler hat.

Kannst auch mal mit ethtool -S schauen ob error da sind.

Bei mir hat folgendes geholfen damit er nicht immer auf 100 schaltet:
ethtool -s ethX speed 1000 duplex full autoneg off
 
Wenn das Kabel nen Wackler hat.

Kannst auch mal mit ethtool -S schauen ob error da sind.

Bei mir hat folgendes geholfen damit er nicht immer auf 100 schaltet:
ethtool -s ethX speed 1000 duplex full autoneg off

Habe jetzt das ganze Versucht, hat aber leider auch nicht funktioniert

ethtool -S eth0
NIC statistics:
rx_packets: 4046852
tx_packets: 1433769
rx_bytes: 1307508098
tx_bytes: 1373647670
rx_errors: 0
tx_errors: 0
tx_dropped: 0
multicast: 0
collisions: 0
rx_length_errors: 0
rx_over_errors: 0
rx_crc_errors: 0
rx_frame_errors: 0
rx_no_buffer_count: 0
rx_missed_errors: 0
tx_aborted_errors: 0
tx_carrier_errors: 0
tx_fifo_errors: 0
tx_heartbeat_errors: 0
tx_window_errors: 0
tx_abort_late_coll: 0
tx_deferred_ok: 0
tx_single_coll_ok: 0
tx_multi_coll_ok: 0
tx_timeout_count: 0
rx_long_length_errors: 0
rx_short_length_errors: 0
rx_align_errors: 0
tx_tcp_seg_good: 38089
tx_tcp_seg_failed: 0
rx_flow_control_xon: 0
rx_flow_control_xoff: 0
tx_flow_control_xon: 59
tx_flow_control_xoff: 59
rx_long_byte_count: 5602475394
rx_csum_offload_good: 4046833
rx_csum_offload_errors: 0
rx_header_split: 0
alloc_rx_buff_failed: 0

Mir ist aber noch was aufgefallen, beim Ausführen des obigen Befehls passiert folgendes, es erscheint folgende Meldung:

e1000: eth0: e1000_watchdog: NIC Link is Up 1000 Mbps Full Duplex

Anschließend bleibt der Cursor blinkend stehen, also ob er die Aktion ausführen würde. Dieses Blinken geht aber nicht weg, erst nach Drücken der Entertaste, ist das normal?
 
Zuletzt bearbeitet:
Ich weiss, die Frage ist rein rethorisch. Du nutzt schon ein CrossOver Kabel, oder?


Schalt mal Large Send Offload, Interrupt modulation und Flow Control aus.

Ansonsten wäre auch noch das Switch eine Fehlerquelle, aber wenn Du die Rechner direkt verknüppelt hast.....

Mal Daten per FTP von Rechner zu Rechner geschoben?
 
Ich weiss, die Frage ist rein rethorisch. Du nutzt schon ein CrossOver Kabel, oder?

Nein, es handelt sich nicht um ein CrossOver-Kabel. Solche sind aber auch nicht mehr zwingend erforderlich.

Schalt mal Large Send Offload, Interrupt modulation und Flow Control aus.

Ergab auch keine messbaren Verbesserungen.


Mal Daten per FTP von Rechner zu Rechner geschoben?

Werde ich jetzt gleich testen.
 
Also das Schieben der Daten von Windows zu Linux und umgekehrt lieferte über FTP noch schlechtere Transferraten als über Samba.

Nachdem ich jetzt aber das SP1 für Vista installiert habe, sieht es momentan wiedermal! gut aus.

Packet size 1k bytes: 44703 KByte/s Tx, 44526 KByte/s Rx.
Packet size 2k bytes: 46822 KByte/s Tx, 48605 KByte/s Rx.
Packet size 4k bytes: 48504 KByte/s Tx, 52697 KByte/s Rx.
Packet size 8k bytes: 50672 KByte/s Tx, 53316 KByte/s Rx.
Packet size 16k bytes: 51888 KByte/s Tx, 54514 KByte/s Rx.
Packet size 32k bytes: 50586 KByte/s Tx, 52979 KByte/s Rx.

Datei von Linux zu Windows kopieren:
Linux_zu_Windows.jpg


Datei von Windows zu Linux kopieren:
Windows_zu_Linux.jpg



Durch Tests auf dem Linuxrechner habe ich herausgefunden, dass auf dem alten PIII anscheinend irgendwas die Festplatten ziemlich ausbremst. Ich tippe hier mal auf den Controller. Die Festplatten dürften im Idealfall eine Durchsatzrate von 70Mb/s haben. Auf dem Linuxrechner sank diese jedoch auf ca ~40Mb/s ab.

Von diesen 40Mb/s verliere ich hier irgendwie nochmals teilweise über 50% Transferrate, was mir doch ein bisschen hoch erscheint *noahnung*

Momentan bin ich jedoch erstmal glücklich, dass es so funktioniert. Ich hoffe das ändert sich nicht wieder so schnell wie beim letzten mal ;)

EDIT:


Man darf sich wohl nicht zu früh freuen, nach einem Neustart sind die Werte wieder so schlecht wie zuvor. *noahnung* Obwohl ich die Vermutung habe, dass sich bereits beim kopieren von Windows zu Linux die Transferraten wieder an 100MBit angepasst haben.

Auf beiden Rechnern wird aber 1000MBit und Fullduplex angezeigt. Eine Änderung ist nicht zu sehen. Nachdem was ich bis jetzt testen konnte, sieht es aber ziemlich danach aus, dass hier mit 100MBit übertragen wird und nicht mit 1000MBit.

Bin momentan mit meinem Latein echt am Ende :-/

Gruß Beppo
 
Zuletzt bearbeitet:
1. was sagt denn hdparm auf Linux?

2. Vista??? Sag das doch gleich...http://support.microsoft.com/kb/934430/de Passt zwar nicht 100%, aber ist mal ein einstieg. Google mal nach autotuning level.

Spiel mal mit dem autotuning level rum... Da hab ich mal einiges hinbekommen bei einem VIsta Laptop... War für mich die Entscheidung, das erstmal wieder ne XP Pro Lizenz gekauft wird.
 
1. was sagt denn hdparm auf Linux?

Ergab die Ergebnisse die ich oben bereits erwähnt hatte:

fileserver:# hdparm -t /dev/sda

/dev/sda:
Timing buffered disk reads: 130 MB in 3.05 seconds = 42.69 MB/sec

fileserver:# hdparm -t /dev/sdb

/dev/sdb:
Timing buffered disk reads: 128 MB in 3.01 seconds = 42.56 MB/sec


2. Vista??? Sag das doch gleich...http://support.microsoft.com/kb/934430/de Passt zwar nicht 100%, aber ist mal ein einstieg. Google mal nach autotuning level.

Hatte ich vielleicht vergessen zu erwähnen, wäre aber unter "Mein System" gestanden ;)
Das Deaktivieren des AutoTuning Level ergab gleich mal folgende Werte:

Packet size 1k bytes: 23377 KByte/s Tx, 11231 KByte/s Rx.
Packet size 2k bytes: 23368 KByte/s Tx, 11235 KByte/s Rx.
Packet size 4k bytes: 23383 KByte/s Tx, 11235 KByte/s Rx.
Packet size 8k bytes: 23379 KByte/s Tx, 11232 KByte/s Rx.
Packet size 16k bytes: 23251 KByte/s Tx, 11233 KByte/s Rx.
Packet size 32k bytes: 23386 KByte/s Tx, 11235 KByte/s Rx.

Werde jetzt mal danach googeln und ein paar Einstellungen testen.
 
Tausch am besten wirklich mal das Kabel, schaden kann es nicht.

Am Besten kaufst du dir gleich nen Switch, dann hast du auch das Problem, dass dein
Debian Rechner kein Internet hat, nicht mehr. :P
 
Also über 20MB/s bei CIFS kommst du mit dem P3 nie, das kann ich dir gleich sagen. Wobei ich das auch nur mit einem Intel Board geschafft habe, mit nem Via warens sogar nur 15MB/s.

Wobei ich hier unter Vista auch miserable Performance habe, probiere mal XP.
 
Also über 20MB/s bei CIFS kommst du mit dem P3 nie, das kann ich dir gleich sagen. Wobei ich das auch nur mit einem Intel Board geschafft habe, mit nem Via warens sogar nur 15MB/s.

Wobei ich hier unter Vista auch miserable Performance habe, probiere mal XP.

Also diese Aussage kann ich mit den heutigen Tests wiederlegen. Nachdem ich kurzzeitig das Kabel von einem Cat6 auf ein Cat5e Kabel gewechselt habe, hatte ich ca. eine Stunde lange wieder super Performance.

Linux zu Windows:
Linux%20zu%20Windows.jpg


Windows zu Linux:
Windows%20zu%20Linux.jpg



Leider sank nach einem Neustart des Linuxrechners die Performance wieder in den Keller, obwohl ich absolut nichts an den Netzwerkeinstellungen verändert habe. Die Performance lag anschließend wieder auf 100MBit Niveau.
 
Nachdem ich jetzt zum testen einen Gigabit-Switch probiert habe, besteht das Problem leider immer noch :(
 
Was ist das für eine CPU?
Mit SP1 läuft Vista auch etwas schneller beim kopieren, da gabs nen Bug.

Im Server läuft ein Pentium III 800EB.
Seitdem SP1 auf Vista installiert ist, klappt das ganze immer noch nicht wirklich. (siehe Post 13)
 
Moin !

Mal nur so als Einwand :

Ich habe auch einen Debian Fileserver mit gleichem Kernel.
Hatte mal auf einem M2A VM Board von Asus ein Samba Problem.
Ich konnte von Linux -> Windows lockerst 60 MB /sek mit Samba übertragen, aber in die Gegenrichtung nur wenige KByte (10-150 KByte!!!).
Dies lag aber definitv an der Netzwerkkarte.
Ausgetauscht und siehe da alles wieder perfekt !
hast du noch ne andere Gigabit NIC rumliegen zum Testen ?
 
Danke für den Hinweis Voodoo81 ;)

hast du noch ne andere Gigabit NIC rumliegen zum Testen ?

Leider nicht. Mal gucken ob ich irgendwo noch eine auftreiben kann, damit ich das ganze nochmals genauer testen kann.
 
hast du mal das e1000e modul anstelle von e1000 (das soll ja bald abgelöst werden ) getestet ?
bzw. mal mit nem neuen kernel ?
 
Zurück
Oben Unten