Red Hat inženieris un KVM uzturētājs Paolo Bonzini ielika KVM Git zarā next ielāpu sēriju ar nosaukumu kvm-chainsaw. Tā sagriež struct kvm_mmu trīs atsevišķās struktūrās. Pats Bonzini šo struktūru sauc par “dieva datu struktūru”, jo tā vienā vietā dara trīs nesaistītus darbus.
Sērijā ir 24 ielāpi. Tie maina 15 failus, pievieno 422 rindas un izņem 432. Vislielākās izmaiņas ir failā arch/x86/kvm/mmu/mmu.c, kur pārstrādātas 411 rindas. Phoronix ziņo, ka darbs nonācis KVM next zarā, tātad tas ir gatavs Linux 7.3 ciklam.
kāpēc viena struktūra bija par lielu
KVM x86 kodā struct kvm_mmu apraksta viesa lapu tabulu formātu, apstaigā viesa lapu tabulas un būvē lapu tabulas. Trīs darbi vienā struktūrā nozīmē, ka daļa lauku atsevišķiem lietojumiem ir lieki. Skaidrākais piemērs ir nested_mmu, kas izmanto tikai daļu struktūras, jo tam vispār nav lapu tabulu, ko būvēt.
Daļu koda abi lietojumi dala. Rezervēto bitu pārbaudītājs strādā gan viesa, gan resursdatora lapu tabulām. Citas daļas nedala: permission_fault vietā vienā pusē strādā daudz vienkāršāks kods, tāds kā is_executable_pte(). Sērijas pavadvēstulē Bonzini to formulē īsi:
kvm_mmu ir “dieva datu struktūra”, kas ietver trīs dažādus uzdevumus: viesa lapu tabulas formāta aprakstīšanu, viesa lapu tabulu apstaigāšanu un lapu tabulu būvēšanu.
trīs struktūras vienas vietā
kvm_pagewalkir lapu tabulu staigātājs. Uz katru vCPU to tagad ir divi:gva_walkunngpa_walk. Līdzšinējaiswalk_mmutika pārvietots starproot_mmuunnested_mmu. Tā vietā tagad vienmēr ir viensgva_walkneatkarīgi no tā, vai izpildās L1 vai L2 viesis.kvm_mmupatur lapu tabulu būvēšanu. Ēnu lapu būvēšanai tā izmanto staigātāju:root_mmugadījumā to daragva_walk,guest_mmugadījumāngpa_walk.kvm_page_formatļauj KVM strādāt ar jau esošiem PTE. Tajā ievāktspermission_mask()kods kopā ar līdzšinējostruct rsvd_bits_validate. Savskvm_page_formattagad ir gankvm_pagewalk, gankvm_mmu, gluži tāpat kā vecajāstruct kvm_mmubija divasrsvd_bits_validatekopijas.
vecs nosaukums, kas paņēma svešu vietu
Sadalīšana atrisina vienu senu neskaidrību. nested_mmu kodā parādījās krietni pirms guest_mmu un paņēma sev acīmredzamo nosaukumu. Sekas redzamas komentāros: kodā ir vietas ar piezīmi “Exempt nested MMUs”, kur patiesībā tiek atbrīvots guest_mmu. Bonzini raksta, ka guest_mmu pārsaukšana varētu būt nākamais solis, tikai RFC posmā par pareizo nosaukumu bija vairāki savstarpēji nesaderīgi viedokļi.
Pati pārkārtošana jau ir mainījusi vienu nosaukumu pāri. RFC versijā staigātāji saucās cpu_walk un tdp_walk, pēc atsauksmēm tie kļuva par gva_walk un ngpa_walk.
pēdējais ielāps atver jaunu iespēju
Sērijas pēdējais ielāps pielāgo permission_fault() mehānismu un liek to pārbaudīt SPTE pret struct kvm_page_fault. Tas padara iespējamus SPTE, kuros supervizora izpildes bits atšķiras no lietotāja izpildes bita, tas ir, XS != XU. KVM tādus līdz šim neatbalstīja. Bonzini norāda, ka tos tagad varētu pievienot caur atmiņas atribūtiem.
mehāniskos ielāpus rakstīja valodas modelis
RFC versija ar 22 ielāpiem nonāca KVM sarakstē 11. maijā. Tajā Bonzini atklāja, ka daļu darba paveicis ar AI palīdzību, jo īpaši mehāniskākajos ielāpos. Viņš rakstīja, ka lietojis LLM kā “natural language Coccinelle”, tas ir, kā semantisko ielāpu rīku, kuram norādes dod parastā valodā. Viena viņa norāde izskatījās šādi: pārvieto gva_to_gpa no struct kvm_mmu uz struct kvm_pagewalk; ja izsaucošajā funkcijā jau ir kvm_pagewalk tipa mainīgais, lieto to, nevis mmu->w.
Bonzini pats šos ielāpus sauc par LLM asistētiem, ne LLM ģenerētiem. Viņa arguments ir tāds, ka ar šādām norādēm darbu var izdarīt tikai vienā veidā. Viņš arī atzīmēja, ka ielāpi tapuši pirms kodola dokumenta Documentation/process/coding-assistants.rst ieviešanas. Vajadzības gadījumā viņš piedāvāja izsekot, kuri no refaktorēšanas ielāpiem tapuši šādi.
RFC pavadvēstulē bija arī brīdinājums par testēšanu. Kods tobrīd bija pārbaudīts ļoti viegli, ar npt=0 Linux viesi nestrādāja. Intel resursdatorus vai 32 bitu resursdatorus Bonzini vispār nebija mēģinājis.
kas notika ar recenzēšanu
Jūnija versijas pavadvēstule sākas ar novērojumu par RFC uzņemšanu. Piezīmes bija tikai par nosaukumiem. Bonzini secinājums: iespējams, visiem patika ideja to izdarīt un nevienam nepatika ideja to izlasīt no sākuma līdz galam. Divdesmit četru ielāpu sērija, kas pieskaras ligzdotajai virtualizācijai, ēnu lapu būvēšanai un rezervēto bitu pārbaudēm, arī nav pateicīgs recenzēšanas materiāls.
Pirmie pieci sērijas ielāpi ir atkārtots sūtījums no cita agrāka MMU tīrīšanas darba. Bonzini to sūtīja no jauna tāpēc, ka rīks sashiko vēl neprot apstrādāt Based-on tagus.
Ielāpi tagad ir KVM zarā next. Linux 7.3 apvienošanas logs atveras augusta otrajā pusē.
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.