- BrainTools - https://www.braintools.ru -
Линус Торвальдс подключил [1] Claude Code к работе над ядром Linux и получил впечатляющий результат: в синтетическом тесте скорость чтения из кеша выросла почти в 23 раза. Правда, при проверке изменений разработчики обнаружили состояние гонки и проблемы с управлением памятью [2]. Теперь решение дорабатывают, а история стала показательным примером того, как ИИ справляется с задачами системного программирования.
Всё началось с узкого места в работе страничного кеша Linux. Когда несколько потоков одновременно читают один и тот же файл, ядро использует счётчик ссылок на блок памяти — folio. При каждом чтении этот счётчик приходится увеличивать, а затем уменьшать.
При высокой параллельной нагрузке потоки начинают конкурировать за одну и ту же строку кеша процессора. В результате значительная часть времени уходит на синхронизацию между ядрами.
На ноутбуке Торвальдса с Intel Core i7-8565U при тестировании в восемь потоков операции со счётчиком ссылок отвечали за 99,92% случаев передачи модифицированных строк кеша между ядрами (HITM).
На проблему ещё в 2024 году обратил внимание [3] разработчик ядра Мэтью Уилкокс (Matthew Wilcox). За прошедшее время предлагалось несколько решений, но у каждого находились недостатки. Сам Торвальдс признался, что около полутора лет использовал собственный экспериментальный вариант, который впоследствии оказался ошибочным.
В октябре Торвальдс опубликовал экспериментальную ветку noref-filemap-read-with-llm с восемью патчами для ядра Linux 7.3-rc6.
В описании он прямо указал, что Claude Code под его руководством подготовил код, тестовые программы, предварительный разбор проблем и черновик документации. При этом все измерения производительности Торвальдс проводил самостоятельно.
Позднее появилась переработанная серия из десяти патчей в ветке rcu-free-v3.
Суть решения — убрать операции со счётчиком ссылок из часто используемого пути чтения файлов. Для этого задействовали механизм синхронизации RCU (Read-Copy-Update), который позволяет читать данные без блокировок, откладывая освобождение памяти до завершения уже начатых операций.
Новый флаг PG_rcu_free позволяет отложить освобождение folio, пока его могут использовать читающие потоки. Благодаря этому ядру больше не нужно каждый раз изменять общий счётчик ссылок.
Первые результаты выглядели многообещающе. На ноутбуке Торвальдса производительность при чтении небольших блоков данных в восемь потоков выросла примерно с 10 до 33 млн операций в секунду.
На 64-поточном AMD Ryzen Threadripper переработанная версия показала ещё более заметный прирост:
До изменений — 13,3 млн чтений в секунду.
После изменений — 304 млн чтений в секунду.
Число тактов процессора на одну операцию сократилось примерно с 20 000 до 735.
То есть почти 23-кратное ускорение.
Однако сам Торвальдс предупредил, что цифры получены в синтетическом тесте, где множество потоков многократно читает одни и те же данные. В реальных сценариях прирост будет существенно скромнее.
Кроме того, у оптимизации обнаружились побочные эффекты. В первоначальной версии чтение с дополнительной обработкой ошибок страниц памяти могло замедляться, а отложенное освобождение памяти создавало новые сложности при высокой нагрузке.
После публикации патчей к обсуждению подключились другие разработчики ядра.
Мэтью Уилкокс поставил под сомнение отдельные решения по управлению памятью, в том числе использование нового флага PG_rcu_free.
А разработчик Кирилл Шутёмов (Kiryl Shutsemau) обнаружил состояние гонки в функции filemap_read_rcu_batch().
Проблема возникала при определённой последовательности параллельных операций: если один поток читал данные, а другой успевал заменить folio и увеличить размер файла, первый мог получить содержимое старого блока памяти — в том числе данные, которые никогда не записывались в соответствующую область файла.
Торвальдс предложил изменить порядок проверки размера файла и объединить часть проверок folio. Шутёмов внёс соответствующие изменения.
Разработчики также продолжили обсуждать, как ограничивать объём памяти, ожидающей освобождения через RCU, и что делать с отдельными сценариями чтения, где новая реализация уступает старой.
Торвальдс предложил Кириллу Шутёмову взять на себя дальнейшую работу над серией изменений.
19 октября Шутёмов опубликовал [4] переработанный вариант из 18 патчей. В нём учтена часть замечаний, доработано управление памятью и расширена поддержка чтения без счётчика ссылок.
Новые тесты на ext4, XFS и tmpfs также показали заметный прирост производительности при параллельном чтении небольших блоков данных.
Однако изменения пока находятся на стадии RFC — предложения для обсуждения. В основную ветку ядра они ещё не вошли, а некоторые вопросы реализации остаются открытыми.
В этой истории интересно и само ускорение, и то, как оно было достигнуто. Claude Code помог подготовить решение для проблемы, над которой разработчики ядра работали больше двух лет. Но проверка выявила ошибки [5], потребовавшие дополнительной работы и пересмотра отдельных решений.
Получился вполне наглядный сценарий применения ИИ в системном программировании: модель помогает писать и исследовать сложный код, а корректность и возможность его включения в ядро по-прежнему определяются тестированием и проверкой со стороны разработчиков.
Источники: The New Stack [1], обсуждение патчей в списке рассылки ядра Linux [6], Phoronix — о переработанной версии [7].
История с патчами Торвальдса показывает, что Claude Code уже способен решать сложные инженерные задачи, хотя без проверки результатов по-прежнему не обойтись. Если хотите попробовать этот инструмент в собственной работе, приходите на бесплатный вебинар Otus, где разберёте, как автоматизировать запуск ИИ-агента и поручать ему задачи по расписанию.
11 ноября, 20:00. «ИИ-агент по расписанию: как заставить Claude Code работать, пока вы заняты другим». Записаться [8]
Автор: kmoseenk
Источник [9]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/37515
URLs in this post:
[1] подключил: https://thenewstack.io/torvalds-claude-code-kernel/
[2] памятью: http://www.braintools.ru/article/4140
[3] внимание: http://www.braintools.ru/article/7595
[4] опубликовал: https://lkml.iu.edu/2610.2/07671.html
[5] ошибки: http://www.braintools.ru/article/4192
[6] обсуждение патчей в списке рассылки ядра Linux: https://lore.landau.one/lkml/CAHk-%3DwiHMFdA9CE4qu7W9vUh%3DCBrH5w9RMjf2kx%3DU5BJobrrZA%40mail.gmail.com/T/
[7] Phoronix — о переработанной версии: https://www.phoronix.com/news/Reading-Page-Cache-WO-Folio-Ref
[8] Записаться: https://otus.pw/i6jQ/
[9] Источник: https://habr.com/ru/companies/otus/news/1099380/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1099380
Нажмите здесь для печати.