تخطَّ إلى المحتوى

sccache - ذاكرة التجميع المشتركة

sccache - ذاكرة التجميع المشتركة

sccache هي ذاكرة مجمع (بروح ccache) من Mozilla التي تدعم Rust و C/C++ و NVCC. تلتف مجمعك، تجزئة المدخلات، وتعيد كائن مخزن مؤقتًا عندما تكون قد رأت نفس التجميع من قبل. ميزتها المميزة هي محركات التخزين المشتركة — S3 و GCS و Redis و Azure — بحيث يشارك الفريق بأكمله وأسطول CI الخاص بك ذاكرة واحدة. هذا يحول “CI تعيد تجميع كل شيء من الصفر في كل تشغيل” إلى “CI تحمل ما تم بناؤه بالفعل.”

التثبيت

الطريقةالأمر
Cargocargo install sccache --locked
macOS (Homebrew)brew install sccache
ملف ثنائيتحميل من GitHub Releases
التحققsccache --version

استخدامه مع Rust

# لمرة واحدة
RUSTC_WRAPPER=sccache cargo build

# دائم (في ~/.cargo/config.toml)
[build]
rustc-wrapper = "sccache"
المتغيرالغرض
RUSTC_WRAPPER=sccacheتوجيه rustc عبر sccache
SCCACHE_DIRدليل ذاكرة محلية
SCCACHE_CACHE_SIZEحد أقصى لحجم الذاكرة المحلية (مثل 20G)

استخدامه مع C/C++

# CMake
cmake -DCMAKE_C_COMPILER_LAUNCHER=sccache \
      -DCMAKE_CXX_COMPILER_LAUNCHER=sccache ..

# Make
make CC="sccache gcc" CXX="sccache g++"

فحص الفعالية

الأمريعرض
sccache --show-statsالضربات والفشل وحجم الذاكرة والأخطاء
sccache --zero-statsإعادة تعيين العدادات قبل بناء الاختبار
sccache --stop-serverإيقاف خادم الخلفية
sccache --start-serverابدأه بشكل صريح
# قياس بناء بارد مقابل دافئ
sccache --zero-stats
cargo build --release
sccache --show-stats     # expect misses
cargo clean && cargo build --release
sccache --show-stats     # expect hits

الرقم الرئيسي هو معدل ضربة الذاكرة. معدل منخفض عادة يعني أن شيئًا ما في المدخلات يتغير (أعلام، متغيرات بيئية، مسارات مطلقة).

محركات السحابة المشتركة

# S3
export SCCACHE_BUCKET=my-build-cache
export SCCACHE_REGION=us-east-1
export AWS_ACCESS_KEY_ID=... AWS_SECRET_ACCESS_KEY=...

# Redis
export SCCACHE_REDIS=redis://cache.internal:6379

# GCS
export SCCACHE_GCS_BUCKET=my-build-cache
export SCCACHE_GCS_KEY_PATH=/path/to/key.json
المحركبادئة Env
القرص المحليSCCACHE_DIR
S3 / S3-متوافقSCCACHE_BUCKET, SCCACHE_ENDPOINT
RedisSCCACHE_REDIS
GCSSCCACHE_GCS_*
AzureSCCACHE_AZURE_*
GitHub ActionsSCCACHE_GHA_ENABLED=true

نمط CI

# GitHub Actions
env:
  SCCACHE_GHA_ENABLED: "true"
  RUSTC_WRAPPER: "sccache"
steps:
  - uses: mozilla-actions/sccache-action@v0.0.5
  - run: cargo build --release
  - run: sccache --show-stats

ما يكسر الذاكرة المؤقتة

السببالحل
مسارات مطلقة في الإخراجاستخدم --remap-path-prefix
تغيير RUSTFLAGSاحفظ الأعلام المستقرة عبر التشغيلات
التجميع المتزايدعطّله (CARGO_INCREMENTAL=0) لاستخدام الذاكرة
وحدات الماكرو / سكريبتات البناءليس دائمًا قابلة للتخزين المؤقت
إصدارات مجمع مختلفةتتضمن مفاتيح الذاكرة المجمع

sccache مقابل البدائل

الجانبsccacheccacheBazel/Buck
اللغاتRust, C/C++, CUDAC/C++كثير (نظام بناء كامل)
ذاكرة مشتركةمحركات سحابة مدمجةمعظمها محليذاكرة/تنفيذ عن بعد
الإعدادمتغير بيئة محولمحولاعتماد نظام بناء جديد
الأفضل لـتسريع الأبنية الموجودةتخزين C/C++ محليأحادي كبيرة

يقترن بشكل جيد مع mold — sccache يقطع وقت التجميع، mold يقطع وقت الربط.

الموارد