programmatūra · 6 min · 01.09.2026

systemd 262-rc1 pieslēdz kodola LUO: serviss patur atmiņu pāri kexec pārstartēšanai

systemd 262-rc1 servisu vienībām pievieno opciju LUOSession=. Ar to serviss startējot saņem sesijas failu deskriptoru no Linux kodola Live Update Orchestrator un var tajā ielikt savus atmiņas deskriptorus, kas izdzīvo kexec pārstartēšanu. Pirmo 262. sērijas testa laidienu izstrādātāji publicēja 1. septembrī.

Kopš v261 koks saņēmis 1724 komitus no 179 cilvēkiem. Izmaiņu žurnāls aptver 25 apakšsistēmas, no systemd-networkd līdz TPM slānim. LUO integrācija tajā ir vienīgā vieta, kur systemd sāk runāt ar kodola apakšsistēmu, kurai pašai nav vēl gada.

ko dara LUOSession=

Opcija pieņem ar atstarpēm atdalītu nosaukumu sarakstu. Katram nosaukumam servisa pārvaldnieks caur /dev/liveupdate izveido LUO sesiju un iedod servisam sesijas deskriptoru failu deskriptoru krātuvē. Konfigurētais nosaukums kļūst par šī ieraksta FDNAME=. Serviss to izlasa ar sd_listen_fds() tāpat kā jebkuru citu fdstore ierakstu. Tālāk serviss pats liek sesijā papildu deskriptorus, piemēram, ar memfd_create() izveidotus atmiņas apgabalus.

Kodola līmeņa sesijas nosaukumu systemd atvasina deterministiski no vienības nosaukuma un konfigurētā nosaukuma. Tas paliek stabils starp startiem un iekļaujas kodola uzliktajā garuma limitā. Ja sesija ar tādu pašu nosaukumu servisa krātuvē jau ir, jauna netiek izsniegta. Pēc kexec atjaunotā sesija tāpēc tiek izmantota atkārtoti.

Lai sesijas tiešām paliktu pāri pārstartēšanai, LUOSession= jāsaliek kopā ar FileDescriptorStorePreserve=yes. Pati opcija paceļ FileDescriptorStoreMax= vismaz līdz konfigurēto sesiju skaitam. Ja /dev/liveupdate sistēmā nav, sesija netiek izsniegta un serviss startē kā parasti. Tas nozīmē, ka vienības failu var rakstīt vienu reizi arī tad, ja daļa mašīnu vēl darbina vecāku kodolu.

no kurienes nāk LUO

Live Update Orchestrator kodolā ienāca ar Linux 6.19 pagājušā gada decembrī; kodu izstrādāja Google inženieris Paša Tatašins (Pasha Tatashin). Apakšsistēma balstās uz Kexec Handover, kas parādījās 6.16 laidienā. KHO ļauj vienam kodolam nodot nākamajam saglabātu atmiņu caur saplacinātu ierīču koka aprakstu, kurā atzīmēti gan saglabātie dati, gan brīvie apgabali jaunā kodola inicializācijai. Phoronix ziņoja, ka Google LUO jau lieto ražošanas vidē, lai ātrāk uzliktu kodola drošības ielāpus zem virtuālajām mašīnām.

Ielāpu sērijas aprakstā mērķis formulēts šauri:

Šī iespēja ir kritiska mākoņa vidēm. Tā ļauj atjaunināt hipervizoru ar minimālu dīkstāvi virtuālajām mašīnām, kas turpina darboties.

Kodola dokumentācija sesijas apraksta kā nosauktus konteinerus failu objektu kopai. Katrai sesijai ir lietotāja dots identifikators un jaunajā kodolā to var atgūt pēc nosaukuma. Pāreja iet caur sešiem posmiem: saglabāšana, iesaldēšana reboot izsaukuma iekšienē, kexec, metadatu deserializācija, deskriptoru izgūšana pēc žetona un pabeigšana. Dokumentētie saglabājamie failu tipi pašlaik ir memfd, VFIO ierīces un iommufd resursi. Citus failu tipus var pievienot, ja reģistrē attiecīgās apstrādes funkcijas.

Kodola dokumentācija kā mērķa slodzes nosauc hipervizorus, datubāzes, kešatmiņas un tīkla servisus. Visiem šiem gadījumiem raksturīgs viens: process tur atmiņā stāvokli, kura atjaunošana no diska pēc restarta prasa vairāk laika par pašu restartu. Kešatmiņas serverim restarts nozīmē, ka trāpījumu attiecība atgriežas pie nulles un slodze uz datubāzi aiz tā uzlec. LUO sesijā ielikts memfd ļauj to pašu atmiņas apgabalu atstāt fiziskajā atmiņā pāri kodola nomaiņai.

kexec skaitītājs D-Bus īpašībās

Uz kodoliem ar LUO atbalstu systemd caur D-Bus un Varlink tagad publicē īpašību KExecsCount kopā ar pašreizējās un iepriekšējās izslēgšanās laika zīmogiem. systemd-analyze time šos datus izmanto un rāda kexec un dzīvās atjaunināšanas laikus. Līdz šim rīks rādīja tikai firmware, ielādētāja, kodola un lietotājvides laikus no aukstā starta, kas uz mašīnas ar sešiem kexec cikliem starp diviem īstajiem restartiem nepasaka gandrīz neko.

pārējais laidienā

Pārvaldnieks tagad iekšēji nes pamata vienību failus: basic.target, sysinit.target, multi-user.target, reboot.target, shutdown.target un systemd-poweroff.service. Tos izmanto tikai tad, ja failus nevar nolasīt no diska, jo diskā atrastie faili un maskas ir noteicošie. Konteineru tādēļ var startēt ar systemd kā PID 1 bez neviena instalēta vienību faila.

Blakus tam systemd tagad var uzbūvēt kā vienu statiski saistītu PID 1 un izpildītāja bināro failu. Meson konfigurācijai jāsatur --default-library=static --prefer-static -Dbuild-static=true -Dsystemd-multicall-binary=true. Tāds būvējums neobligātās bibliotēkas nelādē ar dlopen() un passwd un group failu meklēšanu dara vienkāršoti bez NSS.

  • systemd.firstboot=headless izslēdz visus interaktīvos jautājumus, taču turpina automātisko konfigurāciju, kurai lietotāja ievade nav vajadzīga. Piemēram, izvēlas vienīgo instalēto lokāli.
  • systemd-coredump prot Linux 6.17 ieviesto kodola coredump ligzdas protokolu. Uz tādiem kodoliem systemd-coredumpd.service klausās uz /run/systemd/coredumpd/kernel, nevis startē vienu servisu katram izgāztajam procesam.
  • systemd-vmspawn --coco= blakus AMD SEV-SNP tagad pieņem arī Intel TDX.
  • NUMAPolicy= pieņem vērtības preferred-many (vajag Linux 5.15) un weighted-interleave (vajag Linux 6.9 un svarus no kodola sysfs).
  • systemd-sysupdate vienības pārsauktas par systemd-sysupdate-update.service un systemd-sysupdate-update.timer. Tas atbrīvo vietu jaunai systemd-sysupdate@.service vienībai ar varlink aktivāciju. Vecie nosaukumi paliek kā saderības saites.
  • Jauna dm-clone integrācija: /etc/clonetab ierakstus ģenerators pārtulko par systemd-clonesetup@.service vienībām.

Vienu izmaiņu ir vērts pārbaudīt pirms atjaunināšanas. Type=notify-reload servisiem tagad obligāti jāpārtver vai jānobloķē ReloadSignal= tajā brīdī, kad tie sūta READY=1. Ja serviss nedara ne vienu, ne otru, starts krīt ar protokola kļūdu. Iepriekš tāds serviss startēja normāli, taču vēlāka pārlāde varēja to nogalināt ar signāla noklusējuma darbību.

Meson opcijas -Dlibiptc=, -Dlibidn=, -Drc-local=, -Dsysvinit-path= un -Dsysvrcnd-path= no koka izņemtas pavisam. systemd-repart jaunos attēlu failos vairs piespiedu kārtā neizslēdz copy-on-write. Jaunā opcija --cow= pēc noklusējuma ir auto un atstāj failu sistēmas politiku neskartu. Izmaiņu žurnāls parakstīts Edinburgā 31. augustā.

Avoti

komentārisaruna

Komentāri

Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.

Pievieno komentāru

Tavs e-pasts netiks publicēts. Obligātie lauki atzīmēti.

vēl no programmatūrasaistītie