PERF-C2C(1) perf Manual PERF-C2C(1)

perf-c2c - تحلیل‌گر C2C/HITM داده‌های اشتراکی

perf c2c record [<options>] <command>
perf c2c record [<options>] -- [<record command options>] <command>
perf c2c report [<options>]

عبارت 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 برای نمایش آن استفاده می‌کند.

-e, --event=

انتخاب رویداد PMU. از perf c2c record -e list برای فهرست کردن رویدادهای موجود استفاده کنید.

-v, --verbose

نمایش خروجی با جزئیات بیشتر (نمایش خطاهای باز کردن شمارنده و غیره).

-l, --ldlat

پیکربندی تأخیر mem-loads. در Intel، Arm64 و برخی از پردازنده‌های AMD پشتیبانی می‌شود. در سایر معماری‌ها نادیده گرفته می‌شود.
در پردازنده‌های پشتیبانی‌شده AMD:
- فایل /sys/bus/event_source/devices/ibs_op/caps/ldlat حاوی '1' است.
- مقادیر تأخیر پشتیبانی‌شده از 128 تا 2048 (شامل هر دو) هستند.
- مقدار تأخیری که مضربی از 128 باشد، در مقایسه با سایر مقادیر
  سربار profiling اندکی کمتری تحمیل می‌کند.
- فیلتر کردن تأخیر بارگذاری (load latency) به‌طور پیش‌فرض غیرفعال است.

-k, --all-kernel

پیکربندی تمام رویدادهای استفاده‌شده برای اجرا در فضای هسته (kernel space).

-u, --all-user

پیکربندی تمام رویدادهای استفاده‌شده برای اجرا در فضای کاربر (user space).

-k, --vmlinux=<file>

مسیر فایل vmlinux

-v, --verbose

پرگویی بیشتر (نمایش خطاهای باز کردن شمارنده و غیره).

-i, --input

مشخص کردن فایل ورودی برای پردازش.

-N, --node-info

نمایش اطلاعات اضافی گره در گزارش (بخش NODE INFO را ببینید)

-c, --coalesce

مشخص کردن فیلدهای مرتب‌سازی برای نمایش تک‌خط حافظه موقت (cacheline). فیلدهای زیر در دسترس هستند: tid، pid، iaddr، dso (بخش COALESCE را ببینید)

-g, --call-graph

برپایی پارامترهای زنجیره فراخوانی (callchains). لطفاً برای جزئیات به صفحه راهنمای perf-report مراجعه کنید.

--stdio

اجبار به خروجی stdio (بخش STDIO OUTPUT را ببینید)

--stats

نمایش صرفاً جدول‌های آماری و اجبار به حالت stdio.

--full-symbols

نمایش طول کامل نمادها.

--no-source

عدم نمایش ستون Source:Line.

--show-all

نمایش تمام خطوط HITM ثبت‌شده، بدون در نظر گرفتن محدودیت 0.0005 درصدی HITM.

-f, --force

عدم انجام اعتبارسنجی مالکیت.

-d, --display

تغییر به نوع HITM (rmt، lcl) یا نوع تجسس همتا (peer) جهت نمایش و مرتب‌سازی بر اساس آن. کل HITMها (tot) به عنوان پیش‌فرض در نظر گرفته می‌شود، به جز در Arm64 که حالت peer پیش‌فرض است.

--stitch-lbr

نمایش گراف فراخوانی با LBRهای پیوندخورده (stitched)، که ممکن است گراف فراخوانی کامل‌تری ارائه دهد. فایل perf.data باید با استفاده از perf c2c record --call-graph lbr به دست آمده باشد. به‌طور پیش‌فرض غیرفعال است. در موارد رایج با سرریز پشته فراخوانی، می‌تواند پشته‌های فراخوانی بهتری نسبت به خروجی پیش‌فرض پشته فراخوانی lbr بازسازی کند. اما این رویکرد بی‌نقص نیست. مواردی وجود دارد که در آن‌ها ممکن است به دلیل تطابق‌های نادرست، پشته‌های فراخوانی اشتباه ایجاد شود. محدودیت‌های شناخته‌شده شامل مدیریت استثناهایی مانند setjmp/longjmp است که در آن‌ها فراخوانی‌ها/بازگشت‌ها مطابقت نخواهند داشت.

--double-cl

گروه‌بندی تشخیص رویدادهای خط حافظه موقت (cacheline) مشترک در دانه‌بندی خط حافظه موقت دوگانه. برخی معماری‌ها دارای ویژگی Adjacent Cacheline Prefetch هستند که باعث می‌شود اشتراک خط حافظه موقت رفتاری مشابه دو برابر شدن اندازه خط حافظه موقت داشته باشد.

-M, --disassembler-style=

تنظیم سبک دیس‌اسمبلر برای objdump.

--objdump=<path>

مسیر فایل باینری objdump.

دستور 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 را بررسی کنید.

دستور 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 گره‌هایی را نمایش می‌دهد که به آفست خط حافظه نهان (cacheline) داده‌شده دسترسی دارند. خروجی آن به ۳ حالت ارائه می‌شود: - شناسه‌های گره که با , جدا شده‌اند - شناسه‌های گره به همراه آمار برای هر شناسه، در قالب زیر: Node{cpus %hitms %stores} (نمایش با انواع HITM) Node{cpus %peers %stores} (نمایش با نوع peer) - شناسه‌های گره با فهرستی از پردازنده‌های متأثر در قالب زیر: Node{cpu list}

کاربر می‌تواند با گزینهٔ -N بین حالت‌های بالا جابه‌جا شود یا از کلید n برای جابه‌جایی تعاملی در حالت TUI استفاده کند.

کاربر می‌تواند نحوهٔ مرتب‌سازی آفست‌ها را برای خط حافظه نهان مشخص کند.

فیلدهای زیر در دسترس هستند و مجموعه فیلدهای نهایی را برای خروجی آفست‌های خط حافظه نهان تعیین می‌کنند:

tid   - ادغام بر اساس TIDهای فرایند
pid   - ادغام بر اساس PIDهای فرایند
iaddr - ادغام بر اساس آدرس کد؛ فیلدهای زیر نمایش داده می‌شوند:
           Code address, Code symbol, Shared Object, Source line
dso   - ادغام بر اساس شئ اشتراکی (shared object)

به‌طور پیش‌فرض، ادغام با pid,iaddr تنظیم شده است.

خروجی stdio داده‌ها را روی خروجی استاندارد نمایش می‌دهد.

جدول‌های زیر نمایش داده می‌شوند: Trace Event Information - آمار کلی دسترسی‌های حافظه

Global Shared Cache Line Event Information
- آمار کلی دربارهٔ خطوط حافظه نهان اشتراکی
Shared Data Cache Line Table
- فهرست پرهزینه‌ترین خطوط حافظه نهان
Shared Cache Line Distribution Pareto
- فهرست تمام آفست‌های دسترسی‌یافته برای هر خط حافظه نهان

خروجی TUI یک رابط کاربری تعاملی برای پیمایش در فهرست خطوط کَش (cachelines) و نمایش جزئیات آفست (offset) فراهم می‌کند.

برای جزئیات بیشتر لطفاً با فشردن کلید ? به پنجره راهنما مراجعه کنید.

اگرچه Don Zickus، Dick Fowles و Joe Mario برای پیاده‌سازی این ابزار با یکدیگر همکاری کردند، اما کمک‌های اولیه فراوانی از سوی Arnaldo Carvalho de Melo، Stephane Eranian، Jiri Olsa و Andi Kleen صورت گرفت.

برای توضیحات دقیق درباره سناریوهای کاربردی، وبلاگ Joe درباره ابزار c2c را بررسی کنید: https://joemario.github.io/blog/2016/09/01/c2c-blog

perf-record(1), perf-mem(1), perf-arm-spe(1)

09/04/2026 perf