Ang isang patch ay nakabinbin sa pamamagitan ng x86/kagyatan upang malutas ang isang isyu sa mga processor ng Intel Alder Lake at Raptor Lake na iniiwan sa mga developer ng kernel na pansamantalang i-disable ang Process Context Identifiers (PCID) sa mga Intel mobile/desktop processor na ito.

Ang isang patch ay nakatakdang mainline para sa Linux 6.4 development at back-ported din sa mga stable na bersyon ng kernel sa paligid ng pag-iwas sa mga hindi kumpletong global INVLPG flushes. Ang patch mula sa ipinaliwanag ng isang inhinyero ng Intel Linux:

“Ginagamit ang pagtuturo ng INVLPG upang mapawalang-bisa ang mga entry sa TLB para sa isang tinukoy na virtual address. Kapag pinagana ang mga PCID, dapat na ipapawalang-bisa ng INVLPG ang mga entry sa TLB para sa tinukoy na address para sa parehong ang kasalukuyang PCID *at* mga pandaigdigang entry. (Tandaan: Ang mga kernel mapping lang ang nakatakda sa Global=1.)

Sa kasamaang palad, ang ilang mga pagpapatupad ng INVLPG ay maaaring mag-iwan ng mga pandaigdigang pagsasalin na hindi ma-flush kapag ang mga PCID ay pinagana.

Bilang isang solusyon, hindi kailanman paganahin ang mga PCID sa mga apektadong processor.

Inaasahan ko sa kalaunan ay magkakaroon ng microcode mitigations upang palitan ang software workaround na ito. Gayunpaman, ang eksaktong mga numero ng bersyon kung saan iyon mangyayari ay hindi alam ngayon. Kapag ang mga numero ng bersyon ay naitakda sa bato, ang listahan ng processor ay maaaring i-tweak upang i-disable lamang ang mga PCID sa mga apektadong processor na may apektadong microcode.

Tandaan: kung may gusto ng mabilisang pag-aayos na hindi nangangailangan ng pag-patch, ilagay lang ang’nopcid’sa iyong command-line ng kernel.”

Ang mga apektadong processor ay nagtatapos sa pagiging mga processor ng Intel Alder Lake at Raptor Lake. Gaya ng nabanggit sa mensahe ng patch, ang Intel ay sinasabing gumagawa ng microcode mitigation para sa isyung ito ngunit sa ngayon, ang Linux kernel ay nakatakdang huwag paganahin ang suporta ng PCID para sa Alder Lake/Alder Lake L/Alder Lake N/Raptor Lake/Raptor Lake P/Raptor Lake S hanggang sa mapangasiwaan ang microcode mitigation.

Ginagamit ang INVLPG para sa pagpapawalang-bisa sa mga tinukoy na TLB entries. Hindi bababa sa Alder Lake at Raptor Lake hindi kailangan ng Kernel Page Table Isolation (KPTI) para sa pagpapagaan ng Meltdown dahil ang mga mas bagong processor na ito ay hindi naaapektuhan nito. Ngunit para sa mga mas lumang Intel processor, nakatulong ang suporta ng PCID na i-offset ang ilan sa mga overhead sa pagharap sa Kernel Page Table Isolation/pagpapagaan ng Meltdown gaya ng ipinapakita ng ilang taon na ang nakalipas. Ang kernel PTI dokumentasyon ay nagpapatuloy sa mas malawak na pagpuna sa mga benepisyo ng suporta sa PCID:

Ang”Process Context IDentifiers (PCID) ay isang feature ng CPU na nagbibigay-daan sa amin na laktawan ang pag-flush ng buong TLB kapag nagpapalit ng mga page table sa pamamagitan ng pagtatakda ng espesyal na bit sa CR3 kapag binago ang mga page table. Ginagawa nitong mas mura ang paglipat ng mga talahanayan ng pahina (sa paglipat ng konteksto, o pagpasok/paglabas ng kernel). Ngunit, sa mga system na may suporta sa PCID, dapat i-flush ng context switch code ang mga entry ng user at kernel sa TLB. Ang user PCID TLB flush ay ipinagpaliban hanggang sa paglabas sa userspace, na pinapaliit ang gastos. Tingnan ang intel.com/sdm para sa madugong mga detalye ng PCID/INVPCID.

Sa mga system na walang suporta sa PCID, ang bawat pagsusulat ng CR3 ay nag-flush sa buong TLB. Nangangahulugan iyon na ang bawat syscall, interrupt o exception ay nag-flush sa TLB.”

Sa anumang kaganapan, magpapatakbo ako ng ilang mga benchmark sa Raptor Lake para makita kung ito–kahit pansamantala–ang hindi pagpapagana ng suporta sa PCID ay nangangahulugan para sa alinman sa mga karaniwang bahagi ng pagganap para sa mga end-user.

Categories: IT Info