• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

nfsd performance

spacewan

Newbie
Hallo zusammen,
der export der homedirs (alle user hd' s liegen im Netz) ist doch recht träge geworden in der letzten zeit.
Da ist ja auch einges drauf los, KDE schreibt ja zu jedem Scheiß was in HD.
Nun wollte ich den NFS Server mal ein bisschen "tunen" damit das wieder ein bisschen besser läuft.
ich habe mal eine Frage zu den zu startenden nfsd Instanzen.

cat /proc/net/rpc/nfsd gibt folgendes aus:
rc 35023 169668848 429752535
fh 39331191 0 0 0 0
io 3488446731 3387341243
th 24 587727 111538.380 65602.476 22950.656 15422.408 15504.056 10751.096 17522.176 7819.976 5343.284 12096.848
ra 48 93822193 803997 362352 279263 169566 153060 113082 86307 75293 51132 4556534
net 599456698 53899 599402524 46585
rpc 599456275 0 0 0 0
proc2 18 4034 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
proc3 22 47811 191501564 17874178 42305661 49641186 59376 100473020 122098711 18798976 853417 29762 1635 5616975 756038 2857044 817117 372265 3238049 9717672 52556 8225 27897903
proc4 2 0 0
proc4ops 40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Kenn sich jemand mit der "th" Zeile aus, habe versucht mich schlau zu lesen, kapiere aber nicht wie die das genau meinen
hab wohl ein Brett vor dem Kopf, siehe z.B. hier: http://kamilkisiel.blogspot.com/2007/11/understanding-linux-nfsd-statistics.html

Aus dem Bauch herraus würde ich sagen, ok meine Werte sind schlecht, ich brauche mehr threads, aber zu viele können ja auch ausbremsen.
Hat jemand ein paar Tips zum tunen?
Der Server auf dem der nfsd läuft ist wie folgt ausgestattet:
opensuse 10.2 , 1x AMD Opteron(tm) 2210 Dual-Core, 4GB ram

Danke und Grüße
Space
 

rolle

Guru
Ich habe hier unseren NFS-Server sehr viel schneller bekommen mit der Option 'async'. Das ist zwar nicht ganz so sicher aber gerade bei vielen kleinen Dateien ein riesiger Geschwindigkeitszuwachs.
 
OP
S

spacewan

Newbie
Hi Roland,
ja da hatte ich auch schon drüber nachgedacht, dies sollte aber nur der "letzte Ausweg" sein.
Ich habe mich nun die letzten 1 1/2 Tage mit googeln und lesen beschäftigt, mit dem Ergebniss das in dem Fall 500 Wege nach Rom führen. Das kann alles mögliche sein, auch nicht außer acht zu lassen sind auch die Cache Einstellungen.

Erstmal eine Auflistung was ich schon alles gemacht habe:
Directory indexing für die Volume aktiviert (tune2fs -O dir_index /dev/XXX)
http://en.opensuse.org/Speeding_up_Ext3

Volume wird nun mit noatime,nodiratime gemounted

Mit den Cache Einstellung "experimentiert" (pdflush):
http://www.westnet.com/~gsmith/content/linux-pdflush.htm

sysctl -x vm.dirty_background_ratio=1
sysctl -x vm.dirty_ratio=20
sysctl -x vm.dirty_expire_centisecs=2000

Zusammenfassend kann ich aber sagen das sich bist jetzt nicht wirklich eine Besserung eingestellt hat, ich habe immer noch diese "sekundenhänger/einfrierer".

Also irgendwie ist das was "komisch", ich werde wohl weiter tüfteln müssen und bin für weitere tips dankbar.
Grüße Marc

So, ergänzend noch ein paar Informationen die ich durch stöbern und lesen bekommen habe,
basieren auf diesen 2 Artikeln:
http://www.tecchannel.de/server/linux/402541/server_tuning_durch_manuelles_scheduling/
http://www.linuxjournal.com/article/6799

Durch das setzten von "echo 02 > /proc/irq/*nic irq*/smp_affinity" habe ich doch das Gefühl das es deutlich flotter läuft.
Das binden von Prozessen and eine CPU habe ich noch nicht ausprobiert.

Grüße
 

spoensche

Moderator
Teammitglied
spacewan schrieb:
KDE schreibt ja zu jedem Scheiß was in HD.

Das stimmt so nicht. In den Home- Verzeichnissen der User werden die persönlichen Konfigurationen der jeweiligen Anwendungen und die Sitzungsdaten (xsession) bei jedem Login gespeichert.

spacewan schrieb:
Nun wollte ich den NFS Server mal ein bisschen "tunen" damit das wieder ein bisschen besser läuft.
ich habe mal eine Frage zu den zu startenden nfsd Instanzen.

Mal eben ein bisschen "tunen" musst du dir leider aus dem Kopf schlagen, da zu viele Faktoren (sind die Homeverzeichnisse auf einer eigenen Platte o. nur auf einer eigenen Partition? Technische Daten der Platte. Wie viele User? etc.) die Geschwindigkeit beeinflussen.

Neben dem Tipp von rolle, ist es interessant, wie schon erwähnt, wie viel User es gibt, wie groß die Platte ist und was für ein Plattentyp (SATA, IDE) es ist.

Auch die Netzanbindung (Ethernet o. Gigabitethernet), deren und die Auslastung des Servers gibt Informationen darüber, wo evtl. Flaschenhälse existieren und welche Maßnahmen getroffen werden können, um die Performance zu steigern.

spacewan schrieb:
sysctl -x vm.dirty_background_ratio=1
sysctl -x vm.dirty_ratio=20
sysctl -x vm.dirty_expire_centisecs=2000

Diese Parameter dienen dazu, wann und in welchem Zeitraum der Kernel z.B. Dateien etc. aus dem Speicher auf die Platte schreiben soll. Wenn man diese Parameter ändert, sollte man genau wissen, was man macht.

Hast du eine Swappartition? Wenn ja, ab wann wird ein Teil des RAM' s in die Swappartition ausgelagert? Wird der Server mit NFS für einen bestimmten Einsatzbereich, z.B. LTS (Linux Terminal Server) verwendet?

Was bringt der Befehl
Code:
top
für Informationen bezüglich laufender Prozesse und der verwendeten Resourcen zum Vorschein?

Was sagt die Ausgabe von
Code:
vmstat
?

Bestehen die Performanceprobleme ständig oder nur in einem bestimmten Zeitraum?

PS:

Bitte verwende die Code- Tags beim Posten von angewandten Befehlen und/oder deren Ausgaben.
 
OP
S

spacewan

Newbie
Hi spoensche,
danke erstmal für deinen ausführlichen Post.

-KDE schreibt ja zu jedem Scheiß was in HD-
meine ich ja das Homeverzeichnis und nicht die Festplatte,
sorry war wohl etwas unglücklich ausgedrückt. KDE schreib jeden Firlefanz den der User mit eine Programm oder sonst was in seiner X-Session macht ins HomeDir.

So nun erstmal zu deinen Hardware/ Useranfragen:
4x 300GB SATA-I Platten im Raid5 Container an 3ware 9550SX-8LP Kontroller
gemounted als /user, FS = EXT3
/user wird mit diesen Optionen für NFS3 exportiert: sync,no_subtree_check,no_wdelay,rw
Insgesamt sind es so ca. 250 User - wobei täglich und dauerthaft ca. 30-50 angemeldet sind und arbeiten.
Der Server macht nur NIS und dient als Fileserver für die HomeDirs.

Nun zu den Ausgaben von:

Code:
top
Tasks: 107 total,   1 running, 106 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.8%sy,  0.0%ni, 84.0%id, 14.7%wa,  0.2%hi,  0.3%si,  0.0%st
Mem:   4111684k total,  4019088k used,    92596k free,   522624k buffers
Swap:  8393920k total,      128k used,  8393792k free,  2049820k cached

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
15599 root      15   0 25856 4336  656 S    1  0.1  16:16.26 ypserv
28060 root      10  -5     0    0    0 D    0  0.0   2:05.76 kjournald
15538 root      15   0     0    0    0 S    0  0.0   0:45.71 nfsd
15546 root      15   0     0    0    0 D    0  0.0   0:52.44 nfsd
15548 root      15   0     0    0    0 D    0  0.0   0:44.89 nfsd

Code:
slabtop
Active / Total Objects (% used)    : 1932152 / 2034998 (94.9%)
 Active / Total Slabs (% used)      : 219805 / 219824 (100.0%)
 Active / Total Caches (% used)     : 96 / 147 (65.3%)
 Active / Total Size (% used)       : 800131.46K / 841704.55K (95.1%)
 Minimum / Average / Maximum Object : 0.02K / 0.41K / 128.00K

  OBJS ACTIVE  USE OBJ SIZE  SLABS OBJ/SLAB CACHE SIZE NAME
822130 784330  95%    0.77K 164426        5    657704K ext3_inode_cache
694431 647148  93%    0.20K  36549       19    146196K dentry_cache
309800 309776  99%    0.09K   7745       40     30980K buffer_head
120006 113645  94%    0.06K   2034       59      8136K size-64
 42700  40646  95%    0.52K   6100        7     24400K radix_tree_node
  7380   4762  64%    0.12K    246       30       984K size-128
  5904   5897  99%    0.08K    123       48       492K sysfs_dir_cache
  4032   3902  96%    0.03K     36      112       144K size-32

Code:
vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r   b   swpd   free     buff     cache      si   so    bi    bo   in    cs us sy id  wa
 0  0    128  71644  523044  2069460    0    0    71   189    0    0  0  1  95  5

Code:
iostat -mx
Linux 2.6.18.2-34-default (r003d)       16.12.2009

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0,07    0,00    0,51    4,73    0,00   94,69

Device:    rrqm/s wrqm/s   r/s   w/s  rsec/s  wsec/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await  svctm  %util
sda          0,16   1,19  0,23  0,90    9,58   18,15     0,00     0,01    24,50     0,01    8,87   5,69   0,64
sdb          1,50  31,11  4,83 15,59  136,99  373,72     0,07     0,18    25,01     0,42   20,50   3,88   7,92
sdc          1,51  30,92  4,63 14,91  135,63  366,84     0,07     0,18    25,71     0,12    5,97   4,08   7,98
md0          0,00   0,00 12,24 90,88  270,74  727,06     0,13     0,36     9,68     0,00    0,00   0,00   0,00
md1          0,00   0,00  0,00  1,69    0,01   13,50     0,00     0,01     8,00     0,00    0,00   0,00   0,00
md2          0,00   0,00  0,23  0,00    1,86    0,00     0,00     0,00     8,00     0,00    0,00   0,00   0,00
sdc und md0 sind /user (LVM)

Code:
nfsstat -s3
server rpc stats:
calls      badcalls   badauth    badclnt    xdrcall
615142002   0          0          0          0

Server nfs v3:
null         getattr      setattr      lookup       access       readlink
48562     0% 194818046 31% 18418037  3% 43265390  7% 50629677  8% 60423     0%
read         write        create       mkdir        symlink      mknod
104335383 17% 126085259 20% 19435022  3% 867782    0% 30507     0% 1654      0%
remove       rmdir        rename       link         readdir      readdirplus
5733400   0% 766352    0% 2909514   0% 830625    0% 380214    0% 3320437   0%
fsstat       fsinfo       pathconf     commit
9874983   1% 53316     0% 8301      0% 28771428  4%

So, das sind alles aussagekräftigen Werte.

Nun noch einmal zu den sysctl Parametern:
Ich habe mich da eben schlau gelesen und weis wofür die sind, in verschiedenen Artikeln wurde darauf
hingewiesen, das auch ein zu großer Cache ausbremsen kann, besonders dann wenn der Zyklus bis zum auf die Platte schreiben zu lang ist, somit habe ich die Werte mal verkleinert um zu testen ob es was bringt.

Die Probleme des "hängens/einfrierens" sind wenn nicht viel los ist nur sporadisch da, steigen dann aber mit der Anzahl der User die angemeldet sind und der daraus reslutierenden lese/schreib aktivität.

Grüße Marc
 

stka

Guru
Dein Problem, so wie ich das bei Top sehe, sind deine Platten, dein ein Wert von 14.7% bei "wa" ist sehr schlecht. Der Wert gibt die IO/wait Zeiten an, also die Zeit, die dein System auf die Platte wartet. Der Wert sollte nie größer 2% liegen.Eine weitere Bremse ist dein NIS, den solltest du entweder auf einen anderen Server ausgliedern oder besser gleich auf LDAP umstellen.
 

spoensche

Moderator
Teammitglied
Bei den Mountoptionen, die die Clients verwenden, sind die Optionen "wsize=4096,rsize=4096" hilfreich.
 
Oben