NVMe Übertragungsraten zu langsam


Tiras

Recommended Posts

Hallo Zusammen,

 

ich möchte mich an dieser Stelle bzgl. ZFS einklinken und ein Problem mit meiner aktuellen unRAID Konfiguration schildern. 

 

Aktuelles System:

Mainboard: Gigabyte x570 Gaming X

CPU: Ryzen 5 2600

RAM: DDR4 3200 64GB

Hard Disks: 2 x 4 TB WD NAS RED (HDD), 1 x 6 TB WD NAS RED (HDD), 1 x 2 TB Toshiba (HDD), 1 x 240 GB SanDisk (SSD),

NVMe´s: 2 x 1 TB Samsung Evo 970 Plus, 1 x 500 GB Samsung Evo 970 Plus, 1 x 125 GB SanDisk

QNAP Extention TR-004: 4 x 5 TB WD Red (HDD) RAID 5

 

Mein Ziel: 

Ich möchte gerne diverse Windows VMs auf den 1 TB NVMe´s am Besten im "Spiegel" auslagern. Für Medien, Backups etc. habe ich mir die 2 x 4 TB ebenfalls im "Spiegel"  vorgestellt. Die 125 GB NVMe und die 240 GB SSD möchte ich einer Gaming VM durchschalten. Die 500 GB NVMe habe ich als "Cache" geplant.

In meiner kostenlosen Testphase habe ich festgestellt, dass dieses Vorhaben so nicht umsetzbar ist. 

Nachdem ich das Array mit der 6 TB als Parität und den genannten Festplatten als Disks erstellt habe, musste ich feststellen, dass die Übertragungsgeschwindigkeit der NVMe´s (bis zu 3700 MBit/s R/W) auf die Übertragungsgeschwindigkeit der HDDs (bis zu 154 MBit/s) begrenzt wird, ob die NVMe´s jeweils über PCIe installiert sind.

 

Nun bin ich vergangene Tage auf ZFS gestoßen und habe dementsprechend meine unRAID Konfiguration so angepasst, dass die 6 TB als Parität weiterhin dient und die 2 x 4 TB und die 2 TB als Disks dienen. Für die 2 x 4TB Platten habe ich ein Pool mit der 240GB SSD als Cache erstellt. Wenn ich nun Daten auf dieses Pool verschiebe, dann habe ich dank der Übertragungsrate der SSD eine Netzwerkübertragung von ~ 100 MB/s, aber wenn die Daten von dem Cache-Pool auf das eigentliche Pool verschoben werden, dann liegt die Übertragungsgeschwindigkeit maximal bei ~ 23MB/s, da die HDD(s) des Pools R/W ausführen, um auch auf die Parität zu schreiben.

 

Für die Virtualisierungen habe ich ein ZFS-Pool mit beiden 1 TB NVMe´s im "Mirror" erstellt und dort die vdisks der VMs ausgelagert. Die 500 GB sowie die 125 GB NVMe´s sind testweise nur als "unassigned Device" gemounted. Bei einer Datenübertragung zwischen den NVMe´s (egal welcher) erreiche ich trotzdem nur eine maximale Übertragungsrate von 176 MB/s. Wie bereits weiter oben schon erwähnt, sind die NVMe´s als PCIe eingebunden. Die 500GB über den M.2 PCIe Slot und die 2 x 1 TB über die QNAP Card als PCIe x16.

 

Hinzu kommt, dass bei einer Datenübertragung zwischen den NVMe´s und dem ZFS-Pool mein Arbeitsspeicher von 3% auf 56% steigt. Ich habe gelesen, dass ZFS ARC standardmäßig 50% des gesamten RAMs allokiert, aber man das mit entsprechenden Optionen in einer /zfs.conf angepassen kann, was für mich wichtig ist, da viele VMs (5 Windows Server 2016, Gaming VM, Workstation) ausgeführt werden.

 

Da es mir leider nicht gelungen ist, das QNAP OS auf dem System mit allen Disks zu installieren, bin ich wieder zu unRAID als Plus Member zurück gekehrt, nachdem ich wie gesagt das mit ZFS gelesen habe. 

 

Endlich zu meiner Frage:

Habt ihr vielleicht einen Vorschlag, wie ich die Leistung meines Arrays, die des ZFS´s und die Auslastung meines RAMs optimal konfigurieren kann? Die Daten der Pools werden redundant auf der QNAP Extention gespeichert. unRaid war Aufgrund des Pass Through´s der GPU an eine VM interessant, aber aufgrund der aktuellen Leistung bedauere ich, Geld für das Plus Paket ausgegeben zu haben. 

 

Von daher bin ich für jede Hilfe und jeden Vorschlag zur Verbesserung dankbar und danke euch vorab für Eure Zeit.

 

Viele Grüße

Link to comment
50 minutes ago, Tiras said:

aber wenn die Daten von dem Cache-Pool auf das eigentliche Pool verschoben werden, dann liegt die Übertragungsgeschwindigkeit maximal bei ~ 23MB/s, da die HDD(s) des Pools R/W ausführen, um auch auf die Parität zu schreiben.

Das ist viel zu wenig. Kann es sein, dass eine der HDDs SMR nutzt?

StorageReview-WD-Red-family-1.png.2fb1b97ddbed6844d53be95525ccdf55.png

Falls ja: Ab in den Müll damit ^^

 

52 minutes ago, Tiras said:

In meiner kostenlosen Testphase habe ich festgestellt, dass dieses Vorhaben so nicht umsetzbar ist. 

Nachdem ich das Array mit der 6 TB als Parität und den genannten Festplatten als Disks erstellt habe, musste ich feststellen, dass die Übertragungsgeschwindigkeit der NVMe´s (bis zu 3700 MBit/s R/W) auf die Übertragungsgeschwindigkeit der HDDs (bis zu 154 MBit/s) begrenzt wird, ob die NVMe´s jeweils über PCIe installiert sind.

Wenn du sie ins Array einbindest, ist das auch völlig logisch. Du musst neben dem Cache Pool noch einen weiteren Pool hinzufügen. Den nennst du zB "vm", bildest ihn als BTRFS RAID1, erstellst darauf einen Share mit der Cache Option "Only" und legst dort deine VM-Disks ab. Jetzt hast du ein vom Array unabhängiges RAID ohne Flaschenhals (wenn man von der virtuellen Disk absieht).

 

ZFS brauchst du also gar nicht.

 

Alternative:

Du lässt die beiden NVMe aus dem Array und Pool raus und weist jeder VM eine physisch zu. Dann fällt auch der Flaschenhals des virtuellen Disk-Treibers weg. Hat aber den Nachteil, dass man nur eine VM pro NVMe nutzen kann. Backups müsste man dann im Betriebsystem selbst erstellen. Also wie bei einem normalen Client auch. Es gibt sogar einen Trick mit dem man so eine NVMe in Unraid öffnen kann, wenn die VM aus ist:

 

  • Like 1
Link to comment
31 minutes ago, mgutt said:

Wenn du sie ins Array einbindest, ist das auch völlig logisch. Du musst neben dem Cache Pool noch einen weiteren Pool hinzufügen. Den nennst du zB "vm", bildest ihn als BTRFS RAID1, erstellst darauf einen Share mit der Cache Option "Only" und legst dort deine VM-Disks ab. Jetzt hast du ein vom Array unabhängiges RAID ohne Flaschenhals (wenn man von der virtuellen Disk absieht).

 

ZFS brauchst du also gar nicht.

 

 

Hallo mgutt,

 

vielen Dank für die schnelle Antwort und deinen Tipp. Ich habe das gerade einmal mit der 500 GB NVMe und der 128GB NVMe getestet und bin dort bei 578MB/s gelandet (ist richtig so). 

Meine Frage hierzu:

1. Wenn ich meine 2 x 4 TB genauso konfiguriere, aber nicht als BTRFS (RAID1) sondern als XFS, wäre es dann ein RAID 0 und somit auch performanter?

2. Alle Pools/Shares sind unter /mnt/... zu finden?

 

Vielen Dank für deine Hilfe.

Link to comment
28 minutes ago, Tiras said:

1. Wenn ich meine 2 x 4 TB genauso konfiguriere, aber nicht als BTRFS (RAID1) sondern als XFS, wäre es dann ein RAID 0 und somit auch performanter?

XFS ist nicht möglich bei einem RAID Pool (meine ich jedenfalls). Mal davon abgesehen hättest du ja keine Ausfallsicherheit. Warum solltest du das also machen?

 

29 minutes ago, Tiras said:

2. Alle Pools/Shares sind unter /mnt/... zu finden?

 

Alles ist unter /mnt zu finden. Es gibt aber verschiedene "Summen":

 

/mnt/cache/sharename zeigt nur die Dateien, die sich aktuell auf dem Pool mit dem Namen "cache" befinden

/mnt/disk1/sharename zeigt nur die Dateien, die sich aktuell auf Disk1 des Arrays befinden.

/mnt/user/sharename zeigt die Summe aus /mnt/cache/sharename und /mnt/disk1/sharename

 

Der direkte Pfad zu einer Disk oder einem Pool bietet die beste Performance.

Link to comment
13 minutes ago, mgutt said:

XFS ist nicht möglich bei einem RAID Pool (meine ich jedenfalls). Mal davon abgesehen hättest du ja keine Ausfallsicherheit. Warum solltest du das also machen?

 

Alles ist unter /mnt zu finden. Es gibt aber verschiedene "Summen":

 

/mnt/cache/sharename zeigt nur die Dateien, die sich aktuell auf dem Pool mit dem Namen "cache" befinden

/mnt/disk1/sharename zeigt nur die Dateien, die sich aktuell auf Disk1 des Arrays befinden.

/mnt/user/sharename zeigt die Summe aus /mnt/cache/sharename und /mnt/disk1/sharename

 

Der direkte Pfad zu einer Disk oder einem Pool bietet die beste Performance.

BTRFS ist, wenn ich es richtig verstanden habe gleich einem RAID 1. Ich brauche jedoch einen großen Pool für Datenbanken, Backups oder Medien. Aus diesem Grund habe ich den Pool/Share mit den 2 x 4TB und der 240GB SSD als Cache erstellt. Ich habe nach deinem Tipp mit dem Pool außerhalb des Arrays spekuliert, dass 2 Disks als XFS dann gleich einem RAID 0 wäre! Jedoch könnte ich, um die volle Leistung der 2 x 4 TB zu erhalten und auch einen großen Speicherpool habe deinen Tipp auch hierfür - jedoch nicht als BTRFS - umsetzen. Da ich mich an einem Script probieren möchte, dass die Daten via Schedul auf die TR-004 kopiert, wenn ein Ordner/File nicht vorhanden- oder unterschiedlich ist, wäre hier Ausfallsicherheit nicht wirklich notwendig.

 

Wenn ich einen Pool "vm" mit beiden NVMe´s und ein Share als "Only" erstellen würde, der Pfad /mnt/user/Sharename richtig, damit die beste Performance habe!?

Link to comment
24 minutes ago, Tiras said:

BTRFS ist, wenn ich es richtig verstanden habe gleich einem RAID 1

Nein, du kannst jedes RAID Level wählen. RAID0, 1, 5, 6, 10... BTRFS erlaubt sogar ein RAID1 über mehr als 2 Disks (dreifache, vierfache etc Spiegelung).

 

24 minutes ago, Tiras said:

Wenn ich einen Pool "vm" mit beiden NVMe´s und ein Share als "Only" erstellen würde, der Pfad /mnt/user/Sharename richtig, damit die beste Performance habe!?

Cache auf "Only", aber der Pfad für die beste Performance wäre /mnt/NameDesPools/Sharename. "/mnt/user" durchläuft immer zusätzliche Prozesse, egal welche Cache-Einstellung man gewählt hat.

 

 

Link to comment
49 minutes ago, mgutt said:

Nein, du kannst jedes RAID Level wählen. RAID0, 1, 5, 10...

 

Ah ok. Ich habe leider noch nicht herausgefunden wie....

In den einzelnen Disk habe ich bisher als File Systems xfs oder btrfs ausgewählt. Wie kann ich dann entscheiden, welches RAID Level ich nutzen möchte? Entscheidet das System das selbst anhand der hinzugefügten Disks im Pool und dem ausgewählten File System?

Link to comment

Ich habe jetzt noch ein paar Tests gemacht.

 

1. Alle NVMe´s als "unassigned Devices" konfiguriert und gemounted. Das Array wie beschrieben beibehalten.

1.1 35GB transfer von 1 TB -> 1 TB NVMe mit einer Übertragungsrate von 154MB/s (absolutes no-go, weil bis zu 3700 MBit/s im read/write für die NVMe)

 

2. Pool und Share für jede NVMe erstellt. Array ebenfalls beibehalten.

2.1 35GB transfer von 500GB -> 1 TB mit einer Übertragungsrate von 343MB/s (ebenfalls nicht akzeptable).

 

3. Windows 10 installiert und ein transfer von 500 -> 1 TB mit 1,97 GB/s gemacht. 

 

Hast du eine Idee wie die niedrige Übertragungsrate zustande kommt? Ich könnte mir vorstellen, dass die NVMe´s trotzdem auf das R/W der Disks im Array gedrosselt werden.

 

Edited by Tiras
Link to comment
5 minutes ago, Tiras said:

1.1 35GB transfer von 1 TB -> 1 TB NVMe mit einer Übertragungsrate von 154MB/s

Laut Anzeige oder wie gemessen? Wie kopiert? UD zeigt meiner Ansicht nach ziemlichen Blödsinn an, was die Übertragungsraten anbelangt.

 

Ein dd von NVME 1 auf 2 würde denke ich realistischere Werte anzeigen. Willst du ein Kommando haben?

 

6 minutes ago, Tiras said:

2.1 35GB transfer von 500GB -> 1 TB mit einer Übertragungsrate von 343MB/s (ebenfalls nicht akzeptable).

Womit wurde kopiert? Sicher, dass nicht /mnt/user im Spiel war?

 

7 minutes ago, Tiras said:

Ich könnte mir vorstellen, dass die NVMe´s trotzdem auf das R/W der Disks im Array gedrosselt werden.

Nein, läuft davon unabhängig.

Link to comment

Sorry für die Frage, aber was meinst du mit dd?

 

Ich habe die "unassigned Devices" NVMe´s gemountet. Ich gehe also davon aus, dass es sich dabei um /mnt/disks/Samsung_SSD_970_EVO_Plus_500GB_S4EVNF0M420811X handelt. Mit einem Notebook habe ich dann Zugriff auf die Festplatten. In 2 unterschiedlichen Windows Explorer Fenster schiebe ich die 35GB Datei von NVMe 1 nach NVMe 2.

 

Ich habe in den SMB extra configuration folgendes hinzugefügt:

[NVMe500]
path=/mnt/disks/Samsung_SSD_970_EVO_Plus_500GB_S4EVNF0M420811X
browseable=yes
quest ok=yes
writeable=yes
read only=no
create mask= 0775
directory mask = 0775

 

[NVMe1TB1]
path=/mnt/disks/Samsung_SSD_970_EVO_Plus_1TB_S4EWNF0M528071M
browseable=yes
quest ok=yes
writeable=yes
read only=no
create mask= 0775
directory mask = 0775

 

[NVMe1TB2]
path=/mnt/disks/Samsung_SSD_970_EVO_Plus_1TB_S4EWNF0M720873W
browseable=yes
quest ok=yes
writeable=yes
read only=no
create mask= 0775
directory mask = 0775

 

Das hat jedoch auch nichts gebracht. Aus irgendeinem Grund läuft hier etwas gewaltig schief...

Link to comment

Ich habe jetzt mal einen Datentransfer mit Krusader gemacht.

BIOS ist auf AHCI und UEFI konfiguriert. Ich erinnere mich aber, dass ich vor einigen Tagen, bevor ich die NVMe´s mit ZFS konfiguriert habe eine Datenübertragung von 1,97 GB/s hatte, als sie noch als "unassigned Device" waren.

Was mich auch wundert ist, dass bei meinem ersten Screenshot die GUI von unRAID bei der 2. NVMe ein Write von 731 MB/s anzeigt, aber im Windows nur 123 MB/s

Unbenannt3.PNG

Edited by Tiras
Link to comment
14 minutes ago, Tiras said:

Hier ein Screenshot deines Befehls

Du musst das checken, wenn der Transfer läuft

 

1 minute ago, Tiras said:

Ich habe jetzt mal einen Datentransfer mit Krusader gemacht.

Auch während dem Transfer wäre die Prozessliste von htop Interessant.

 

Link to comment
32 minutes ago, Tiras said:

Gleiches Übertragungsrate im xfs als auch ntfs als Pool/Share oder unassigned device.

Das glaube ich nicht. Schau mal in htop. Der NTFS mount Prozess lastet einen Kern komplett aus. So eine Auslastung gibt es nicht bei XFS/BTRFS. NTFS ist ja kein natives Linux Dateisystem. Ich wusste aber auch nicht, dass das so heftig ist.

 

Was für eine CPU hast du? Wirkt was schwach.

Link to comment
1 hour ago, mgutt said:

Das glaube ich nicht. Schau mal in htop. Der NTFS mount Prozess lastet einen Kern komplett aus. So eine Auslastung gibt es nicht bei XFS/BTRFS. NTFS ist ja kein natives Linux Dateisystem. Ich wusste aber auch nicht, dass das so heftig ist.

 

Was für eine CPU hast du? Wirkt was schwach.

Ok, dann bin ich mir ehrlich gesagt nicht mehr sicher, welches FS ich mit der richtigen Übertragungsrate hatte, sorry.

Ich habe eine Ryzen 5 2600 CPU verbaut, aber wie gesagt vorher nie Probleme mit der Übertragungsrate zwischen den NVMe´s gehabt.

 

31 minutes ago, hawihoney said:

 

Kopierst Du etwa über das Netzwerk von einer Server Platte auf eine andere? Da spielt dann auch das Netzwerk und der Klient eine Rolle.

 

Was genau steckt hinter /media?

 

 

Die Platten sind auf meinem Laptop als Netzlaufwerk eingebunden. In 2 Windows Explorer Fenster kopiere ich die Daten hin- und her. Das der Transfer über den Laptop geht kann ich ausschließen, da keine Netzwerkaktivität im Task Manager des Laptops zu sehen ist.

Was genau meinst du, was hinter /media steckt?

 

Gerade noch einmal ein Test gemacht, aber diesmal zwischen den Samsung Evo 970 Plus, da sie gleich sind.

Mich wundert wie gesagt, dass die NVMe 1 ein Read von 133,1 MB/s aber die NVMe 2 ein Write von 451 MB/s hat.

 

Ich würde die NVMe´s mal als XFS formatieren und dann noch einmal ein Test machen. Ich kann mir zwar nicht vorstellen, dass es daran liegt, aber es muss ja einen Grund geben, wieso die Disks nur auf  +- 10% laufen.

 

Unbenannt6.PNG

Unbenannt7.PNG

Unbenannt9.PNG

Link to comment

Wie gesagt. 80% Last auf einem Kern ist heftig. Du siehst auch, dass es nur einen Prozess pro NVMe gibt. Daher kann deine CPU auch nicht die volle Multi Core Leistung entfalten. 

 

7 minutes ago, Tiras said:

Ryzen 5 2600 CPU

Mit 2258 Single Threads Punkten schon stark:

https://www.cpubenchmark.net/cpu.php?cpu=AMD+Ryzen+5+2600&id=3243

 

Kann man mal sehen wie ineffizient NTFS in Linux ist. Gut zu wissen ^^

 

 

Link to comment
3 minutes ago, mgutt said:

Wie gesagt. 80% Last auf einem Kern ist heftig. Du siehst auch, dass es nur einen Prozess pro NVMe gibt. Daher kann deine CPU auch nicht die volle Multi Core Leistung entfalten. 

 

Mit 2258 Single Threads Punkten schon stark:

https://www.cpubenchmark.net/cpu.php?cpu=AMD+Ryzen+5+2600&id=3243

 

Kann man mal sehen wie ineffizient NTFS in Linux ist. Gut zu wissen ^^

 

 

Kannst du mir vielleicht kurz sagen, woran du erkennst - abgesehen von den Prozessen, dass nur 1 Kern 80% ausgelastet ist? In der oberen Grafik scheint für mich, dass alle Kerne ausgelastet werden.

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.