io_uring ohne Readahead: Warum Turso 4,8 Millionen Cache-Misses mehr kassiert
Io_uring Without Readahead
Ein PR für Turso implementiert Readahead für den io_uring-Backend. Die Messungen zeigen: Mit Readahead sinkt die Zahl der Geräte-Requests von ~196.000 auf ~16.300, weil der Block-Layer benachbarte Requests zusammenführt. Ohne Readahead leidet io_uring unter fehlender Parallelität – nur ein SQE ist gleichzeitig in der Warteschlange. Der Autor analysiert zudem die Kosten von SQ-Polling (65% der CPU-Zyklen im Polling-Thread) und zeigt, dass O_DIRECT die CPU-Caches umgeht, was zu mehr Cache-Misses führt. Ein Vergleich mit dem syscall-Backend: 8,55s vs. 3,02s für Q6.
Mit O_DIRECT schreibt die Disk die Daten direkt in den Prozesspuffer, ohne den Kopierschritt – das bedeutet, die CPU wird nicht in den Prozess einbezogen, also wird nichts in die CPU-Caches kopiert.