Linux odpravil 20 let starega namernega hrošča

Matej Huš

27. sep 2022 ob 19:51:35

Pisali smo že o ranljivosti, ki so se v kakšni kodi skrivale desetletja, to pot pa gre za dvajset starega hrošča v kodi, ki je bil tam namenoma. Pred dvajsetimi leti je bilo upravljanje z energijo ACPI še v povojih, strojna oprema pa ni vedno delovala, kot bi pričakovali. Na sistemih z AMD-jevimi procesorji Athlon se je zgodilo, da procesor ni hotel v stanje pripravljenosti, ko smo to od njega želeli, zato je Linuxovo jedro dobilo berglo. Tako imenovano prazno čakanje (dummy wait op) je predstavljalo izvajanje nepotrebnih bralnih operacij, ki so poskrbele, da je imel procesor čas izvesti ukaz STPCLK#.

Dvajset let pozneje je v kodi še vedno enak pristop, čeprav so moderni Threadripperji neprimerljivi z Athloni, predvsem pa niso pokvarjeni. Težave dlje časa ni nihče opazil, ker ni bila zelo očitna. A novi procesorji imajo čedalje več jeder, prilagajanje frekvence in več stanj delovanja, ko se posamezne funkcije procesorja lahko izklopijo. Zaradi varčevanja z energijo se to pogosto dogaja med delovanjem. Rezultat so čedalje opaznejše upočasnitve, saj se vsakokrat brez potrebe čaka.

AMD-jev inženir Prateek Nayak je v Linuxove gonilnike za procesorje dodal popravljeno kodo, ki to čakanje odpravlja. Testi so pokazali, da so pohitritve občutne. Popravek bo del jedra Linuxa 6.0. Z Intelovimi procesorji težav ni, ker uporabljajo drugo kodo (MWAIT) že dobro desetletje.