Mặc dù cửa sổ hợp nhất Linux 6.4 sẽ đóng vào cuối tuần này, nhưng hôm nay, vào ngày cuối cùng của giai đoạn này, Jens Axboe gửi hỗ trợ FMODE_NOWAIT đường ống như những gì anh ấy mô tả là một cải tiến lớn về hiệu suất và hiệu quả.

Với phiên bản sớm hơn của hỗ trợ FMODE_NOWAIT dành cho các bản vá lỗi, Axboe giải thích:

“Một điều mà io_uring luôn chậm hơn một chút so với mong muốn của tôi là xử lý các đường ống. Chúng không hỗ trợ IOCB_NOWAIT và do đó chúng tôi cần chuyển chúng sang io-wq để xử lý. Loạt bài này bổ sung hỗ trợ cho FMODE_NOWAIT cho đường ống.”

Nhưng điều thực sự trở nên hoang dã là quy mô đạt được hiệu suất/hiệu quả từ nó:

“Tò mò về cách thức điều này tạo ra sự khác biệt lớn, tôi đã viết một điểm chuẩn nhỏ chỉ cần mở 128 đường dẫn và sau đó thực hiện 256 vòng đọc và ghi vào chúng. Quá trình này đã được chạy 10 lần, loại bỏ lần chạy đầu tiên vì nó luôn chậm hơn một chút. Trước bản vá:

Trung bình: 262,52 mili giây
Stdev: 2,12 mili giây
Tối thiểu: 261,07 mili giây
Tối đa 267,91 mili giây

và sau bản vá:

Trung bình: 24,14 mili giây
Stdev: 9,61 mili giây
Tối thiểu: 17,84 mili giây
Tối đa: 43,75 mili giây

hoặc khoảng 10 lần cải thiện hiệu suất (và hiệu quả).

Tôi đã chạy các bản vá thông qua thử nghiệm mối nối và đường ống ltp, không quan sát thấy hiện tượng hồi quy. Nhìn vào dấu vết io_uring, chúng tôi có thể thấy rằng chúng tôi không còn bất kỳ dấu vết io_uring_queue_async_work() nào sau bản vá, nơi trước đây mọi thứ được thực hiện thông qua io-wq.”

Sau đó đã thêm vào chuỗi bản vá đó:

“Phần trên kiểm tra là đường ống trống khi đọc được phát hành, nếu kiểm tra được thay đổi thành có dữ liệu khi nào, thì nó thậm chí còn tốt hơn:

Trước:

Trung bình: 249,24 mili giây
Stdev: 0,20 mili giây
Tối thiểu: 248,96 mili giây
Tối đa: 249,53 mili giây

Sau:

Trung bình: 10,86 mili giây
Stdev: 0,91 mili giây
Tối thiểu: 10,02 mili giây
Tối đa: 12,67 mili giây

hoặc khoảng 23 lần cải tiến.”

Các bản vá được thiết lập để hợp nhất vào Linux 6.4 đặt hỗ trợ FMODE_NOWAIT cho đường ống nhưng sẽ tắt nó nếu sử dụng splice/vmsplice trên đường ống. Yêu cầu kéo này hiện tại là gì đang chờ hỗ trợ đường ống FMODE_NOWAIT.

Categories: IT Info