En istikrarlı Raspberry Pi? Termal yönetimle %81 iyileşen NTP doğruluğu
(austinsnerdythings.com)- Raspberry Pi tabanlı NTP sunucusunda frekans dalgalanmasını azaltmak için CPU çekirdeği sabitleme ile termal kararlılığı birleştiren deney sonuçları tanıtılıyor
- CPU sıcaklık değişimlerinin kristal osilatörde frekans kaymasına yol açtığı gözlemlendi ve bunu sabit sıcaklıkta tutarak kararlılık sağlandı
- PID kontrollü
time burnersüreci ile CPU 54°C’de tutulurken, frekans dalgalanmasında %81 azalma ve standart sapmada %77 düşüş elde edildi - CPU 0 yalnızca chronyd için ayrılıp diğer çekirdeklerle termal yük korunarak NTP ofseti ortalama 38ns seviyesine iyileştirildi
- Hassas zaman senkronizasyonu veya bilimsel cihazlar gibi aşırı doğruluk gereken ortamlarda düşük maliyetli yüksek hassasiyetli zamanlama sunucusu kurma olasılığı gösterildi
Sorun: Sıcaklık değişiminden kaynaklanan zamanlama kararsızlığı
- Raspberry Pi’nin dinamik frekans ölçekleme (DVFS) özelliği güç verimliliği açısından avantajlı olsa da hassas zaman senkronizasyonu için dezavantajlı
- CPU yüküne göre saat frekansı değiştiğinde sistem saatinin tik hızı da dalgalanıyor
- Kristal osilatörün frekansı sıcaklığa duyarlı ve CPU’nun ürettiği ısıya göre birkaç ppm düzeyinde değişebiliyor
- Gündüz ve gece sıcaklık değişimine bağlı frekans kayması oluşuyor
- Grafana izleme sonuçlarında, CPU sıcaklığı değişimine bağlı olarak yaklaşık ±1ppm frekans ofseti gözlemlendi
- Ortalama RMS ofset 86ns seviyesindeydi ve iyileştirme payı vardı
Bulgular: Sabit sıcaklık korumanın etkisi
- CPU sıcaklığı sabit tutulduğunda frekans kararlılığının artırılabileceği doğrulandı
- Çözüm iki parçadan oluşuyor
- CPU çekirdeği izolasyonu – chronyd ve PPS kesmeleri yalnızca CPU 0’a atanıyor
- Termal kararlılık – diğer çekirdekler sürekli çalıştırılarak sıcaklık sabit tutuluyor
- 17 Kasım 2025 09:10’da termal kararlılık sistemi etkinleştirildiğinde frekans salınımı hemen azaldı
Çözüm 1: CPU çekirdeği sabitleme ve gerçek zamanlı öncelik ayarı
- CPU 0: yalnızca chronyd ve PPS kesmeleri için
- CPU 1–3: genel işler ve termal yükün korunması için
- Açılışta otomatik çalışan bir optimizasyon betiği yapılandırıldı
- CPU frekans ölçekleme modu performance olarak sabitleniyor
- PPS IRQ(200) CPU 0’a sabitleniyor
- chronyd gerçek zamanlı öncelik (SCHED_FIFO 50) ile çalıştırılıyor
- ksoftirqd/0 sürecinin önceliği artırılıyor
- Betik
/etc/rc.localiçine veya bir systemd servisi olarak kaydedilebiliyor
Çözüm 2: PID kontrollü termal kararlılık
- CPU sıcaklığını sabit tutmak için PID kontrol döngüsü kullanılıyor
- Hedef sıcaklık: 54°C
- CPU 1–3 üzerinde çalışan 3 worker süreci MD5 hash hesaplamasıyla yük üretiyor
- PID çıktı değerine göre hesaplama süresi ile bekleme süresi ayarlanıyor
- PID parametreleri
- Kp=0.05, Ki=0.02, Kd=0.0
- Sıcaklık değişimi yavaş olduğu için türev terimi (Kd) 0 olarak bırakıldı
- Sonuç olarak CPU sıcaklığı ±0.2°C aralığında kararlı biçimde tutuldu
Sonuçlar: Frekans kararlılığında artış
- Frekans oynaklığında %81 azalma, standart sapmada %77 düşüş, RMS ofsette %49 azalma
- Ortalama RMS ofset: 85.44ns → 43.54ns
- Medyan RMS ofset: 80.13ns → 37.93ns
- CPU sıcaklığı 54°C’de tutulurken ±0.14ppm aralığında frekans kararlılığı sağlandı
- Ortam sıcaklığı değişimine (18.9~22.2°C) rağmen kararlılık korundu
Kurulum adımları
- Ön hazırlık: GPS PPS tabanlı bir NTP sunucusunun kurulmuş olması gerekiyor
- Gerekli paketlerin kurulması
linux-cpupower,python3,util-linux
- Açılış optimizasyon betiği
/usr/local/bin/pps-optimize.shhazırlanıp systemd’ye kaydediliyor - Termal kontrol betiği
/usr/local/bin/time_burner.pyhazırlanıp servis olarak ekleniyorExecStart=/usr/bin/python3 /usr/local/bin/time_burner.py -t 54.0 -n 3
- Doğrulama komutları
- CPU governor:
performancekontrolü - chronyd CPU sabitlemesi ve öncelik ayarının doğrulanması
chronyc trackingile RMS ofset ölçümü (ör. 35ns seviyesi)
- CPU governor:
İzleme ve sorun giderme
- Gerçek zamanlı izleme:
watch -n 1 "chronyc tracking" - Servis durumu kontrolü:
sudo systemctl status time-burner.service - PID ayarı
- Sıcaklık salınımı varsa Kp düşürülür, kararlılık gecikiyorsa Ki artırılır
- Hedef sıcaklık 50~60°C aralığında ayarlanabilir
- Yüksek CPU kullanımı (yaklaşık %90) kasıtlı bir davranıştır
Ödünleşimler
- Güç tüketimi artışı: sürekli 3–4W tüketim (yıllık yaklaşık 15–25kWh)
- Daha fazla ısı üretimi: 54°C’de tutuluyor, güvenli aralık içinde
- CPU kaynak kullanımı: 4 çekirdeğin 3’ü kullanılıyor
- Yalnızca NTP’ye adanmış cihazlar için uygun, çok servisli ortamlar için uygun değil
Uygulama alanları
- Hassas zaman senkronizasyonu, bilimsel cihazlar, dağıtık sistem araştırmaları, ağ testleri vb.
- Genel kullanım için fazla uç bir yaklaşım olsa da düşük maliyetli yüksek hassasiyetli deney ortamı kurmak açısından faydalı
Gelecekteki iyileştirmeler
- Uyarlamalı PID ayarı ile mevsimsel sıcaklık değişimlerine uyum sağlama
- Donanım tabanlı soğutma kontrolü (PWM fan vb.) ile güç verimliliğini artırma
- OCXO (fırın kontrollü kristal osilatör) kullanılması halinde termal kaymanın ortadan kaldırılabilmesi
Sonuç
- CPU çekirdeği sabitleme ile PID kontrollü termal yönetimin birleşimi sayesinde ultra hassas NTP sunucusu oluşturuldu
- Frekans kararlılığı %81 iyileşti, RMS ofset 38ns seviyesine ulaştı
- Deney, termal yönetim ile gerçek zamanlı zamanlayıcının ilişkisini ortaya koydu
- Bu proje pratiklikten çok teknik keşif ve öğrenme değeri odaklı
1 yorum
Hacker News görüşleri
CPU0'da diğer kesmeler toplandığı için, yüksek zamanlama hassasiyeti gerektiren işler için uygun değildir
CPU0'da taşınamayan pek çok sistem işi var; bu yüzden başka bir çekirdeği yalıtılmış ada (isolated core) olarak kullanmak çok daha iyi
Yalıtılmış çekirdeğimizde zamanlayıcı gecikmesi minimum 1µs, ortalama 5µs, maksimum 59µs civarında ve oldukça kararlı
İlgili yazı: Spare Time – JILA
Su şişeleriyle oluşturulan ısıl kütle (thermal mass) de ilginç
Tıpkı uyku tulumunun içine sıcak taş koymanın etkisi gibi
Benim LEA-M8T cihazım 16Hz'de time pulse üretiyor ve chrony yapılandırmasında dpoll=-4 olarak ayarlı. 16 saniyelik aralıklarla 256 örnek toplanınca kararlılık artıyor
Masamın yanında bir BH3SAP GPSDO da var. Claude firmware'i değiştirip GPS PPS olmasa bile pulse üretmeyi sürdüren flywheel mode ekledi
Ayrıca TSIP (Trimble protokolü) çıktısını destekleyecek şekilde güncelledi. Buna bir sonraki yazıda değineceğim
Yorumlara da yakında cevap yazacağım; sorular her zaman memnuniyetle karşılanır
16Hz pulse'un pratikte ne kadar fark yarattığını merak ediyorum. Bir de veriyi influxdb'ye nasıl aktardığını öğrenmek isterim. Ben collectd kullanıyorum ama bilgi az
Metal bir kasa bile varsa, ısıtıcı veya klimanın döngüsel sıcaklık değişimlerine karşı daha kararlı sonuçlar verebilir
İlgili belge: Raspberry Pi StackExchange – oscillator değişimi
Yalnızca bu yöntemle bile drift 4 ila 5 kat azalıyor. Başka tekniklerle birlikte kullanılırsa daha da iyi
Ama lehim becerime pek güvenmediğim için kendim değiştirmeye cesaret edemiyorum
Sadece bir NTP sunucusu kurma işinden bile öğrenilecek çok şey var
Fansız bile mükemmel pasif soğutma sağlıyor
Sıcaklık yavaş değişirse clock drift de daha yavaş değişir, dolayısıyla telafi etmesi kolaylaşır
Ancak küçük bir heatsink tersine ortam sıcaklığı değişimlerine karşı daha hassas hale getirebilir
Oda sıcaklığındaki ani değişimleri (pencere açılması, duştan sonra oluşan nem vb.) yumuşatabilir ve CPU'nun gereksiz yere ısı üretmesini azaltabilir
Sonuçta amaç ısıyı sabit tutmak
Diğer çekirdekler zaten maksimum sıcaklığa yakın çalışıyor ve sıcaklığa göre saat hızını otomatik ayarlıyor
Aşırı soğutma bu dahili sıcaklık kontrol mekanizmasını bozabilir
GPIO ile kontrol edilebilen bir transistör eklenerek PID kontrolü ile sıcaklık sabit tutulabilir
Sıcaklık katsayısı (temperature coefficient) 0'a yakın olacak şekilde kesilmiş kristaller kullanıldığı için kararlıydılar
Modern ekipmanlar da hâlâ benzer yapı kullanıyor ve tamamen kararlı hale gelmeleri yaklaşık 5 dakika sürüyor
Ortam sıcaklığı değişimlerini azalttı ama sonuçta onu sıcaklık kontrollü bir haznenin içine koymak en kesin çözüm
Örneğin ethernet bağlı bir STM32 kartını NTP sunucusu olarak kullanmak daha kararlı olabilir
Pi'ye NTP sinyali verebiliyor; STM32 de mümkün ama varsayılan olarak ethernet işlevi yok
RTLinux'ta zamanlayıcıyı harici pin durumuna göre senkronize eden özellikler de var
Ama işlemci sayısı arttıkça metastability sorunları ortaya çıkıyor
Pi, FPGA (Zynq) gibi gerçek zaman garantisi sunmuyor
Ama güç tüketimi düşük olduğu için, karmaşık bir soğutma sistemi yerine biraz enerji israfıyla çözmek mantıklı görünüyor
İki PPS sinyaliyle jitter algılama yöntemi eski bir teknik ve tempco learning de onlarca yıldır var
Asıl eksik olan, öğrenilen tempco'nun gerçekte ne kadar doğru olduğuna dair doğrulama