Skip to content

Yeni yazı: DMA ve Cache — Cortex-A9 / Zynq-7000 üzerinde sessiz veri bozulması#119

Open
Mavrikant wants to merge 1 commit into
masterfrom
post/2026-06-07-dma-cache-cortex-a9-zynq7000
Open

Yeni yazı: DMA ve Cache — Cortex-A9 / Zynq-7000 üzerinde sessiz veri bozulması#119
Mavrikant wants to merge 1 commit into
masterfrom
post/2026-06-07-dma-cache-cortex-a9-zynq7000

Conversation

@Mavrikant

Copy link
Copy Markdown
Owner

Konu

DMA ve Cache: ARM Cortex-A9 Üzerinde Sessizce Eskimiş Veri Hatasının Anatomisi. Zynq-7000 (Cortex-A9 + PL310) zemininde, DMA ile L1/L2 cache arasındaki coherency probleminin somut bir ADC ring buffer örneği üzerinden ele alındığı uzun-form bir yazı.

Neden bu konu seçildi?

  • Son üç yayın alanı: yazılım tasarım (coupling, 2026-06-04), navigasyon (Kalman, 2026-06-02), sistem (2026-05-26). Bu yazı gömülü/SoC'ye dönüyor; o alanda son yayın Renode (2026-05-14, 24 gün önce). Alan rotasyonu sağlanıyor.
  • Açık PR Yeni yazı: volatile Yetmediğinde — Zynq-7000 Üzerinde C11 _Atomic, SCU ve Bellek Bariyerleri #100 ("volatile Yetmediğinde — _Atomic, SCU, bellek bariyerleri") CPU↔CPU senkronizasyonunu ele alıyor; bu yazı ise CPU↔DMA cephesindeki cache coherency'yi ele alıyor. Ortak yön yalnızca DSB bariyeri ve Zynq-7000 zemini — konular birbirinden bağımsız.

Bu konuyu Türkçe içerikte bulmak neden zor?

Bilgi şu kaynaklar arasında dağınık: ARM ARM (DDI 0406C), Cortex-A9 TRM, PL310 TRM (DDI 0246H), Xilinx UG585, Xilinx embeddedsw xil_cache.c, Linux kernel DMA-API dokümanı, ARM Community ve Xilinx forum cevapları. Klasik tuzaklar (partial-line, adjacent variable corruption, L1/L2 ayrı bakım, ACP'nin bant darlığı) bu kaynakların hiçbirinde tek bir sentezde toplanmamış. Türkçe içerikte konunun ciddi bir tartışması neredeyse yok. Yazı bu kaynakları bir araya getirip somut bir reprodüksiyon ile bağlıyor.

Derinlik öğesi (Bölüm 7)

Failure mode analysis + cache maintenance instruction walkthrough + somut yarış koşulu reprodüksiyonu. Yazı, bug'lı bir ADC ring buffer kodunu adım adım inceliyor; alignment, L1/L2 sırası, clean+invalidate yarış koşulu ve cache pressure ile ilgili gözlemleri gerçek bir senaryoda gösteriyor; ardından kodu düzeltiyor.

Kullanılan kaynaklar

Yazının sonundaki "Kaynaklar" bölümünde tam listesi var; özetle:

Öz-eleştiri (Critic fazı bulguları ve düzeltmeleri)

  • MMU sınıfı hatası yakalandı ve düzeltildi: İlk taslakta "Strongly-Ordered veya Device" non-cacheable seçeneği olarak gösterilmişti — bu yanlış; doğrusu "Normal, Non-Cacheable". Düzeltildi ve fark açıkça vurgulandı (Strongly-Ordered/Device hâlâ MMIO için doğru sınıf).
  • Versiyon spesifik iddialar hedge edildi: Xil_DCacheFlushRange() v8.0'da düzeltilen L1/L2 race condition'ı, web search ile doğrulandı; kesin sürüm numarası kaynaklara dayandı.
  • Performans iddiaları nicel değil nitel bırakıldı: ACP bant genişliği düşüklüğü "JBLopen benchmark'ında belirgin biçimde düşük kalır" şeklinde ifade edildi; spesifik sayı kaynağa bırakıldı.

Stil ve şekil kontrolü

  • Türkçe başlık + İngilizce alt başlık ✓
  • Front matter şeması mevcut yazılarla aynı (coupling-dengesi, bandpass-sampling ile karşılaştırıldı) ✓
  • mermaid: true ile bir sequence diagram ✓
  • ## Kaynaklar sonda, gerçek linkler ✓
  • Hero görsel /img/posts/3.webp (generic, mevcut) ✓
  • Hiçbir proje-spesifik / sınıflandırılmış / ihracat-kontrollü bilgi yok ✓

Yayın akışı

master'a doğrudan hiçbir şey push edilmedi. Bu PR insan inceleme bekliyor; merge kararı tamamen insana ait.

…bozulması

ARM Cortex-A9'da DMA ile L1/L2 cache arasındaki coherency problemini somut bir
ADC ring buffer örneği üzerinden ele alan uzun-form bir yazı. DCCMVAC, DCIMVAC
ve DCCIMVAC ile maintenance dilbilgisi; partial-line ve clean+invalidate yarış
koşulu gibi klasik tuzaklar; non-cacheable bölge ve ACP alternatifleri;
pratik bir karar tablosu.

agent/topics.md güncellendi, agent/research/ altına araştırma notları eklendi.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant