Линус Торвальдс подготовил набор патчей для подсистемы управления памятью в ядре Linux, реализующих оптимизацию для чтения мелких блоков данных из страничного кэша без атомарного изменения счётчика ссылок (refcount) в структуре folio. В тексте коммита указано, что изменения, связанные с ним тесты и черновой текст примечания созданы AI-ассистентом Claude Code при контроле со стороны Торвальдса. Изменение добавлено в отдельную ветку ядра noref-filemap-read-with-llm и пока не понятно, будет ли оно перенесено в основную ветку или это просто внутренний эксперимент.
При тестировании благодаря патчам удалось повысить пропускную способность чтения мелких файлов в конфигурации с 8 потоками с 9.9-10.4 до 30-33 миллионов операций в секунду (прирост в 3 раза), с 4 потоками — с 8.9-11.6 до 25-26 млн/сек (прирост в 2 раза), а при однопоточной нагрузке с 7.9-8.1 до 8.8-8.9 млн/сек. Прирост производительности объясняется тем, что при одновременном обращении к страничному кэшу возникает жёсткая конкуренция между потоками при доступе к кэшу. Например, когда 8 потоков пытаются одновременно читать по 16 байт данных 99.92% времени тратится не на само чтение, а на ожидание доступа к счётчику ссылок.
В патче для гарантирования корректности данных вместо выставления отдельных блокировок, изменения счётчиков ссылок или промежуточной буферизации применяется обходной вариант, использующий отложенное освобождение памяти с синхронизацией при помощи механизма RCU (Read-Copy-Update). Предложенный в патче метод гарантирует, что страница памяти не будет физически освобождена, пока читающий поток не завершит копирование данных.
Источник: opennet.ru
