Trang của Brendan: Bắt đầu
- Trang chủ blog của Brendan Gregg đề cập đến nhiều chủ đề đa dạng về hiệu năng hệ thống, công cụ BPF, hiệu năng Linux và hơn thế nữa.
- Các bài viết gần đây bao gồm sự trở lại của frame pointer, phim tài liệu về eBPF, và việc các công cụ quan sát eBPF không phải là công cụ bảo mật.
- Blog cũng chia sẻ nội dung kỹ thuật cùng với nhiều hội nghị và bài thuyết trình mà Brendan đã tham gia.
Sự trở lại của frame pointer
- Trên các hệ thống không có frame pointer, stack trace dừng lại ở lớp libc, khiến các frame của ứng dụng bị thiếu.
- Fedora và Ubuntu đã giải quyết vấn đề này bằng cách phát hành các phiên bản biên dịch libc có bao gồm frame pointer theo mặc định.
- Frame pointer được các profiler và debugger bên ngoài sử dụng, và được trực quan hóa bằng flame graph.
Frame pointer là gì?
- Theo tài liệu ABI x86-64, thanh ghi CPU %rbp có thể được dùng làm "base pointer" của stack frame.
- Kỹ thuật này được dùng rộng rãi để stack trace, và được Linux perf, eBPF cùng nhiều công cụ khác sử dụng.
Năm 2004: Loại bỏ frame pointer
- Năm 2004, nhà phát triển gcc Roger Sayle đã thực hiện thay đổi nhằm ngừng tạo frame pointer.
- Thay đổi này mang lại cải thiện hiệu năng, nhưng với sự xuất hiện của eBPF, ngày nay một số debugger/profiler gặp vấn đề vì điều đó.
2005-2023: Mùa đông của các profiler bị hỏng
- Thay đổi loại bỏ frame pointer cũng được áp dụng cho x86-64, nhưng kiến trúc này có nhiều thanh ghi hơn nên lợi ích thu được không lớn.
- Vì vậy, nhiều debugger/profiler đã không còn hoạt động đúng cách.
Năm 2014: Java in Flames
- Khi gia nhập Netflix, Brendan phát hiện việc Java thiếu hỗ trợ frame pointer đã làm hỏng toàn bộ stack của ứng dụng.
- Để giải quyết vấn đề này, ông đã phát triển một bản sửa cho trình biên dịch JVM c2.
2015-2020: Overhead
- Overhead hiệu năng khi thêm frame pointer vào mọi thứ nhìn chung thường dưới 1%.
- Trong một số microbenchmark cụ thể, overhead có thể lên tới 10%.
Năm 2022: Nỗ lực upstream
- Điều này cho thấy các công ty lớn như Google, Meta, Netflix và những bên khác đã bật frame pointer cho mọi thứ từ trước.
- Tuy nhiên, có nhiều khó khăn trong việc biến thay đổi này thành mặc định để mọi người cùng hưởng lợi.
Năm 2023, 2024: Frame pointer trên Fedora và Ubuntu
- Fedora đã chấp nhận đề xuất bật lại frame pointer.
- Ubuntu cũng bật frame pointer theo mặc định trong phiên bản 24.04 LTS.
Sau năm 2034: Vượt ra ngoài frame pointer
- Có nhiều cách để truy vết stack, như LBR, BTS, AET, DWARF, eBPF stack walking, ORC, SFrames và shadow stack.
- Trong tương lai, SFrames hoặc shadow stack có thể được dùng cho mọi stack trace.
Kết luận
- Sự trở lại của frame pointer giúp CPU flame graph trở nên ý nghĩa hơn, khiến Off-CPU flame graph lần đầu tiên hoạt động được, và mở ra những khả năng mới khác.
- Đây cũng là một chiến thắng cho các continuous profiler, vì họ không còn cần thuyết phục khách hàng thay đổi OS để profiler có thể hoạt động đầy đủ.
Ý kiến của GN⁺
- Sự trở lại của frame pointer có vẻ sẽ là trợ giúp lớn cho phân tích hiệu năng hệ thống và gỡ lỗi. Đặc biệt, đây là công cụ thiết yếu để chẩn đoán sự cố và tối ưu hiệu năng trong các hệ thống phần mềm phức tạp.
- Thay đổi này cho thấy tầm quan trọng của sự hợp tác và đóng góp từ cộng đồng mã nguồn mở. Quyết định của Fedora và Ubuntu có thể ảnh hưởng đến các bản phân phối khác, từ đó mang lại thay đổi tích cực cho toàn bộ hệ sinh thái Linux.
- Việc đưa frame pointer trở lại là bài toán cân bằng giữa suy giảm hiệu năng và sự dễ dàng trong gỡ lỗi. Quyết định như vậy có thể được hiểu rõ hơn thông qua kiểm thử và phân tích hiệu năng trong môi trường vận hành thực tế.
- Với những người dùng có nền tảng kỹ thuật, thay đổi này có thể rất thú vị, đồng thời cung cấp thông tin hữu ích cho các nhà phát triển hoặc quản trị viên hệ thống quan tâm đến việc cải thiện hiệu năng hệ thống.
- Nếu có các công nghệ hoặc công cụ khác cung cấp chức năng tương tự frame pointer, ví dụ như các profiler dựa trên phần cứng như Intel VTune Profiler hoặc AMD uProf, thì chúng cũng có thể cho phép phân tích hiệu năng ngay cả khi không có frame pointer.
1 bình luận
Ý kiến trên Hacker News
-fomit-frame-pointer