Linux 6.0 միջուկը, որը կթողարկվի հաջորդ երկուշաբթի, ներառում է փոփոխություն, որը լուծում է AMD Zen պրոցեսորների կատարողականության խնդիրները: Արդյունավետության անկման պատճառը 20 տարի առաջ ավելացված կոդն էր՝ որոշ չիփսեթների սարքային խնդիրը շրջանցելու համար: Սարքային խնդիրը վաղուց լուծվել է և չի երևում ներկայիս չիփսեթներում, բայց հին լուծումը մոռացվել է և դարձել է ժամանակակից AMD պրոցեսորների վրա հիմնված համակարգերի կատարողականության վատթարացման աղբյուր: Intel պրոցեսորների վրա հիմնված ավելի նոր համակարգերի վրա հին լուծումը չի ազդում, քանի որ դրանք ACPI-ին մուտք են գործում առանձին intel_idle դրայվերի միջոցով, այլ ոչ թե ընդհանուր processor_idle դրայվերի միջոցով:
2002 թվականի մարտին միջուկին ավելացվեց շրջանցիկ լուծում՝ չիփսեթներում առկա սխալը արգելափակելու համար, երբ STPCLK# ազդանշանի մշակման ուշացման պատճառով անգործուն վիճակը ճիշտ չէր կարգավորված։ Խնդիրը շրջանցելու համար ACPI իրականացմանը ավելացվեց լրացուցիչ WAIT հրահանգ, որը դանդաղեցրեց պրոցեսորը, որպեսզի չիփսեթը ժամանակ ունենար անգործուն վիճակի մեջ մտնելու։ AMD Zen3 պրոցեսորների վրա Instruction-Based Sampling (IBS) հրահանգների միջոցով պրոֆիլավորելիս պարզվեց, որ պրոցեսորը զգալի ժամանակ է ծախսում stub-ի կատարման վրա, ինչը հանգեցնում է պրոցեսորի բեռնվածության վիճակի սխալ մեկնաբանման և cpuidle handler-ի կողմից ավելի խորը քնի ռեժիմների (C-State) սահմանման։
Այս վարքագիծը արտացոլվում է բեռների ժամանակ կատարողականի նվազման մեջ, որոնք հաճախակի հերթագայում են անգործուն և զբաղված վիճակների միջև։ Օրինակ, երբ օգտագործվում է մի թարմացում, որն անջատում է շրջանցիկ լուծումը, tbench-ի միջին չափանիշը 32191 ՄԲ/վ-ից բարձրանում է մինչև 33805 ՄԲ/վ։
Source: opennet.ru
