SSD Volume mit/ohne SSD Cache


Recommended Posts

  • 3 weeks later...

Nach einigen weiteren Tests mit sowohl dem Marvell als auch dem ASM Controller habe ich festgestellt, das meine ersten Tests mit dem Marvell Controller wohl nicht ausreichend waren.

 

Mit dem Befehl 

dd if=/dev/zero of=/mnt/disk1/test.img bs=128K iflag=count_bytes count=10G

 

teste ich ja lediglich die Performance der ersten Disk im Zusammenspiel mit der Parity, nicht aber die der anderen Disks. In meinem Fall hängt diese disk1 und auch die Parity-Disk am SATA Controller des Mainboards, d.h. der Erweiterung-Controller war hier überhaupt nicht involviert🤦‍♂️ Habe ich das soweit richtig verstanden?

 

Also habe ich den Test mal mit jeder Disk durchgeführt:

Die Disks am Mainboard Controller (disk1 und disk2) hatten durchweg ca. 170-200MB/s.

Die Disk am Marvell Controller (disk3) bot lediglich knapp 50MB/s.

Ein Austausch des Controllers auf den ASM1166 (PCI4x) erbrachte auch für diese Disk dann ebenfalls ca. 170-200MB/s:

 

root@nas:~# dd if=/dev/zero of=/mnt/disk1/test.img bs=128K iflag=count_bytes count=10G
81920+0 records in
81920+0 records out
10737418240 bytes (11 GB, 10 GiB) copied, 52.4511 s, 205 MB/s
root@nas:~# dd if=/dev/zero of=/mnt/disk2/test.img bs=128K iflag=count_bytes count=10G
81920+0 records in
81920+0 records out
10737418240 bytes (11 GB, 10 GiB) copied, 62.3242 s, 172 MB/s
root@nas:~# dd if=/dev/zero of=/mnt/disk3/test.img bs=128K iflag=count_bytes count=10G
81920+0 records in
81920+0 records out
10737418240 bytes (11 GB, 10 GiB) copied, 58.6474 s, 183 MB/s

 

 

Ich vermute nun mal dass dies schlicht die Grenze der kleinen Evo SSDs ist wie von dir @mgutt angesprochen.

 

Was mich noch ein wenig verwundert: Wenn ich den Test mit der disk3 ein paar mal wiederhole (das ist die Disk am Erweiterungs-Controller), dann sind hier ab und zu (so ca. bei jedem fünften Mal) erhebliche Performance Einbrüche nach unten festzustellen:

 

root@nas:~# dd if=/dev/zero of=/mnt/disk3/test.img bs=128K iflag=count_bytes count=10G
81920+0 records in
81920+0 records out
10737418240 bytes (11 GB, 10 GiB) copied, 265.577 s, 40.4 MB/s

 

 

Dies ist mir bei den anderen disk1 und disk2 am Mainboard nicht aufgefallen. Diese schwanken immer zwischen 150 und 200 MB/s.

 

Gibts für den eklatanten Einbruch eventuell eine Erklärung oder eine Idee wie ich der Ursache auf den Grund kommen könnte? :)

 

 

Link to comment
1 hour ago, nicx said:

Ich vermute nun mal dass dies schlicht die Grenze der kleinen Evo SSDs ist

Teste doch einfach mal mit count=1G damit du den SLC Cache nicht überlastest.

 

1 hour ago, nicx said:

Gibts für den eklatanten Einbruch eventuell eine Erklärung

Überhitzt evtl die SSD oder der ASM1166? Halt mal testweise einen Lüfter genau drauf.

 

Wenn es das nicht ist, dann liegt es bestimmt an der fehlenden Garbage Colelction / TRIM der Parity. Die SSD hat einen Ober-Provisioning Bereich auf dem sie je nach Modell ausweichen könnte, wenn die SSD wie bei der Parity komplett voll ist. Wenn nun nicht genug Zeit war aufzuräumen, kann das durchaus dafür sorgen, dass die Bandbreite zusammenbricht. Diese Theorie könnte man belegen, in dem man das Benchmark in einer Schleife ohne Pause ausführen lässt, denn dann ist dieser Bereich sicher irgebdwann voll und es gab keine Zeit zum Aufräumen. Auch müsste man dann mal mit und mal ohne Parity testen um die Parity als Ursache zu verifizieren. Eventuell ist es auch einfach disk3 selbst, die gerade ein Problem mir GC/TRIM hat.

Link to comment
Posted (edited)

Hier mal die Testergebnisse mit count=1G:

root@nas:~# 
root@nas:~# dd if=/dev/zero of=/mnt/disk1/test.img bs=128K iflag=count_bytes count=1G
8192+0 records in
8192+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.343877 s, 3.1 GB/s
root@nas:~# dd if=/dev/zero of=/mnt/disk1/test.img bs=128K iflag=count_bytes count=1G
8192+0 records in
8192+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.14304 s, 209 MB/s
root@nas:~# dd if=/dev/zero of=/mnt/disk1/test.img bs=128K iflag=count_bytes count=1G
8192+0 records in
8192+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.08903 s, 211 MB/s
root@nas:~# dd if=/dev/zero of=/mnt/disk1/test.img bs=128K iflag=count_bytes count=1G
8192+0 records in
8192+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.13674 s, 209 MB/s
root@nas:~# dd if=/dev/zero of=/mnt/disk1/test.img bs=128K iflag=count_bytes count=1G
8192+0 records in
8192+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.10374 s, 210 MB/s
root@nas:~# dd if=/dev/zero of=/mnt/disk2/test.img bs=128K iflag=count_bytes count=1G
8192+0 records in
8192+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.346902 s, 3.1 GB/s
root@nas:~# dd if=/dev/zero of=/mnt/disk2/test.img bs=128K iflag=count_bytes count=1G
8192+0 records in
8192+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.02571 s, 214 MB/s
root@nas:~# dd if=/dev/zero of=/mnt/disk2/test.img bs=128K iflag=count_bytes count=1G
8192+0 records in
8192+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 6.11291 s, 176 MB/s
root@nas:~# dd if=/dev/zero of=/mnt/disk2/test.img bs=128K iflag=count_bytes count=1G
8192+0 records in
8192+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.89215 s, 182 MB/s
root@nas:~# dd if=/dev/zero of=/mnt/disk2/test.img bs=128K iflag=count_bytes count=1G
8192+0 records in
8192+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 6.09679 s, 176 MB/s
root@nas:~# dd if=/dev/zero of=/mnt/disk3/test.img bs=128K iflag=count_bytes count=1G
8192+0 records in
8192+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.345798 s, 3.1 GB/s
root@nas:~# dd if=/dev/zero of=/mnt/disk3/test.img bs=128K iflag=count_bytes count=1G
8192+0 records in
8192+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 6.46925 s, 166 MB/s
root@nas:~# dd if=/dev/zero of=/mnt/disk3/test.img bs=128K iflag=count_bytes count=1G
8192+0 records in
8192+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 7.11701 s, 151 MB/s
root@nas:~# dd if=/dev/zero of=/mnt/disk3/test.img bs=128K iflag=count_bytes count=1G
8192+0 records in
8192+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 7.30008 s, 147 MB/s
root@nas:~# dd if=/dev/zero of=/mnt/disk3/test.img bs=128K iflag=count_bytes count=1G
8192+0 records in
8192+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 7.30834 s, 147 MB/s
root@nas:~# dd if=/dev/zero of=/mnt/disk3/test.img bs=128K iflag=count_bytes count=1G
8192+0 records in
8192+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 7.80251 s, 138 MB/s
root@nas:~#

 

Dabei ist mir nun aufgefallen dass die Performance mit jedem Test abnimmt, ist richtig schön zu sehen. dazu kommt dass ich all meine Tests mit den Disks stets in der gleichen Reihenfolge durchgeführt habe, also erst disk1, dann disk2 und zuletzt disk3.

 

Also nochmal alle Files gelöscht, 10min pausiert, und gleich mal mit disk3 gestartet:

root@nas:~# rm /mnt/disk1/test.img 
root@nas:~# rm /mnt/disk2/test.img 
root@nas:~# rm /mnt/disk3/test.img 
root@nas:~# dd if=/dev/zero of=/mnt/disk3/test.img bs=128K iflag=count_bytes count=1G
8192+0 records in
8192+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.3305 s, 3.2 GB/s
root@nas:~# dd if=/dev/zero of=/mnt/disk3/test.img bs=128K iflag=count_bytes count=1G
8192+0 records in
8192+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.01092 s, 214 MB/s
root@nas:~# dd if=/dev/zero of=/mnt/disk3/test.img bs=128K iflag=count_bytes count=1G
8192+0 records in
8192+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 4.89985 s, 219 MB/s
root@nas:~# dd if=/dev/zero of=/mnt/disk3/test.img bs=128K iflag=count_bytes count=1G
8192+0 records in
8192+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.2154 s, 206 MB/s
root@nas:~# dd if=/dev/zero of=/mnt/disk3/test.img bs=128K iflag=count_bytes count=1G
8192+0 records in
8192+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.14711 s, 209 MB/s
root@nas:~# dd if=/dev/zero of=/mnt/disk3/test.img bs=128K iflag=count_bytes count=1G
8192+0 records in
8192+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.19081 s, 207 MB/s
root@nas:~# 

 

und mit count=10G:

root@nas:~# rm /mnt/disk3/test.img 
root@nas:~# dd if=/dev/zero of=/mnt/disk3/test.img bs=128K iflag=count_bytes count=10G
81920+0 records in
81920+0 records out
10737418240 bytes (11 GB, 10 GiB) copied, 48.3488 s, 222 MB/s
root@nas:~# dd if=/dev/zero of=/mnt/disk3/test.img bs=128K iflag=count_bytes count=10G
81920+0 records in
81920+0 records out
10737418240 bytes (11 GB, 10 GiB) copied, 124.092 s, 86.5 MB/s
root@nas:~# dd if=/dev/zero of=/mnt/disk3/test.img bs=128K iflag=count_bytes count=10G
81920+0 records in
81920+0 records out
10737418240 bytes (11 GB, 10 GiB) copied, 51.329 s, 209 MB/s
root@nas:~# dd if=/dev/zero of=/mnt/disk3/test.img bs=128K iflag=count_bytes count=10G
81920+0 records in
81920+0 records out
10737418240 bytes (11 GB, 10 GiB) copied, 51.551 s, 208 MB/s
root@nas:~# 

 

Daraus schlussfolgere ich, das es nicht an einer spezifischen SSD liegt (also z.b. die disk3 irgendein Problem hat), aber wie du sagst @mgutt entweder mit den Lasttest eine Komponente heisser (und dadurch unperfomanter) wird, oder irgend eine grundsätzliche SSD-integrierte Logik (wahrscheinlich auf der Parity SSD) zur Verlangsamung führt.

 

Die eklatanten einzelnen Aussreisser nach unten auf <50MB/s kann ich mir nach wie vor nicht erklären... eventuell läuft hier auch noch irgendein andere Operation auf den SSDs die mir dazwischenfunkt.

 

Rein von den Temperaturen der SSDs steigen diese auf um die 50-55 Grad an sobald ich ausgiebig teste. Deinen Tip mit dem Lüfter werde ich mal ausprobieren ;)

 

Zudem habe ich auch noch 2 Stück 1TB Samsung 850 Pro SSD, diese werde ich mal zu einem Vergleich einbauen und testen.

 

Ich denke wenn Lüfter- und ProSSD-Tests vorliegen, dann sehen wir wohin der Hase läuft :) Danke auf jeden Fall schon mal @mgutt für deine Tips!

 

 

 

 

Edited by nicx
Link to comment
3 hours ago, nicx said:

3.2 GB/s

Waren das nicht nur SATA SSDs? Dann schreibst du gerade in den RAM statt auf die SSD. Um das zu verhindern, solltest du erst das RAM Caching möglichst stark reduzieren:

sysctl vm.dirty_bytes=100000000

 

Damit reduzierst du das Caching auf 100MB. Nicht auf 0 stellen. Dann wird es übertrieben langsam.

 

So stellst du auf den Standardwert zurück:

sysctl vm.dirty_ratio=20

 

Das bedeutet 20% des freien RAMs wird fürs Caching genutzt.

Link to comment
Posted (edited)

Ein kurzer Test mit den 1TB Samsung 850 Pro SSDs (sowohl Party als auch Daten-Disk) ergibt folgendes Bild:

 

root@Tower:~# dd if=/dev/zero of=/mnt/disk1/test.img bs=128K iflag=count_bytes count=10G
81920+0 records in
81920+0 records out
10737418240 bytes (11 GB, 10 GiB) copied, 17.1165 s, 627 MB/s
root@Tower:~# dd if=/dev/zero of=/mnt/disk1/test.img bs=128K iflag=count_bytes count=10G
81920+0 records in
81920+0 records out
10737418240 bytes (11 GB, 10 GiB) copied, 17.1138 s, 627 MB/s
root@Tower:~# dd if=/dev/zero of=/mnt/disk1/test.img bs=128K iflag=count_bytes count=10G
81920+0 records in
81920+0 records out
10737418240 bytes (11 GB, 10 GiB) copied, 17.1058 s, 628 MB/s
root@Tower:~# 

 

Das ist wirklich mal eine krasse Speed :D Ok, für mich ist es damit recht klar dass das Bottleneck die SSDs sind. Sind halt einfach nicht "Pro".

Edited by nicx
Link to comment
Just now, nicx said:

1TB Pro SSDs

Was soll das sein? Du musst schon sagen welches Modell genau und ob NVMe oder SATA. Für SATA wäre das Ergebnis zu schnell und für NVMe zu langsam.

 

Und beim Test war RAM Caching auf 100MB eingestellt?

Link to comment
Posted (edited)
5 minutes ago, mgutt said:

Was soll das sein? Du musst schon sagen welches Modell genau und ob NVMe oder SATA. Für SATA wäre das Ergebnis zu schnell und für NVMe zu langsam.

 

Und beim Test war RAM Caching auf 100MB eingestellt?

 

Sorry, Modell habe ich ergänzt. Es sind Samsung 850 Pro 1TB SATA SSDs.

 

Und du hast recht, ich hab vergessen das Caching runter zu setzen. Nun hier die Performance Werte mit sysctl vm.dirty_bytes=100000000:

 

root@Tower:~# dd if=/dev/zero of=/mnt/disk1/test.img bs=128K iflag=count_bytes count=10G
81920+0 records in
81920+0 records out
10737418240 bytes (11 GB, 10 GiB) copied, 20.7396 s, 518 MB/s
root@Tower:~# dd if=/dev/zero of=/mnt/disk1/test.img bs=128K iflag=count_bytes count=10G
81920+0 records in
81920+0 records out
10737418240 bytes (11 GB, 10 GiB) copied, 20.712 s, 518 MB/s
root@Tower:~# dd if=/dev/zero of=/mnt/disk1/test.img bs=128K iflag=count_bytes count=10G
81920+0 records in
81920+0 records out
10737418240 bytes (11 GB, 10 GiB) copied, 20.7638 s, 517 MB/s
root@Tower:~# 

 

Edited by nicx
Link to comment

Fein. Jetzt hast du wirklich die SSDs getestet. Dass die Pro aber schnell sind, ist ja kein Geheimnis. Was ist mit deinen 250GB SSDs? Oder willst du die Pro als Parity einsetzen? Das wäre tatsächlich optimal.

Link to comment

hier nochmal ein kurzer Test mit den 250GB Samsung 850 Evo SATA SSD und sysctl vm.dirty_bytes=100000000:

root@nas:~# dd if=/dev/zero of=/mnt/disk1/test.img bs=128K iflag=count_bytes count=10G
81920+0 records in
81920+0 records out
10737418240 bytes (11 GB, 10 GiB) copied, 77.6048 s, 138 MB/s
root@nas:~# dd if=/dev/zero of=/mnt/disk1/test.img bs=128K iflag=count_bytes count=10G
81920+0 records in
81920+0 records out
10737418240 bytes (11 GB, 10 GiB) copied, 70.3208 s, 153 MB/s
root@nas:~# dd if=/dev/zero of=/mnt/disk1/test.img bs=128K iflag=count_bytes count=10G
81920+0 records in
81920+0 records out
10737418240 bytes (11 GB, 10 GiB) copied, 71.5436 s, 150 MB/s

root@nas:~# dd if=/dev/zero of=/mnt/disk1/test.img bs=128K iflag=count_bytes count=1G
8192+0 records in
8192+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.52136 s, 194 MB/s
root@nas:~# dd if=/dev/zero of=/mnt/disk1/test.img bs=128K iflag=count_bytes count=1G
8192+0 records in
8192+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 4.4092 s, 244 MB/s
root@nas:~# dd if=/dev/zero of=/mnt/disk1/test.img bs=128K iflag=count_bytes count=1G
8192+0 records in
8192+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 4.45699 s, 241 MB/s
root@nas:~# dd if=/dev/zero of=/mnt/disk1/test.img bs=128K iflag=count_bytes count=1G
8192+0 records in
8192+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 4.45771 s, 241 MB/s
root@nas:~# dd if=/dev/zero of=/mnt/disk1/test.img bs=128K iflag=count_bytes count=1G
8192+0 records in
8192+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.13349 s, 209 MB/s
root@nas:~# 

 

Mein grundsätzliches Fazit: Ich muss mir überlegen ob ich nicht einfach ein wenig investiere und statt

4* 250GB Evo für Data und 1* 250GB Evo für Parity

dann auf

1* 1TB Pro für Data und 1* 1TB Pro für Parity umswitche.

 

Zusätzlicher Vorteil im zweiten Fall: Weniger SSDs für den Beginn, und daher erst einmal kein zusätzlicher SATA-Controller benötigt. Ergo geringerer Stromverbrauch. Wenn das System "wachsen" soll dann wird das aber früher oder später nötig, da nur 3 SATA Ports auf dem Mainboard zur Verfügung stehen (und der dritte belegt wäre doch die 3TB WD Backup HDD) .

 

@mgutt Wäre denn rein aus Performancesicht auch dein Vorschlag mit 1* 1TB Pro als Parity und 4* 250GB Evo als Daten SSDs sinnvoll? Also wie würde sich das denn voraussichtlich auswirken?

 

 

 

Link to comment

Die Frage ist eher ob du so oft 10GB auf den Server schiebst wie jetzt mit dem Benchmark getestet. Auch die Frage wie viel RAM du verbaust und mit einem normalen Dirty Ratio Wert zb alleine über den RAM eine hohe Performance ermöglichst.

 

Die 1TB ist sicher besser als Parity. Auch bei 250GB im Array. Umso schneller die Parity, umso besser.

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.