Ich mache mir weder Gedanken über die RAM-Auslastung (da ich genug habe) noch über Datenverluste im Falle eines versehentlichen Herunterfahrens (da meine Stromversorgung gesichert ist, ist das System zuverlässig und die Daten sind nicht kritisch). Aber ich verarbeite viele Dateien und könnte eine Leistungssteigerung gebrauchen.
Aus diesem Grund möchte ich das System so einrichten, dass mehr RAM für das Lese- und Schreib-Caching des Dateisystems verwendet wird, um Dateien vorab aggressiv abzurufen (z. B. die gesamte Datei, auf die eine Anwendung zugreift, vorauslesen, falls die Datei eine vernünftige Größe hat oder zumindest Lesen Sie einen großen Teil davon vor (andernfalls) und leeren Sie die Schreibpuffer weniger häufig. Wie kann das erreicht werden?
Ich verwende ext3- und ntfs-Dateisysteme (ich verwende viel ntfs!) Mit XUbuntu 11.10 x86.
sudo mount -o ro,nobarrier /path/to/mountpoint
oder passen Sie es/etc/fstab
an, um esnobarrier
für jedes Dateisystem einzuschließen, das Sie für eine verbesserte Leistung opfern möchten . Wenn Ihr Speichergerät jedoch über einen internen Akku wie die Intel 320 SSD-Serie verfügt,nobarrier
verursacht die Verwendung keinen Datenverlust.Antworten:
Die Verbesserung der Disk - Cache Performance im Allgemeinen ist mehr als nur die Dateisystem - Cache - Größe zu erhöhen , wenn Ihr gesamtes System in RAM paßt , in dem Fall , dass Sie RAM - Laufwerk verwendet werden sollen (
tmpfs
ist gut , weil es erlaubt , zurück auf der Platte fallen , wenn Sie die RAM in einigen Fällen müssen) für die Laufzeitspeicherung (und möglicherweise ein initrd-Skript, um das System beim Start vom Speicher auf das RAM-Laufwerk zu kopieren).Sie haben nicht festgestellt, ob es sich bei Ihrem Speichergerät um eine SSD oder eine Festplatte handelt. Hier ist, was ich gefunden habe, um für mich zu arbeiten (in meinem Fall
sda
ist ein HDD angebracht an/home
undsdb
ist SSD angebracht an/
).Optimieren Sie zuerst den Teil zum Laden des Materials vom Speicher zum Cache:
Hier ist mein Setup für die Festplatte (stellen Sie sicher, dass AHCI + NCQ im BIOS aktiviert ist, wenn Sie umschalten):
Beachten Sie, dass das Festplattengehäuse hoch
fifo_expire_async
(normalerweise schreibend) und lang istslice_sync
, damit ein einzelner Prozess einen hohen Durchsatz erzielt (aufslice_sync
eine niedrigere Anzahl eingestellt, wenn mehrere Prozesse gleichzeitig auf Daten von der Festplatte warten). Dasslice_idle
ist immer ein Kompromiss für HDDs , aber es irgendwo in Reichweite Einstellung 3-20 sollte je nach Festplattennutzung und Disk - Firmware in Ordnung sein. Ich bevorzuge es, auf niedrige Werte zu zielen, aber eine zu niedrige Einstellung zerstört Ihren Durchsatz. Diequantum
Einstellung scheint den Durchsatz stark zu beeinflussen, aber versuchen Sie, dies so gering wie möglich zu halten, um die Latenz auf einem vernünftigen Niveau zu halten. Einequantum
zu niedrige Einstellung zerstört den Durchsatz. Werte im Bereich von 3 bis 8 scheinen mit Festplatten gut zu funktionieren. Die ungünstigste Wartezeit für einen Lesevorgang ist (quantum
*slice_sync
) + (slice_async_rq
*slice_async
) ms wenn ich das kernelverhalten richtig verstanden habe. Der asynchrone Modus wird hauptsächlich für Schreibvorgänge verwendet. Da Sie bereit sind, das Schreiben auf die Festplatte zu verzögern, sollten Sie beideslice_async_rq
undslice_async
sehr niedrige Werte festlegen . Wenn Sie jedoch einenslice_async_rq
zu niedrigen Wert einstellen , werden die Lesevorgänge möglicherweise unterbrochen, da die Schreibvorgänge nach den Lesevorgängen nicht mehr verzögert werden können. Meine Config wird versuchen , nach 10 Sekunden auf den meisten Daten auf der Festplatte zu schreiben , nachdem die Daten übergeben wurde auf Kernel aber da Sie Datenverlust bei Stromausfall tolerieren können auch eingestellt ,fifo_expire_async
um3600000
zu sagen , dass 1 Stunde für die Verzögerung auf der Festplatte in Ordnung ist. Halten Sie denslice_async
Wert jedoch niedrig, da ansonsten eine hohe Leselatenz auftreten kann.Der
hdparm
Befehl ist erforderlich, um zu verhindern, dass AAM einen Großteil der von AHCI + NCQ zugelassenen Leistung beeinträchtigt. Wenn Ihre Festplatte zu laut ist, überspringen Sie diese.Hier ist mein Setup für SSD (Intel 320 Serie):
Hier sind die niedrigen Werte für verschiedene Slice-Einstellungen zu beachten. Die wichtigste Einstellung für eine SSD ist
slice_idle
die Einstellung 0-1. Das Setzen auf Null verschiebt alle Sortierentscheidungen zu nativem NCQ, während das Setzen auf 1 es dem Kernel ermöglicht, Anforderungen zu sortieren (aber wenn der NCQ aktiv ist, kann die Hardware die Sortierung des Kernels teilweise außer Kraft setzen). Testen Sie beide Werte, um festzustellen, ob Sie den Unterschied erkennen können. Für 320 Serie Intel scheint es , dass Einstellungslide_idle
zu0
den besten Durchsatz gibt aber Einstellung es1
gibt am besten (niedrigsten) Gesamtlatenz.Weitere Informationen zu diesen Tunables finden Sie unter http://www.linux-mag.com/id/7572/ .
Nachdem wir den Kernel so konfiguriert haben, dass Daten mit vernünftiger Leistung von der Festplatte in den Cache geladen werden, ist es an der Zeit, das Cache-Verhalten anzupassen:
Gemäß den Benchmarks, die ich durchgeführt habe, würde ich mir überhaupt nicht die Mühe machen, vorausgelesene Daten zu setzen
blockdev
. Die Standardeinstellungen des Kernels sind in Ordnung.Stellen Sie das System so ein, dass das Auslagern von Dateidaten dem Anwendungscode vorgezogen wird (dies spielt keine Rolle, wenn Sie über genügend RAM verfügen, um das gesamte Dateisystem und den gesamten Anwendungscode sowie den gesamten von den Anwendungen im RAM zugewiesenen virtuellen Speicher zu behalten ). Dadurch wird die Wartezeit für den Austausch zwischen verschiedenen Anwendungen über die Wartezeit für den Zugriff auf große Dateien von einer einzelnen Anwendung aus verringert:
Wenn Sie es vorziehen, Anwendungen fast immer im RAM zu behalten, können Sie dies auf 1 setzen. Wenn Sie dies auf Null setzen, wird der Kernel überhaupt nicht ausgetauscht, es sei denn, dies ist unbedingt erforderlich, um OOM zu vermeiden. Wenn der Arbeitsspeicher begrenzt ist und Sie mit großen Dateien arbeiten (z. B. HD-Videobearbeitung), ist es möglicherweise sinnvoll, diesen Wert auf nahezu 100 festzulegen.
Heutzutage (2017) bevorzuge ich es, überhaupt keinen Swap zu haben, wenn du genug RAM hast. Wenn Sie keinen Swap haben, verlieren Sie normalerweise 200-1000 MB RAM auf einem lang laufenden Desktop-Computer. Ich bin bereit, so viel zu opfern, um Wartezeiten im schlimmsten Fall zu vermeiden (Austausch von Anwendungscode, wenn der RAM voll ist). In der Praxis bedeutet dies, dass ich OOM Killer dem Tauschen vorziehe. Wenn Sie das Austauschen zulassen / benötigen, möchten Sie möglicherweise auch die Anzahl erhöhen
/proc/sys/vm/watermark_scale_factor
, um eine gewisse Latenz zu vermeiden. Ich würde Werte zwischen 100 und 500 vorschlagen. Sie können diese Einstellung als Handelswert für die CPU-Auslastung betrachten, um die Swap-Latenz zu verringern. Der Standardwert ist 10 und der maximal mögliche Wert 1000. Ein höherer Wert sollte (gemäß der Kerneldokumentation ) zu einer höheren CPU-Auslastung fürkswapd
Prozesse und einer geringeren Gesamtwartezeit für das Austauschen führen.Als nächstes teilen Sie dem Kernel mit, dass er die Verzeichnishierarchie lieber im Speicher als im Dateiinhalt belassen soll, falls RAM freigegeben werden muss.
Rahmen
vfs_cache_pressure
Ein zu niedriger Wert ist sinnvoll, da der Kernel in den meisten Fällen die Verzeichnisstruktur kennen muss, bevor er Dateiinhalte aus dem Cache verwenden kann. Wenn der Verzeichnis-Cache zu früh geleert wird, wird der Datei-Cache nahezu wertlos. Ziehen Sie in Betracht, mit dieser Einstellung auf 1 zu gehen, wenn Sie viele kleine Dateien haben (mein System verfügt über etwa 150.000 Fotos mit 10 Megapixeln und zählt als System mit vielen kleinen Dateien). Setzen Sie es niemals auf Null, oder die Verzeichnisstruktur bleibt immer im Speicher, auch wenn das System nicht genügend Speicher hat. Dies auf einen hohen Wert zu setzen ist nur dann sinnvoll, wenn Sie nur wenige große Dateien haben, die ständig neu gelesen werden (auch hier wäre HD-Videobearbeitung ohne genügend RAM ein Beispiel). Die offizielle Kernel-Dokumentation besagt, dass "Ausnahme: Wenn Sie eine wirklich große Menge an Dateien und Verzeichnissen haben und selten alle Dateien berühren / lesen / auflisten, die
vfs_cache_pressure
höher als 100 sind, kann dies sinnvoll sein. Dies gilt nur, wenn Sie nicht über genügend RAM verfügen und nicht die gesamte Verzeichnisstruktur im RAM behalten können und dennoch über genügend RAM für den normalen Dateicache und die normalen Prozesse verfügen (z. B. firmenweiter Dateiserver mit vielen Archivinhalten). Wenn Sie der Meinung sind, dass Sie aufvfs_cache_pressure
über 100 ansteigen müssen, verfügen Sie nicht über genügend RAM. Erhöhenvfs_cache_pressure
kann helfen, aber die einzige echte Lösung ist, mehr RAM zu bekommen. Wenn Sievfs_cache_pressure
eine hohe Anzahl von Opfern eingestellt haben, bedeutet dies, dass die durchschnittliche Leistung insgesamt stabiler ist.Schließlich weisen Sie den Kernel an, bis zu 99% des Arbeitsspeichers als Cache für Schreibvorgänge zu verwenden, und weisen Sie den Kernel an, bis zu 50% des Arbeitsspeichers zu verwenden, bevor der zu schreibende Prozess verlangsamt wird (Standard für
dirty_background_ratio
ist10
). Warnung: Ich persönlich würde dies nicht tun, aber Sie haben behauptet, über genügend RAM zu verfügen und sind bereit, die Daten zu verlieren.Und sagen Sie, dass eine Schreibverzögerung von 1 Stunde in Ordnung ist, um überhaupt mit dem Schreiben von Dingen auf die Festplatte zu beginnen (wieder würde ich dies nicht tun):
Wenn Sie all diese
/etc/rc.local
Elemente an das Ende setzen und "following" einfügen, wird alles so schnell wie möglich nach dem Booten im Cache gespeichert (tun Sie dies nur, wenn Ihr Dateisystem wirklich in den Arbeitsspeicher passt):Oder eine etwas einfachere Alternative, die möglicherweise besser funktioniert (nur Cache
/home
und dies/usr
nur tun, wenn Sie/home
und/usr
wirklich in RAM passen):quelle
Erstens empfehle ich NICHT, weiterhin NTFS zu verwenden, da die Implementierung von ntfs unter Linux jederzeit zu Leistungs- und Sicherheitsproblemen führen kann.
Sie können verschiedene Dinge tun:
ext4
oderbtrfs
bfq
preload
systemd
das Vorladen beim BootenVielleicht möchten Sie es versuchen :-)
quelle
btrfs
es sich um ein kürzlich entwickeltes Dateisystem handelt, würde ich dies vermeiden, wenn Leistung benötigt wird. Wir haben ansonsten identische Systeme mitbtrfs
undext4
Dateisystemen ausgeführt undext4
gewinnen in der realen Welt mit großem Spielraum (btrfs
scheint etwa 4-fache CPU-Zeit zu erfordern, dieext4
für dasselbe Leistungsniveau erforderlich ist und mehr Festplattenoperationen für einen einzigen logischen Befehl verursacht). Je nach Arbeitsbelastung würde ich vorschlagenext4
,jfs
oderxfs
für jede Leistung anspruchsvolle Arbeit.Lesen Sie weiter:
Auf 32-Bit-Systemen:
Auf 64-Bit-Systemen:
Hinter den Cache schreiben:
Dadurch wird bis zu 100% Ihres freien Speichers als Schreibcache verwendet.
Oder Sie können alles daran setzen und tmpfs verwenden. Dies ist nur relevant, wenn Sie über genügend RAM verfügen. Setzen Sie dies in
/etc/fstab
. Ersetzen Sie 100 G durch die Größe des physischen RAM.Dann:
Verwenden Sie dann / mnt / tmpfs.
quelle
Sie können die Vorauslesegröße mit festlegen
blockdev --setra sectors /dev/sda1
, wobei Sektoren die gewünschte Größe in 512-Byte-Sektoren ist.quelle
Meine Killereinstellung ist sehr einfach und sehr effektiv:
Die Erklärung aus der Kerneldokumentation :
vfs_cache_pressure
Bei 2000 wird der Großteil des Computing im RAM ausgeführt und sehr spät geschrieben.quelle
vfs_cache_pressure
zu hoch2000
einstellen (was ich für zu hoch halte ), wird der Festplattenzugriff selbst für einfache Dinge wie Verzeichnislisten, die leicht in den Cache passen sollten, unnötig. Wie viel RAM haben Sie und was machen Sie mit dem System? Wie ich in meiner Antwort schrieb, ist die Verwendung eines hohen Werts für diese Einstellung beispielsweise für die HD-Videobearbeitung mit begrenztem RAM sinnvoll.Nicht im Zusammenhang mit Schreibcaching, sondern mit Schreibvorgängen:
Für ein ext4-System können Sie das Journaling vollständig deaktivieren
Dadurch wird die Anzahl der Schreibvorgänge auf der Festplatte für ein bestimmtes Update verringert, das Dateisystem befindet sich jedoch möglicherweise nach einem unerwarteten Herunterfahren in einem inkonsistenten Zustand.
So verhindern Sie, dass Festplattenlesevorgänge Schreibvorgänge auslösen:
Mount mit der Option relatime oder noatime
Wenn Sie eine Datei lesen, werden normalerweise die Metadaten zum Zeitpunkt des letzten Zugriffs für diese Datei aktualisiert. Die
noatime
Option deaktiviert dieses Verhalten. Dadurch werden unnötige Schreibvorgänge auf der Festplatte reduziert, die Metadaten sind jedoch nicht mehr verfügbar. Einige Distributionen (z. B. Manjaro) haben dies als Standard für alle Partitionen übernommen (wahrscheinlich, um die Lebensdauer früherer SSD-Modelle zu erhöhen).relatime
Aktualisiert die Zugriffszeit seltener, je nach Heuristik, die zur Unterstützung von Anwendungen beiträgt, die atime verwenden. Dies ist die Standardeinstellung unter Red Hat Enterprise Linux.Andere Optionen:
quelle