Intel inženieris Tony Luck 25. augustā nosūtīja Linux kodola izstrādātāju sarakstiem septiņu ielāpu kopu, kas pievieno draiveri ar nosaukumu bff. Tas tīra procesora iekšējos bitfix filtrus brīdī, kad tie ir pilni. Kopā ielāpi pievieno 324 rindas, no kurām 284 aizņem viens jauns fails drivers/platform/x86/intel/bff.c.
Filtrs pats nav jaunums. Daži Intel procesori to izmanto, lai apslāpētu vienas un tās pašas izlabotās kļūdas atkārtotu ziņošanu. Kad novecojošā silīcijā kāds bits iestrēgst vienā stāvoklī, aparatūra to ieraksta filtra slotā un pārstāj par to sūdzēties katrā piekļuves reizē. Nepatikšanas sākas vēlāk.
kāpēc filtrs aizsērē
Slotu skaits filtrā ir ierobežots. Papildus pastāvīgiem defektiem tajos nonāk arī īslaicīgas kļūdas, piemēram, bitu apgriešanās no daļiņu triecieniem. Serverim strādājot nedēļām vai mēnešiem, šīs īslaicīgās kļūdas aizņem visas vietas. Reāls, pastāvīgs defekts tad vairs neatrod slotu, kur pieteikties. Tā ziņojums vienkārši pazūd.
Luck pavadvēstulē raksta, ka pilnu filtru aparatūra atzīmē ar “dzelteno” parakstu machine check bankā. Draiveris uz šo parakstu reaģē ar filtra tīrīšanu. Tīrīšana atbrīvo slotus, kurus bija aizņēmušas īslaicīgās kļūdas.
divi biti statusa reģistrā
Otrais ielāps pievieno definīcijas TES laukam machine check statusa reģistrā. Lauks aizņem 53. un 54. bitu. Vērtība 1 ir zaļa, kļūdu skaits zem sliekšņa. Vērtība 2 ir dzeltena, filtrs pilns. Pašu iespēju procesors piesaka IA32_CORE_CAPABILITIES reģistra 9. bitā. Bez šī bita draiveris vienkārši neielādējas.
Tīrīšana notiek, ierakstot nulto bitu MSR_MCx_BFF_CTL reģistrā, kura bāzes adrese ir 0x6c0. Ierakstīt vajag tieši uz tā kodola, kas kļūdu pieteica. Katram L2 kešatmiņas eksemplāram ir savs filtrs, tomēr Diamond Rapids gadījumā visi tie ziņo caur vienu un to pašu 3. banku. Draiveris tāpēc katram filtram izrēķina atsevišķu identifikatoru no kešatmiņas ID un bankas numura.
Lai to izdarītu, vajadzēja publisku kodola funkciju. Pirmais ielāps eksportē get_cpu_cacheinfo_id() ar EXPORT_SYMBOL_GPL, jo līdz šim ielādējami moduļi to izmantot nevarēja. Šo ielāpu uzrakstīja Intel inženieris Qiuxu Zhuo.
desmit minūtes starp divām pārpildīšanās reizēm
Septītais ielāps pievieno laika zīmogus. Draiveris xarray struktūrā glabā katra filtra pēdējo pārpildīšanās brīdi. Ja tas pats filtrs pārpildās atkal ātrāk nekā desmit minūšu laikā, kodola žurnālā parādās brīdinājums “bitfix filter overflowed frequently”. Pirmajā vai retā gadījumā ieraksts paliek paziņojuma līmenī.
Robeža ir izvēlēta ar nolūku. Ja pēc tīrīšanas filtrs paliek tukšs, tajā bija sakrājušās īslaicīgas kļūdas un mašīna var strādāt tālāk. Ja tas piepildās atkal desmit minūšu laikā, aparatūrā ir pastāvīgs defekts un serveri vajag plānot apkopei. Datu centra administratoram atšķirību pasaka viena rinda dmesg izvadē.
strīds par to, kur kodam vieta
Kods sākotnēji piederēja citam projektam. Zhuo to uzrakstīja kā papildinājumu EDAC draiverim. Luck to izvilka atsevišķā platformas draiverī ar pamatojumu, ka ne visi grib darbināt EDAC draiverus.
Šis teikums atbildi saņēma 13 minūtes pēc ielāpu nosūtīšanas. Borislav Petkov, kurš kodolā uztur RAS kodu, jautāja, kas tik slikts ir EDAC draiveros, ka to funkcionalitāti vajag pārcelt uz kaut kādu platformas draiveri. Viņš norādīja arī uz failu arch/x86/kernel/cpu/mce/intel.c.
Mans skatpunkts ir tāds: kodolā jau tāpat ir ļoti daudz RAS līmes, tāpēc pievienot tam vēl platformas draiveri ir vienkārši lieki. Pārcelsim to kaut kur, kur tas iederas labāk.
Luck aizstāvējās ar diviem argumentiem. Kods ir modeļspecifisks, jo Intel nekur neuzskaita, kā aparatūras bankas tiek dalītas starp loģiskajiem procesoriem. Šo kārtību Intel arī bieži maina. Otrs arguments ir vienkāršāks: šodien atbalstīts ir viens vienīgs procesoru modelis, kas vēl nav izlaists, tāpēc iebūvēšana MCE kodā būtu slogs gandrīz visiem. Vēstules beigās Luck piedāvāja kodu pārvietot, ja Petkovs uzskata, ka tam ir labāka vieta.
Petkovs atbildēja ar konkrētu piemēru. Fails drivers/edac/mce_amd.c satur visu AMD machine check dekodēšanu un pēc būtības nav EDAC draiveris, kaut arī atrodas EDAC mapē. Pēc Petkova domām, BFF kods tur iederētos, tāpat kā mapē drivers/ras/. Pašu akronīmu viņš gan nosauca par brīnišķīgu.
ko draiveris atbalsta šobrīd
Sarakstā ir tikai Xeon 7 Diamond Rapids. Ielāpi uzskaita sešas machine check bankas ar filtriem: 1. banka datu kešatmiņai, 2. TLB, 3. vidējā līmeņa kešatmiņai, 6. CCF, 13. HSF un 17. ievadizvades kešatmiņai. Ja procesors iespēju piesaka, tomēr draiveris konkrēto modeli nepazīst, žurnālā parādās rinda “CPU supports bitfix filter, but driver does not”.
Ilpo Järvinen 26. augustā izskatīja četrus no septiņiem ielāpiem un lielākoties ķērās pie stila. Viena piezīme bija par trūkstošu komatu saraksta beigās. Luck atbildēja, ka banku tipu enum komatu saņems, jo tas augs līdz ar jauniem procesoriem. Diamond Rapids banku saraksts turpretī ir pabeigts, jo jauns filtrs virs 17. bankas tur neparādīsies.
Phoronix vērtē, ka Linux 7.3 apvienošanas logam ielāpi ir par vēlu un reālākais mērķis ir 7.4 versija. Diamond Rapids serveru procesorus Intel vēl nav sākusi pārdot.
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.