PERF-MEM(1) perf Manual PERF-MEM(1)

perf-mem - پروفایل‌سازی دسترسی‌های حافظه

perf mem [<options>] (record [<command>] | report)

دستور "perf mem record" یک فرمان را اجرا کرده و داده‌های مربوط به عملیات حافظه را از آن جمع‌آوری و در perf.data ذخیره می‌کند. گزینه‌های perf record نیز پذیرفته شده و مستقیماً اعمال می‌شوند.

دستور "perf mem report" نتیجه را نمایش می‌دهد. این دستور perf report را با مجموعهٔ مناسبی از گزینه‌ها فراخوانی می‌کند تا نمایهٔ دسترسی به حافظه را نمایش دهد. به‌طور پیش‌فرض، از بارگذاری‌ها (loads) و ذخیره‌سازی‌ها (stores) نمونه‌برداری می‌شود. از گزینهٔ -t برای محدود کردن به بارگذاری‌ها یا ذخیره‌سازی‌ها استفاده کنید.

توجه داشته باشید که در سیستم‌های Intel، تاخیر حافظهٔ گزارش‌شده تاخیر بهره‌برداری (use-latency) است، نه تاخیر خالص بارگذاری (یا تاخیر ذخیره‌سازی). تاخیر بهره‌برداری علاوه بر تاخیر زیرسیستم حافظه، شامل هرگونه تاخیر صف‌بندی خط‌لوله (pipeline queuing) نیز می‌شود.

در Arm64 این ابزار از SPE برای نمونه‌برداری از عملیات بارگذاری و ذخیره‌سازی استفاده می‌کند، بنابراین به پشتیبانی سخت‌افزار و هسته نیاز است. برای راهنمای راه‌اندازی به perf-arm-spe(1) مراجعه کنید. به دلیل ماهیت آماری نمونه‌برداری SPE، از تمامی عملیات حافظه نمونه‌برداری نخواهد شد.

در AMD این ابزار از IBS Op PMU برای نمونه‌برداری از عملیات بارگذاری-ذخیره‌سازی (load-store) استفاده می‌کند.

-f, --force

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

-t, --type=<type>

انتخاب نوع عملیات حافظه: load یا store (پیش‌فرض: load,store).

-v, --verbose

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

-p, --phys-data

ثبت/گزارش آدرس‌های فیزیکی نمونه‌ها.

--data-page-size

ثبت/گزارش اندازهٔ صفحهٔ (page size) آدرس داده‌های نمونه.

<command>...

هر فرمانی که بتوانید در شل مشخص کنید.

-e, --event <event>

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

-K, --all-kernel

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

-U, --all-user

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

--ldlat <n>

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

-i, --input=<file>

نام فایل ورودی.

-C, --cpu=<cpu>

تنها پایش بر روی فهرست CPUهای ارائه‌شده. چندین پردازنده را می‌توان به صورت یک فهرست جداشده با کاما و بدون فاصله مشخص کرد: 0,1. بازه‌های پردازنده‌ها با - مشخص می‌شوند، مانند 0-2. حالت پیش‌فرض، پایش تمام پردازنده‌ها (CPUs) است.

-D, --dump-raw-samples

تخلیه نمونه‌های خام رمزگشایی‌شده روی صفحه در قالبی با تجزیه آسان، به صورت یک نمونه در هر خط.

-s, --sort=<key>

گروه‌بندی نتیجه بر اساس کلید(های) ارائه‌شده - چندین کلید می‌توانند در قالب CSV مشخص شوند. کلیدهای مختص به نمونه‌های حافظه عبارتند از: symbol_daddr، symbol_iaddr، dso_daddr، locked، tlb، mem، snoop، dcacheline، phys_daddr، data_page_size، blocked.
•symbol_daddr: نام نماد داده‌ای که در زمان نمونه‌برداری روی آن عملیات انجام می‌گرفته است
•symbol_iaddr: نام نماد کدی که در زمان نمونه‌برداری در حال اجرا بوده است
•dso_daddr: نام کتابخانه یا ماژول حاوی داده‌ای که در زمان نمونه‌برداری روی آن عملیات انجام می‌گرفته است
•locked: آیا گذرگاه (bus) در زمان نمونه‌برداری قفل بوده است یا خیر
•tlb: نوع دسترسی tlb برای داده در زمان نمونه‌برداری
•mem: نوع دسترسی حافظه برای داده در زمان نمونه‌برداری
•snoop: نوع snoop (در صورت وجود) برای داده در زمان نمونه‌برداری
•dcacheline: خط حافظه نهان (cacheline) که آدرس داده در زمان نمونه‌برداری روی آن قرار داشته است
•phys_daddr: آدرس فیزیکی داده‌ای که در زمان نمونه‌برداری روی آن عملیات انجام می‌گرفته است
•data_page_size: اندازه صفحه داده مربوط به داده‌ای که در زمان نمونه‌برداری روی آن عملیات انجام می‌گرفته است
•blocked: دلیل دسترسی بارگذاری مسدودشده برای داده در زمان نمونه‌برداری
و کلیدهای مرتب‌سازی پیش‌فرض به local_weight، mem، sym، dso،
symbol_daddr، dso_daddr، snoop، tlb، locked، blocked، local_ins_lat تغییر می‌یابند.

-F, --fields=

مشخص کردن فیلد خروجی - چندین کلید می‌توانند در قالب CSV مشخص شوند. لطفاً برای جزئیات به perf-report(1) مراجعه کنید.
علاوه بر فیلدهای پیش‌فرض، 'perf mem report' فیلدهای
زیر را برای تفکیک دوره‌های نمونه‌برداری ارائه می‌دهد.
•op: عملیات در دستورالعمل نمونه (load، store، prefetch، ...)
•cache: مکانی در حافظهٔ نهان پردازنده (L1، L2، ...) که نمونه با آن برخورد (hit) داشته است
•mem: مکانی در حافظه یا دیگر جاهایی که نمونه با آن برخورد داشته است
•dtlb: مکانی در Data TLB (سطوح L1، L2) که نمونه با آن برخورد داشته است
•snoop: نتیجهٔ snoop برای دسترسی داده‌های نمونه‌برداری‌شده
لطفاً برای نکات و هشدارهای مهم به بخش OUTPUT FIELD SELECTION مراجعه کنید.

-T, --type-profile

نمایش نتیجهٔ پروفایل نوع‌داده به‌جای نمادهای کد. این گزینه نیازمند اطلاعات اشکال‌زدایی است و کلیدهای مرتب‌سازی پیش‌فرض را به این موارد تغییر می‌دهد: mem, snoop, tlb, type.

-U, --hide-unresolved

تنها نمایش مدخل‌هایی که به یک نماد تفکیک شده‌اند.

-x, --field-separator=<separator>

مشخص کردن جداکنندهٔ فیلد مورد استفاده هنگام تخلیهٔ نمونه‌های خام (گزینهٔ -D). به‌طور پیش‌فرض، جداکننده نویسهٔ فاصله است.

علاوه بر این، برای report تمامی گزینه‌های perf report معتبر هستند، و برای record تمامی گزینه‌های perf record.

برخلاف perf-report(1) که سربار را از دورهٔ نمونه‌برداری واقعی محاسبه می‌کند، سربار perf-mem با استفاده از وزن نمونه (sample weight) محاسبه می‌شود. برای مثال، دو نمونه در فایل perf.data وجود دارد که هر دو دارای دورهٔ نمونه‌برداری یکسانی هستند، اما یک نمونه دارای وزن 180 و دیگری دارای وزن 20 است:

$ perf script -F period,data_src,weight,ip,sym
100000    629080842 |OP LOAD|LVL L3 hit|...     20       7e69b93ca524 strcmp
100000   1a29081042 |OP LOAD|LVL RAM hit|...   180   ffffffff82429168 memcpy
$ perf report -F overhead,symbol
50%   [.] strcmp
50%   [k] memcpy
$ perf mem report -F overhead,symbol
90%   [k] memcpy
10%   [.] strcmp

دستور "perf mem report" تعدادی فیلد خروجی جدید مختص اطلاعات منبع داده در نمونه اضافه می‌کند. برخی از آن‌ها هم‌نام با کلیدهای مرتب‌سازی موجود ("mem" و "snoop") هستند. بنابراین برخلاف سایر فیلدها و کلیدهای مرتب‌سازی، هنگام استفاده با -F/--fields یا -s/--sort رفتار متفاوتی خواهند داشت.

استفاده از این دو به عنوان فیلدهای خروجی، تمام نمونه‌ها را با یکدیگر تجمیع کرده و تفکیک آن‌ها را نمایش می‌دهد.

$ perf mem report -F mem,snoop
...
# ------ Memory -------  --- Snoop ----
#     RAM Uncach  Other     HitM  Other
# .....................  ..............
#
     3.5%   0.0%  96.5%    25.1%  74.9%

اما استفاده از همین نام‌ها برای کلیدهای مرتب‌سازی، نمونه‌ها را برای هر نوع به طور جداگانه تجمیع خواهد کرد.

$ perf mem report -s mem,snoop
# Overhead       Samples  Memory access                            Snoop
# ........  ............  .......................................  ............
#
    47.99%          1509  L2 hit                                   N/A
    25.08%           338  core, same node Any cache hit            HitM
    10.24%         54374  N/A                                      N/A
     6.77%         35938  L1 hit                                   N/A
     6.39%           101  core, same node Any cache hit            N/A
     3.50%            69  RAM hit                                  N/A
     0.03%           158  LFB/MAB hit                              N/A
     0.00%             2  Uncached hit                             N/A

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

09/04/2026 perf