Data Cache — protsessor ishlatayotgan ma’lumotlarning yaqinda murojaat qilingan yoki tez orada kerak bo‘lishi kutiladigan qismini saqlaydigan kichik va tezkor xotira. U asosiy xotira — DRAM — bilan protsessor yadrosi o‘rtasidagi katta tezlik farqini kamaytiradi. Dastur load yoki store buyrug‘ini bajarganda, yadro odatda avval data cache’ni tekshiradi.
Ishlash tamoyili
Kesh ma’lumotni alohida baytlar emas, cache line deb ataladigan bloklar ko‘rinishida ko‘chiradi. Masalan, dastur massivning bitta elementini o‘qisa, unga qo‘shni elementlar ham bir satr ichida keltirilishi mumkin. Bu spatial locality’dan foydalanadi. Temporal locality esa yaqinda ishlatilgan qiymatga yana murojaat qilinish ehtimoli yuqoriligini anglatadi.
Manzil keshga kelganda uning index qismi tegishli setni tanlaydi, tag qismi esa qidirilayotgan satr aynan shu manzilga tegishli ekanini tekshiradi. Mos valid satr topilsa cache hit yuz beradi. Topilmasa cache miss qayd etilib, ma’lumot quyi kesh darajasi yoki operativ xotiradan olinadi.
Load va store yo‘llari
Load hit odatda bir necha takt ichida registrga qiymat beradi. Store siyosati esa arxitekturaga bog‘liq. Write-back keshda yozuv avval kesh satrini o‘zgartiradi va uni dirty deb belgilaydi; satr chiqarilgandagina quyi xotiraga yoziladi. Write-through variantida har o‘zgarish quyi darajaga ham uzatiladi.
Store buffer yozuvning yakunlanishini kutmasdan keyingi buyruqlarni davom ettirishga imkon beradi. Load queue esa oldingi store’lar bilan manzil to‘qnashuvini tekshiradi. Bir xil manzil bo‘lsa, yangi qiymat store-to-load forwarding orqali keshga yetib bormasdan load’ga berilishi mumkin.
Tuzilishi va kechikish
Data cache ko‘pincha birinchi darajada instruction cache’dan ajratiladi. Bu bir siklda instruction fetch va ma’lumot load’ini parallel bajarishga yordam beradi. Sig‘imni yoki associativity’ni oshirish conflict misslarni kamaytiradi, biroq ko‘proq tag taqqoslash, quvvat sarfi va uzunroq hit latency keltirishi mumkin.
Banklangan tuzilma bir vaqtda bir nechta load yoki store’ni qabul qiladi. Ikki murojaat bir bankka tushsa bank conflict yuz berib, ulardan biri kutadi. Ko‘p portli SRAM buni kamaytiradi, lekin maydon va energiya jihatidan qimmat.
Aniqlik va himoya
Virtual manzilni fizik manzilga o‘girish TLB bilan parallel bajarilishi mumkin. Kesh indexing va tag siyosati alias muammosini oldini olishi kerak: bir fizik sahifaning ikki virtual nomi alohida, nomuvofiq nusxa hosil qilmasligi lozim. Ko‘p yadroli tizimda coherence protokoli boshqa yadrolarning shu satrga yozuvini kuzatadi.
Cache timing dastur uchun arxitektura natijasi bo‘lmasa-da, kuzatiladigan kechikish maxfiy ma’lumot haqida side-channel yaratishi mumkin. Himoya constant-time kod, izolyatsiya, flush yoki apparat bo‘linmalaridan foydalanadi. ECC va parity esa bit xatolarini aniqlab, ayrim dizaynlarda tuzatadi.
Data cache samaradorligi faqat hit foizi bilan baholanmaydi. Critical loadning kechikishi, bir siklda bajariladigan murojaatlar, misslar parallelligi va store queue bosimi ham umumiy ishlashga ta’sir qiladi. Performance counterlarni profiling bilan birga ko‘rish qaysi data tuzilmasi yoki access tartibi keshdan yomon foydalanayotganini aniqlashga yordam beradi.
Data-oriented profilingda working set hajmi va access stride birga o‘lchanadi. Shu ikki ko‘rsatkich kesh sig‘imini oshirish kerakmi yoki ma’lumot joylashuvini o‘zgartirish yetarlimi, degan qarorni ajratadi.
Bog‘liq tushunchalar
cache line, load instruction, store instruction, write-back cache, TLB, cache coherence