Tintom hat geschrieben:Die Bandbreite sollte schon ausreichen um die Festplatten mit ordentlicher Geschwindigkeit auszulasten. Wenn du die Einschränkungen nur bei RAID hast würde ich auf eine zu schwache CPU tippen. Welche CPU hast du verbaut und wie hoch ist die Auslastung wenn du Schreib-/Leseoperationen mit dem RAID durchfürst?
AMD Turion(tm) II Neo N54L Dual-Core Processor
Aktuell kopier ich was herum übers Netzwerk:
Code: Alles auswählen
top - 16:23:13 up 2:15, 1 user, load average: 0,88, 0,96, 1,18
Tasks: 148 total, 4 running, 144 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0,0 us, 4,0 sy, 0,0 ni, 79,8 id, 15,9 wa, 0,0 hi, 0,3 si, 0,0 st
KiB Mem: 2025172 total, 1960492 used, 64680 free, 57532 buffers
KiB Swap: 8388604 total, 0 used, 8388604 free. 1711756 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
527 root 20 0 0 0 0 S 3,7 0,0 5:14.20 mdX_raid5
1082 root 20 0 0 0 0 S 1,7 0,0 1:22.94 nfsd
1083 root 20 0 0 0 0 R 1,3 0,0 1:17.65 nfsd
1086 root 20 0 0 0 0 S 0,7 0,0 1:23.28 nfsd
538 root 20 0 0 0 0 D 0,3 0,0 0:00.61 jbd2/dm-11-8
1085 root 20 0 0 0 0 R 0,3 0,0 1:24.24 nfsd
1088 root 20 0 0 0 0 S 0,3 0,0 1:20.91 nfsd
1194 root 20 0 0 0 0 S 0,3 0,0 0:08.55 kworker/1:1
1451 root 20 0 0 0 0 S 0,3 0,0 0:01.19 kworker/0:1
1537 reox 20 0 26224 3012 2500 R 0,3 0,1 0:00.08 top
1 root 20 0 28800 4940 2932 S 0,0 0,2 0:02.47 systemd
2 root 20 0 0 0 0 S 0,0 0,0 0:00.00 kthreadd
dH den nfs daemon muss man da auch noch abziehen... 15% IO Wait, klingt jetzt nicht danach als ob die CPU da das Bottleneck wäre?
Auf der anderen Seite, ja die CPU ist jetzt kein i5 und die Load geht auch eher so gegen 2..
Hier mal dstat:
Code: Alles auswählen
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read writ| recv send| in out | int csw
0 6 84 9 0 1| 193k 16M| 0 0 | 0 0 |2392 3516
2 5 70 23 0 1|2808k 29M|1266B 1786B| 0 0 | 440 781
1 5 65 29 0 0|2012k 28M| 140B 524B| 0 0 | 437 689
1 7 58 33 0 1|2148k 28M| 210B 12k| 0 0 |1710 2370
1 6 38 56 0 0|1516k 30M| 140B 524B| 0 0 | 851 1874
1 6 39 55 0 0|1492k 25M| 208B 370B| 0 0 | 929 2048
0 5 43 51 0 1|1280k 30M| 140B 524B| 0 0 |1014 2214
3 4 36 58 0 0|8408k 3862k| 140B 524B| 0 0 | 565 975
2 28 30 36 1 3|7936k 1076k| 420B 1164B| 0 0 | 15k 22k
# Hier empfängt die Netzwerkkarte mal wieder nen Block:
1 40 30 24 0 5|6136k 4458k| 99M 922k| 0 0 | 21k 30k
1 23 33 36 1 6|2156k 25M| 118M 1097k| 0 0 | 12k 12k
0 6 73 21 0 0|1460k 30M| 52M 294k| 0 0 | 557 1312
1 5 61 34 0 0|1548k 23M| 70B 370B| 0 0 | 651 1419
1 7 34 57 0 1|1896k 28M| 140B 11k| 0 0 |1822 2415
1 4 72 22 0 1|1476k 28M| 70B 370B| 0 0 | 929 1225
0 5 78 17 0 1|1736k 29M| 140B 524B| 0 0 | 542 1251
1 4 30 65 0 1|2216k 28M| 140B 524B| 0 0 | 902 1897
1 4 48 46 0 2| 976k 27M| 70B 370B| 0 0 | 618 1274
1 6 73 20 0 0|2132k 28M| 204B 588B| 0 0 | 461 827
1 5 72 22 0 0|2512k 29M| 70B 370B| 0 0 | 417 776
1 7 75 18 0 0|2136k 31M| 140B 524B| 0 0 | 434 803
1 5 68 26 0 1|2496k 27M| 140B 524B| 0 0 | 356 638
0 5 73 22 0 0|1568k 25M| 140B 524B| 0 0 | 425 770
2 6 65 27 0 1|1460k 27M| 140B 10k| 0 0 |1252 1650
1 5 38 56 0 1|1796k 30M| 70B 370B| 0 0 |1044 1897
1 5 70 25 0 0| 820k 26M| 140B 524B| 0 0 | 760 1653
1 5 71 24 0 0|1372k 29M| 70B 370B| 0 0 | 532 1206
0 5 31 64 0 1|4128k 15M| 140B 524B| 0 0 |1457 1439
1 24 13 59 1 3|5628k 454k|3350k 4756B| 0 0 | 12k 15k
# Bis hier hin braucht es damit es geschrieben ist... (20s)
1 41 17 32 0 10|7956k 2238k| 80M 681k| 0 0 | 22k 29k
1 30 41 24 1 4|1984k 23M| 118M 1037k| 0 0 | 16k 22k
1 6 65 28 0 0|1976k 27M| 68M 619k| 0 0 | 778 1719
0 5 86 9 0 1| 864k 28M| 140B 524B| 0 0 | 550 1376
2 8 17 72 0 1|1748k 31M| 70B 11k| 0 0 |2215 2794
1 5 19 74 0 1|1924k 33M| 70B 370B| 0 0 |1383 1911
0 7 50 43 0 0| 988k 31M| 140B 524B| 0 0 |1090 1762
1 6 79 14 0 1|2476k 25M| 70B 370B| 0 0 | 736 1119
1 6 67 26 0 1|2116k 27M| 140B 524B| 0 0 | 386 692
1 6 69 24 0 1|2508k 28M| 140B 524B| 0 0 | 414 781
Wie man sieht klatscht die Netzwerkkarte mal schnell 300MB hin und dann braucht das ne Zeit bis es auf der Platte landet.
Die CPU kernel load geht auch nur hoch wenn IO von der Netzwerkkarte kommt (ist eine Broadcom Corporation NetXtreme BCM5723).
Wenn ich nen PCIe Controller hier herumliegen hätte würde ich den mal einbauen und schauen ob es schneller wird
edit: Ok mir is da gerade ein Test eingefallen: Ich hab eine 4. Platte an dem Controller. Wenn ich auf die schreibe wärend auf das RAID geschrieben wird, komm ich da auch locker auf 120MB/s auf der einen Platte + die 30MB/s aufs RAID. Sehr interessant ist dann aber, dass vom Netzwerk interface dann nicht mehr 100MB/s geholt werden sondern kontinuierlich 30MB/s:
Code: Alles auswählen
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read writ| recv send| in out | int csw
0 6 81 11 0 1| 304k 17M| 0 0 | 0 0 |2519 3684
0 17 8 69 0 6| 0 148M| 16M 23k| 0 0 |3871 2274
1 18 4 73 0 5| 48k 171M| 17M 21k| 0 0 |3950 2411
0 19 5 68 0 8| 96k 160M| 23M 30k| 0 0 |4920 2736
0 20 14 58 0 8| 0 155M| 24M 40k| 0 0 |5746 4432
0 17 10 68 0 4| 92k 163M| 28M 119k| 0 0 |1615 1934
0 14 8 76 0 2| 352k 154M| 922B 3304B| 0 0 |1541 2556
0 12 2 81 0 5| 156k 125M| 274B 10k| 0 0 |2559 1981
0 17 7 67 0 8| 152k 156M|6830k 12k| 0 0 |5428 2168
0 20 15 59 0 6| 0 157M| 35M 54k| 0 432k|5639 2922
0 17 8 70 0 5| 20k 162M| 28M 71k| 0 0 |3687 1946
0 17 5 71 0 7| 116k 161M| 20M 26k| 0 0 |4490 2096
0 18 11 65 0 6| 64k 149M| 23M 30k| 0 0 |4263 2170
0 26 7 60 0 7| 80k 174M| 39M 153k| 0 0 |7646 4866
0 16 5 74 0 5| 20k 158M| 21M 26k| 0 0 |3093 1893
1 16 6 72 0 5| 32k 147M| 15M 20k| 0 0 |3419 2042
0 21 7 65 0 6| 48k 177M| 18M 23k| 48k 0 |4193 2212
1 20 9 63 0 7| 44k 151M| 23M 41k| 16k 0 |4722 2658
0 21 7 65 0 7| 120k 155M| 20M 26k| 0 0 |5094 3225
0 17 9 71 0 3| 32k 176M| 18M 74k| 0 0 |1480 2400
0 14 17 65 0 3| 108k 131M| 204B 636B| 0 0 |2630 2187
0 23 2 67 0 8| 32k 151M| 28M 67k| 0 0 |7241 4043
0 18 10 67 0 5| 0 171M| 34M 90k| 0 0 |3910 2105
0 19 9 65 0 6| 68k 145M| 21M 27k| 0 0 |4544 2306
0 24 10 60 0 7| 64k 159M| 26M 34k| 0 0 |6250 4346
1 19 8 66 0 6| 88k 163M| 36M 118k| 0 0 |3575 2046
0 19 5 70 0 6| 32k 154M| 19M 28k| 0 0 |4396 2242
1 21 7 63 0 9| 16k 161M| 27M 49k| 0 0 |4890 2497
0 18 8 66 0 8| 0 159M| 15M 20k| 0 0 |3668 2181
1 17 5 71 0 7| 116k 160M| 17M 22k| 0 0 |4522 2593
0 19 8 69 0 5| 64k 159M| 23M 31k| 0 0 |3280 1935
Scheint so als ob der Controller trotzdem wohl auf alle Platten schreiben kann... (Ok, ich hab nur pv /dev/zero > /dev/mapper/lv-ontheotherdisk gemacht). Was dann zu der Frage führt wo das Bottleneck tatsächlich ist?
editedit: Das RAID5 LVM besteht ja aus 6 LV's: 3* ein rimage und 3* ein rmeta.
Ich hab mir iostat angesschaut welche devices IO abbekommen und das sind alle 6. die meta LVs liegen am Anfang bzw ganz am Ende der Platten, so dass beim schreiben auf das image LV immer trotzdem an den Anfang der Platte bzw an das Ende gesprungen werden muss. Also wenn ich eigentlich sequential IO habe, wird das zu random IO und somit langsamer?
editeditedit: Ich hab mal die Raid Metadaten auf andere Platten verschoben. Jetzt schaut das IO Pattern wieder anders aus. iostat sagt mir jetzt, dass die utiliazation von dem LV nur noch bei ca 65% liegt (vorher war es 100) (Nicht ganz - nur im 2s mittel, nimmt man iostat -x 1, dann ist es auch teilweise wieder bei 100%) und nun schreibt er auch nicht mehr kontinuierlich sondern alle 2s.
dH die metadaten beeinflussen die Leistung des LV's schon, jedoch auch nicht so super viel. Wenn ich von /dev/zero lese komme ich auch nur auf ca 40MB/s.
Spannend ist jetzt aber auch die IOWait Zeiten:
Code: Alles auswählen
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdd 2,00 1524,00 1,00 13,00 12,00 6656,00 952,57 0,31 23,86 8,00 25,08 12,57 17,60
sdc 0,00 0,00 0,00 16,00 0,00 57,00 7,12 0,45 27,25 0,00 27,25 15,88 25,40
sda 0,00 1526,00 0,00 13,50 0,00 6412,00 949,93 0,30 22,52 0,00 22,52 13,93 18,80
sdb 0,00 1526,00 0,00 14,00 0,00 6668,00 952,57 0,37 28,43 0,00 28,43 15,71 22,00
sde 0,00 37,00 0,00 105,50 0,00 600,50 11,38 20,28 192,23 0,00 192,23 2,24 23,60
dm-0 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00
dm-1 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00
dm-2 0,00 0,00 0,00 134,00 0,00 570,00 8,51 22,80 170,18 0,00 170,18 1,63 21,80 // hier liegt /var drauf
dm-3 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00
dm-4 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00
dm-5 0,00 0,00 0,00 8,50 0,00 30,50 7,18 0,20 22,59 0,00 22,59 23,29 19,80 // rmeta_0 -> sdc
dm-6 0,00 0,00 0,00 1539,00 0,00 6156,00 8,00 43,62 30,51 0,00 30,51 0,14 22,00 // rimage_0 -> sda
dm-7 0,00 0,00 0,00 8,50 0,00 30,50 7,18 0,25 28,71 0,00 28,71 29,41 25,00 // rmeta_1 -> sdc
dm-8 0,00 0,00 0,00 1539,00 0,00 6156,00 8,00 34,88 23,16 0,00 23,16 0,12 18,80 // rimage_1 -> sdb
dm-9 0,00 0,00 0,00 8,50 0,00 30,50 7,18 0,04 4,94 0,00 4,94 4,94 4,20 // rmeta_2 -> sde
dm-10 0,00 0,00 3,00 1536,00 12,00 6144,00 8,00 38,14 26,94 2,67 26,99 0,11 17,60 // rimage_2 -> sdd
dm-11 0,00 0,00 0,00 203,00 0,00 12812,00 126,23 12,91 63,54 0,00 63,54 2,32 47,00 // ganzes LV
Ich hab eines der meta volumes auf eine SSD gegeben und da ist ein großer unterschied zu sehen (überraschung
).
Frage mich aber weiterhin ob nicht der controller das bottleneck ist?
editediteditedit: So jetzt rechnen wir mal kurz: Man sieht das dm-11 bei der iostat ausgabe oben durschnittlich 65ms für einen Request gebraucht hat. Was mich jetzt sehr stutzig macht ist, dass diese Zeit etwa 3x so lang ist wie die Zugriffe auf die einzelnen Platten... Wird das gar nicht parallel gescheduled?