Walaupun tetingkap gabungan Linux 6.4 ditutup hujung minggu ini, hari ini pada hari penuh terakhir tempoh tersebut Jens Axboe menyerahkan sokongan FMODE_NOWAIT paip sebagai apa yang disifatkannya sebagai peningkatan prestasi dan kecekapan yang besar.
Dengan penjelmaan terdahulu sokongan FMODE_NOWAIT untuk paip tampalan, Axboe menjelaskan:
“Satu perkara yang sentiasa agak perlahan daripada yang saya mahukan dengan io_uring ialah berurusan dengan paip. Mereka tidak menyokong IOCB_NOWAIT, dan oleh itu kita perlu memasukkannya ke io-wq untuk pengendalian. Siri ini menambahkan sokongan untuk FMODE_NOWAIT pada paip.”
Tetapi apabila keadaan menjadi liar ialah skala keuntungan prestasi/kecekapan daripadanya:
“Ingin ingin tahu bagaimana besar perbezaan yang dibuat ini, saya menulis penanda aras kecil yang hanya membuka 128 paip dan kemudian melakukan 256 pusingan membaca dan menulis kepada mereka. Ini dijalankan 10 kali, membuang larian pertama kerana ia sentiasa lebih perlahan. Sebelum tampalan:
Purata: 262.52 msec
Stdev: 2.12 msec
Min: 261.07 msec
Maks 267.91 msecdan selepas tampung:
Purata: 24.14 msec
Stdev: 9.61 msec
Min: 17.84 msec
Maks: 43.75 msecatau kira-kira peningkatan 10x ganda dalam prestasi (dan kecekapan).
Saya menjalankan tampalan melalui paip ltp dan ujian sambatan, tiada regresi diperhatikan. Melihat pada jejak io_uring, kita dapat melihat bahawa kita tidak lagi mempunyai sebarang jejak io_uring_queue_async_work() selepas tampalan, di mana sebelum ini semuanya dilakukan melalui io-wq.”
Dia kemudiannya ditambah dalam siri tampung itu:
“Perkara di atas ujian adalah untuk paip kosong apabila bacaan dikeluarkan, jika ujian ditukar untuk mempunyai data apabila, maka ia kelihatan lebih baik:
Sebelum:
Purata: 249.24 msec
Stdev: 0.20 msec
Min: 248.96 msec
Maks: 249.53 msecSelepas:
Purata: 10.86 msec
Stdev: 0.91 msec
Min: 10.02 msec
Maks: 12.67 msecatau kira-kira peningkatan 23x ganda.”
Tampalan yang ditetapkan untuk bergabung ke dalam Linux 6.4 menetapkan sokongan FMODE_NOWAIT untuk paip tetapi lumpuhkannya jika menggunakan sambung/vmsplice pada paip. Permintaan tarik ini ialah apa yang berlaku sekarang menunggu untuk sokongan FMODE_NOWAIT paip.