Инженерите от компания Google публикуваха за обсъждане от разработчиците на ядрото на Linux набор от пачове с реализирана подсистема Live Update Orchestrator (LUO), предназначена за актуализиране на ядрото в жив режим. За разлика от механизми като livepatch, Ksplice, kpatch и kGraft, новата система не е ограничена до прилагането на отделни корекции към работещото ядро на Linux, а позволява пълноценно презареждане и обновление на ядрото без спиране на работата на отделните устройства. Проектът се базира на набор от пачове KHO (Kexec HandOver) към механизма kexec, използван за зареждане на ново ядро от вече стартирано ядро на Linux без физическо презареждане.
Основната област на приложение на LUO са облачните среди, в които ще се появи възможност за обновление на хипервизора KVM без нарушаване на работата на стартираните виртуални машини. По-специално, ще бъде възможно да се спре виртуални машини по време на презареждането на ядрото с хипервизора, запазвайки в работно състояние всички свързани с виртуалните машини устройства.
За реализирането на тази възможност LUO предоставя възможности за запазване на състоянието на устройствата преди преминаването към новото ядро и възстановяване на състоянието веднага след активирането на новото ядро, така че непрекъснатите операции на системата и приложенията в потребителското пространство с устройствата да не бъдат нарушени. По време на презареждането на ядрото също е осигурена непрекъснатост на извършваните операции с DMA и активността, свързана с обработката на прекъсвания.
За координация на запазването на състоянието и преминаването към новото ядро LUO предлага API, позволяващо на други подсистеми на ядрото да свързват обработчици за проследяване и участие в процеса на Live-презареждане. Сред подсистемите, които могат да се интегрират с LUO, са хипервизор KVM, iommu, система на прекъсвания и драйвери. За предаване на състоянието на паметта от старото ядро към новото се използва KHO (Kexec HandOver). Управлението се осъществява чрез файлове sysfs "\/sys\/kernel\/liveupdate\/{state, prepare, finish}".
Източник: opennet.ru
