2014-10-11 14 views
5

Tôi chạy Perf phân tích về chương trình trống sau,Perf stat cho số giảng dạy khác nhau cho mỗi chạy

#include <stdio.h> 
int main() { 
} 

Sau khi biên dịch và chạy Perf stat ./a.out tôi có đầu ra sau đây nói (cùng với các dữ liệu khác như số chu kỳ, đồng hồ công việc, v.v.):

418,869 instructions # 0.87 insns per cycle 

Số lượng hướng dẫn thay đổi trong mỗi lần phân tích 'hoàn thiện' trên cùng một tinh tinh.

Nhu cầu thực tế của tôi là tìm số lượng hướng dẫn trong một chức năng cụ thể mà tôi đã viết. Vì vậy, tôi sẽ trừ số ở trên từ số lượng hướng dẫn trong chương trình mới. (Tôi có thể đếm số dòng trong chương trình được tạo bằng cách sử dụng thẻ -S trong gcc nhưng tôi bối rối sau khi xem hành vi hoàn hảo)

Tại sao số lượng hướng dẫn không nhất quán, chính xác không giống nhau?

Cập nhật Tôi làm theo các ví dụ được đưa ra trong man page sử dụng perf_event_open() trong C

Trả lời

4

Để đo lường số lượng hướng dẫn thực hiện bởi chức năng của bạn, tôi đề nghị bắt đầu và ngừng sự kiện đếm với perf_event_open() tại lối vào chức năng của và thoát ra hơn là chạy hai lần chương trình của bạn có và không có chức năng.

Về việc không xác định số lượng lệnh được thực hiện bởi chương trình trống của bạn, bạn có thể đếm các sự kiện ở cả vùng người dùng và hạt nhân. Tôi nghĩ rằng số người sử dụng đất nên giữ nguyên giữa hai lần chạy, nhưng đối với phần hạt nhân, nhiều điều đang xảy ra đằng sau hiện trường để thực thi chương trình này, vì vậy tôi đoán định thức không đến từ bên trong những gì đang xảy ra trong mã hạt nhân. Để chỉ tính chỉ dẫn về không gian người dùng, bạn có thể sử dụng:

perf stat -e instructions:u a.out 

Bạn có thể cung cấp thêm chi tiết về sự khác biệt không?

+0

perf_event_open() đã cho tôi số đếm chính xác bằng với số lượng hướng dẫn trong tệp .s. perf stat -e hướng dẫn: u a.out cũng cung cấp số đếm khác nhau mỗi lần nhưng biến thể không lớn như trong kịch bản được giải thích trong câu hỏi. – Vignesh

+0

sử dụng perf_event_open bạn chính xác nkwo những gì bạn đo. Đối với biến thể (nhỏ) còn lại ngay cả sau khi thêm: u Tôi đoán rằng nhiều điều vẫn được thực hiện trong không gian người dùng trước khi chức năng chính trong chương trình của bạn được gọi, và có thể có một số biến thể ở đây. –

Các vấn đề liên quan