15 commentaires
le pattern classique avec SQPOLL pour les perfs max, c'est de ne pas appeler io_uring_wait_cqe qui re-rentre dans le kernel. le but de SQPOLL c'est de garder un kernel thread dédié qui poll les completions et t'évite les syscalls.
vérifie aussi la version de ton kernel. les perfs d'io_uring ont été énormément améliorées dans les versions récentes, genre 5.15+. t'es sur quoi?
ou mieux, io_uring_submit_and_wait avec IORING_ENTER_GETEVENTS en un seul syscall. ça réduit les transitions kernel/userspace.
je viens de tester. le pinning du thread io_uring sur un core dédié et surtout la modif pour utiliser io_uring_peek_cqe puis io_uring_enter avec IORING_ENTER_GETEVENTS quand besoin... c'est le jour et la nuit! le CPU userspace est tombé et la latence a disparu. c'était bien ça le problème. thx à tous!
Laisser une réponse
Vous devez être connecté pour poster un message !
salut tout le monde! j'essaie d'optimiser les i/o sur une appli de base de données custom en utilisant io_uring sur du NVMe. j'attends des perfs de malade mais je suis déçu.
iostatmontre que le NVMe est pas saturé mais le CPU userspace monte en flèche qd mon appli tourne. je comprends pas.