Cache Affinity — task yoki threadni ilgari ishlagan CPU yoki cache domeniga yaqin qayta rejalashtirib, uning instruction va data working setidan qayta foydalanishga intilish.
Cache locality
Thread boshqa corega ko‘chsa private L1/L2 cache soviydi va cache line coherence orqali yangi joyga o‘tadi. Ayni LLC yoki NUMA node ichidagi migration uzoq node’ga qaraganda arzonroq bo‘lishi mumkin.
Scheduler heuristic
Scheduler wake-affine heuristic uyg‘otuvchi va uyg‘ongan threadni yaqin CPUga qo‘yadi. Last-CPU preference cache hotnessni saqlaydi, ammo run queue band bo‘lsa load balance muhimroq.
Affinity mask
Hard CPU affinity threadni ruxsat etilgan mask bilan cheklaydi. Soft affinity faqat preference. Juda tor mask CPU idle bo‘lmasa ham taskni kutdirishi va throughputni kamaytirishi mumkin.
NUMA
NUMA memory first-touch bo‘yicha joylashsa CPU affinity memory locality bilan uyg‘un bo‘ladi. Threadni ko‘chirib memoryni ko‘chirmaslik remote latencyni oshiradi. Scheduler va memory balancer birga ishlaydi.
Topology muvozanati
Producer-consumer threadlarni bir cache domainiga yaqin qo‘yish sharingni tezlashtirishi, ammo same core SMT contentionini oshirishi mumkin. Benchmark target topologyga bog‘liq.
O‘lchov
Tekshiruv migration count, cache miss, NUMA remote access, run-queue latency va throughputni birga o‘lchaydi. Affinity faqat microbenchmark emas, real workload bilan baholanadi.
Amaliy boshqaruv
Cache Affinity implementatsiyasida last CPU, cache domain va NUMA alohida va versiyalangan holat sifatida yuritiladi. Qaror uchun zarur inputlar yashirin global taxminga aylantirilmaydi: platforma, konfiguratsiya, identity yoki memory-order sharti tegishli obyekt bilan bog‘lanadi. Shu sabab incremental yangilanish, context almashishi yoki parallel hodisada eskirgan ma’lumotdan foydalanish kamayadi. Debug rejim qarorni hosil qilgan edge, state transition va parametrlarni ko‘rsatadi; production log esa maxfiy qiymatlarni xom shaklda yozmaydi.
Muhim xato sinfi — affinity tufayli load imbalance. Bunday vaziyatda tizim optimistik tarzda davom etmaydi: semantikaga qarab konservativ fallback, bounded retry, taskni bloklash yoki aniq error tanlanadi. Timeout correctness isboti emas; u faqat operatsion limitdir. Queue membership, reference count, lock ownership va visibility kabi invariantlar state bilan atomik yangilanadi. Cancellation yoki failure o‘rtada yuz bersa qisman o‘zgargan holat cleanup protokoli orqali tiklanadi.
Sifat nazorati migration, miss va remote access o‘lchovi orqali bajariladi. Test normal yo‘ldan tashqari bo‘sh navbat, bitta element, yuqori contention, timeout bilan bir vaqtdagi wakeup, resurs limiti va platforma variantlarini qamraydi. To‘g‘rilik performance’dan alohida tekshiriladi; keyin throughput, p99 latency, context switch, cache miss yoki artefakt hajmi kabi mavzuga mos ko‘rsatkichlar baseline bilan solishtiriladi. Topilgan minimal interleaving yoki kirish regressiya to‘plamida doimiy saqlanadi.
Affinity optimizatsiyasida lock owner va waiterlarni bir corega tiqish parallelismni kamaytirishi mumkin. Per-CPU data local accessni tezlashtiradi, ammo task migrationda eski CPU queue yoki counter bilan protokol kerak. Hotplug paytida affinity maskdagi offline CPUlar xavfsiz chiqariladi.
Scheduler affinity qarorini taskning working-set yoshi bilan cheklashi mumkin: uzoq uxlagan thread cache’ini allaqachon yo‘qotgan. Bunday holatda load balance ustun turadi.
Bog‘liq tushunchalar
CPU affinity, cache locality, NUMA, scheduler, thread migration, load balancing