為了避免通過 IOCB_NOWAIT 選項等待管道以進一步增強 IO_uring 性能,Jens Axboe 已經實現了上述功能,並且在一個簡單的測試中看到了 10 到 23 倍的性能改進。

“在處理管道時,總是比我希望的 io_uring 慢一點。它們不支持 IOCB_NOWAIT,因此我們需要將它們放到 io-wq 中進行處理。本系列增加了對FMODE_NOWAIT 到管道,”Axboe 最新的補丁系列之一開始了。但更令人興奮的是該消息的結束方式:

很好奇這會產生多大的不同,我編寫了一個小型基準測試,它只打開 128 個管道,然後進行 256 輪讀寫他們。這運行了 10 次,丟棄了第一次運行,因為它總是有點慢。補丁前:

平均:262.52 毫秒
標準偏差:2.12 毫秒
最小:261.07 毫秒
最大 267.91 毫秒

補丁後:

平均:24.14 毫秒
標準偏差:9.61 毫秒
最小值: 17.84 毫秒
最大值:43.75 毫秒

或性能(和效率)提高約 10 倍。

我通過 ltp 管道和拼接測試運行補丁,沒有觀察到回歸。

雖然 10 倍的改進已經足夠令人興奮,但 Axboe 跟進實現了 23 倍的提升!

上面的測試是在發出讀取時管道為空,如果將測試更改為有數據時,那麼它看起來會更好:

之前:

Avg:249.24 毫秒
標準偏差:0.20 毫秒
最小值:248.96 毫秒
最大值:249.53 毫秒

之後:

平均值:10.86 毫秒
標準偏差:0.91毫秒
最小值:10.02 毫秒
最大值:12.67 毫秒

或大約 23 倍的改進。

希望對管道的 FMODE_NOWAIT 支持準備好發布今年夏天使用 Linux 6.4 內核。

Categories: IT Info