Alors que la fenêtre de fusion Linux 6.4 se ferme ce week-end, aujourd’hui, le dernier jour complet de la période, Jens Axboe soumet le support FMODE_NOWAIT comme ce qu’il décrit comme une grande amélioration des performances et de l’efficacité.
Avec une version antérieure du support FMODE_NOWAIT pour les pipes correctifs, Axboe a expliqué :
“Une chose qui a toujours été un peu plus lente que je ne le souhaiterais avec io_uring concerne les tuyaux. Ils ne prennent pas en charge IOCB_NOWAIT, et nous devons donc les envoyer vers io-wq pour la gestion. Cette série ajoute la prise en charge de FMODE_NOWAIT aux canaux.”
Mais là où les choses deviennent vraiment folles, c’est l’ampleur du gain de performance/efficacité qui en découle :
“Curieux de savoir comment cela fait une grande différence, j’ai écrit un petit benchmark qui ouvre simplement 128 tubes, puis effectue 256 cycles de lecture et d’écriture.Cela a été exécuté 10 fois, en supprimant la première exécution car elle est toujours un peu plus lente.Avant le patch :
Moy : 262,52 msec
Stdev : 2,12 msec
Min : 261,07 msec
Max 267,91 msecet après le correctif :
Moy : 24,14 msec
Stdev : 9,61 msec
Min : 17,84 msec
Max : 43,75 msecsoit environ 10 fois plus de performances (et d’efficacité).
J’ai exécuté les correctifs à travers les tests de tuyau et d’épissure ltp, aucune régression n’a été observée. En regardant les traces io_uring, nous pouvons voir que nous n’avons plus de traces io_uring_queue_async_work() après le patch, là où auparavant tout se faisait via io-wq.”
Il plus tard ajouté dans cette série de correctifs :
“Ce qui précède test était pour un tube vide lorsque la lecture est émise, si le test est modifié pour avoir des données quand, alors il semble encore mieux :
Avant :
Avg : 249,24 msec
Stdev : 0,20 msec
Min : 248,96 msec
Max : 249,53 msecAprès :
Moy : 10,86 msec
Stdev : 0,91 msec
Min : 10,02 msec
Max : 12,67 msecsoit une amélioration d’environ 23 x.”
Les correctifs définis pour la fusion dans Linux 6.4 définissent la prise en charge de FMODE_NOWAIT pour les canaux, mais le désactivent si vous utilisez splice/vmsplice sur le tuyau. Cette pull request est ce qui est maintenant en attente pour le support du canal FMODE_NOWAIT.