Jens Axboe, twórca io_uring oraz planerów wejścia/wyjścia CFQ, Deadline i Noop, kontynuuje swoje eksperymenty z optymalizacją wejścia/wyjścia w jądrze Linux. Tym razem zwrócił uwagę na planery wejścia/wyjścia BFQ i mq-deadline, które okazały się wąskim gardłem przynajmniej w przypadku szybkich dysków NVMe.
Jak wykazało badanie sytuacji, jedną z kluczowych przyczyn nieoptymalnej wydajności podsystemów planerów wejścia/wyjścia były problemy z konkurencyjnymi blokadami (lock contention, próba uzyskania blokady, trzymanej przez inny wątek). Dzięki środkom mającym na celu zmniejszenie konkurencji podczas przetwarzania blokad, takim jak serializacja dyspozycji i wstawianie żądań, wydajność planerów wzrosła w wielu sytuacjach wielokrotnie (w IOPS).
Podczas testowania planera BFQ za pomocą narzędzia fio, wydajność wzrosła z 567K do 1551K operacji wejścia/wyjścia na sekundę, a konkurencja blokad spadła z 96% do 30%. W przypadku mq-deadline wydajność po zastosowaniu proponowanych poprawek przy użyciu dysku NVMe wzrosła z 1070K do 2560K operacji wejścia/wyjścia na sekundę (IOPS), a konkurencja blokad spadła z 94% do 23%.
Źródło: opennet.ru
