После установки Linux 4.0 исчезнет последняя причина перезагружать твой сервер или ПК. Среди функций, которые внедрили в новое ядро, — процедура «горячей» установки патчей на работающую ОС. Так что сервер может годами поддерживать аптайм.
На самом деле такая технология разработана для Linux ещё в 2009 году компанией Ksplice, которую в 2011 году приобрела Oracle. Функция была в Oracle Linux, а также входила в пакет платной подписки Red Hat Enterprise Linux (RHEL). Разработчикам всех остальных дистрибутивов оставалось только смотреть и завидовать. До настоящего момента.
Процесс Ksplice сравнивает старую и новую версию ядра, а потом использует специальный модуль, чтобы внедрить новый код прямо в работающее ядро. Чтобы процедура прошла гладко, апдейты нужно размечать специальными флагами для каждой обновляемой функции. Ksplice ждёт момента, когда помеченная функция не используется, и тогда производит обновление.
Разработчики из Red Hat и SUSE независимо друг от друга работали над созданием свободной реализации такого процесса. В прошлом году они закончили работу, так что у нас появилось две альтернативных технологии. Вариант от Red Hat называется kpatch, а от SUSE — kGraft, причём и работают они по-разному.
Kpatch задействует команду stop_machine(), изучает список процессов с помощью ftrace и, в случае возможности безопасной установки патча, переводит процесс на новый код, затем удаляя старый.
В kGraft тоже используется ftrace, но на уровне тредов, переводя вызов к старой функции на новый код.
Процедура обновления с помощью Kpatch занимает от 1 до 40 миллисекунд, а kGraft может потребоваться несколько минут, но зато она не допускает ни миллисекунды даунтайма.
С октября 2014 года Red Hat и SUSE вместе трудились над интегрированной системой, которая бы сочетала преимущества kpatch и kGraft. Они управились аккурат к первому релиз-кандидату Linux 4.0 несколько дней назад. Исходный код здесь.