Abseil Performance Hints (Jeff Dean & Sanjay Ghemawat)
1. Genel bakış
Google'ın ilk dönemlerinden beri önem verdiği yazılım performansı ayarlamaya ilişkin genel ilkeleri ve somut teknikleri derleyen bir dokümandır. Dağıtık sistemler veya ML donanımı ayarlamaktan ziyade, tek bir ikili dosya perspektifinden performans optimizasyonuna odaklanır.
2. Ana içerik
Performans hakkında düşünme biçimi (Thinking about performance)
- "Erken optimizasyon tüm kötülüklerin anasıdır" sözünün yanlış anlaşılması: Bu özdeyiş, önemsiz verimliliklerin %97'sini görmezden gelin demektir; kritik %3'lük fırsatları da kaçırın anlamına gelmez.
- Küçük iyileştirmelerin önemi: Yaklaşık %12'lik bir hız artışı bile mühendislik açısından asla önemsiz değildir ve yüksek kaliteli programlar için gereklidir.
- İlk seçimler: "Önce basit yazalım, sonra optimize ederiz" yaklaşımı çoğu zaman genel bir performans düşüşüne (Flat Profile) yol açar ve iyileştirmeyi zorlaştırır. Okunabilirliği veya karmaşıklığı ciddi biçimde bozmuyorsa, baştan daha hızlı bir alternatifi seçmek iyidir (ör.
std::vectoryerineabsl::InlinedVector).
Tahmin (Estimation)
- Sezgi ve hesaplama: Kodu yazarken performansa etkisini önceden kabaca kestirmek önemlidir.
- Kabaca hesap yapma (Back-of-the-envelope): Uygulamadan önce yaklaşık kaynak maliyetini hesaplayın. (Örn. L1 önbellek erişimi 0.5ns, mutex lock 15ns, SSD okuma 20µs gibi temel işlem maliyetlerinden beklenen performansı çıkarma)
Ölçüm (Measurement)
- Profil çıkarma: Etkili ölçüm en önemli araçtır.
pprofveyaperfgibi araçlarla gerçek darboğaz bölgeleri belirlenmelidir. - İpucu: Testleri optimizasyon bayrakları uygulanmış production ikili dosyasıyla yapın ve değişikliklerin etkisini doğrulamak için mikro benchmark'lar yazın.
Düz profil (Flat Profile) ile başa çıkma
- Belirgin bir darboğaz olmadığında: CPU profili düz çıkıyorsa, tüm sistem genelinde %1'lik küçük iyileştirmeleri biriktirme stratejisi etkili olabilir.
- Yapısal iyileştirme: Çağrı yığınının üst kısmındaki döngüleri yeniden yapılandırmayı veya veri yapılarını değiştirmeyi değerlendirmek gerekir.
Somut teknik örnekleri
- Algoritma iyileştirmesi: Döngü algılama veya deadlock algılama mantığını daha verimli algoritmalarla (örn. topolojik sıralama tabanlı) değiştirerek hız ve ölçeklenebilirlik sağlanır.
- Bellek gösteriminin optimize edilmesi: Sık erişilen veri yapılarını sıkıştırmak (Compact) ya da bellek yerleşimini (alanların yeniden sıralanması, padding'in azaltılması) ayarlamak, önbellek verimliliğini artırır ve bellek veri yolu trafiğini azaltır.
1 yorum
Vay be..