Ускорение на 14%: в Linux 7.3 устранят «бутылочное горлышко» для PCIe Gen5 NVMe-накопителей
Хотя окно слияния Linux 7.2 закрылось буквально на днях, а до релиза стабильной версии остается еще около двух месяцев, разработчики уже активно готовят патчи для следующего цикла — Linux 7.3.
Одним из самых интересных изменений на старте новой волны оптимизаций может стать устранение «значительного» бутылочного горлышка, которое мешало высокоскоростным накопителям PCIe Gen5 NVMe раскрыть свой потенциал при мелкоблочном прямом вводе-выводе.
Инженер компании ByteDance Фэннань Чанг (Fengnan Chang) обнаружил ограничение производительности при произвольном чтении блоков 4 КБ на SSD-накопителях PCIe Gen5 NVMe. Оказалось, что пропускная способность ограничивается на уровне операционной системы: ядро Linux тратит слишком много ресурсов процессора на обработку каждого запроса, из-за чего накопитель не может выйти на максимальную производительность.
Проведя профилирование, инженер выявил высокий оверхед внутри подсистемы IOmap, которая отвечает за сопоставление логических адресов файлов с физическими блоками диска при прямом вводе-выводе. Вместо выполнения операций передачи данных процессор тратил много времени на выделение памяти под служебные структуры и обслуживание сложного автомата состояний IOmap. При обработке большого количества мелких запросов в секунду эти внутренние задержки стали основным сдерживающим фактором.
Фэннань Чанг разработал упрощенный алгоритм обработки запросов (simple dio path). Новый механизм исключает ресурсоемкие операции, если запрос соответствует ряду критериев:
характер операции: запрашивается только чтение данных (не запись);
размер запроса: объем считываемых данных не превышает размер блока файловой системы (как правило, это 4 КБ);
безопасность: целевой файл не должен быть зашифрован;
тип файловой
Читать на habr.com