Blog background

SSD-Schreibleistung unter Linux mit fstrim verbessern

Dieser Blogbeitrag erklärt, was das Tool fstrim bewirkt, warum es auf den meisten Linux-Distributionen standardmäßig wöchentlich ausgeführt wird und wie es hilft, SSDs zu beschleunigen

Dieser Blogpost wurde von einer Maschine aus dem Englischen übersetzt. Die Originalversion finden Sie hier: Increasing SSD Performance on Linux using Fstrim

Bitte kontaktieren Sie uns , wenn etwas nicht eindeutig beschrieben ist, nicht funktioniert, fehlerhaft erscheint oder wenn Sie Unterstützung benötigen.

Inhaltsverzeichnis

Was macht der Linux-Befehl fstrim?

fstrim ist ein Befehl in Linux, der verwendet wird, um das Dateisystem zu informieren, ungenutzte Blöcke auf einem Solid-State-Drive (SSD), Non-Volatile Memory Drive (NVME) oder einem Thin-Provisioning-Speichergerät zu verwerfen.

Wie eine SSD Daten im Vergleich zu einer HDD speichert

Solid-State-Drives (SSDs) funktionieren anders als herkömmliche Festplattenlaufwerke (HDDs), was die Speicherung und Änderung von Daten betrifft.

Im Gegensatz zu HDDs, die vorhandene Daten direkt überschreiben können, verwenden SSDs eine Technologie namens NAND (Not AND) Flash-Speicher , um Daten zu speichern, was einen komplexeren Prozess zum Schreiben und Ändern von Daten erfordert.

Wie eine SSD auf Blöcke schreibt, die noch nie zuvor beschrieben wurden

Im NAND-Flash-Speicher werden Daten in Speicherzellen gespeichert, die in Blöcken organisiert sind. Diese Blöcke müssen gelöscht werden, bevor neue Daten darauf geschrieben werden können. Wenn Dateien auf einer SSD gelöscht oder geändert werden, können die zuvor von diesen Dateien belegten Blöcke immer noch Daten enthalten, obwohl die Dateien im Dateisystem nicht mehr vorhanden sind. Diese übrig gebliebenen Daten werden als “Müll” oder “veraltete Daten” bezeichnet.

Das bedeutet, wenn neue Daten geschrieben werden müssen und der verfügbare Block noch vorhandene Daten enthält, muss der Controller ihn zuerst löschen, bevor die neuen Daten geschrieben werden. Dies dauert länger als das einfache Schreiben der Daten in einen bereits gelöschten Block. Dieses Phänomen wird als (eine von mehreren Ursachen für) Schreibverstärkung bei SSDs bezeichnet.

Warum SSDs Trimmen benötigen, um die Schreibgeschwindigkeit zu optimieren

Wenn Daten auf einer SSD gelöscht oder geändert werden, kann das Dateisystem die entsprechenden Blöcke als frei markieren, aber der Controller der SSD löscht den durch das Löschen der Datei verfügbar gewordenen Block möglicherweise nicht sofort. Dies liegt daran, dass Dateisysteme nur die “Referenzpunkte”, also die Metadateninformationen darüber, wo auf der Festplatte die Datei gespeichert ist, entfernen, anstatt die Datei vollständig zu überschreiben. Zum Beispiel dauert es lange, eine 10-GB-Datei zu speichern, aber nur eine halbe Sekunde, um sie zu löschen. Dies beweist, dass nicht alle 10 GB überschrieben wurden, sondern nur die Metadaten über die Existenz der Datei gelöscht werden, während die Daten selbst unberührt bleiben und immer noch auf der Festplatte gespeichert sind - sie sind nur für das Dateisystem nicht mehr zugänglich.

Wenn neue Daten auf die SSD geschrieben werden, muss der Controller daher möglicherweise zuerst diese zuvor verwendeten Blöcke löschen, bevor die neuen Daten geschrieben werden. Dies verlangsamt den vom Betriebssystem des Computers angeforderten Schreibvorgang.

Indem fstrim ausgeführt wird und der SSD-Controller über die nicht mehr verwendeten Blöcke informiert wird, kann der Controller diese Blöcke proaktiv während Leerlaufzeiten löschen, zum Beispiel nachts, wenn die Datenbank Ihres Webservers weniger beschäftigt ist.

Diese Operation wird standardmäßig auf Debian und Ubuntu Linux jeden Montag um 00:00 Uhr ausgeführt, was durch den folgenden systemd-Timer (ein systemd-Ersatz für Cron-Jobs) ausgelöst wird. Weitere Details zu systemd-Timern finden Sie in unserem Blogbeitrag, der systemd-Timer im Detail erklärt .

cat /etc/systemd/system/timers.target.wants/fstrim.timer
[Unit]
Description=Discard unused blocks once a week
Documentation=man:fstrim
ConditionVirtualization=!container
ConditionPathExists=!/etc/initrd-release

[Timer]
OnCalendar=weekly
AccuracySec=1h
Persistent=true
RandomizedDelaySec=6000

[Install]
WantedBy=timers.target

cat /usr/lib/systemd/system/fstrim.service
[Unit]
Description=Discard unused blocks on filesystems from /etc/fstab
Documentation=man:fstrim(8)
ConditionVirtualization=!container

[Service]
Type=oneshot
ExecStart=/sbin/fstrim --listed-in /etc/fstab:/proc/self/mountinfo --verbose --quiet-unsupported
PrivateDevices=no
PrivateNetwork=yes
PrivateUsers=no
ProtectKernelTunables=yes
ProtectKernelModules=yes
ProtectControlGroups=yes
MemoryDenyWriteExecute=yes
SystemCallFilter=@default @file-system @basic-io @system-service

Zusätzliche Überlegungen wie Wear Leveling

Abhängig von den internen Operationen und Algorithmen des SSD-Controllers löst die Ausführung von fstrim Hintergrundprozesse im SSD-Controller aus, wie z. B. Garbage Collection oder Wear Leveling, was zu zusätzlichen Schreibvorgängen auf der SSD führt.

Wear Leveling ist eine Technik, die in Solid-State-Laufwerken (SSDs) verwendet wird, um Schreib- und Löschzyklen gleichmäßig auf die NAND-Flash-Speicher -Zellen zu verteilen. Der Controller weist Daten dynamisch verschiedenen Zellen zu und stellt so sicher, dass jede Zelle über die Lebensdauer der SSD ungefähr gleich oft beschrieben und gelöscht wird. Dies verhindert, dass bestimmte Zellen übermäßig abgenutzt werden, und verlängert so die Gesamtlebensdauer der SSD.

Während der Hauptzweck von fstrim darin besteht, die Schreibverstärkung zu reduzieren, indem der SSD-Controller über ungenutzte Blöcke informiert wird, kann die Ausführung von fstrim selbst aufgrund dieser Hintergrundprozesse eine geringe Menge an Schreibverstärkung verursachen. Die Gesamtauswirkung auf die Schreibverstärkung ist jedoch im Vergleich zu den Vorteilen der Ausführung von fstrim zur Optimierung der SSD-Leistung typischerweise minimal.

Zusammenfassung

Zusammenfassend lässt sich sagen, dass das regelmäßige Trimmen Ihrer SSD mit dem fstrim-Befehl dazu beiträgt, eine konsistente Schreibleistung für SSDs aufrechtzuerhalten, indem Löschvorgänge von freigegebenen Blöcken zu Zeiten durchgeführt werden, in denen die Schreibgeschwindigkeit weniger benötigt wird (z. B. nachts, während Ihr Datenbankserver weniger Last hat). Dies minimiert unnötige Schreibvorgänge und reduziert die Auswirkungen der Schreibverstärkung, was letztendlich die Lebensdauer der SSD verlängert.