18 commentaires
hello t'utilises quelle version du kernel ? io_uring est tres sensible a ca. et t'as pense a IORING_SETUP_SQPOLL ? ca evite les transitions kernel/userspace
tu utilises O_DIRECT ? pour du log c souvent pertinent ca bypass le page cache et evite le double buffering mais ca demande des buffers alignes et de taille multiple du bloc physique du disk
pense aussi a io_uring_prep_fsync si tu as besoin de garanties de durabilite. et la capacite de batcher tes IOs. plutot que io_uring_submit apres chaque writev, tu peux en cumuler plusieurs et soumettre un coup.
le nombre de SQEs et CQEs dans ta ring est important aussi. si trop petit tu peux avoir des waits. essaie d'avoir un ring size suffisant pour tes pics de charge.
exactement. y'a de quoi faire. commence par SQPOLL c'est le plus simple a implementer et ca donne un bon boost.
Laisser une réponse
Vous devez être connecté pour poster un message !
salut le monde je bosse sur un agent de logs custom en C qui utilise
io_uringpour pousser des blocs de donnees sur disk. l'idee c'est d'avoir zero copie et max de throughput. mais je vois pas les perfs que j'attendais. le cpu est toujours un peu haut pour l'io. je write des buffers de 4k dans des fichiers.des idees pour gratter de la perf ?