Wir haben mmap in unserer Rust-Query-Engine durch io_uring ersetzt – und es wurde langsamer
We Replaced MMAP with Io_uring in Our Rust Query Engine. It Got Slower

Conviva analysiert Billionen von Events pro Tag mit einer Query-Engine auf Basis von DataFusion, Arrow, Rust, Rayon und Tokio. Unter Last führte mmap zu Page-Cache-Thrashing: p95 stieg von 30 auf über 150 Sekunden, und mehr Pods machten es schlimmer, weil sie sich denselben hostweiten Cache teilten. Der Wechsel zu io_uring mit O_DIRECT senkte die Major Faults um den Faktor 35, doch die Minor Faults stiegen auf 8,6 Millionen, und die Query-Zeit verschlechterte sich von 13,6 auf 21,8 Sekunden.
Unter Last waren Page-Cache-Thrashing und Lock-Contention auf Kernel-Ebene der Engpass – nicht die Disk-I/O.
- jandrewrogers
Ein Problem hierbei ist, dass mmap und io_uring im Performance-Kontext grundlegend unterschiedliche Softwarearchitekturen erfordern. Man sollte sie nicht einfach austauschen.
APIs wie io_uring erlauben es einem, in Kombination mit O_DIRECT einen eigenen workload-spezifischen Userspace-Scheduler von Grund auf zu entwerfen. Wenn man das Scheduling an eine Runtime delegiert, hat man die meisten Performancevorteile verwirkt, für die diese APIs entwickelt wurden. In vielen Fällen wird die Performance schlechter sein. Im Gegensatz dazu delegiert mmap implizit alle Scheduling-Entscheidungen und hat einige Vorteile, wenn Delegation die eigene Strategie ist, verglichen mit einer Runtime.
Die Vorteile von io_uring sind begrenzt, wenn man sich nicht dazu verpflichtet, eigene Scheduler zu entwerfen. Positiv ist, dass erfahrene Scheduler-Designer mit diesen APIs im Vergleich zu mmap die Performance um substanzielle ganzzahlige Faktoren steigern können. Anwendungsspezifische Scheduler zu entwerfen ist nicht einfach, es ist eine hochqualifizierte Tätigkeit. Aber die Belohnung ist real.
io_uring richtig einzusetzen erfordert, voll auf die Softwarearchitektur zu setzen, die es benötigt, um zu zeigen, was es leisten kann.
- laserbeam
Das eigentliche Problem hier ist, dass es einen Teil 2 gibt (am Ende des Artikels verlinkt), in dem sie die io_uring-Implementierung doppelt so schnell wie mmap bekommen. Es ist also ein Clickbait-Titel für einen Teil 1, der in Teil 2 aufgelöst wird.
Sie haben also zwei Artikel rausgehauen, von denen einer nur Ragebait ist. Und beide scheinen von einem LLM geschrieben zu sein. Vielleicht haben sie ein paar coole Tipps, vielleicht auch nicht ... aber es ist kein Format, das ich gerne lese.
- londons_explore
Es gibt ein Muster in der Softwareentwicklung:
* Projekt existiert
* Neue Mitarbeiter kommen mit einer Idee zur Effizienzsteigerung
* Monate werden mit der Implementierung verbracht. Der alte Codepfad wird zum Legacy-Code.
* Das neue Ding bekommt während der Entwicklung zusätzliche Features drangebastelt.
* Die Effizienz des neuen Dings stellt sich als schlechter heraus als die des Originals, aber jetzt sind die neuen Features und 'weniger technische Schulden' die Treiber.
* Das neue Ding wird gelauncht, das alte wird deprecated, aber all die monatelange Arbeit bringt kaum echten Nutzen.