Mentre la finestra di unione di Linux 6.4 si chiude questo fine settimana, oggi, nell’ultimo giorno intero del periodo, Jens Axboe presenta il supporto pipe FMODE_NOWAIT come quello che ha descritto come un grande miglioramento delle prestazioni e dell’efficienza.
Con una precedente incarnazione del supporto FMODE_NOWAIT per le patch delle pipe, Axboe ha spiegato:
“Una cosa che è sempre stata un po’più lenta di quanto mi piacerebbe con io_uring è gestire le pipe. Non supportano IOCB_NOWAIT, quindi dobbiamo puntarle su io-wq per la gestione. Questa serie aggiunge il supporto per FMODE_NOWAIT alle pipe.”
Ma dove le cose si fanno davvero folli è la portata del guadagno in termini di prestazioni/efficienza che ne deriva:
“Curioso di sapere come Questo fa una grande differenza, ho scritto un piccolo benchmark che apre semplicemente 128 pipe e poi esegue 256 giri di lettura e scrittura su di esse.Questo è stato eseguito 10 volte, scartando la prima esecuzione perché è sempre un po’più lenta.Prima della patch:
Media: 262,52 msec
Stdev: 2,12 msec
Min: 261,07 msec
Max 267,91 msece dopo la patch:
Media: 24,14 msec
Stdev: 9,61 msec
Min: 17,84 msec
Max: 43,75 mseco un miglioramento delle prestazioni (ed efficienza) di circa 10 volte.
Ho eseguito le patch attraverso il tubo ltp e i test di giunzione, non sono state osservate regressioni. Guardando le tracce io_uring, possiamo vedere che non abbiamo più tracce io_uring_queue_async_work() dopo la patch, dove prima tutto veniva fatto tramite io-wq.”
In seguito aggiunto in quella serie di patch:
“Quanto sopra test era per una pipe vuota quando viene emessa la lettura, se il test viene modificato per avere dati quando, allora sembra ancora migliore:
Prima:
Media: 249,24 msec
Stdev: 0,20 msec
Min: 248,96 msec
Max: 249,53 msecDopo:
Media: 10,86 msec
Stdev: 0,91 msec
Min: 10,02 msec
Max: 12,67 mseco un miglioramento di circa 23 volte.”
Le patch impostate per l’unione in Linux 6.4 impostano il supporto FMODE_NOWAIT per le pipe ma lo disabilitano se si utilizza splice/vmsplice sulla pipe. Questa richiesta pull è ciò che è ora in attesa per il supporto pipe FMODE_NOWAIT.