2012-09-26 42 views
22

Tôi đang cố gắng tìm ra lý do tại sao một chương trình C được sửa đổi đang chạy nhanh hơn phần không được sửa đổi của nó (tôi đang thêm rất ít dòng mã để thực hiện một số công việc bổ sung). Trong bối cảnh này, tôi nghi ngờ "hiệu ứng bộ nhớ cache" là giải thích chính (bộ nhớ cache lệnh). Vì vậy, tôi đạt được công cụ lược tả perf (https://perf.wiki.kernel.org/index.php/Main_Page) nhưng tiếc là tôi không thể hiểu được ý nghĩa của các kết quả đầu ra của nó liên quan đến việc xóa bộ nhớ cache.Sự kiện bộ nhớ cache perf có ý nghĩa gì?

Một số sự kiện về bộ nhớ cache được cung cấp:

cache-references         [Hardware event] 
    cache-misses          [Hardware event] 
    L1-dcache-loads         [Hardware cache event] 
    L1-dcache-load-misses        [Hardware cache event] 
    L1-dcache-stores         [Hardware cache event] 
    L1-dcache-store-misses        [Hardware cache event] 
    L1-dcache-prefetches        [Hardware cache event] 
    L1-dcache-prefetch-misses       [Hardware cache event] 
    L1-icache-loads         [Hardware cache event] 
    L1-icache-load-misses        [Hardware cache event] 
    L1-icache-prefetches        [Hardware cache event] 
    L1-icache-prefetch-misses       [Hardware cache event] 
    LLC-loads           [Hardware cache event] 
    LLC-load-misses         [Hardware cache event] 
    LLC-stores           [Hardware cache event] 
    LLC-store-misses         [Hardware cache event] 
    LLC-prefetches          [Hardware cache event] 
    LLC-prefetch-misses        [Hardware cache event] 
    dTLB-loads           [Hardware cache event] 
    dTLB-load-misses         [Hardware cache event] 
    dTLB-stores          [Hardware cache event] 
    dTLB-store-misses         [Hardware cache event] 
    dTLB-prefetches         [Hardware cache event] 
    dTLB-prefetch-misses        [Hardware cache event] 
    iTLB-loads           [Hardware cache event] 
    iTLB-load-misses         [Hardware cache event] 
    branch-loads          [Hardware cache event] 
    branch-load-misses         [Hardware cache event] 
    node-loads           [Hardware cache event] 
    node-load-misses         [Hardware cache event] 
    node-stores          [Hardware cache event] 
    node-store-misses         [Hardware cache event] 
    node-prefetches         [Hardware cache event] 
    node-prefetch-misses        [Hardware cache event] 

Tôi có thể tìm thấy lời giải thích về các lĩnh vực này ở đâu? sự kiện xóa bộ nhớ cache luôn nhỏ hơn các sự kiện khác. Sự kiện này đo lường điều gì?

Cách diễn giải 26,760 L1-icache-load-miss cho ls so với 5,708 bộ nhớ cache bị thiếu trong ví dụ sau?

perf stat -e L1-icache-load-misses ls 
caches caches~ out 

Performance counter stats for 'ls': 

      26,760 L1-icache-load-misses          

     0.002816690 seconds time elapsed 



perf stat -e cache-misses ls 
caches caches~ out 

Performance counter stats for 'ls': 

      5,708 cache-misses             

     0.002822122 seconds time elapsed 

Trả lời

17

Bạn có vẻ nghĩ rằng sự kiện cache-misses là tổng của tất cả các loại bộ nhớ cache khác (L1-dcache-load-misses, v.v.). Điều đó thực sự không đúng.

sự kiện cache-misses thể hiện số lượng truy cập bộ nhớ không thể được phân phối bởi bất kỳ bộ nhớ cache nào.

Tôi thừa nhận rằng tài liệu của perf không phải là tốt nhất. Tuy nhiên, người ta có thể học khá nhiều về nó bằng cách đọc (giả sử rằng bạn đã có kiến ​​thức tốt về cách CPU và một đơn vị giám sát hiệu suất hoạt động, điều này rõ ràng không phải là khóa học kiến ​​trúc máy tính) doc của perf_event_open() chức năng:

http://web.eece.maine.edu/~vweaver/projects/perf_events/perf_event_open.html

Ví dụ, bằng cách đọc nó, bạn có thể thấy rằng sự kiện cache-misses thấy bởi danh sách perf tương ứng với PERF_COUNT_HW_CACHE_MISSES

22

Một số câu trả lời:

  • L1 là Level-1 bộ nhớ cache, nhỏ nhất và nhanh nhất. Mặt khác, LLC là mức cuối cùng của cache hierarchy, do đó biểu thị bộ nhớ cache lớn nhất nhưng chậm nhất.
  • i so với d phân biệt bộ nhớ cache lệnh từ bộ nhớ cache dữ liệu. Chỉ có L1 được chia theo cách này, các cache khác được chia sẻ giữa dữ liệu và hướng dẫn.
  • TLB đề cập đến translation lookaside buffer, bộ nhớ cache được sử dụng khi ánh xạ địa chỉ ảo đến địa chỉ thực.
  • Các bộ đếm TLB khác nhau tùy thuộc vào địa chỉ được đặt tên có được chỉ dẫn cho một lệnh hoặc một số dữ liệu hay không.
  • Đối với tất cả truy cập dữ liệu, các bộ đếm khác nhau được lưu tùy thuộc vào vị trí bộ nhớ đã cho, đã đọc hoặc được tìm nạp trước (ví dụ: được truy xuất để đọc sau một thời gian).
  • Số lần bỏ lỡ cho biết tần suất một mục dữ liệu nhất định được truy cập nhưng không phải là có trong bộ nhớ cache.
+0

Cảm ơn cho câu trả lời. Bạn đang sử dụng công cụ này?Làm thế nào để bạn giải thích sự kiện cache-miss được gọi là một sự kiện phần cứng và không phải là sự kiện bộ nhớ cache phần cứng. Tôi mặc dù nó là tổng của những người khác nhưng không phải ở tất cả. –

+0

Và hơn nữa sự khác biệt giữa "tải" và "tìm nạp trước" là gì? –

+0

@ManuelSelva: Tôi không sử dụng 'perf' bản thân mình, vì vậy tôi có ít kinh nghiệm thực tế. Đặc biệt, tôi không chắc chắn sự kiện 'cache-miss' thực sự mô tả, so với tất cả các sự kiện bộ nhớ cache phần cứng. Tôi không chắc chắn về việc tìm nạp trước: có một cách để kích hoạt tìm nạp trước ở cấp ứng dụng cũng như tìm nạp trước tự động truy cập dữ liệu được dự đoán bởi phần cứng. Một trong hai hoặc cả hai điều này có thể là những gì mà các bộ nạp tiền thực sự mô tả. Tài liệu 'perf' đề cập đến thông số kỹ thuật của nhà sản xuất để biết thêm chi tiết, nhưng tôi chưa tìm thấy các phần có liên quan. – MvG

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