41

Tôi đang viết một chương trình nhỏ trong C và tôi muốn đo lường hiệu suất của nó.công cụ đơn giản nhất để đo lường chương trình C cache/bỏ lỡ và thời gian CPU trong Linux?

Tôi muốn xem có bao nhiêu thời gian để nó chạy trong bộ vi xử lý và có bao nhiêu bộ nhớ cache nhấn + bỏ lỡ nó đã thực hiện. Thông tin về chuyển mạch ngữ cảnh và sử dụng bộ nhớ cũng sẽ rất tuyệt.

Chương trình mất ít hơn một giây để thực thi.

Tôi thích thông tin của/proc/[pid]/stat, nhưng tôi không biết cách xem sau khi chương trình đã chết/bị giết.

Bất kỳ ý tưởng nào?

CHỈNH SỬA: Tôi nghĩ Valgrind bổ sung rất nhiều chi phí. Đó là lý do tại sao tôi muốn có một công cụ đơn giản, như/proc/[pid]/stat, luôn luôn ở đó.

+0

Bạn đang tìm kiếm một cái gì đó như thế này? http://software.intel.com/en-us/articles/intel-performance-counter-monitor/ – harold

Trả lời

66

Sử dụng Perf:

perf stat ./yourapp 

Xem kernel wiki perf tutorial để biết chi tiết. Điều này sử dụng các bộ đếm hiệu suất phần cứng của CPU của bạn, vì vậy chi phí rất nhỏ.

Ví dụ từ wiki:

perf stat -B dd if=/dev/zero of=/dev/null count=1000000 

Performance counter stats for 'dd if=/dev/zero of=/dev/null count=1000000': 

     5,099 cache-misses    #  0.005 M/sec (scaled from 66.58%) 
     235,384 cache-references   #  0.246 M/sec (scaled from 66.56%) 
    9,281,660 branch-misses   #  3.858 %  (scaled from 33.50%) 
    240,609,766 branches     # 251.559 M/sec (scaled from 33.66%) 
1,403,561,257 instructions    #  0.679 IPC (scaled from 50.23%) 
2,066,201,729 cycles     # 2160.227 M/sec (scaled from 66.67%) 
      217 page-faults    #  0.000 M/sec 
      3 CPU-migrations   #  0.000 M/sec 
      83 context-switches   #  0.000 M/sec 
    956.474238 task-clock-msecs   #  0.999 CPUs 

    0.957617512 seconds time elapsed 

Không cần phải nạp một module kernel bằng tay, trên một hệ thống debian hiện đại (với gói linux-base) nó chỉ nên làm việc. Với kết hợp 'perf record -a'/'perf report', bạn cũng có thể làm hồ sơ hệ thống đầy đủ. Bất kỳ ứng dụng hoặc thư viện nào có biểu tượng gỡ lỗi sẽ hiển thị cùng với chi tiết trong báo cáo. Để hiển thị, flame graphs dường như hoạt động tốt.

7

Công cụ tốt nhất cho bạn được gọi là valgrind. Nó có khả năng cấu hình bộ nhớ, xây dựng đồ thị gọi và nhiều hơn nữa.

sudo apt get install valgrind 
valgrind ./yourapp 

Tuy nhiên, để có được thời gian thực hiện chương trình, bạn có thể sử dụng tiện ích linux time(8).

time ./yourapp 
+0

có thể valgrind đo bộ nhớ cache hoặc chỉ bộ nhớ chính không? – jperelli

+1

theo như tôi biết, valgrind có thể đo tất cả các mức cache, ít nhất là L1 và L2. – iehrlich

+3

Có một mô-đun của Valgrind được gọi là cachegrind để đo bộ nhớ cache. –

10

Bạn cũng có thể sử dụng

/usr/bin/time -v YourProgram.exe 

Nó sẽ cho bạn thấy tất cả các thông tin này:

/usr/bin/time -v ls 
    Command being timed: "ls" 
    User time (seconds): 0.00 
    System time (seconds): 0.00 
    Percent of CPU this job got: 60% 
    Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.00 
    Average shared text size (kbytes): 0 
    Average unshared data size (kbytes): 0 
    Average stack size (kbytes): 0 
    Average total size (kbytes): 0 
    Maximum resident set size (kbytes): 4080 
    Average resident set size (kbytes): 0 
    Major (requiring I/O) page faults: 0 
    Minor (reclaiming a frame) page faults: 314 
    Voluntary context switches: 1 
    Involuntary context switches: 1 
    Swaps: 0 
    File system inputs: 0 
    File system outputs: 0 
    Socket messages sent: 0 
    Socket messages received: 0 
    Signals delivered: 0 
    Page size (bytes): 4096 
    Exit status: 0 

Bạn cũng có thể sử dụng cờ -f để định dạng đầu ra cho phù hợp với nhu cầu của bạn.

Xin vui lòng, hãy chắc chắn để gọi chương trình này sử dụng đó là đường dẫn đầy đủ, otherway nó sẽ gọi lệnh 'thời gian' và đó không phải là những gì bạn cần ...

Hope this helps!

+7

Thật hữu ích khi lưu ý rằng '/ usr/bin/time! = Time'. Trong bash, 'time' là một từ khóa shell tích hợp. – jperelli

+9

Nhưng bộ nhớ cache bị mất ở đâu? –

+3

Câu trả lời không liên quan gì đến việc xóa bộ nhớ cache. –

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