3 poin oleh GN⁺ 2024-03-18 | 1 komentar | Bagikan ke WhatsApp

Situs Brendan: Memulai

  • Halaman utama blog Brendan Gregg membahas berbagai topik seperti kinerja sistem, alat BPF, performa Linux, dan lainnya.
  • Postingan terbaru mencakup kembalinya frame pointer, dokumenter eBPF, serta bahwa alat observabilitas eBPF bukanlah alat keamanan.
  • Blog ini juga membagikan konten teknis bersama berbagai konferensi dan presentasi yang diikuti Brendan.

Kembalinya frame pointer

  • Pada sistem tanpa frame pointer, pelacakan stack berhenti di lapisan libc sehingga frame aplikasi hilang.
  • Fedora dan Ubuntu menyelesaikan masalah ini dengan merilis versi yang mengompilasi libc dengan frame pointer secara bawaan.
  • Frame pointer digunakan oleh profiler dan debugger eksternal, serta divisualisasikan melalui flame graph.

Apa itu frame pointer?

  • Menurut dokumen x86-64 ABI, register CPU %rbp dapat digunakan sebagai "base pointer" dari stack frame.
  • Teknik ini digunakan secara luas untuk stack trace, termasuk oleh Linux perf dan eBPF.

2004: penghapusan frame pointer

  • Pada 2004, pengembang gcc Roger Sayle mendorong perubahan untuk menghentikan pembuatan frame pointer.
  • Perubahan ini meningkatkan performa, tetapi dengan munculnya eBPF, kini sebagian debugger/profiler mengalami masalah karenanya.

2005-2023: musim dingin profiler yang rusak

  • Perubahan penghapusan frame pointer juga diterapkan ke x86-64, tetapi arsitektur ini memiliki lebih banyak register sehingga keuntungannya tidak besar.
  • Akibatnya, banyak debugger/profiler tidak lagi bekerja dengan benar.

2014: Java in Flames

  • Saat bergabung dengan Netflix, ditemukan bahwa kurangnya dukungan frame pointer di Java merusak seluruh stack aplikasi.
  • Untuk mengatasi masalah ini, dikembangkan modifikasi pada compiler JVM c2.

2015-2020: overhead

  • Overhead performa dari menambahkan frame pointer ke semuanya umumnya kurang dari 1%.
  • Pada microbenchmark tertentu, overhead dapat mencapai 10%.

2022: upaya upstream

  • Ini mengisyaratkan bahwa perusahaan besar seperti Google, Meta, dan Netflix sudah mengaktifkan frame pointer di semua tempat.
  • Ada berbagai kesulitan untuk menjadikan perubahan ini sebagai default agar semua orang mendapat manfaat.

2023, 2024: frame pointer di Fedora dan Ubuntu

  • Fedora menerima usulan untuk mengaktifkan kembali frame pointer.
  • Ubuntu juga mengaktifkan frame pointer secara bawaan pada versi 24.04 LTS.

Setelah 2034: melampaui frame pointer

  • Ada berbagai cara untuk melacak stack, seperti LBR, BTS, AET, DWARF, eBPF stack walking, ORC, SFrames, dan shadow stack.
  • Di masa depan, SFrames atau shadow stack mungkin dapat digunakan untuk semua stack tracing.

Kesimpulan

  • Kembalinya frame pointer membuat CPU flame graph lebih bermakna, membuat Off-CPU flame graph berfungsi untuk pertama kalinya, dan membuka kemungkinan-kemungkinan baru lainnya.
  • Ini juga merupakan kemenangan bagi profiler kontinu, karena mereka tidak lagi perlu meyakinkan pelanggan untuk mengubah OS agar profiler dapat bekerja sepenuhnya.

Opini GN⁺

  • Kembalinya frame pointer tampaknya akan sangat membantu analisis kinerja sistem dan debugging. Ini terutama merupakan alat penting untuk mendiagnosis masalah dan mengoptimalkan performa pada sistem perangkat lunak yang kompleks.
  • Perubahan ini menunjukkan pentingnya kolaborasi dan kontribusi komunitas open source. Keputusan Fedora dan Ubuntu dapat memengaruhi distribusi lain, yang dapat membawa perubahan positif bagi seluruh ekosistem Linux.
  • Menghadirkan kembali frame pointer adalah soal menyeimbangkan penurunan performa dengan kemudahan debugging. Keputusan seperti ini dapat dipahami lebih baik melalui pengujian dan analisis performa di lingkungan produksi nyata.
  • Bagi pengguna dengan latar belakang teknis, perubahan ini bisa jadi menarik, dan memberikan informasi berguna bagi pengembang atau administrator sistem yang tertarik pada peningkatan kinerja sistem.
  • Jika ada teknologi atau alat lain yang menyediakan fungsi serupa dengan frame pointer, misalnya profiler berbasis perangkat keras seperti Intel VTune Profiler atau AMD uProf, alat-alat tersebut dapat digunakan untuk analisis performa bahkan tanpa frame pointer.

1 komentar

 
GN⁺ 2024-03-18
Komentar Hacker News
  • Pengalaman saat penghilangan stack frame pointer mulai menyebar pada awal 2000-an
    • Penulis saat itu sedang belajar ilmu komputer, dan komputer yang digunakan sudah tua serta berperforma rendah.
    • Ketika debugging menjadi sulit, ia mulai menggunakan Python untuk menghindari masalah debugging tersebut.
  • Upaya di distribusi Fedora untuk mempertahankan stack frame pointer
    • Ada keyakinan keliru bahwa stack frame pointer membawa overhead besar, padahal overhead sebenarnya kurang dari 1%.
  • Fakta bahwa Apple selalu menjaga stack trace tetap bermakna pada arsitektur ARM
    • Fungsi tertentu mungkin tidak membuat frame record, tetapi stack trace tetap bermakna bahkan tanpa info debug.
  • Pengalaman di Google dan perdebatan 20 tahun dengan komunitas
    • Berbagi pengalaman mengerjakan patch dan memelihara libunwind agar dapat diterapkan ke gperftools.
  • Kasus di masa lalu ketika peningkatan performa dirasakan dengan opsi -fomit-frame-pointer
    • Mengompilasi MySQL dan PHP pada prosesor 32-bit untuk mengurangi biaya perangkat keras.
  • Cara bahasa pemrograman Virgil mengelola stack frame
    • Jika tidak ada alokasi stack dinamis, ukuran frame dapat ditemukan dengan pencarian tabel sederhana.
    • Penjelasan tentang kode yang mengimplementasikan decoding metadata.
  • Ide mengelola dua stack menggunakan RBP dan RSP alih-alih "menelusuri" stack
    • Dengan begitu call stack menjadi sekadar array alamat pengembalian, sehingga kebutuhan untuk menelusuri stack berkurang.
  • Berbagi pengalaman dan pemikiran terkait dukungan terhadap frame pointer
    • Apakah frame pointer diaktifkan sebaiknya diputuskan per kasus, dan benchmarking itu penting.
    • Pentingnya build system menyediakan kemampuan untuk mengubah ini secara menyeluruh.
    • Harapan terhadap SFrame dan potensinya untuk menyelesaikan masalah saat ini.
  • Pendapat bahwa profiling telah menjadi masalah selama 20 tahun dan baru sekarang diselesaikan
    • Ketiadaan frame pointer telah menyulitkan banyak orang, dan melihat Linux kini mengembalikannya terasa seperti pengakuan atas upaya mereka.
  • Ironisnya, ada keluhan tentang performa mekanisme yang memungkinkan system profiling
    • Mengeluhkan performa sistem yang justru memungkinkan identifikasi masalah performa adalah bentuk ekstrem dari optimasi prematur.