Bosh sahifa Wiki Build Cache

Build Cache

Build Cache — avval bajarilgan build amali natijasini uning barcha muhim kirishlari bilan bog‘lab saqlaydigan mexanizm. Keyingi buildda ayni amal va kirishlar takrorlansa, kompilyatsiya yoki generatsiya qayta bajarilmay, tayyor artefakt olinadi.

Kalit va natija

Cache key source fayllar, transitive dependencylar, compiler versiyasi, target, flaglar va build rule’ning fingerprintidan tuziladi. Faqat source timestampiga qarash yetarli emas; header, environment yoki generator o‘zgarsa eski natija noto‘g‘ri bo‘lishi mumkin.

Content-addressed tuzilma

Content-addressed storage artefaktni kontent hashiga bog‘laydi. Action cache esa action key’dan output hashlar ro‘yxatiga o‘tadi. Shu ajratish ayni faylni ko‘p action orasida deduplicate qiladi va integrityni tekshiradi.

Mahalliy siyosat

Mahalliy cache bitta developer diskida ishlaydi. CI job yoki clean checkout ham undan foyda olishi uchun remote cache kerak. Eviction LRU, hajm limiti yoki vaqt siyosati bilan bajariladi; cache yo‘qolishi build correctnessni o‘zgartirmasligi kerak.

Deterministik build

Nondeterministic output bir xil key uchun turli artefakt yaratadi. Timestamp, mutlaq path, tasodifiy tartib va host nomi outputga kirsa hit ishonchsiz bo‘ladi. Reproducible build bu manbalarni remap yoki fixed value bilan boshqaradi.

Xavfsizlik

Cache poisoning xavfida ishonchsiz actor keyga zararli output joylashtiradi. Hash, authentication, namespace va write permissionlar himoya qiladi. Cache entry executable bo‘lishi mumkinligi sabab u oddiy tezlik optimizatsiyasi emas, supply-chain chegarasidir.

Tekshiruv

Tekshiruv cold build va warm build output hashlarini solishtiradi, bitta dependency o‘zgarganda faqat tegishli action miss bo‘lishini kuzatadi. Toolchain yoki flag o‘zgarishi ham keyni almashtirishi kerak.

Amaliy boshqaruv

Build Cache implementatsiyasida action key va artefakt digest 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 — yashirin dependency yoki nondeterministik output. 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 cold/warm build hamda selective invalidation 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.

Cache statistikasi action turi bo‘yicha hit, miss, miss sababi va qayta ishlatilgan baytlarni ko‘rsatadi. “Miss” faqat key topilmadi degani emas: output eviction, toolchain farqi yoki dependency fingerprint o‘zgarishi alohida qayd etiladi. Cache’siz clean build muntazam bajarilib, yashirin cache dependency yo‘qligi tasdiqlanadi.

Bog‘liq tushunchalar

content-addressed storage, build system, cache key, reproducible build, dependency graph, CI