Ich erstelle ein DM-Cache-Gerät mit meinem Skript: http://pastebin.com/KTSzL6EA
Tatsächlich werden folgende Befehle ausgeführt:
dmsetup create suse-cache-metadata --table 0 15872 linear /dev/mapper/suse-cache 0
dmsetup create suse-cache-blocks --table 0 125813248 linear /dev/mapper/suse-cache 15872
dmsetup create storagecached --table 0 2930266112 cache /dev/mapper/suse-cache-metadata /dev/mapper/suse-cache-blocks /dev/mapper/storage 512 1 writethrough default 0
dmsetup resume storagecached
auf einem 60 GB SSD LVM-Volume zum Zwischenspeichern einer 1,5 TB USB 2.0-Festplatte. Ich mounte das zwischengespeicherte DM-Gerät mit:
mount -t btrfs -o noatime,autodefrag,compress=lzo,space_cache /dev/mapper/storagecached /mnt/storage
Es scheint jedoch überhaupt nicht zu funktionieren. Mir ist aufgefallen, dass die externe Festplatte JEDES Mal hochfährt, wenn ich auf Inhalte auf einem zwischengespeicherten Gerät zugreife und jedes Mal, wenn ein Bot auf meine Website zugreift, obwohl diese vermutlich zwischengespeichert sein sollte. Das ist ziemlich ärgerlich und führt nach etwa einer Woche schließlich zu E/A-Fehlern, weil die externe Festplatte kontinuierliches Hoch- und Herunterfahren nicht bewältigen kann.
Ich habe mich entschlossen, tatsächlich einige Benchmarks durchzuführen, und das Kopieren einer 8 GB-Datei nach /dev/null mit dd
dem Befehl erreicht nur 40 MB/s. Das ist die gleiche Geschwindigkeit wie bei einer nicht zwischengespeicherten Festplatte. Immer. Sowohl beim Probelauf mit gelöschtem Cache als auch beim dritten oder vierten Lesen, das meiner Meinung nach zwischengespeichert werden sollte. Die für den Cache verwendete SSD erreicht 92 MB/s auf der Root-Partition. Natürlich habe ich nach jedem Benchmark den Linux-RAM-Cache gelöscht, um Leistungseinbußen durch RAM-Caching zu vermeiden.
Ich verwende dieses Skript tatsächlich auf zwei PCs und keiner von beiden scheint zu funktionieren. Ich weiß, dass Writethrough das Schreiben nicht beschleunigt, aber ich mache mir sowieso mehr Gedanken über das Lesen.
BEARBEITEN:
Nach der Untersuchung dmsetup status
der Protokolle ist mir aufgefallen, dass ich furchtbar niedrige Cache-Trefferquoten erhalte. Kann das an btrfs liegen?
Antwort1
DM-Cache braucht etwas Zeit, um Blöcke auf das Cache-Gerät zu übertragen. Anders als Linux-RAM-Cache erfordert die Standardrichtlinie von DM-Cache mindestens einige Lesevorgänge bestimmter Daten, um sie auf die SSD zu übertragen, normalerweise viele Lesevorgänge, mehr als 10. In Verbindung mit einer relativ großen Menge an freiem RAM in der Maschine kann es viel Zeit in Anspruch nehmen, DM-Cache zu „trainieren“. Wenn die Cachegröße der Menge an freiem RAM entspricht und häufig verwendete Daten viel Platz beanspruchen, kann es sein, dass es überhaupt nicht mehr ordentlich funktioniert.
Antwort2
Verwenden Sie lvmcache(7) für die Einrichtung, dann sind Sie viel zufriedener. Auch die Manpage ist sehr hilfreich, um loszulegen. Beachten Sie die Writeback-/Writethrough-Richtlinien und die SMQ-Caching-Richtlinie, die nur bei neueren (nach Kernel 4.2) Versionen standardmäßig aktiviert ist. Dies ist auch bei RHEL 7.2+ oder so die Standardeinstellung.
Sie können meinen Vortrag ansehen:https://www.youtube.com/watch?v=6W_xK5Ks-Lw oder lesen Sie die Folien:https://www.linuxdays.cz/2017/video/Adam_Kalisz-SSD_cache_testing.pdf