Компания SUSE развивает свободную систему для обновления ядра без перезагрузки

Компания SUSE представила систему kGraft, в рамках которой развивается аналог поставляемой компанией Oracle технологии Ksplice, позволяющей выполнить обновление ядра Linux без остановки работы системы. Как и Ksplice возможности kGraft ограничены внесением на лету исправлений, не затрагивающих динамически изменяемые структуры данных ядра. Тем не менее, этого достаточно для устранения уязвимостей в ядре и исправления многих видов логических ошибок. Оновление ядра Linux на лету является востребованной возможностью для промышленных дистрибутивов и систем, критичных ко времени простоя, но несмотря на доступность на рынке решений, предоставляющих подобную функциональность, свободная и общедоступная реализация до сих пор не предоставляется штатным ядром Linux. В отличие от Ksplice, который является проприетарной разработкой (один из ранних вариантов Ksplice был открыт, но очень давно не обновлялся), kGraft изначально позиционируется как свободный проект.

В настоящее время kGraft находится на стадии работающего прототипа, требующего доработки. В марте, после приведения кода в порядок, созданные в рамках проекта наработки планируется предложить для включения в состав основной ветки ядра Linux. Компоненты работающие на уровне ядра будут открыты под лицензией GPLv2, а выполняемые в пространстве пользователя утилиты, позволяющие создавать и применять патчи к ядру, — под лицензией GPLv3.

Средства наложения патчей на базе kGraft ограничены заменой целиком функций и связанных с ними констант. Патч формируется при помощи специального инструментария, на основе анализа исправлений исходных текстов выявляющего подлежащие замене функции и формирующего исходных код модуля ядра с реализацией патча. При загрузке в ядро созданный модуль выполняет все необходимые действия по внесению изменений в ядро без прерывания работы системы. В своей работе kGraft базируется на технологиях и идеях уже доступных в ядре: ftrace, зарезервированное на основе mcount место в заголовках функций, уже применяемая в jumplabels техника исправления INT3/IPI-NMI, RCU-подобное обновление кода, не требующее остановки ядра.

©  OpenNet