Intel inženieris Tonijs Laks 25. augustā nosūtīja Linux kodola sarakstam septiņu ielāpu kopu, kas pievieno draiveri aparatūrai, kādas nav nevienā šobrīd pārdotā procesorā. Trīs dienas vēlāk viņš to pārcēla citā koda mapē. Tagad kods stāv rindā RAS koka zarā edac-for-next un tiek gaidīts Linux 7.4 laidienā.
Draiveri sauc intel-bff. Nosaukums nāk no vārdiem bitfix filter. Draivera vienīgais darbs ir iztukšot šo filtru, kad tas pārplūst. Pats draiveris ir 295 rindas failā drivers/edac/intel-bff.c. Kopā ar kešatmiņas palīgfunkcijas un MCE definīciju izmaiņām ielāpu kopa pieskaita 341 rindu astoņos failos un izmet 11.
Kešatmiņas šūnas nolietojas
Bitfix filtrs pastāv tāpēc, ka silīcijs noveco. Kad kešatmiņas šūnā iestrēgst bits, procesors par to ziņo kā par izlabotu kļūdu. Bez filtra viena bojāta šūna radītu bezgalīgu vienu un to pašu ierakstu straumi, tāpēc filtrs atkārtotus ziņojumus apslāpē.
Filtram ir ierobežots slotu skaits. Slotus aizņem arī pārejošas kļūdas, piemēram, bitu apgriezieni no daļiņu triecieniem, kas nav nekāds aparatūras defekts. Serverim, kas strādā nedēļas vai mēnešus, filtrs pamazām aizsērē ar šādu troksni. Tad īstam, pastāvīgam defektam vietas vairs nav.
Ielāpa komentārs no tā izved praktisku secinājumu: ja pārplūde pēc atiestatīšanas atkārtojas bieži, runa ir par pastāvīgu aparatūras defektu un mašīna jāpiesaka apkopei.
Dzeltenais statuss
Kā draiveris zina, ka filtrs ir pilns? Machine check bankas statusa reģistrā ir divi biti, 54. un 53., ko Intel sauc par threshold-based error status. Vērtība 1 nozīmē zaļu statusu, tas ir, kļūdu skaits zem sliekšņa. Vērtība 2 nozīmē dzeltenu: slieksnis pārsniegts, filtrs pilns.
Draiveris pieslēdzas MCE dekodēšanas ķēdei un pie dzeltena statusa ieraksta nulles bitu reģistrā MSR_MCx_BFF_CTL, kura bāzes adrese ir 0x6c0. Pašu funkciju procesors izsludina divās vietās: 11. bitā reģistrā IA32_MCG_CAP un 9. bitā reģistrā IA32_CORE_CAPABILITIES. Ja kāda no pārbaudēm neizdodas, bff_init atgriež -ENODEV un modulis neielādējas.
Desmit minūšu logs
Filtra iztukšošana pati par sevi neatbild uz svarīgāko jautājumu: vai tur bija troksnis vai bojāta šūna. Tāpēc draiveris katrai filtra instancei saglabā jiffies laikspiedolu xarray struktūrā. Ja tā pati instance pārplūst atkal desmit minūšu laikā, žurnālā parādās ieraksts ar KERN_WARNING līmeni un tekstu par to, ka filtrs pārplūst bieži. Pirmajai vai reti atkārtotai pārplūdei tiek lietots KERN_NOTICE.
Desmit minūtes koda komentārā ir pamatotas ar diviem scenārijiem. Ilgi uzkrājies pārejošo kļūdu slānis pēc atiestatīšanas neatgriežas tik ātri. Pastāvīgs defekts filtru piepilda gandrīz uzreiz.
Katrai kešatmiņai savs filtrs
Diamond Rapids, kas tirgū nāks kā Xeon 7, filtrus liek sešās machine check bankās: pirmajā datu kešatmiņai, otrajā datu TLB, trešajā vidējā līmeņa kešatmiņai, tālāk 6., 13. un 17. bankā. Katras bankas tvērums atšķiras. Katram modulim ir savs L2 kešs, tāpēc arī katrai instancei ir savs filtrs.
Lai instances atšķirtu, draiveris saliek unikālu identifikatoru no kešatmiņas ID, APICID trešā bita un bankas numura, ko ieliek identifikatora augšējos 32 bitos. Šo karti nevar noskaidrot programmatiski. Laks to paskaidroja atklāti: Intel banku koplietošanai nekādas izsludināšanas nav un mēdz to bieži mainīt, tāpēc tabula ir ierakstīta draiverī katram CPU modelim atsevišķi.
No platform draivera uz EDAC trīs dienās
Kodu sākotnēji rakstīja Intel inženieris Cjusju Džo kā papildinājumu EDAC draiverim. Laks to izņēma atsevišķā platform draiverī ar pamatojumu, ka ne visi vēlas darbināt EDAC draiveri. x86 uzturētājs Borislavs Petkovs atbildēja trīspadsmit minūtēs.
Interesanti, kas tik slikts ir EDAC draiveros, ka jūs pārceļat visu šo funkcionalitāti, kas nepārprotami ir RAS/MCE/EDAC, uz kādu nejaušu platform draiveri?
Laks palika pie sava pamatojuma un piebilda, ka runa ir par vienu vēl nelaistu CPU modeli, tāpēc kodu iebūvēt MCE slānī nozīmētu lieku slogu gandrīz visiem. Petkovs norādīja uz failu drivers/edac/mce_amd.c, kas atrodas EDAC mapē, bet īsts EDAC draiveris nav. Pēc viņa domām BFF tur iederētos. Akronīmu viņš nosauca par brīnišķīgu. Visa saruna ilga stundu.
Otrajā versijā 28. augustā draiveris jau ir drivers/edac/intel-bff.c. Kconfig opcija saucas INTEL_BFF_RESET, modulis intel_bff. Vienlaikus Laks nomainīja bitu manipulācijas uz FIELD_GET un FIELD_PREP makro, kā bija ieteicis Ilpo Jarvinens.
Otrās versijas izmaiņu sarakstā ir divas rindas par automātiskiem recenzentiem. Laks raksta, ka pielietojis dažus tīrīšanas ieteikumus no iekšējas AI recenzijas. Atsevišķi viņš atbild rīkam sashiko.dev, kur noraidīja divas sūdzības. Pirmā bija par pazudušām #GP izņēmuma situācijām; draiveris pārbauda, vai funkcija ir izsludināta, tāpēc tās nevar rasties. Otrā bija par bitu 63:1 pārrakstīšanu atiestatīšanas MSR reģistros, kuros definēts ir tikai nulles bits. Vienu ieteikumu viņš pieņēma: bankas numuru glabāt identifikatora augšējos bitos.
Diamond Rapids serveru procesorus gaida 2027. gada otrajā pusē. Līdz tam intel_bff mainline kodolā nostāvēs vairāk nekā gadu bez vienas mašīnas, kas to spētu ielādēt. Uz jebkura šodien pārdota Xeon bff_init atgriež -ENODEV.
Avoti
- PATCH v2 0/7 EDAC/intel-bff: Driver to reset bitfix filters, linux-edac, 28.08.2026.
- PATCH 0/7 Intel platform driver to reset bitfix filters ar Borislava Petkova un Tonija Laka saraksti, 25.08.2026.
- PATCH v2 7/7 EDAC/intel-bff: Report frequent filter overflows, linux-edac.
- Intel Introduces New “BFF” Linux Driver To Deal With Aging Silicon & Stuck Bits, Phoronix.
- Intel BFF Driver Slated For Linux 7.4 Introduction, Phoronix.
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.