
Linux 7.3-ում VRAM-ի սպառման դեպքում արտադրողականությունը կբարելավվի
AMD դրայվերի՝ տեսահիշողության սպառման հետ վարվելաձևը վերանայող միջուկի փաթեթները ընդունվել են upstream-ում և հերթագրվել Linux 7.3-ի համար. խաղերը ավելի քիչ կսառեն, կադրի ժամանակը կդառնա ավելի կայուն։
AMD-ի GPU դրայվերի վարքագիծը տեսահիշողության սպառման պահին վերանայող միջուկի փաթեթներն ընդունվել են upstream-ում և հերթագրվել Linux 7.3-ի համար, գրում է pixelcluster GPU բլոգը օգոստոսի 17-ի գրառման մեջ։ Աշխատանքը շարունակում է խաղերի համար VRAM-ի կառավարման նախորդ նախագիծը։
VRAM-ի սպառման ֆիզիկան
Տեսականորեն վիդեոհիշողության սպառումը պետք է հարվածի միայն արտադրողականությանը, ոչ կայունությանը. դրայվերը թույլ է տալիս հավելվածին պահանջել ավելի շատ հիշողություն, քան քարտի վրա կա, իսկ ավելցուկը տեղափոխվում է CPU-ի RAM։ Հենց այդ տեղափոխումն է շշուկի վիզը։ PCIe 4.0 x16 կապուղում ավտոբուսը փոխանցում է վայրկյանում 32 GiB-ից մի փոքր պակաս՝ մոտ 32.2 MiB միլիվայրկյանում։ 30 կադր/վրկ-ի դեպքում մեկ կադրին բաժին է ընկնում 33.3 մվրկ, ինչը սահմանափակում է դուրս մղված հիշողությունից վերցվող տվյալները մոտ 1075.5 MiB-ով՝ ընդամենը 1 GiB-ից փոքր-ինչ ավելի։ Եթե մեկ կադրին ավելին է պետք, 30 FPS-ը հասանելի չէ։
Կայունության խնդիրը՝ փակուղի միջուկի կողպման մեջ
Սպառումը խախտում է նաև կայունությունը։ RADV-ն ցուցադրում է "Not enough memory for command submission" հաղորդագրությունը, երբ միջուկը վերադարձնում է -ENOMEM, թեև բոլոր տեղաբաշխումները հաջողությամբ ավարտվել էին։ Պատճառը դասագրքային ABBA փակուղին է. մի ուղարկում փորձում է դուրս մղել տեղաբաշխում, որը կողպել է մյուսը, մինչդեռ երկրորդին անհրաժեշտ է առաջինի պահած հիշողությունը։ Միջուկը կարողանում է հայտնաբերել նման փակուղիներն ու կրկնել փորձը, սակայն drm_exec օժանդակ գրադարանը չէր օգտագործվում TTM-ում՝ GPU-ի հիշողության կառավարման ընդհանուր շերտում։ 2024 թվականի փաթեթները երբեք չընդունվեցին, ուստի հեղինակը դրանք տեղափոխեց ընթացիկ միջուկի վրա և ուղղեց մնացած սխալները. մեկ շաբաթ պահանջվեց գտնելու այն կախումները, որոնք ի հայտ էին գալիս VRAM-ի ծանր ծանրաբեռնվածության երրորդ րոպեին։
Սկանավորման բուֆերներ և 4 GiB-ի դուրս մղում
Պրոֆիլավորումը ցույց տվեց, որ կորցված ժամանակի մեծ մասը գնում է ոչ թե ռենդերինգին, այլ SDMA-ով բուֆերների տեղափոխմանը։ Ամենավատ դեպքը էկրանին սկանավորվող բուֆերն է. էկրանի ապարատը շրջանցում է վիրտուալ հիշողությունը և պահանջում է ֆիզիկապես հարակից էջեր, մինչդեռ դուրս մղման ալգորիթմը պարզ LRU ցիկլ է, որը հաշվի չի առնում ֆիզիկական սահմանափակումները։ Գործնականում մինչև 4 GiB VRAM էր դուրս մղվում սկանավորման պատկերների համար տեղ ազատելու նպատակով, որոնցից յուրաքանչյուրը պարունակում է մոտ 32 MiB պիկսելային տվյալ. միայն այդ տվյալների տեղափոխումը արժե առնվազն 130 մվրկ։ Նոր կոշտ ու փափուկ սահմանափակման փուլերը պետք է կանգնեցնեն հիշողության այս ետ ու առաջ տեղափոխումը։
Ինչ է տալիս գործնականում
Այս էվրիստիկաներով Indiana Jones: The Great Circle-ը 8 GiB-անոց քարտի վրա 9 GiB պահանջելով ստացավ միջինը 19.6 մվրկ մեկ կադրի համար։ Ավելցուկի կրկնապատկումը մեծացրեց տատանումը՝ 33.3 մվրկ-ը գերազանցող ցատկերով։ Միջուկն այժմ հաշվի է առնում նաև VK_EXT_pageable_device_local_memory-ն և vkSetDeviceMemoryPriorityEXT-ը, ինչը թույլ է տալիս հավելվածին նշել ամենաանվտանգ դուրս մղվող հիշողությունը։
SiTech — AI-ով հզորացված վեբ մշակում
Ստեղծում ենք արագ ու ժամանակակից կայքեր և AI-ը ներդնում իրական բիզնես գործընթացներում։ Ունե՞ք նախագիծ կամ հարց։ Ուրախ կլինենք օգնել։