Разработчиците на проекта Multikernel, който позволява на един физически компютър да изпълнява няколко независими екземпляра на ядрото без хипервизор и виртуализация, представиха инструмента kmorph, реализиращ средства за бързо възстановяване след аварийно спиране на ядрото на Linux или за замяна на ядрото в Live-режим без пълноценен рестарт. Проектът се развива от Конг Ванг (Cong Wang), който поддържа подсистемата за управление на трафика (TC, Traffic Control) в ядрото. Методът за бързо рестартиране е базиран на предварително зареждане в паметта на резервно ядро, което замества основното работещо ядро в случай на срив или при необходимост от замяна на ядрото с нова версия.
Предложеният подход позволява да се избегне пълноценно рестартиране и почти мигновено да се възобнови работата, свеждайки до минимум времето на престой. В момента, в случай на аварийно спиране на ядрото, пълният рестарт на големи сървъри отнема няколко минути поради дългите процеси на инициализация на оборудването, зареждане на системната среда и запазване на дампа на ядро в паметта чрез механизма kdump. По същество при използване на kdump се извършват две рестартирания на ядрото — първоначално чрез kexec се зарежда отделен екземпляр на ядрото за запазване на дампа на паметта, след което се извършва зареждане на работещото ядро и стартиране на системните услуги.
В случай на прилагане на kmorph във връзка с отделно ядро на CPU, в паметта предварително се зарежда резервно ядро на Linux и минимална системна среда, която следи състоянието на основното ядро. В случай на зависване или излизане в състояние panic на основното ядро, резервната среда поема управлението, запазва дампа на паметта на сриващото се ядро, превключва на себе си процесорните ядра, паметта, устройствата, мрежовата конфигурация и файловата система.
Превключението се координира с помощта на два програмни модула: kmorph — стартира се в активна среда, формира съдържанието на резервната среда и синхронизира състоянието на мрежата в нея; kmorphd — стартира се в резервна среда и следи състоянието на активната среда. Освен превключването при авария, kmorph предлага възможност за обновление на ядрото без традиционен рестарт. За ускоряване на възстановяването в резервната среда, освен ядрото и минималния набор от системни компоненти, може да се стартират стандартни услуги, като nginx, в режим на готовност. В този случай, в момента на активиране на резервната среда, услугата nginx вече ще бъде заредена в паметта и веднага ще започне да обработва заявки след превключването на новата мрежова карта, активирането на мрежовата конфигурация и смяната на кореновата файлова система.
В проведените тестове, сървър с nginx с помощта на kmorph възстановява работата си приблизително 2 секунди след срив на ядрото, но в бъдеще целят незабавно превключване, невидимо за свързаните клиенти. В момента kmorph поддържа архитектури x86_64 и ARM64, като се работи и по поддръжка на RISC-V. Интеграцията на kmorph в дистрибуции на Linux се извършва по аналогия с поддръжката на kdump, чрез стандартните инструменти dracut, initramfs-tools, kernel-install и услугата systemd.
В ядрото вече са вградени механизми Kexec HandOver (KHO) и Live Update Orchestrator (LUO), които позволяват стартиране на ново ядро от старо без загуба на състоянието на системата и без спиране на работата на устройствата. Но те не могат да се прилагат в случай на срив в ядрото, тъй като изискват запазване на състоянието на работещото ядро. KHO и LUO също изостават от kmorph по скорост на превключване, тъй като в kmorph новото ядро вече се намира в паметта, а KHO и LUO изискват рестартиране на ядрото чрез kexec.
Източник: opennet.ru
