PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Schlechte Fileserver Performance (SMB/FTP)



babbel
12.06.09, 21:20
Hallo zusammen,

ich hoffe mit kann einer bei meinem Problem mit "langsamen" Datentransferrate helfen.
Langsam deshalb, weil wegen der Hardware wesentlich höhere Werte möglich sein sollten (wenn man sich in der C't test mit Atom-CPU NAS anschaut, die 80+ MB/s lesend liefern). Laut den Benchmarks unten sollten sowohl die Disks als auch das LAN GBit voll auslasten können...

Wenn weitere Info's benötigt werden Bescheid sagen.


Zur Hardware, alle Rechner haben aktuelles BIOS, Treiber und Updates.
Server: OpenSuSE 11 64bit; Intel S3210SHLC, Xeon 3110 (2*3GHz), 4GB RAM, Onboard LAN - Sync mit 1000FD (per PCIe angebunden), 3ware 9690SA, RAID5 (per PCIe x8 angebunden) EDIT: Samba Version 3.2.4-4.3-2042-SUSE-SL11.0
Client: Windows XP SP2 32bit; Asus A8N-E Deluxe, AMD Athlon64 X2 4200+ (2*2,2GHz), 2GB RAM, Onboard LAN - Sync mit 1000FD


EDIT: Da mir dahingehend ein Fehler unterlaufen ist, als das ich die Tests auf die Festplatte des Clients laufen lies, ergänzed die Werte mit einer Ramdisk (laut h2benchw 1300+ MB/s). Weiterhin habe ich den Titel auf SMB reduziert, da es scheinbar an Samba liegt. Deshalb auch am Ende des Posts meine smb.conf.




++ NEU mit RAMDisk ++
Datentransfer übers Netz, ~800 MB Datei (wegen Ramdisk)
smb read: 60-63 MB/s
smb write: 40-54 MB/s
ftp read: 111 MB/s
ftp write: 111 MB/s

TOP
smbd write: ~21%
smbd read: ~5%

top read (SMB): Cpu(s): 1.8%us, 1.0%sy, 0.0%ni, 95.7%id, 1.2%wa, 0.0%hi, 0.3%si, 0.0%st
top write (SMB): Cpu(s): 3.8%us, 4.3%sy, 0.0%ni, 86.0%id, 5.5%wa, 0.0%hi, 0.2%si, 0.2%st
+++++

++ ALTE Werte auf die HDD des Clients
Datentransfer übers Netz, ~3GB Datei
SMB read: 53MB/s
SMB write: 40-53MB/s
FTP read: ~50MB/s
FTP write: 110-113MB/s, wenn buffer voll ~50MB/s
++++

bonnie++ auf dem RAID5
Read Cache OFF +-> write 117,9 MB/s, read 173,2 MB/s
Read Cache Intelligent +-> write 119,5 MB/s, read 112,5 MB/s
Read Cache Basic +-> write 120,2 MB/s, read 181,7 MB/s



Benchmark NetIO


Packet size 1k bytes: 109097 KByte/s Tx, 114979 KByte/s Rx.
Packet size 2k bytes: 111856 KByte/s Tx, 114952 KByte/s Rx.
Packet size 4k bytes: 114271 KByte/s Tx, 113771 KByte/s Rx.
Packet size 8k bytes: 113765 KByte/s Tx, 113599 KByte/s Rx.
Packet size 16k bytes: 115304 KByte/s Tx, 114493 KByte/s Rx.
Packet size 32k bytes: 114972 KByte/s Tx, 113664 KByte/s Rx.


Benchmark mit bonnie++ auf dem RAID5, welches auch für die Datentransfer-tests benutzt wird


# bonnie++ -n 0 -u 0 -r 4096 -s 8192 -f -b -d /storage/raid/
Using uid:0, gid:0.
Writing intelligently...done
Rewriting...done
Reading intelligently...done
start 'em...done...done...done...
Version 1.01d ------Sequential Output------ --Sequential Input- --Random-
-Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP
server 8G 120245 21 54942 5 181790 8 196.3 0
server,8G,,,120245,21,54942,5,,,181790,8,196.3,0,, ,,,,,,,,,,,


vmstat (aktualisiert, 15.06.2008)


nr_free_pages 454246
nr_inactive 345519
nr_active 103613
nr_anon_pages 72078
nr_mapped 22358
nr_file_pages 377016
nr_dirty 92
nr_writeback 0
nr_slab_reclaimable 33263
nr_slab_unreclaimable 8371
nr_page_table_pages 0
nr_unstable 0
nr_bounce 0
nr_vmscan_write 106
pgpgin 7456932
pgpgout 9535336
pswpin 0
pswpout 44
pgalloc_dma 1
pgalloc_dma32 35548119
pgalloc_normal 0
pgalloc_movable 0
pgfree 36002608
pgactivate 178107
pgdeactivate 132171
pgfault 24119508
pgmajfault 1789
pgrefill_dma 0
pgrefill_dma32 307100
pgrefill_normal 0
pgrefill_movable 0
pgsteal_dma 0
pgsteal_dma32 1420625
pgsteal_normal 0
pgsteal_movable 0
pgscan_kswapd_dma 0
pgscan_kswapd_dma32 1439979
pgscan_kswapd_normal 0
pgscan_kswapd_movable 0
pgscan_direct_dma 0
pgscan_direct_dma32 4384
pgscan_direct_normal 0
pgscan_direct_movable 0
pginodesteal 0
slabs_scanned 3584000
kswapd_steal 1419033
kswapd_inodesteal 159307
pageoutrun 11323
allocstall 9
pgrotated 51


interrupts (aktualisiert, 15.06.2008)


CPU0 CPU1
1: 8 0 Phys-irq-level i8042
4: 3 0 Phys-irq-level
6: 2 0 Phys-irq-level floppy
8: 0 0 Phys-irq-level rtc0
9: 0 0 Phys-irq-level acpi
12: 114 0 Phys-irq-level i8042
16: 141697 0 Phys-irq-level 3w-9xxx
17: 0 0 Phys-irq-level ehci_hcd:usb6
18: 0 0 Phys-irq-level uhci_hcd:usb1, uhci_hcd:usb5
19: 77142 0 Phys-irq-level uhci_hcd:usb4
20: 3344828 0 Phys-irq-level peth0
21: 719724 0 Phys-irq-level uhci_hcd:usb2, ahci
23: 8615 0 Phys-irq-level uhci_hcd:usb3, ehci_hcd:usb7
256: 7305325 0 Dynamic-irq-level timer0
257: 434201 0 Dynamic-irq-level resched0
258: 56 0 Dynamic-irq-level callfunc0
259: 0 502423 Dynamic-irq-level resched1
260: 0 269 Dynamic-irq-level callfunc1
261: 0 4751633 Dynamic-irq-level timer1
262: 83 0 Dynamic-irq-level xenbus
263: 0 0 Dynamic-irq-level console
NMI: 0 0 Non-maskable interrupts
RES: 434201 502423 Rescheduling interrupts
CAL: 56 269 function call interrupts



smb.conf:


[global]
workgroup = lokal
netbios name = server
server string = Linux Samba Server %v
security = user
map to guest = Bad User
guest account = nobody
username map = /etc/samba/smbusers
domain logons = Yes
domain master = Yes
os level = 65
default service = netlogon
message command = /bin/mail -s 'message from %f on %m' root < %s; rm %s
wins support = Yes
name resolve order = hosts wins lmhosts bcast
dns proxy = yes
add user script = /usr/sbin/useradd "%u" -m
add machine script = /usr/sbin/useradd -c Machine -d /var/lib/nobody -g machines -s /bin/false %m$
add group script = /usr/sbin/groupadd "%g"
add user to group script = /usr/sbin/groupmod -A "%u" "%g"
delete user from group script = /usr/sbin/groupmod -R "%u" "%g"
delete group script = /usr/sbin/groupdel "%g"
delete user script = /usr/sbin/userdel "%u"
set primary group script = /usr/sbin/usermod -g "%g" "%u"
unix charset = ISO8859-1
dos charset = 850

logon path = \\%L\profiles\%U
logon script = %U.log.bat
logon drive = k:
logon home = \\%L\profiles\%U
include = /etc/samba/dhcp.conf

log level = 0
log file = /var/log/samba/samba.log.%m
max log size = 100
debug timestamp = yes

socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=8192 SO_SNDBUF=8192
kernel oplocks = no
aio read size = 16384
aio write size = 16384
max xmit = 65535
read raw = yes
write raw = yes
getwd cache = yes
read prediction = yes
level2 oplocks = yes

[storage]
path = /storage
vfs objects = recycle
browseable = No
writeable = yes
write list = @trusted
force group = trusted
force user = administrator
user = administrator
short preserve case = No
case sensitive = Yes
oplocks = yes
use sendfile = yes




Danke schonmal im vorraus !

EDITs: Werte mit Ramdisk, smb.conf, interrupts/vmstat aktualisiert, tYpo'S

muell200
12.06.09, 21:27
Wenn weitere Info's benötigt werden bescheid sagen.


interrups
vmstat

babbel
12.06.09, 22:07
interrups
vmstat

nachgereicht

bla!zilla
14.06.09, 20:53
Die Werte sind für GbE durchaus okay. Was willst du mehr, bzw. was erwartest du?

babbel
15.06.09, 02:57
Die Werte sind für GbE durchaus okay. Was willst du mehr, bzw. was erwartest du?
Wesentlich höhere Datentransferraten, wie gesagt - wenn ein NAS mit Intel Atom CPU bereit 80+ MB/s liefert (siehe aktuelle C't, das QNap Gerät), erwarte ich mir von einem Xeon 3110 und 'per PCIe angebundenen Geräten mindestens(!) das gleiche. Siehe das Erste posting mit den wiederholten Tests unter benutzung der Ramdisk & FTP, genauso würde ich die Transfers auch gerne mit samba sehen.

Allerdings ist mir bei der ganzen Testerei ein Fehler unterlaufen. Die Benchmarkwerte sind alle vom Lesen/Schreiben auf Festplatte des Clients.
Ich habe die Tests daher nochmals mit einer Ramdisk wiederholt. Dabei hat sich herausgestellt, dass FTP Transfers gut funktionieren - nur der samba lahmt.

Habe deshalb das erste posting mit den Ramdisk-werten geändert.

bla!zilla
15.06.09, 08:12
Das Samba keine Rakete ist sollte klar sein. Poste mal deine smb.conf.

babbel
20.06.09, 15:38
Das Samba keine Rakete ist sollte klar sein. Poste mal deine smb.conf.
Hatte ich bereits im ersten Posting hinzugefügt, hier nochmal:


[global]
workgroup = lokal
netbios name = server
server string = Linux Samba Server %v
security = user
map to guest = Bad User
guest account = nobody
username map = /etc/samba/smbusers
domain logons = Yes
domain master = Yes
os level = 65
default service = netlogon
message command = /bin/mail -s 'message from %f on %m' root < %s; rm %s
wins support = Yes
name resolve order = hosts wins lmhosts bcast
dns proxy = yes
add user script = /usr/sbin/useradd "%u" -m
add machine script = /usr/sbin/useradd -c Machine -d /var/lib/nobody -g machines -s /bin/false %m$
add group script = /usr/sbin/groupadd "%g"
add user to group script = /usr/sbin/groupmod -A "%u" "%g"
delete user from group script = /usr/sbin/groupmod -R "%u" "%g"
delete group script = /usr/sbin/groupdel "%g"
delete user script = /usr/sbin/userdel "%u"
set primary group script = /usr/sbin/usermod -g "%g" "%u"
unix charset = ISO8859-1
dos charset = 850

logon path = \\%L\profiles\%U
logon script = %U.log.bat
logon drive = k:
logon home = \\%L\profiles\%U
include = /etc/samba/dhcp.conf

log level = 0
log file = /var/log/samba/samba.log.%m
max log size = 100
debug timestamp = yes

socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=8192 SO_SNDBUF=8192
kernel oplocks = no
aio read size = 16384
aio write size = 16384
max xmit = 65535
read raw = yes
write raw = yes
getwd cache = yes
read prediction = yes
level2 oplocks = yes

[storage]
path = /storage
vfs objects = recycle
browseable = No
writeable = yes
write list = @trusted
force group = trusted
force user = administrator
user = administrator
short preserve case = No
case sensitive = Yes
oplocks = yes
use sendfile = yes

tribad
23.06.09, 08:37
In den Socket Options steht was von TCP_NODELAY. Das dürfte Standard sein.
Wenn mehrere kleine happen verschickt werden, wird für jeden dieser happen ein Frame inklusive aller TCP/IP bestandteile verschickt. Das sind irgendwas in die 40 bytes.
Verschickt ein Programm seine Daten byte für byte, bedeutet das eine Overhead von einigen 1000% prozent.

Wie groß der Datendurchsatz ist, hängt also sowohl von dieser Einstellung als auch von der Art wie die Daten verschickt werden ab.

Nur mal so als Hinweis.

aio read size
aio write size

würde ich mal auf 0 setzen und schauen was passiert. Es kann sein, das es bei deiner Riesendatei, die quasi im Streaming-Mode übertragen wird schneller geht und bei vielen kleinen Dateien langsamer.

Oder eben auch umgekehrt? Na egal.

Fakt ist, das du einen Test mit einer großen Datei machst und damit die Zeit, die im Filesystem Handling verbraten wird nicht mit betrachtest.

Dann kommt dazu, das FTP im userspace läuft und alle Buffer-Mechanismen ausnutzt, die das System so zu bieten hat. Das muss bei Samba einfach anders sein, da dort sichergestellt sein soll, das die Daten auch auf dem Medium landen. Damit hast du einen Overhead in den Programmen.

Mit welchen speziellen Tricks die Hersteller von NAS Lösungen die Speed erreichen, weiß ich nicht. Aber ich finde die Speed eigentlich OK. Vielleicht ist es ja die Windows Kiste, die da bremst?