Victim Cache — asosiy keshdan yaqinda chiqarilgan satrlarni vaqtincha saqlaydigan kichik, odatda fully associative qo‘shimcha kesh. U ayniqsa direct-mapped yoki associativity’si past keshdagi conflict misslarni kamaytiradi. “Victim” nomi asosiy kesh replacement qarori bilan chiqarilgan satrni anglatadi; satr darhol quyi xotiraga tashlanmaydi.
Konfliktni yumshatish
Ikki tez-tez ishlatiladigan manzil bir xil cache setga xaritalansa, ular navbatma-navbat bir-birini chiqarishi mumkin. Sig‘im yetarli bo‘lsa ham hit rate keskin pasayadi. Victim cache chiqarilgan satrni bir necha entry ichida ushlab turadi. Keyingi murojaat shu satrga kelsa, quyi keshga borish o‘rniga victim hit olinadi.
Asosiy kesh missida ikkala tuzilma tekshiriladi. Satr victim cache’da topilsa, ko‘pincha u asosiy keshdagi almashtirilayotgan satr bilan swap qilinadi. Shunday qilib ikki konfliktli satr bittadan joyda qoladi. Fully associative qidiruv har entry tagini parallel solishtiradi; entrylar kam bo‘lgani uchun bu amaliy jihatdan arzon.
Joylashuv va yozuv holati
Victim cache odatda L1 bilan L2 orasida mantiqiy joylashadi. Dirty satr unda saqlansa, write-back hali L2’ga yuborilmaydi. Keyin victim cache’dan ham chiqarilganda dirty ma’lumot quyi darajaga yoziladi. Coherence snoop asosiy L1 bilan birga victim entrylarni ham tekshirishi kerak, aks holda eski nusxa qolishi mumkin.
Ba’zi dizaynlar clean va dirty satrlarga turli replacement ustuvorligi beradi. Dirty entryni saqlash write bandwidthni kamaytiradi, ammo juda uzoq ushlab turish boshqa foydali conflict satrini chiqaradi. Store miss va write-allocate siyosati yangi satr qaysi tuzilmaga joylashishini belgilaydi.
Oddiy associativity’dan farqi
Asosiy keshni ikki yoki to‘rt way qilish ham conflict missni kamaytiradi. Victim cache esa barcha setlar uchun kichik umumiy associativity qo‘shadi. Konfliktlar oz sonli “issiq” setlarda jamlansa, bir necha victim entry katta foyda beradi. Har setga qo‘shimcha way qo‘shishdan ko‘ra kamroq data array talab qilishi mumkin.
Biroq victim lookup va swap control latency hamda energiya qo‘shadi. Agar workloadning muammosi capacity miss yoki streaming bo‘lsa, kichik victim cache yordam bermaydi. Prefetch noto‘g‘ri satrlarni chiqarayotgan bo‘lsa, victim maydoni ham tez to‘lib ketadi.
Baholash va qo‘llanish
Samaradorlik victim hit soni, swap chastotasi va quyi darajaga kamaygan misslar bilan o‘lchanadi. Faqat umumiy hit rate emas, critical load kechikishi ham muhim. Victim hit L1 hitdan sekinroq, ammo L2 hitdan tezroq bo‘lishi mumkin.
Atama ba’zan kesh replacement qurbonlarini saqlaydigan har qanday buferga norasmiy qo‘llanadi. Klassik victim cache esa talablar bo‘yicha qidiriladigan, tag va data saqlaydigan haqiqiy keshdir; oddiy write-back buffer faqat chiqarishni navbatlaydi va odatda load hit manbasi bo‘lmaydi.
Victim entrylar replacement tartibini o‘zlari ham talab qiladi. Odatda eng eski yoki yaqinda ishlatilmagan entry chiqariladi, lekin dirty holat write-back narxini o‘zgartiradi. Fill va swap bir vaqtda kelganda vaqtinchalik reservation bitlari bitta entry ikki requestga berilmasligini ta’minlaydi; retry tugamaguncha eski data authoritative qoladi.
Kichik victim cache uchun software ko‘rinadigan boshqaruv odatda bo‘lmaydi. Uning mavjudligi performance counter yoki latency tajribasi orqali bilinishi mumkin, ammo dastur correctnessini unga bog‘lamasligi kerak.
Bog‘liq tushunchalar
conflict miss, direct-mapped cache, fully associative cache, replacement policy, write-back buffer, cache set