aytugyayman.com.tr

irusanov/ZenTimings çatalı · v1.40 → v1.44

Açık kaynak · GPL-3.0

ZenTimings (çatal)

ZenTimings (yeni sekmede açılır), irusanov'un yazdığı ve Ryzen sistemlerde bellek zamanlamalarını görmek için çok kullanılan bir araç. Temmuz 2026'da bir çatalını açtım. Üzerine canlı sensörler, bellek kıyaslaması, OC araçları ve DDR5'te tCCD_L ailesinin okunmasını ekledim.

26 Temmuz ile 16 Ağustos 2026 arasında on sürüm yayımladım, ikisi beta. Çatal ana projenin 18 commit önünde. 80 dosyada 17.691 satır ekleme var.

Otomatik güncelleme bilerek kapalı. Ana projeden bir sürüm çekmek buradaki değişikliklerin üzerine yazar.

Çatalda neler var

  • İzleme

    Ana pencerede canlı CPU Die ve DDR5 DIMM sıcaklıkları, küçük geçmiş grafikleri ve en düşük, en yüksek, ortalama değerleriyle. PMIC'lerden toplanan DIMM gücü, Zen 5 ve Ryzen 7000'de I/O die sıcaklığı, WHEA hata sayacı, CSV telemetri kaydı ve en yüksek sıcaklığı gösterebilen tepsi simgesi.

  • Zamanlamalar

    tCCD_L, tCCD_L_WR ve tCCD_L_WR2. Banka grubu başına CA, CK ve CS sonlandırması (ODT A ve ODT B). SPD'deki anma değerleri, çalışan değerlerin yanında. Tüm kanalları yan yana gösteren “All” görünümü.

  • Kıyaslama

    L1, L2, L3 ve RAM için okuma, yazma, kopyalama ve gecikme. İki CCD'li işlemcilerde her L3 ayrı satırda. Banka döngüsü zamanlamalarını (tRAS, tRC, tRRD, tFAW) öne çıkaran rastgele erişim puanı. Sabitlenebilen bir karşılaştırma çizgisiyle geçmiş ve HTML dışa aktarma.

  • OC araçları

    OC profil yönetimi ve OC araçları pencereleri, referans profillerle karşılaştırma.

  • Kolaylıklar

    Türkçe arayüz, bellek yapılandırmasına göre adlandırılan Ctrl+Alt+S ekran görüntüsü kısayolu, Windows ile başlatma. Bir şey çökerse exe'nin yanına sebebini içeren bir crash.txt bırakılıyor.

tCCD_L'yi okumak

tCCD_L, DDR5'te aynı banka grubuna giden iki ardışık okuma ya da yazma komutu arasındaki en kısa süre. BIOS'tan ayarlanabiliyor ama ZenStates-Core bu değerleri okumuyordu.

v1.40'ta tCCD_L ve tCCD_L_WR2'yi ZenStates-Core'un okumadığı UMC kayıtlarından çözdüm: tCCD_L 0x50198[7:3] + 5, tCCD_L_WR2 0x502E0[5:0] + 7. tCCD_L_WR ise hiçbir UMC kaydında yok. Yalnızca bu değerde farklı olan iki döküm, iki kanal penceresinde, AOD tablosunda ve SPD'de bayt bayt aynıydı.

Değer, AGESA'nın açılışta belleğe bıraktığı APOB verisinde duruyor. Aynı banka grubundaki üç yazma zamanlaması, kanal başına bir kopya olacak şekilde art arda saklanıyor. Sabit bir ofset yerine tCCD_L ve tCCD_L_WR2'yi çapa alarak buluyorum.

Sonra kayıt ve APOB ofsetlerinin anakarttan anakarta, AGESA sürümünden sürümüne değiştiği ortaya çıktı, Zen 4 ile Zen 5 arasında da. v1.42 bazı MSI kartlardaki okumayı düzeltti. v1.42.6'da üç değeri de APOB'dan okumaya geçtim, v1.42.7'de aramayı sağlamlaştırdım. v1.43'ten beri kayıt okumasına geri düşen değerler “!” ile işaretleniyor. v1.44'te AGESA 1.3.0.1c ile gelen en yeni BIOS'lar için bir düzeltme daha var.

Her BIOS değerleri başka bir yerde tutabildiği için, okuma yanlışsa en hızlı çözüm iki hata ayıklama raporu: biri BIOS'ta tCCD_L'yi değiştirmeden önce, biri sonra. APOB düzeniyle ilgili bir düzeltme ZenStates-Core'a da girdi (f8dce5b (yeni sekmede açılır)).

Kıyaslamayı düzgün ölçmek

İlk kıyaslamada bir hata vardı. Yaklaşık 305 MiB'tan büyük bir tampon hiçbir zaman sonuna kadar dolaşılmıyordu. 512 ve 1024 MB'lık testler istenenden küçük bir alanı ölçüyor ve gecikmeyi olduğundan iyi gösteriyordu. v1.41'de düzelttim.

C# ile yazılmış sıradan bir döngü bir önbelleği ölçmeye yetmiyor. Bir Zen+ çekirdeğinde skaler döngü L1d'den 28,5, L2'den 28,6, L3'ten 27,8 GB/s verdi. Üç sayının neredeyse aynı olması, ölçülenin önbellek değil döngünün kendisi olduğunu gösteriyordu.

.NET Framework'te SIMD intrinsic'leri yok. Bu yüzden okuma, yazma ve kopyalama döngüleri çalışma anında makine kodu olarak üretiliyor. Bellek sayfası önce yazılabilir açılıp dolduruluyor, sonra çalıştırılabilir yapılıyor, ikisi aynı anda hiçbir zaman değil. Kod, bilinen baytları yazıp geri okuyan bir öz testten geçmeden kullanılmıyor.

Hangi genişliğin daha hızlı olduğu işlemciye göre değişiyor, bu yüzden uygulama iki genişliği de çalıştırıp hızlı olanı kullanıyor. Bir 9800X3D'de L1d okuması 128 bitte 150, 256 bitte 322, 512 bitte 672 GB/s ölçüldü. Bu kazanç yalnızca Zen 5'te var. Zen 4 döngü başına tek bir 512 bitlik yükleme yapıyor, yani iki 256 bitlik yüklemeyle aynı. Zen 1, 2 ve 3'te AVX-512 hiç yok.

RAM'e yazma puanı için non-temporal yazmalar kullanılıyor. Sıradan bir yazma, sahibi olmadığı önbellek satırını önce bellekten okuyup sonra geri yazıyor. 64 bayt yazmak için 128 bayt trafik oluşuyor ve yazma sonuçları yarıya iniyor.

Ölçüm artık sessiz bir çekirdeğe sabitleniyor, büyük bellek sayfalarını kullanıyor ve kısa dilimlerle örnekleniyor. Sonuçla birlikte bir gürültü değerlendirmesi de veriliyor. Test sırasında uygulamanın kendi okumaları duruyor. Büyük sayfalar kullanılamıyorsa uygulama nedenini söylüyor, “What to do?” düğmesi çözümü adım adım gösteriyor.

Sürüm geçmişi

GitHub'daki sürüm notlarından ve çataldaki değişiklik günlüğünden (WPF/Changelog.txt), yeniden eskiye. Her sürüm GitHub'daki sayfasına bağlanıyor.

  1. v1.44 (yeni sekmede açılır)

    son sürüm

    Yeni

    • Bellek kıyaslaması artık işlemci önbelleklerini de ölçüyor: L1, L2, L3 ve RAM için hız ve gecikme tek bir tabloda.
    • İki yongacıklı işlemcilerde (7950X3D, 9950X3D …) her L3 önbelleği kendi satırında. Satırda onu kaç çekirdeğin ölçtüğü de yazıyor (örneğin “8 of 16”).
    • Sonuçlar sekmesine yeniden çalıştırma düğmesi ve ilerleme çubuğu eklendi, tekrar çalıştırmak için geri dönmek gerekmiyor.
    • Çok büyük önbellekli işlemciler için 2048 MB'lık yeni tampon seçeneği.
    • Sabitlenebilen bir karşılaştırma çizgisiyle kıyaslama geçmişi. Eski bir çalıştırmaya tıklayınca neyin hızlandığı ya da yavaşladığı görülüyor.
    • Tek tıkla HTML dışa aktarma. Sonucun tamamı, puanların yanında zamanlamaların ekran görüntüsüyle birlikte paylaşılabiliyor.
    • Zen 5 ve Ryzen 7000 için I/O die sıcaklığı, Options'ta bir anahtarla.
    • Bir şey çökerse uygulama, sebebin bulunabilmesi için exe'nin yanına bir crash.txt bırakıyor.

    Değişen

    • Çalıştırmalar arasındaki sonuçlar çok daha tutarlı. Uygulama en iyi çekirdeği kendisi bulup kullanıyor.
    • Kıyaslama büyük bellek sayfalarını kullanamıyorsa nedenini söylüyor, “What to do?” düğmesi çözümü adım adım gösteriyor.
    • Geçmiş dosyası bozulursa kıyaslama geçmişi artık kaybolmuyor, üzerine yazılmak yerine kurtarılıyor.
    • RAM hız aşırtması kararsızsa kıyaslama çökmek yerine bir bellek hatası bildiriyor. Bu bir hata değil, sorunun cevabı.

    Düzeltilen

    • HWiNFO ya da başka bir izleme aracı çalışırken SoC voltajı artık yanlışlıkla 1,55 V göstermiyor.
    • tCCD_L zamanlamaları en yeni BIOS'larda (AGESA 1.3.0.1c) artık doğru okunuyor olmalı. Sürüm notunda “umarım” diye yazdım.

    Not

    • Bu sürüm notu, v1.43'te gelen kıyaslama geçmişi ve HTML dışa aktarma gibi değişiklikleri de özetliyor.
    GitHub'daki sürüm notu (v1.44, yeni sekmede açılır)
  2. Yeni

    • Banka döngüsü zamanlamalarını (tRAS, tRC, tRRD, tFAW) öne çıkaran yeni bir rastgele erişim (Random) puanı.
    • Sabitlenebilen bir karşılaştırma çizgisiyle kıyaslama geçmişi paneli ve ZenTimings penceresini puanların yanına yerleştiren HTML dışa aktarma.
    • Modül seçicinin yanında yeni “All” düğmesi: her kanalın zamanlamaları yan yana. Her sütunun başında modülün PMIC'i, rank sayısı, DRAM yongası ve kapasitesi yazıyor.
    • Zen 5'te yeni IOD okuması: I/O die sıcaklığı ve en sıcak noktası, Options'ta bir anahtarla.
    • System Info artık Memory Timings ve APOB Table altında tCCD_L, tCCD_L_WR ve tCCD_L_WR2'yi listeliyor.

    Değişen

    • Bellek kıyaslaması yeniden yazıldı: otomatik büyük sayfalı yerel tampon, sessiz bir çekirdeğe sabitleme, kısa dilimlerle örnekleme ve bir gürültü değerlendirmesi. Test sırasında uygulamanın kendi okumaları duruyor.
    • Kıyaslamadaki üst sınırlar CCD ve dolu kanal sayısına göre ölçekleniyor.
    • DIMM sıcaklığı ve gücü iki ayrı satır yerine tek bir okumada.
    • Saat oranı artık yalnızca UCLK'de, MCLK'ye göre 1:1 ya da 1:2 olarak gösteriliyor. MCLK ve FCLK'de oran yok.
    • Dışa aktarmalar (JSON, HTML, OC profilleri) tCCD_L ailesinin tamamını içeriyor.
    • Kayıt okumasına geri düşen tCCD_L değerleri “!” ile işaretleniyor.
    • HTML hata ayıklama raporu artık koyu renkli, yazdırınca yine beyaz çıkıyor.
    • Türkçe arayüz kıyaslama penceresine de genişletildi.
    • Options penceresi ekrandan uzunsa artık kaydırılabiliyor.
    • Bu sürümden önce kaydedilen kıyaslama çalıştırmaları, karşılaştırma farkı verilmek yerine “not comparable” olarak işaretleniyor.

    Düzeltilen

    • Çok sayıda hata düzeltmesi.

    Not

    • CPU VDDIO yaklaşık 1,45 V'un üzerinde N/A gösteriyor. Bu beklenen bir durum ve şimdilik düzeltilemiyor, çünkü değeri taşıyan tek alanı firmware sıfırlıyor.
    GitHub'daki sürüm notu (v1.43.0, yeni sekmede açılır)
  3. Beta: CPU VDDIO değerinin BIOS'taki değerle aynı olup olmadığını kontrol etmek için.

    Değişen

    • Kullanılmayan donanım izleme kütüphaneleri paketten çıkarıldı.

    Düzeltilen

    • Bazı AGESA sürümlerinde CPU VDDIO'nun 0.0000 V ya da başka bir voltajla yer değiştirmiş bir değer göstermesi düzeltildi.
    • PMIC telemetrisi olmayan anakartlarda MEM VDDQ ve MEM VPP artık yer değiştirmiyor.
    GitHub'daki sürüm notu (v1.42.8-beta, yeni sekmede açılır)
  4. Beta: tCCD_L, tCCD_L_WR ve tCCD_L_WR2'nin BIOS'taki değerlerle aynı olup olmadığını bildirmek için. v1.42.6 sisteminizde doğru çalışıyorsa bu sürümü kullanmayın.

    Yeni

    • tCCD_L_WR artık OC Tools'ta da görünüyor.

    Değişen

    • tCCD_L için APOB araması sağlamlaştırıldı.
    GitHub'daki sürüm notu (v1.42.7-beta, yeni sekmede açılır)
  5. Değişen

    • tCCD_L, tCCD_L_WR ve tCCD_L_WR2 artık UMC kayıtlarından değil APOB'dan okunuyor.

    Not

    • Kartınızda hâlâ yanlış okunuyorsa, biri BIOS'ta tCCD_L'yi değiştirmeden önce, biri sonra alınmış iki hata ayıklama raporu düzeltmenin en hızlı yolu.
    GitHub'daki sürüm notu (v1.42.6, yeni sekmede açılır)
  6. Düzeltilen

    • Bazı MSI anakartlarda ve AGESA sürümlerinde tCCD_L okuması düzeltildi.

    Not

    • Sürüm notunda yazdığım gibi: bu değişiklik ya sorunu çözecek ya da okumayı tamamen bozacaktı. Her kayıt ve APOB ofseti anakarttan anakarta ve AGESA sürümünden sürümüne (Zen 4 ile Zen 5 arasında da) değişiyor, tam yeri bulmak gerçekten zor.
    GitHub'daki sürüm notu (v1.42, yeni sekmede açılır)
  7. Yeni

    • CPU Die sıcaklığı, bellek sıcaklığı, DIMM gücü ve WHEA hata sayısı Options → Readouts'tan tek tek açılıp kapatılabiliyor.
    GitHub'daki sürüm notu (v1.41.5, yeni sekmede açılır)
  8. Düzeltilen

    • Ekran görüntüsü alırken çıkan hatalar düzeltildi.
    GitHub'daki sürüm notu (v1.41.1, yeni sekmede açılır)
  9. Yeni

    • Options penceresi için Türkçe arayüz (Options → Language).

    Değişen

    • Daha açık adlar: menüde “Reference Profiles”, OC Tools'ta “My Profiles”. Kayıt düğmesinin adı artık “Start / Stop CSV Logging”.

    Düzeltilen

    • DDR5 APU anakartlarında ProcDqsOdt'nin ProcDqOdt değerini göstermesi düzeltildi.
    • Bellek kıyaslaması: yaklaşık 305 MiB'tan büyük bir tampon sonuna kadar dolaşılmıyordu. 512 ve 1024 MB'lık testler istenenden küçük bir alanı ölçüyor ve gecikmeyi etikette yazandan iyi gösteriyordu.
    • CSV kaydı artık doğrudan diske yazıyor. Bilgisayar donarsa donma anındaki satırlar işletim sistemi önbelleğiyle birlikte kaybolmuyor.
    • Ana pencere simge durumundayken telemetri penceresi donmuş bir okumayı en düşük, en yüksek ve ortalama değerlere katmıyor.
    • AOD tablosu olmayan platformlarda System Info artık uygulamayı çökertme riski taşımıyor.
    GitHub'daki sürüm notu (v1.41, yeni sekmede açılır)
  10. Çatalın ilk sürümü: canlı sensörler, kıyaslamalar ve tCCD_L ailesi.

    Yeniİzleme

    • Ana pencerede canlı CPU Die ve DDR5 DIMM sıcaklıkları, her biri kısa geçmiş grafiği ve en düşük, en yüksek, ortalama ipucuyla.
    • Modüllerdeki PMIC'lerden toplanan toplam DIMM gücü.
    • Tepsi simgesi en yüksek sıcaklığı seçtiğiniz renkte gösterebiliyor. Simge, ölçekli ekranlarda da net kalması için kabuğun gerçek simge boyutunda çiziliyor.
    • CSV telemetri kaydı ve WHEA hata izleme.

    YeniZamanlamalar

    • tCCD_L ve tCCD_L_WR2, ZenStates-Core'un okumadığı UMC kayıtlarından: tCCD_L 0x50198[7:3] + 5, tCCD_L_WR2 0x502E0[5:0] + 7.
    • tCCD_L_WR, APOB'dan. Hiçbir UMC kaydında yok. Sabit bir ofset yerine tCCD_L ve tCCD_L_WR2'ye göre konumlanarak bulunuyor.
    • Banka grubu başına CA, CK ve CS sonlandırması (ODT A ve ODT B).
    • SPD'deki anma zamanlamaları çalışan değerlerin yanında, her zamanlama için açıklamayla.
    • Zamanlama paneli, üç sütun da aynı satırda bitecek şekilde yeniden düzenlendi.

    YeniKıyaslama ve OC

    • Ayrı bir sonuç penceresiyle bellek bant genişliği ve gecikme testleri.
    • Kalıcı kıyaslama geçmişi ve referans profillerle karşılaştırma.
    • OC profil yönetimi ve OC araçları pencereleri.

    YeniKolaylıklar

    • Türkçe arayüz (Options → Language).
    • Bellek yapılandırmasına göre adlandırılan Ctrl+Alt+S ekran görüntüsü kısayolu.
    • Windows ile başlatma.

    Not

    • ZenTimings'in resmî olmayan bir çatalı. Otomatik güncelleme bilerek kapalı, ana projeden bir sürüm çekmek bu değişikliklerin üzerine yazar.
    GitHub'daki sürüm notu (v1.40, yeni sekmede açılır)

Ana projelere gidenler

Bilinen sorunlar

  • CPU VDDIO, yaklaşık 1,45 V'un üzerinde N/A gösteriyor. Değeri taşıyan tek alanı firmware sıfırlıyor, şimdilik düzeltilemiyor.
  • tCCD_L ailesi bazı anakart ve BIOS birleşimlerinde hâlâ yanlış okunabiliyor. Kayıt okumasına geri düşen değerler “!” ile işaretli.