Theo tác giả của những sự kiện này, chúng được định nghĩa lỏng lẻo và được ước tính gần đúng bằng các bộ đếm hiệu suất CPU có sẵn. Như tôi biết, perf không hỗ trợ các công thức để tính toán một số sự kiện tổng hợp dựa trên một số sự kiện phần cứng, vì vậy nó không thể sử dụng phương pháp giới hạn gian hàng front-end / back-end từ hướng dẫn Tối ưu hóa của Intel (Triển khai trong VTune) http: // www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-optimization-manual.pdf "B.3.2 Phương pháp mô tả đặc tính hiệu suất từ trên xuống theo thứ bậc"
%FE_Bound = 100 * (IDQ_UOPS_NOT_DELIVERED.CORE / N );
%Bad_Speculation = 100 * ( (UOPS_ISSUED.ANY – UOPS_RETIRED.RETIRE_SLOTS + 4 * INT_MISC.RECOVERY_CYCLES ) / N) ;
%Retiring = 100 * ( UOPS_RETIRED.RETIRE_SLOTS/ N) ;
%BE_Bound = 100 * (1 – (FE_Bound + Retiring + Bad_Speculation) ) ;
N = 4*CPU_CLK_UNHALTED.THREAD" (for SandyBridge)
Công thức phù hợp có thể được sử dụng với một số tập lệnh bên ngoài, giống như nó đã được thực hiện trong công cụ pmu của Andi Kleen ( toplev.py
): https://github.com/andikleen/pmu-tools (nguồn), http://halobates.de/blog/ p / 262 (mô tả):
% toplev.py -d -l2 numademo 100M stream
...
perf stat --log-fd 4 -x, -e
{r3079,r19c,r10401c3,r100030d,rc5,r10e,cycles,r400019c,r2c2,instructions}
{r15e,r60006a3,r30001b1,r40004a3,r8a2,r10001b1,cycles}
numademo 100M stream
...
BE Backend Bound: 72.03%
This category reflects slots where no uops are being delivered due to a lack
of required resources for accepting more uops in the Backend of the pipeline.
.....
FE Frontend Bound: 54.07%
This category reflects slots where the Frontend of the processor undersupplies
its Backend.
Cam kết đã giới thiệu các sự kiện bị đình trệ-chu kỳ-giao diện trước và bị đình trệ-chu kỳ-phụ trợ thay vì phổ quát ban đầu stalled-cycles
:
http://git.kernel.org/cgit/linux/kernel/git/tip/tip.git/commit/?id=8f62242246351b5a4bc0c1f00c0c7003edea128a
author Ingo Molnar <mingo@el...> 2011-04-29 11:19:47 (GMT)
committer Ingo Molnar <mingo@el...> 2011-04-29 12:23:58 (GMT)
commit 8f62242246351b5a4bc0c1f00c0c7003edea128a (patch)
tree 9021c99956e0f9dc64655aaa4309c0f0fdb055c9
parent ede70290046043b2638204cab55e26ea1d0c6cd9 (diff)
sự kiện hoàn hảo: Thêm định nghĩa sự kiện chu trình bị ngưng trệ chung phía trước và mặt sau Thêm hai sự kiện phần cứng chung: chu trình bị đình trệ giao diện người dùng và mặt sau.
Các sự kiện này đo lường các điều kiện khi CPU đang thực thi mã nhưng khả năng của nó không được sử dụng đầy đủ. Hiểu các tình huống như vậy và phân tích chúng là một nhiệm vụ phụ quan trọng của quy trình công việc tối ưu hóa mã.
Cả hai sự kiện đều giới hạn hiệu suất: hầu hết các gian hàng giao diện người dùng có xu hướng do lỗi nhánh hoặc bộ nhớ cache tìm nạp lệnh gây ra, các gian hàng phụ trợ có thể do thiếu tài nguyên khác nhau hoặc lập lịch hướng dẫn không hiệu quả.
Các quầy hàng front-end là những thứ quan trọng hơn: mã không thể chạy nhanh nếu luồng hướng dẫn không được theo kịp.
Một back-end được sử dụng quá mức có thể gây ra các gian hàng ở front-end và do đó cũng phải được để mắt đến.
Thành phần chính xác rất phụ thuộc vào logic chương trình và hỗn hợp lệnh.
Chúng tôi sử dụng các thuật ngữ 'gian hàng', 'giao diện người dùng' và 'đầu cuối' một cách lỏng lẻo và cố gắng sử dụng các sự kiện tốt nhất có sẵn từ các CPU cụ thể gần đúng với các khái niệm này.
Cc: Peter Zijlstra Cc: Arnaldo Carvalho de Melo Cc: Frederic Weisbecker Liên kết: http://lkml.kernel.org/n/tip-7y40wib8n000io7hjpn1dsrm@git.kernel.org
Đã ký tên bởi: Ingo Molnar
/* Install the stalled-cycles event: UOPS_EXECUTED.CORE_ACTIVE_CYCLES,c=1,i=1 */
- intel_perfmon_event_map[PERF_COUNT_HW_STALLED_CYCLES] = 0x1803fb1;
+ intel_perfmon_event_map[PERF_COUNT_HW_STALLED_CYCLES_BACKEND] = 0x1803fb1;
- PERF_COUNT_HW_STALLED_CYCLES = 7,
+ PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 7,
+ PERF_COUNT_HW_STALLED_CYCLES_BACKEND = 8,