ZFS schreibt nicht kontinuierlich in das Array

402
MobiusOne

Vorwort: Ich bin keinesfalls ein erfahrener Linux-Benutzer, aber ich habe genug mit Linux gespielt, um gefährlich zu sein.

Ich baue einen Personal Server, der im Grunde nur als Speicher für Videos und Fotos dient. Aktuelle Spezifikationen sind wie folgt:

  • Gigabyte GA-G41M-ES2L-Motherboard
  • Core 2 Duo E6750 (2,66 GHz) CPU
  • 4 GB DDR2-RAM
  • Vantec UGT-ST644R PCIe-SATA-Karte (kein RAID verwendet)
  • 2 × 1,5 TB und 2 × 1,0 TB Festplatten
  • 64 GB SSD (für das Startlaufwerk)

Ich habe Ubuntu Server 14.04.3 LTS auf der SSD installiert, wobei ZFSonLinux wie hier (Ars Technica) installiert ist . Ebenfalls installiert ist Samba (Version 4.1.6-Ubuntu), mit dem ich von den restlichen Computern (Windows 7 und höher) (zwei oder höchstens drei) auf den Server zugreifen kann.

Alle vier Laufwerke sind an die Vantec-Controllerkarte angeschlossen, und jedes Paar wird gespiegelt und zum ZPool hinzugefügt, sodass insgesamt 2,5 TB Speicherplatz zur Verfügung stehen. Die SSD ist direkt an die Bordsteuerung angeschlossen.

Wenn es funktioniert, funktioniert es wunderbar, aber ...

Wenn ich große Datenmengen in das Array schreibe, "schreiben" die ersten 500 MB gerade in Ordnung (in den Cache nehme ich an), dann wartet ZFS ca. 30 Sekunden (überwacht mit zpool iostat <pool_name> 1) und schreibt 350 MB aus dem Cache Während das Array mehr Daten akzeptiert, wartet es ca. 30 Sekunden, schreibt ≈350 MB aus dem Cache-Speicher in das Array, während weitere Daten akzeptiert werden, und wartet ca. 30 Sekunden, bis die Übertragung abgeschlossen ist. In diesen 30-Sekunden-Brocken macht es nichts (0 in, 0 out), es sitzt nur im Leerlauf.

Die Netzwerkverbindung ist (zu meiner großen Überraschung) in der Lage, die 350 MB in etwa 5 Sekunden zu füllen, wodurch während des gesamten Vorgangs eine Menge Totzeit verbleibt.

Gibt es eine Möglichkeit, diesen Engpass / "Atmen" zu beseitigen?

Ich habe versucht, den zfs_txg_timeoutWert zu ändern (Standardeinstellung ist 5 Sekunden, daher ist dies unwahrscheinlich, aber 1 Sekunde scheint nicht zu helfen).

Ich habe auch die minimalen und maximalen Cache-Werte auf 2 GB bzw. 3 GB gesetzt, aber es beginnt immer noch mit einem relativ kleinen Cache und wächst langsam . Ich habe mir dabei den Speicher des Systems angeschaut, und ZFS scheint zögern, den RAM-Verbrauch schnell zu erhöhen, selbst wenn alles darauf wartet.

Ich mag die Art und Weise, wie ZFS mir erlaubt, über verschiedene Größen von vdevs zu streifen, aber das beschriebene Verhalten macht es unbenutzbar, große Datenmengen zuverlässig darauf zu übertragen.

Irgendwelche Vorschläge, um entweder das aktuelle Setup zu korrigieren oder eine Alternative, die vergleichbar funktioniert? Vielen Dank im Voraus für die Einsicht. Wenn Sie weitere Informationen benötigen, lassen Sie es mich wissen.

Seitennotizen:

  1. Ich habe einen lokalen Festplattenbenchmark für das Array ausgeführt, und das gleiche Verhalten stellte sich auch dort dar, wobei sowohl die Windows-Computer als auch das Netzwerk ausgeschlossen wurden.
  2. Laufen syncscheint etwas Gutes zu tun, aber nicht dauerhaft oder dauerhaft.
  3. Der Speicher für diese Konfiguration ist maximal, aber ich denke nicht, dass es sofort das Problem ist, das zur Hand ist.
  4. Ich hoffe, dass es sich hierbei nicht um ein Controller-Problem handelt (ich habe keinen anderen, und die Platine hat nur vier Ports (einen für die SSD, drei übrig).
  5. Die meisten Quellen scheinen zu sagen, dass eine ZIL-Platte in meiner Situation nicht hilfreich ist.

Updates (1. September 2015):

  1. Ich habe FreeNAS auf derselben Hardware mit der gleichen Array-Topologie installiert und stieß auf das gleiche Problem. Dies bedeutet, dass das Problem wahrscheinlich Hardware ist.
  2. Zu diesem Zweck habe ich drei der vier Laufwerke in den internen Controller eingebaut und daraus ein Array erstellt. Problem gelöst! Kontinuierliche Schreibvorgänge erreicht. Zugegeben, ich muss eine neue SATA-Karte finden, aber zumindest funktioniert es jetzt theoretisch.
2
Hallo MobiusOne. Bitte bearbeiten Sie Ihre Frage nicht, um sie zu beantworten. Stellen Sie die Lösung stattdessen als eigene Antwort (Selbstantwort) auf und akzeptieren Sie diese. Dies sagt der Community, dass Sie der Meinung sind, dass Ihre Frage beantwortet wurde. Es sieht so aus, als sollte Ihre letzte Bearbeitung als Selbstantwort durchaus akzeptabel sein, wenn sie nur leicht umformuliert wird, um mehr wie eine Antwort zu lesen. a CVn vor 8 Jahren 2
Und nein, ein ZIL wird höchstwahrscheinlich nicht helfen. Technisch gesehen handelt es sich hierbei um ein SLOG-Gerät (in einem ZFS-Pool gibt es immer eine ZIL, auch wenn es nicht auf einem separaten Speichergerät aufbewahrt wird). Trotzdem hilft es nur bei synchronen Schreibvorgängen, was ein sehr kleiner Teil einer normalen Funktion ist Workstation-ähnlicher E / A-Workflow. a CVn vor 8 Jahren 0
Bei diesem und anderen ähnlichen Problemen sollten Sie als Erstes am Ausgang von `iostat -x 'nachsehen, wo der eigentliche Engpass liegt. qasdfdsaq vor 8 Jahren 0

0 Antworten auf die Frage