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
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ả. –
Và hơn nữa sự khác biệt giữa "tải" và "tìm nạp trước" là gì? –
@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