phiên bản ngắn:thời gian mẫu Linux dựa profiler
Có một thời điểm thích hợp dựa lấy mẫu hồ sơ cho Linux?
phiên bản dài:
Tôi thường sử dụng OProfile để tối ưu hóa các ứng dụng của tôi. Gần đây tôi đã tìm thấy một thiếu sót khiến tôi băn khoăn.
Vấn đề là một vòng lặp chặt chẽ, sinh sản C++ filt để gỡ rối tên C++. Tôi chỉ tình cờ gặp mã trong khi đuổi theo một nút cổ chai khác. OProfile không hiển thị bất cứ điều gì bất thường về mã nên tôi gần như bỏ qua nó nhưng cảm giác mã của tôi đã nói với tôi để tối ưu hóa cuộc gọi và xem những gì đã xảy ra. Tôi đã thay đổi số popen
của C++ filt thành abi::__cxa_demangle
. Thời gian chạy đã kéo dài từ hơn một phút đến một chút trong một giây. Tốc độ x60 tăng lên.
Có cách nào tôi có thể đã định cấu hình OProfile để gắn cờ cuộc gọi popen
không? Vì dữ liệu hồ sơ bây giờ là OProfile nghĩ rằng cổ chai là đống và các cuộc gọi std::string
(mà BTW một khi được tối ưu hóa đã giảm thời gian chạy xuống dưới một giây, tăng tốc hơn x2).
Dưới đây là cấu hình oprofile tôi:
$ sudo opcontrol --status
Daemon not running
Event 0: CPU_CLK_UNHALTED:90000:0:1:1
Separate options: library
vmlinux file: none
Image filter: /path/to/executable
Call-graph depth: 7
Buffer size: 65536
Có một hồ sơ cho Linux mà có thể đã tìm thấy các nút cổ chai?
Tôi nghi ngờ vấn đề là OProfile chỉ ghi nhật ký mẫu của nó vào quy trình hiện đang chạy. Tôi muốn nó luôn ghi lại các mẫu của nó cho quá trình tôi đang lược tả. Vì vậy, nếu quá trình hiện đang chuyển sang (chặn trên IO hoặc một cuộc gọi popen
) OProfile sẽ chỉ đặt mẫu của nó tại cuộc gọi bị chặn.
Nếu tôi không thể sửa lỗi này, OProfile sẽ chỉ hữu ích khi thực thi đang đẩy gần CPU 100%. Nó không thể giúp với thực thi có các cuộc gọi chặn không hiệu quả.
Mike, quan điểm của bạn rất hợp lệ, tôi đồng ý kỹ thuật với 100%. Bất kỳ ý tưởng về làm thế nào để cho phép lấy mẫu dựa trên thời gian thông qua OProfile hoặc trong một cách tiếp cận tự động hơn là chỉ phá vỡ trong trình gỡ rối? –
@Caspin: Tôi đang sử dụng Windows và tôi không phải là người dùng OProfile, nhưng liên kết này (http://oprofile.sourceforge.net/doc/opreport.html) nói về việc sử dụng và trình bày dữ liệu mẫu ngăn xếp . Ngoài ra liên kết này (http://oprofile.sourceforge.net/doc/detailed-parameters.html#timer) nói về ngắt hẹn giờ. Tôi không thể biết nếu nó sẽ lấy mẫu trong I/O hoặc các cuộc gọi chặn khác. –
... lưu ý rằng tần suất lấy mẫu không cần phải nhanh, nhưng nó cần phải có khả năng lấy mẫu trong khi chặn cuộc gọi trừ khi bạn muốn bị mù đối với những cuộc gọi đó. –