programmatūra · 5 min · 08.09.2026

Dynamic PAMT samazina TDX atmiņas rezervi no 0,4 % uz 0,004 %: kods gaida Linux 7.4

Intel TDX serverī ar 2 TB atmiņas kodols startēšanas laikā nogriež apmēram 8 GB tabulai, kurā procesors glabā metadatus par katru fizisko lapu. Ielāpi, kas šonedēļ nonāca kodola tip/tip.git zarā x86/tdx, šo rezervi nolaiž līdz aptuveni 84 MB. Michael Larabels Phoronix raksta, ka kods ir gatavs nākamajam apvienošanas logam, tātad Linux 7.4 kodolam.

Tabulas nosaukums ir Physical Address Metadata Table jeb PAMT. Bez tās TDX modulis nestartē. Procesoram par katru fizisko lapu jāzina, vai tā pieder kādai konfidenciālai virtuālajai mašīnai un kādā stāvoklī tā atrodas. Līdz šim kodols visu tabulu izdalīja uzreiz, arī tad, ja uz servera pēc tam nestartēja nevienu TDX viesi.

TDX ir Intel Xeon procesoru funkcija, ar kuru viesa atmiņu šifrē un slēpj no hipervizora. Lai to izdarītu, procesors strādā atsevišķā SEAM režīmā un pieņem komandas tikai caur SEAMCALL izsaukumiem. PAMT ir tā vieta, kur šis režīms glabā savu grāmatvedību: lapas īpašnieks, izmērs un stāvoklis. Kodols tabulu nelasa un neraksta pats, bet tā atmiņa jāizdala kodolam.

0,4 % no visas RAM arī bez neviena viesa

Kirila Šutemova ielāpu kopas aprakstā minēts, ka statiskā PAMT aizņem apmēram 0,4 % no sistēmas atmiņas. Uz 512 GB servera tie ir aptuveni 2 GB, uz 2 TB servera 8 GB, uz 6 TB mašīnas jau ap 24 GB. Atmiņu rezervē TDX moduļa inicializācijas laikā. Administrators to atgūt nevar, ja vien neizslēdz TDX pavisam un nepārstartē serveri.

Dynamic PAMT šo skaitli samazina līdz apmēram 0,004 %. Simtkārtīgā atšķirība rodas no tā, kā tabula ir sadalīta līmeņos.

Bitkarte 4 KB līmeņa vietā

PAMT ir trīs līmeņi, kas atbilst 1 GB, 2 MB un 4 KB lapām. Statiski tagad izdala tikai PAMT_1G un PAMT_2M līmeni. Tie ir mazi, jo ierakstu skaits tajos ir attiecīgi ap miljonu un ap tūkstoti reižu mazāks nekā apakšējā līmenī. Visu smagumu nesa PAMT_4K, kuram vajadzēja ierakstu par katru 4 KB lapu servera atmiņā.

Šo līmeni ielāpi izdala pēc pieprasījuma. Vietā, kur agrāk bija pilna 4 KB līmeņa tabula, tagad ir bitkarte ar vienu bitu uz lapu. Uz terabaita atmiņas bitkarte aizņem ap 33 MB, jo terabaitā ietilpst aptuveni 268 miljoni 4 KB lapu.

Divi jauni SEAMCALL izsaukumi un viena jauna kļūda

Atmiņu apakšējam līmenim kodols pieprasa un atdod ar diviem jauniem SEAMCALL izsaukumiem. TDH.PHYMEM.PAMT.ADD pievieno lapu pāri, kas nosedz vienu 2 MB apgabalu. TDH.PHYMEM.PAMT.REMOVE to paņem atpakaļ, kad neviena TDX mašīna šo apgabalu vairs nelieto.

Cena par to ir jauna kļūdas atgriešana. LWN publicētajā ielāpu kopas pavadvēstulē Šutemovs uzskaita, ka virkne SEAMCALL izsaukumu tagad var atgriezt TDX_MISSING_PAMT_PAGE_PAIR, ja brīvas PAMT atmiņas tobrīd nav. Sarakstā ir gan viesa atmiņas operācijas, gan lapu pārvaldības funkcijas. Kodola pusē katrs no šiem ceļiem jāapstrādā atsevišķi, tāpēc kopa nav maza.

Ieslēgšanas komits pats par sevi ir īss un tā ziņojums paskaidro lēmumu:

DPAMT atmiņas ietaupījums ir pietiekami liels, lai tā būtu laba noklusējuma konfigurācija. Tāpēc ieslēdz to vienmēr, kad TDX modulis ziņo par atbalstu. Funkcija palielina kodola izmēru par 2 KB, ja TDX ir iekompilēts būvējumā.

Ceļš no 2025. gada jūnija

Pirmo Dynamic PAMT kopu no 12 ielāpiem Šutemovs izsūtīja 2025. gada 9. jūnijā. Tā mainīja 18 failus un pievienoja 702 rindas. Ceturtā versija iznāca 2025. gada 20. novembrī ar Rika Edžkomba parakstu. Ieslēgšanas ielāps tajā ir piecpadsmitais no sešpadsmit un tas iztiek ar trim failiem: sešas pievienotas un viena izdzēsta rinda failā arch/x86/include/asm/tdx.h, astoņas pievienotas rindas failā tdx.c un trīs izdzēstas rindas failā tdx.h.

Atsevišķas Kconfig opcijas nav. Kodols inicializācijas laikā pārbauda TDX moduļa ziņoto atbalstu un tad uzstāda karodziņu, tāpēc serveros ar pietiekami jaunu TDX moduli funkcija sāks strādāt pati.

Kas mainās mākoņa operatoriem

Larabels savā piezīmē norāda uz šodienas atmiņas cenām: neviens negrib izmest RAM, ja to var nedarīt. Lielākais ietaupījums ir tiem, kas TDX iekompilē kodolā, bet konfidenciālas mašīnas faktiski palaiž tikai daļā parka. Līdz šim šāda konfigurācija maksāja 0,4 % no atmiņas katrā serverī neatkarīgi no tā, vai serveris kādu TDX viesi vispār redzēja.

Ielāpu kopa pievieno arī skaitītājus. Katram 2 MB apgabalam kodols glabā atsauču skaitu, lai zinātu, kad apgabalu vairs neizmanto neviena TDX mašīna un lapu pāri var atdot sistēmai. Bez šī skaitītāja atbrīvošana būtu bīstama, jo vienu 2 MB apgabalu var dalīt vairāki viesi.

Otrs ieguvums ir prognozējamība. Statiskā PAMT tiek izdalīta agri, pirms kodols zina, cik atmiņas prasīs pati darba slodze. Ar bitkarti šī agrā rezerve nokrīt no gigabaitiem uz desmitiem megabaitu, bet pārējo kodols paņem tikai tad, kad kāds TDX viesis reāli aizņem 2 MB apgabalu.

Ielāpi tagad gaida apvienošanas logu, kas atvērsies pēc Linux 7.3 izlaišanas. Torvalds 6. septembrī izlaida 7.3-rc2 un stabilo 7.3 gaida oktobra otrajā pusē.

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