кграфт
Разработчик(и) | СУЗЕ |
---|---|
Первоначальный выпуск | 27 марта 2014 г. [1] |
Стабильная версия | 5.12 [2] / 25 апреля 2021 г |
Репозиторий | |
Операционная система | Линукс |
Тип | Расширение ядра |
Лицензия | GNU GPL версий 2 и 3 |
Веб-сайт | www |
kGraft — это функция ядра Linux , которая реализует оперативное исправление работающего ядра , что позволяет исправления применять ядра, пока ядро все еще работает. Избегая необходимости перезагрузки системы с новым ядром, содержащим нужные исправления, kGraft стремится максимизировать время безотказной работы и доступность системы . В то же время kGraft позволяет применять обновления безопасности, связанные с ядром, не откладывая их до запланированных простоев . [1] [3] Внутренне kGraft позволяет целые функции заменять в работающем ядре их исправленными версиями, делая это безопасно, выборочно используя оригинальные версии функций, чтобы гарантировать согласованность каждого процесса во время выполнения оперативного исправления. [4]
kGraft разработан компанией SUSE , а его исходный код лицензируется на условиях второй и третьей версий GNU General Public License (GPL). [3] [5] В апреле 2014 года kGraft был представлен для включения в основную ветку ядра Linux . [4] а минималистичные основы оперативного исправления были объединены в основную ветку ядра Linux в версии ядра 4.0, выпущенной 12 апреля 2015 года. [6]
Внутренности
[ редактировать ]Внутренне kGraft состоит из двух частей: основной модуль ядра выполняет механизм оперативного исправления, изменяя внутреннюю работу ядра, а утилиты пользовательского пространства подготавливают отдельные модули ядра для горячего исправления из исходных различий . Обновление ядра в реальном времени выполняется на уровне функций , а это означает, что kGraft может заменять целые функции в работающем ядре их исправленными версиями, полагаясь при этом на механизмы и инфраструктуру, установленные ftrace для «маршрутизации» старых версий функций. ядра Никакие изменения во внутренних структурах данных невозможны; однако исправления безопасности , которые являются одними из естественных кандидатов для использования с kGraft, редко содержат изменения в структурах данных ядра. [3] [4] [7]
При применении горячих патчей kGraft не требует остановки работающего ядра для внедрения в него исправленных версий функций. Вместо атомарной замены функций kGraft предоставляет согласованные «мировоззрения» (или «юниверсы») для пользовательского пространства процессов , потоков ядра и обработчиков прерываний , которые отслеживаются во время их выполнения, поэтому можно продолжать использовать исходные версии исправленных функций ядра. Для этого kGraft поддерживает исходные версии исправленных функций в режиме чтения-копирования-обновления (RCU) и динамически выбирает между исходной и исправленной версиями в зависимости от того, какой процесс, поток ядра или обработчик прерываний их выполняет. Точнее, оригинальные версии функций продолжают использоваться — «во время применения горячего патча» — для процессов, выполняющихся в данный момент в пространстве ядра , для потоков ядра, пока они не достигнут точек завершения, и для выполняющихся в данный момент обработчиков прерываний. [3] [4] [8] [9]
Благодаря своей конструкции kGraft не создает дополнительных задержек при применении «горячих» патчей. Обратной стороной является то, что оригинальные версии исправленных функций ядра могут потребоваться поддерживать в течение продолжительных периодов времени на случай, если есть процессы, которые слишком долго остаются в пространстве ядра; например, процесс может ожидать ввода-вывода в сетевом сокете . Кроме того, поскольку как исходные, так и исправленные версии функций могут выполняться параллельно, могут возникнуть проблемы, если они по-разному используют внутренние структуры данных ядра. [4] [9]
История
[ редактировать ]SUSE анонсировала kGraft в январе 2014 года. [10] и выпустил его публично в марте 2014 года на условиях GNU General Public License версии 2 ( GPLv2 ) для части ядра и на условиях версии 3 ( GPLv3 ) для части пользовательского пространства. [1] [5] Он был выпущен вскоре после того, как Red Hat выпустила собственную реализацию исправлений ядра под названием kpatch . [11] kGraft стремится быть объединенным с основной веткой ядра Linux, и он был представлен для включения в апреле 2014 года. [4] [9]
kGraft стал доступен для SUSE Linux Enterprise Server 12 18 ноября 2014 г. в качестве дополнительной функции под названием SUSE Linux Enterprise Live Patching . [12] [13]
Минималистичные основы для оперативного исправления ядра были объединены в основную ветку ядра Linux в версии ядра 4.0, выпущенной 12 апреля 2015 года. Эти основы, основанные в первую очередь на функциональности ядра ftrace , образуют общее ядро, способное поддерживать горячее исправление как с помощью kGraft, так и со стороны kGraft. и kpatch, предоставляя интерфейс прикладного программирования (API) для модулей ядра, содержащих «горячие исправления», и двоичный интерфейс приложения (ABI) для утилит управления пользовательским пространством. Однако общее ядро, входящее в ядро Linux 4.0, поддерживает только архитектуру x86 и не предоставляет никаких механизмов для обеспечения согласованности на уровне функций во время применения горячих исправлений. [6] [14] [15]
С апреля 2015 года продолжается работа по портированию kGraft на общее ядро живых исправлений, предоставляемое основной веткой ядра Linux. [15] Однако реализация необходимых механизмов согласованности на уровне функций была отложена, поскольку стеки вызовов, предоставляемые ядром Linux, могут быть ненадежными в ситуациях, когда ассемблерный код не содержит надлежащих кадров стека ; в результате работы по переносу продолжаются по состоянию на сентябрь 2015 г. [update]. In an attempt to improve the reliability of kernel's call stacks, a specialized sanity-check stacktool . Также была разработана утилита пользовательского пространства [16] [17]
См. также
[ редактировать ]- Динамическое обновление программного обеспечения — область исследований, направленная на обновление программ во время их работы.
- kexec — метод загрузки совершенно нового ядра Linux из работающей системы.
- Ksplice и KernelCare , другие технологии оперативного исправления ядра Linux, разработанные Ksplice, Inc. (позже приобретенная Oracle) и CloudLinux соответственно.
Ссылки
[ редактировать ]- ^ Перейти обратно: а б с «SUSE выпускает kGraft для оперативного исправления ядра Linux» . СУЗЕ . 27 марта 2014 года . Проверено 7 ноября 2014 г.
- ^ «Релиз 5.12» . 25 апреля 2021 г. . Проверено 14 мая 2021 г.
- ^ Перейти обратно: а б с д и Войтех Павлик (28 марта 2014 г.). «kGraft: живое исправление ядра Linux» (PDF) . linuxfoundation.org . Проверено 7 ноября 2014 г.
- ^ Перейти обратно: а б с д и ж Джонатан Корбет (30 апреля 2014 г.). «Первоначальное представление kGraft» . LWN.net . Проверено 7 ноября 2014 г.
- ^ Перейти обратно: а б Крис Дакетт (4 февраля 2014 г.). «KGraft от Suse надеется вернуть живое исправление ядра в Linux» . ЗДНет . Проверено 11 февраля 2020 г.
- ^ Перейти обратно: а б «Ядро Linux 4.0, раздел 1.2. Оперативное обновление» . kernelnewbies.org . 26 апреля 2015 года . Проверено 27 апреля 2015 г.
- ^ Войтех Павлик (31 января 2014 г.). «kGraft: живое исправление ядра» . suse.com . Проверено 7 ноября 2014 г.
- ^ Либби Кларк (4 марта 2014 г.). «Директор лаборатории SUSE рассказывает о реальном обновлении ядра с помощью kGraft» . Linux.com . Архивировано из оригинала 10 марта 2016 года . Проверено 7 ноября 2014 г.
- ^ Перейти обратно: а б с Майкл Ларабель (1 мая 2014 г.). «SUSE публикует kGraft, Red Hat публикует патчи Kpatch» . Фороникс . Проверено 7 ноября 2014 г.
- ^ «SUSE разрабатывает kGraft для оперативного исправления ядра Linux» . СУЗЕ . 31 января 2014 года . Проверено 28 декабря 2014 г.
- ^ Джош Пуамбёф; Сет Дженнингс (26 февраля 2014 г.). «Представляем kpatch: динамическое исправление ядра» . redhat.com . Проверено 11 февраля 2020 г.
- ^ «Сейчас доступно обновление SUSE Linux Enterprise Live» . СУЗЕ . 18 ноября 2014 года . Проверено 23 ноября 2014 г.
- ^ Шон Майкл Кернер (18 ноября 2014 г.). «SUSE внедряет Live Patching и Ceph Storage в свой корпоративный Linux» . serverwatch.com . Проверено 23 ноября 2014 г.
- ^ Джонатан Корбет (25 февраля 2015 г.). «Черновой патч для живого исправления» . LWN.net . Проверено 27 апреля 2015 г.
- ^ Перейти обратно: а б «Дерево исходного кода ядра Linux: kernel/git/torvalds/linux.git: получить инфраструктуру оперативного исправления от Иржи Косина» . ядро.орг . 11 февраля 2015 года . Проверено 27 апреля 2015 г.
- ^ Джонатан Корбет (30 сентября 2015 г.). «Проверка стека во время компиляции» . LWN.net . Проверено 2 октября 2015 г.
- ^ Джош Пуамбеф (24 сентября 2015 г.). «Документация ядра Linux: Documentation/stack-validation.txt (из патча v13)» . LWN.net . Проверено 2 октября 2015 г.