Ich habe eine Echtzeitanwendung, die Daten immer sequentiell mit etwa 50 MB/s auf eine RAID 10-Festplattenkonfiguration schreibt. Sie verwendet mmap und das Schreiben sollte nie durch wartende E/A blockiert werden.
Dann kommt es manchmal zu großen Leseschüben, z. B. wenn ich 500 GB sequentielle Daten so schnell wie möglich vom Laufwerk lesen möchte. Dies führt jedoch möglicherweise nicht zu einer E/A-Blockierung der Schreibanwendung.
Wir lösen dies derzeit, indem wir die Schreibanwendung auf SCHED_FIFO einstellen und dann CFQ I/O Scheduler + I/O nice für die Leseanwendungen verwenden. Das funktioniert gut, ist aber etwas ineffizient, da die Laufwerke viel hin und her suchen müssen, um sowohl zu schreiben als auch zu lesen.
Ich frage mich, ob es Strategien gibt, um das zu verbessern? Das Systemlaufwerk ist ein schnelles 256-GB-SSD-Laufwerk. Könnte ich Linux irgendwie dazu bringen, auf die SSD zu schreiben, während Platz vorhanden ist und Lesevorgänge stattfinden? Ist das beispielsweise mit bcache, dmcache oder einem anderen Modul möglich? D. h. es würde nur auf die SSD schreiben, während Lesevorgänge auf der Festplatte stattfinden, und es dann später auf die Festplatte auslagern. Wenn der SSD-Cache „voll“ ist, sollten die Schreibvorgänge auf der Festplatte volle Priorität vor den Lesevorgängen haben.