Panduan Optimasi Performa Abseil dari Jeff Dean
(abseil.io)Abseil Performance Hints (Jeff Dean & Sanjay Ghemawat)
1. Gambaran umum
Dokumen ini merangkum prinsip umum dan teknik konkret untuk tuning performa perangkat lunak yang telah dianggap penting sejak masa awal Google. Fokusnya adalah optimasi performa dari sudut pandang satu biner, bukan tuning sistem terdistribusi atau perangkat keras ML.
2. Poin-poin utama
Cara berpikir tentang performa (Thinking about performance)
- Salah paham tentang "premature optimization is the root of all evil": Pepatah ini berarti abaikan 97% efisiensi yang sepele, bukan berarti melewatkan 3% peluang yang benar-benar krusial.
- Pentingnya perbaikan kecil: Peningkatan kecepatan sekitar 12% sama sekali tidak sepele dari sudut pandang engineering, dan penting untuk menghasilkan program berkualitas tinggi.
- Pilihan awal: Pendekatan "buat sesederhana mungkin dulu lalu optimalkan nanti" sering kali berujung pada penurunan performa menyeluruh (Flat Profile) sehingga sulit diperbaiki. Jika tidak terlalu merusak keterbacaan atau menambah kompleksitas, sebaiknya pilih alternatif yang lebih cepat sejak awal (misalnya
absl::InlinedVectoralih-alihstd::vector).
Estimasi (Estimation)
- Intuisi dan perhitungan: Saat menulis kode, penting untuk memperkirakan lebih dulu dampaknya terhadap performa.
- Perhitungan kasar (Back-of-the-envelope): Hitung dulu secara kasar biaya resource sebelum implementasi. (Contoh: referensi cache L1 0.5ns, mutex lock 15ns, pembacaan SSD 20µs, lalu perkirakan performa berdasarkan biaya operasi dasar tersebut)
Pengukuran (Measurement)
- Profiling: Pengukuran yang efektif adalah alat yang paling penting. Gunakan
pprofatauperfuntuk mengidentifikasi bottleneck yang sebenarnya. - Tips: Uji dengan biner production yang sudah diberi optimization flag, dan tulis microbenchmark untuk memverifikasi dampak perubahan.
Menangani Flat Profile
- Saat tidak ada bottleneck yang jelas: Jika profil CPU terlihat datar, strategi yang efektif adalah menumpuk optimasi kecil sebesar 1% di seluruh sistem.
- Perbaikan struktural: Pertimbangkan untuk merestrukturisasi loop di bagian atas call stack atau mengubah struktur data.
Contoh teknik konkret
- Perbaikan algoritma: Ganti logika deteksi siklus atau deteksi deadlock dengan algoritma yang lebih efisien (misalnya berbasis topological sort) untuk mendapatkan kecepatan dan skalabilitas.
- Optimasi representasi memori: Padatkan (Compact) struktur data yang sering diakses, atau sesuaikan memory layout (penataan ulang field, pengurangan padding) untuk meningkatkan efisiensi cache dan mengurangi traffic memory bus.
Belum ada komentar.