Apakah ada yang tahu apa arti dari stalled-siklus-frontend dan stalled-siklus-backend di se stat hasilnya ? Aku mencari di internet tapi tidak menemukan jawabannya. Terima kasih
$ sudo perf stat ls
Performance counter stats for 'ls':
0.602144 task-clock # 0.762 CPUs utilized
0 context-switches # 0.000 K/sec
0 CPU-migrations # 0.000 K/sec
236 page-faults # 0.392 M/sec
768956 cycles # 1.277 GHz
962999 stalled-cycles-frontend # 125.23% frontend cycles idle
634360 stalled-cycles-backend # 82.50% backend cycles idle
890060 instructions # 1.16 insns per cycle
# 1.08 stalled cycles per insn
179378 branches # 297.899 M/sec
9362 branch-misses # 5.22% of all branches [48.33%]
0.000790562 seconds time elapsed
Teori:
Let's mulai dari: saat ini's CPU's superscalar, yang berarti bahwa mereka dapat menjalankan lebih dari satu instruksi per siklus (IPC). Terbaru Intel arsitektur bisa naik ke 4 IPC (4 x86 instruction decoder). Let's tidak membawa macro / micro fusion ke dalam diskusi untuk mempersulit hal-hal yang lebih :).
Biasanya, beban kerja yang tidak mencapai IPC=4 karena berbagai sumber perselisihan. Ini berarti bahwa CPU adalah membuang-buang siklus (jumlah instruksi yang diberikan oleh perangkat lunak dan CPU untuk mengeksekusi mereka dalam beberapa siklus mungkin).
Kita dapat membagi total siklus yang dikeluarkan oleh CPU dalam 3 kategori:
Untuk mendapatkan IPC 4, jumlah siklus pensiun harus dekat dengan total jumlah siklus. Perlu diingat bahwa dalam tahap ini, semua mikro-operasi (uOps) pensiun dari pipa dan menyerahkan hasilnya ke register / cache. Pada tahap ini anda dapat memiliki lebih dari 4 uOps pensiun, karena nomor ini diberikan oleh jumlah eksekusi port. Jika anda memiliki hanya 25% dari siklus pensiun 4 uOps maka anda akan memiliki keseluruhan IPC dari 1.
The siklus terhenti di back-end ini adalah sebuah pemborosan karena CPU harus menunggu sumber daya (biasanya memory) atau untuk menyelesaikan panjang latency petunjuk (misalnya transcedentals - sqrt, reciprocals, divisi, dll.).
The siklus terhenti di front-end ini adalah sebuah pemborosan karena itu berarti bahwa Front-End tidak feed Back End dengan mikro-operasi. Hal ini dapat berarti bahwa anda telah merindukan di cache Instruksi, atau instruksi yang kompleks yang belum diterjemahkan dalam mikro-op cache. Just-in-time yang dikumpulkan kode biasanya mengekspresikan perilaku ini.
Kios lain alasannya adalah cabang prediksi miss. Yang disebut buruk spekulasi. Dalam kasus itu uOps dikeluarkan, tetapi mereka dibuang karena BP prediksi yang salah.
Pelaksanaan di profiler:
Bagaimana anda menafsirkan dan FE terhenti siklus?
Berbeda profiler memiliki pendekatan yang berbeda pada metrik ini. Di vlagu, kategori 1 untuk 3 menambahkan untuk memberikan 100% dari siklus. Bahwa jahitan yang wajar karena anda memiliki CPU anda terhenti (tidak uOps pensiun) baik itu melakukan beguna kerja (uOps) pensiun. Lihat lebih lanjut di sini: https://software.intel.com/sites/products/documentation/doclib/stdxe/2013SP1/amplifierxe/snb/index.htm
Dalam se ini biasanya tidak terjadi. Yang's masalah karena ketika anda melihat 125% siklus terhenti di front end, anda don't tahu bagaimana untuk benar-benar menafsirkan ini. Anda bisa link >1 metric dengan fakta bahwa ada 4 decoder tapi jika anda terus penalaran, maka IPC won't pertandingan.
Bahkan lebih baik, anda don't tahu seberapa besar masalah ini. 125% dari apa? Apa #siklus berarti kemudian?
Saya pribadi terlihat sedikit curiga pada k's dan FE terhenti siklus dan berharap ini akan mendapatkan tetap.
Mungkin kita akan mendapatkan jawaban akhir dengan debugging kode dari sini: http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/tools/perf/builtin-stat.c
Untuk mengkonversi generik peristiwa yang diekspor oleh perf ke CPU dokumentasi baku peristiwa yang dapat anda jalankan:
more /sys/bus/event_source/devices/cpu/events/stalled-cycles-frontend
Ini akan menunjukkan kepada anda sesuatu seperti
event=0x0e,umask=0x01,inv,cmask=0x01
Menurut Intel dokumentasi SDM volume 3B (saya memiliki core i5-2520):
UOPS_ISSUED.SETIAP:
Untuk macet-siklus-backend acara menerjemahkan ke acara=0xb1,umask=0x01 pada sistem dokumentasi yang sama mengatakan:
UOPS_DISPATCHED.THREAD:
Biasanya, macet siklus siklus di mana prosesor yang menunggu untuk sesuatu (memori untuk pakan setelah melaksanakan beban operasi misalnya) dan doesn't memiliki hal-hal lain untuk dilakukan. Selain itu, frontend bagian dari CPU adalah bagian dari perangkat keras yang bertanggung jawab untuk fetch dan decode instruksi (mengkonversi mereka ke UOPs) di mana sebagai backend adalah bagian yang bertanggung jawab untuk secara efektif melaksanakan UOPs.
CPU cycle adalah "macet" ketika pipa doesn't muka selama itu.
Prosesor pipa terdiri dari beberapa tahap: front-end adalah kelompok dari tahap-tahap ini yang bertanggung jawab untuk fetch dan decode fase, sedangkan back-end mengeksekusi instruksi. Ada penyangga antara front-end dan back-end, jadi ketika mantan terhenti terakhir masih dapat memiliki beberapa pekerjaan yang harus dilakukan.
Diambil dari http://paolobernardi.wordpress.com/2012/08/07/playing-around-with-perf/
Menurut penulis dari peristiwa ini, mereka didefinisikan secara longgar dan didekati oleh CPU yang tersedia penghitung kinerja. Seperti yang saya tahu, perf doesn't dukungan rumus untuk menghitung beberapa sintetis acara berdasarkan beberapa hardware peristiwa, sehingga dapat't menggunakan front-end/back-end kios terikat metode dari Intel's Optimasi manual (Dilaksanakan di Vlagu) http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-optimization-manual.pdf "B. 3.2 Hirarki Top-Down Kinerja Karakterisasi Metodologi"
%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)
Kan rumus yang dapat digunakan dengan beberapa eksternal scripting, seperti itu dilakukan di Andi Kleen's pmu-alat (toplev.py
): https://github.com/andikleen/pmu-tools (sumber), http://halobates.de/blog/p/262 (deskripsi):
% 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.
Melakukan yang diperkenalkan terhenti-siklus-frontend dan terhenti-siklus-backend acara bukan asli universal terhenti-siklus
:
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)
peristiwa perf: Tambahkan generik front-end dan back-end terhenti siklus definisi event Tambahkan dua generic hardware acara: front-end dan back-end terhenti siklus.
peristiwa Ini mengukur kondisi saat CPU mengeksekusi kode tapi kemampuan yang tidak dimanfaatkan sepenuhnya. Pemahaman situasi seperti ini dan menganalisis mereka lebih penting sub-tugas dari kode optimasi alur kerja.
Kedua peristiwa membatasi kinerja: paling ujung depan warung cenderung disebabkan oleh cabang misprediction atau instruksi fetch cachemisses, backend warung dapat disebabkan oleh berbagai kekurangan sumber daya atau tidak efisien penjadwalan instruksi.
Front-end warung yang lebih penting: kode tidak bisa lari cepat jika instruksi stream tidak terus naik.
over-digunakan back-end yang dapat menyebabkan front-end warung dan dengan demikian harus terus mengawasi juga.
komposisi Yang tepat sangat logika program dan instruksi mix tergantung.
Kami menggunakan istilah 'kandang', 'front-end' dan 'back-end' longgar dan cobalah untuk menggunakan yang terbaik yang tersedia dari peristiwa tertentu Cpu yang perkiraan konsep-konsep ini.
Cc: Peter Zijlstra <a.p.zijlstra@che...> Cc: Arnaldo Carvalho de Melo <acme@redh...> Cc: Frederic Weisbecker <fweisbec@gmai...> Link: http://lkml.kernel.org/n/[email protected] Sign-off-oleh: Ingo Molnar <mingo@el...>
/* 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,