| PERF-C2C(1) | perf Manual | PERF-C2C(1) |
نام (NAME)
perf-c2c - تحلیلگر C2C/HITM دادههای اشتراکی
خلاصه دستور (SYNOPSIS)
perf c2c record [<options>] <command> perf c2c record [<options>] -- [<record command options>] <command> perf c2c report [<options>]
توضیحات (DESCRIPTION)
عبارت C2C مخفف Cache To Cache (حافظه نهان به حافظه نهان) است.
ابزار perf c2c سازوکارهایی را برای تحلیل C2C/HITM دادههای اشتراکی فراهم میآورد. این ابزار به شما امکان میدهد رقابت بر سر خط حافظه نهان (cacheline contentions) را ردیابی کنید.
در پردازندههای Intel، این ابزار مبتنی بر رویدادهای تأخیر بارگذاری (load latency) و سازوکار ذخیرهسازی دقیق (precise store facility) ارائهشده توسط پردازندههای Intel است. در PowerPC، این ابزار از نمونهبرداری تصادفی دستورالعمل همراه با قابلیت آستانهگذاری استفاده میکند. در AMD، این ابزار از IBS op pmu بهره میبرد (بهدلیل محدودیتهای سختافزاری، perf c2c در پردازندههای Zen3 پشتیبانی نمیشود). در Arm64 از SPE برای نمونهبرداری از عملیات بارگذاری (load) و ذخیرهسازی (store) استفاده میکند، بنابراین به پشتیبانی سختافزاری و هسته نیاز دارد. برای راهنمای راهاندازی، perf-arm-spe(1) را ببینید. با توجه به ماهیت آماری نمونهبرداری Arm SPE، تمام عملیاتهای حافظه نمونهبرداری نخواهند شد.
این رویدادها موارد زیر را فراهم میکنند: - نشانی حافظه مورد دسترسی - نوع دسترسی (جزئیات load و store) - تأخیر (بر حسب چرخه) دسترسی بارگذاری
ابزار c2c امکانی را برای ضبط این دادهها و گزارش جزئیات دسترسی برای خطوط حافظه نهانی فراهم میکند که بیشترین رقابت - بالاترین تعداد دسترسیهای HITM - را دارند.
گردش کار پایه با این ابزار از مراحل استاندارد record/report پیروی میکند. کاربر از دستور record برای ضبط دادههای رویدادها و از دستور report برای نمایش آن استفاده میکند.
گزینههای ضبط (RECORD OPTIONS)
-e, --event=
-v, --verbose
-l, --ldlat
در پردازندههای پشتیبانیشده AMD: - فایل /sys/bus/event_source/devices/ibs_op/caps/ldlat حاوی '1' است. - مقادیر تأخیر پشتیبانیشده از 128 تا 2048 (شامل هر دو) هستند. - مقدار تأخیری که مضربی از 128 باشد، در مقایسه با سایر مقادیر سربار profiling اندکی کمتری تحمیل میکند. - فیلتر کردن تأخیر بارگذاری (load latency) بهطور پیشفرض غیرفعال است.
-k, --all-kernel
-u, --all-user
-k, --vmlinux=<file>
-v, --verbose
-i, --input
-N, --node-info
-c, --coalesce
-g, --call-graph
--stdio
--stats
--full-symbols
--no-source
--show-all
-f, --force
-d, --display
--stitch-lbr
--double-cl
-M, --disassembler-style=
--objdump=<path>
دستور perf c2c record گزینههای مربوط به تحلیل cachelineهای HITM را پیکربندی کرده و دستور استاندارد perf record را فراخوانی میکند.
گزینههای زیر از perf record بهطور پیشفرض پیکربندی شدهاند: (برای جزئیات به صفحهٔ راهنمای perf record مراجعه کنید)
-W,-d,--phys-data,--sample-cpu
جدول زیر رویدادهای پایششده در معماریهای گوناگون را فهرست میکند. ابزار رویدادهای پیشفرض را انتخاب خواهد کرد، مگر آنکه با گزینهٔ -e به شکل دیگری مشخص شده باشد.
+--------+---------------+-----------------+--------------------------------------------------------------------------------+
| Arch | Configuration | Options | Events |
+--------+---------------+-----------------+--------------------------------------------------------------------------------+
| Intel | Default | -e ldlat-loads | cpu/mem-loads,ldlat=30/P |
| | | -e ldlat-stores | cpu/mem-stores/P |
| |---------------+-----------------+------------------------------------------------------------------------------+
| | Load only | -e ldlat-loads | cpu/mem-loads,ldlat=30/P |
| |---------------+-----------------+------------------------------------------------------------------------------+
| | Store only | -e ldlat-stores | cpu/mem-stores/P |
+--------+---------------+-----------------+--------------------------------------------------------------------------------+
| Intel | Default | -e ldlat-loads | {cpu/mem-loads-aux/,cpu/mem-loads,ldlat=30/}:P |
| with | | -e ldlat-stores | cpu/mem-stores/P |
| AUX |--------------+------------------+------------------------------------------------------------------------------+
| | Load only | -e ldlat-loads | {cpu/mem-loads-aux/,cpu/mem-loads,ldlat=30/}:P |
| |---------------+-----------------+------------------------------------------------------------------------------+
| | Store only | -e ldlat-stores | cpu/mem-stores/P |
+--------+---------------+-----------------+--------------------------------------------------------------------------------+
| AMD | Default | -e mem-ldst | ibs_op// (without latency support) |
| | | | ibs_op/ldlat=30/ (with latency support) |
+--------+---------------+-----------------+--------------------------------------------------------------------------------+
| PowerPC| Default | -e ldlat-loads | cpu/mem-loads/ |
| | | -e ldlat-stores | cpu/mem-stores/ |
| |---------------+-----------------+------------------------------------------------------------------------------+
| | Load only | -e ldlat-loads | cpu/mem-loads/ |
| |---------------+-----------------+------------------------------------------------------------------------------+
| | Store only | -e ldlat-stores | cpu/mem-stores/ |
+--------+---------------+-----------------+--------------------------------------------------------------------------------+
| Arm | Default | -e spe-ldst | arm_spe_0/ts_enable=1,pa_enable=1,load_filter=1,store_filter=1,min_latency=30/ |
| SPE |---------------+-----------------+------------------------------------------------------------------------------+
| | Load only | -e spe-load | arm_spe_0/ts_enable=1,pa_enable=1,load_filter=1,min_latency=30/ |
| |---------------+-----------------+------------------------------------------------------------------------------+
| | Store only | -e spe-store | arm_spe_0/ts_enable=1,pa_enable=1,store_filter=1/ |
+--------+---------------+-----------------+--------------------------------------------------------------------------------+
کاربر میتواند هر گزینهٔ perf record را پس از علامت -- مشخص کند، مانند (برای فعالسازی زنجیرههای فراخوانی و پایش در سطح کل سیستم):
$ perf c2c record -- -g -a
لطفاً برای گزینههای خاص c2c record، بخش RECORD OPTIONS را بررسی کنید.
C2C REPORT
دستور perf c2c report تحلیل دادههای اشتراکی را نمایش میدهد. این دستور در دو حالت نمایش ارائه میشود: stdio و tui (پیشفرض).
گردشکار دستور report به این صورت است: - مرتبسازی تمام دادهها بر اساس نشانی cacheline - ذخیرهٔ جزئیات دسترسی برای هر cacheline - مرتبسازی تمام cachelineها بر اساس تنظیمات کاربر - نمایش دادهها
بهطور کلی، خروجی perf report از ۲ نمای اصلی تشکیل شده است: ۱) فهرست پرهزینهترین cachelineها ۲) جزئیات آفستها برای هر cacheline
برای هر cacheline در فهرست ۱)، دادههای زیر نمایش داده میشود: (هر دو حالت stdio و TUI از فیلدهای خروجی یکسانی پیروی میکنند)
Index - نمایه با مبنای صفر برای شناسایی cacheline
Cacheline - نشانی cacheline (عدد هگزادسیمال)
Rmt/Lcl Hitm (نمایش با انواع HITM) - درصد cacheline از کل دسترسیهای دوردست/محلی HITM
Peer Snoop (نمایش با نوع peer) - درصد cacheline از کل دسترسیهای همتا (peer)
LLC Load Hitm - Total, LclHitm, RmtHitm (برای نمایش با انواع HITM) - شمار بارهای HITM کل/محلی/دوردست
Load Peer - Total, Local, Remote (برای نمایش با نوع peer) - شمار بارهای کل/محلی/دوردست از حافظهٔ نهان همتا یا DRAM
Total records - مجموع کل دسترسیها به cachelineها
Total loads - مجموع کل دسترسیهای بارگذاری (load)
Total stores - مجموع کل دسترسیهای ذخیرهسازی (store)
Store Reference - L1Hit, L1Miss, N/A L1Hit - دسترسیهای store که با اصابت به L1 مواجه شدهاند L1Miss - دسترسیهای store که در L1 دچار عدم اصابت شدهاند N/A - دسترسیهای store که سطح حافظه آنها در دسترس نیست
Core Load Hit - FB, L1, L2 - تعداد اصابتهای بارگذاری (load hits) در حافظههای نهان L1 ،FB (بافر پُرکننده) و L2
LLC Load Hit - LlcHit, LclHitm - تعداد دسترسیهای بارگذاری LLC، شامل اصابتهای LLC و HITMهای LLC
RMT Load Hit - RmtHit, RmtHitm - تعداد دسترسیهای بارگذاری دوردست (remote)، شامل اصابتهای دوردست و HITMهای دوردست؛ روی هستههای Arm neoverse، از RmtHit برای شمارش دسترسیهای دوردست استفاده میشود، شامل DRAM دوردست یا هر سطح بالاتری از حافظه نهان در گره دوردست
Load Dram - Lcl, Rmt - تعداد دسترسیهای محلی (local) و دوردست (remote) به DRAM
برای هر آفست در فهرست ۲)، دادههای زیر نمایش داده میشود:
HITM - Rmt, Lcl (نمایش با انواع HITM) - درصد دسترسیهای HITM دوردست/محلی برای آفست مشخص در خط حافظه نهان (cacheline)
Peer Snoop - Rmt, Lcl (نمایش با نوع peer) - درصد دسترسیهای همتا (peer) دوردست/محلی برای آفست مشخص در خط حافظه نهان (cacheline)
Store Refs - L1 Hit, L1 Miss, N/A - درصد دسترسیهای store که دارای اصابت به L1، عدم اصابت در L1 و سطح حافظه نامشخص (N/A) برای آفست مشخص در خط حافظه نهان هستند
Data address - Offset - نشانی آفست (offset address)
Pid - شناسه فرآیند (pid) مسئول دسترسیها
Tid - شناسه ریسه (tid) مسئول دسترسیها
Code address - نشانی کد مسئول دسترسیها
cycles - rmt hitm, lcl hitm, load (نمایش با انواع HITM) - مجموع چرخهها برای دسترسیهای مشخص - HITM دوردست/محلی و بارگذاری عمومی
cycles - rmt peer, lcl peer, load (نمایش با نوع peer) - مجموع چرخهها برای دسترسیهای مشخص - بارگذاری همتای دوردست/محلی و بارگذاری عمومی
cpu cnt - تعداد پردازندههایی که در دسترسی مشارکت داشتهاند
Symbol - نماد کد مرتبط با مقدار 'Code address'
Shared Object - نام شئ اشتراکی مربوط به مقدار 'Code address'
Source:Line - اطلاعات کد مبدأ مربوط به مقدار 'Code address'
Node - گرههای مشارکتکننده در دسترسی (بخش اطلاعات گره (NODE INFO) را ببینید)
اطلاعات گره (NODE INFO)
فیلد Node گرههایی را نمایش میدهد که به آفست خط حافظه نهان (cacheline) دادهشده دسترسی دارند. خروجی آن به ۳ حالت ارائه میشود: - شناسههای گره که با , جدا شدهاند - شناسههای گره به همراه آمار برای هر شناسه، در قالب زیر: Node{cpus %hitms %stores} (نمایش با انواع HITM) Node{cpus %peers %stores} (نمایش با نوع peer) - شناسههای گره با فهرستی از پردازندههای متأثر در قالب زیر: Node{cpu list}
کاربر میتواند با گزینهٔ -N بین حالتهای بالا جابهجا شود یا از کلید n برای جابهجایی تعاملی در حالت TUI استفاده کند.
ادغام (COALESCE)
کاربر میتواند نحوهٔ مرتبسازی آفستها را برای خط حافظه نهان مشخص کند.
فیلدهای زیر در دسترس هستند و مجموعه فیلدهای نهایی را برای خروجی آفستهای خط حافظه نهان تعیین میکنند:
tid - ادغام بر اساس TIDهای فرایند
pid - ادغام بر اساس PIDهای فرایند
iaddr - ادغام بر اساس آدرس کد؛ فیلدهای زیر نمایش داده میشوند:
Code address, Code symbol, Shared Object, Source line
dso - ادغام بر اساس شئ اشتراکی (shared object)
بهطور پیشفرض، ادغام با pid,iaddr تنظیم شده است.
خروجی STDIO (STDIO OUTPUT)
خروجی stdio دادهها را روی خروجی استاندارد نمایش میدهد.
جدولهای زیر نمایش داده میشوند: Trace Event Information - آمار کلی دسترسیهای حافظه
Global Shared Cache Line Event Information - آمار کلی دربارهٔ خطوط حافظه نهان اشتراکی
Shared Data Cache Line Table - فهرست پرهزینهترین خطوط حافظه نهان
Shared Cache Line Distribution Pareto - فهرست تمام آفستهای دسترسییافته برای هر خط حافظه نهان
خروجی TUI یک رابط کاربری تعاملی برای پیمایش در فهرست خطوط کَش (cachelines) و نمایش جزئیات آفست (offset) فراهم میکند.
برای جزئیات بیشتر لطفاً با فشردن کلید ? به پنجره راهنما مراجعه کنید.
قدردانی (CREDITS)
اگرچه Don Zickus، Dick Fowles و Joe Mario برای پیادهسازی این ابزار با یکدیگر همکاری کردند، اما کمکهای اولیه فراوانی از سوی Arnaldo Carvalho de Melo، Stephane Eranian، Jiri Olsa و Andi Kleen صورت گرفت.
وبلاگ C2C (C2C BLOG)
برای توضیحات دقیق درباره سناریوهای کاربردی، وبلاگ Joe درباره ابزار c2c را بررسی کنید: https://joemario.github.io/blog/2016/09/01/c2c-blog
همچنین ببینید (SEE ALSO)
| 09/04/2026 | perf |