PERF-SCRIPT(1) perf Manual PERF-SCRIPT(1)

perf-script - خواندن perf.data (ایجادشده توسط perf record) و نمایش خروجی ردگیری (trace)

perf script [<options>]
perf script [<options>] record <script> [<record-options>] <command>
perf script [<options>] report <script> [script-args]
perf script [<options>] <script> <required-script-args> [<record-options>] <command>
perf script [<options>] <top-script> [script-args]

این دستور فایل ورودی را می‌خواند و ردگیری (trace) ضبط‌شده را نمایش می‌دهد.

چندین حالت مختلف برای perf script وجود دارد:

دستور 'perf script' برای مشاهدهٔ ردگیری تفصیلی بار کاری ضبط‌شده
به‌کار می‌رود.
همچنین می‌توانید مجموعه‌ای از اسکریپت‌های از پیش آماده را اجرا کنید که داده‌های
خام ردگیری را به روش‌های گوناگون تجمیع و خلاصه می‌کنند (فهرست اسکریپت‌ها از طریق
'perf script -l' در دسترس است). حالت‌های زیر به شما امکان ضبط و اجرای
این اسکریپت‌ها را می‌دهند:
دستور 'perf script record <script> <command>' برای ضبط رویدادهای مورد نیاز
برای 'perf script report' به‌کار می‌رود. آرگومان <script> نام نمایش‌داده‌شده
در خروجی 'perf script --list' است؛ یعنی نام واقعی اسکریپت منهای هرگونه پسوند
زبان برنامه‌نویسی. اگر <command> مشخص نشود، رویدادها با استفاده از گزینهٔ -a
(سراسری در سیستم) در 'perf record' ضبط می‌شوند.
دستور 'perf script report <script> [args]' برای اجرا و نمایش نتایج
<script> به‌کار می‌رود. آرگومان <script> نام نمایش‌داده‌شده در خروجی 'perf
script --list' است؛ یعنی نام واقعی اسکریپت منهای هرگونه پسوند زبان برنامه‌نویسی.
خروجی perf.data حاصل از اجرای قبلی 'perf script record <script>' استفاده
می‌شود و برای موفقیت‌آمیز بودن این دستور باید وجود داشته باشد. آرگومان [args] به
آرگومان‌های (عمدتاً اختیاری) مورد انتظار اسکریپت اشاره دارد.
دستور 'perf script <script> <required-script-args> <command>' هم برای
ضبط رویدادهای مورد نیاز <script> و هم برای اجرای <script> با استفاده از
حالت زنده ('live-mode')، یعنی بدون نوشتن داده روی دیسک، به‌کار می‌رود.
آرگومان <script> نام نمایش‌داده‌شده در خروجی 'perf script --list' است؛
یعنی نام واقعی اسکریپت منهای هرگونه پسوند زبان برنامه‌نویسی. اگر <command> مشخص
نشود، رویدادها با استفاده از گزینهٔ -a (سراسری در سیستم) در 'perf record'
ضبط می‌شوند. اگر <script> آرگومان‌های اجباری داشته باشد، باید پیش از <command>
مشخص شوند. این حالت اجازهٔ تعیین آرگومان‌های اختیاری اسکریپت را نمی‌دهد؛ اگر
آرگومان‌های اختیاری اسکریپت مورد نیاز باشند، می‌توان آنها را با استفاده از دستورهای
جداگانهٔ 'perf script record' و 'perf script report' تعیین کرد،
به‌طوری که خروجی استاندارد (stdout) مرحلهٔ record با استفاده از گزینه‌های '-o -'
و '-i -' در دستورهای متناظر، به ورودی استاندارد (stdin) اسکریپت report
هدایت (pipe) شود.
دستور 'perf script <top-script>' هم برای ضبط رویدادهای مورد نیاز برای
<top-script> و هم برای اجرای <top-script> با استفاده از حالت زنده ('live-mode')،
یعنی بدون نوشتن چیزی روی دیسک، استفاده می‌شود. آرگومان <top-script> نام
نمایش‌داده‌شده در خروجی 'perf script --list' است؛ یعنی نام واقعی اسکریپت
منهای هرگونه پسوند زبان برنامه‌نویسی؛ یک <top-script> به‌صورت هر اسکریپتی که نام آن
به رشتهٔ 'top' ختم شود تعریف می‌گردد.
می‌توان [<record-options>] را به مراحل ضبط دستور 'perf script record' و
حالت‌های 'live-mode' ارسال کرد؛ با این حال، این کار برای حالت زندهٔ
<top-script> ('live-mode') یا حالت‌های 'perf script report'
امکان‌پذیر نیست.
برای پیوندهایی به اطلاعات مختص هر زبان دربارهٔ نحوهٔ نوشتن و اجرای اسکریپت‌های
ردگیری خود، بخش «همچنین ببینید (SEE ALSO)» را مشاهده کنید.

<command>...

هر دستوری که می‌توانید در یک پوسته مشخص کنید.

-D, --dump-raw-trace=

نمایش خروجی پرجزئیات داده‌های ردگیری خام (raw trace).

--dump-unsorted-raw-trace=

مشابه --dump-raw-trace، اما بدون مرتب‌سازی بر اساس زمان.

-L, --Latency=

نمایش مشخصه‌های تأخیر (غیرفعال بودن irqs/preemption و غیره).

-l, --list=

نمایش فهرستی از اسکریپت‌های ردگیری دردسترس.

-s [lang], --script=

پردازش داده‌های ردگیری با اسکریپت داده‌شده ([lang]:script[.ext]). اگر رشته lang به جای نام اسکریپت مشخص شود، در عوض فهرستی از زبان‌های پشتیبانی‌شده نمایش داده خواهد شد.

-g, --gen-script=

تولید یک اسکریپت آغازین (starter script). اگر زبانی مشخص شود، اسکریپت متناسب با آن زبان perf-script.[ext] نام‌گذاری می‌شود. اگر یک مسیر فایل داده شود، python برای فایل‌های منتهی به .py و perl برای فایل‌های منتهی به .pl استفاده می‌شود.

--dlfilter=<file>

فیلتر کردن رویدادهای نمونه با استفاده از فایل شیء اشتراکی (shared object) مشخص‌شده. رجوع کنید به perf-dlfilter(1)

--dlarg=<arg>

ارسال arg به عنوان یک آرگومان به dlfilter. گزینه --dlarg می‌تواند برای افزودن آرگومان‌های بیشتر تکرار شود.

--list-dlfilters

نمایش فهرستی از dlfilterهای دردسترس. برای نمایش توضیحات کامل، به همراه گزینه -v (باید پیش از گزینه --list-dlfilters بیاید) استفاده شود.

-a

اجبار به جمع‌آوری در سراسر سیستم (system-wide). اسکریپت‌هایی که بدون یک <command> اجرا می‌شوند به‌طور پیش‌فرض از -a استفاده می‌کنند، در حالی که اسکریپت‌های اجراشده با یک <command> معمولاً چنین نیستند - این گزینه به حالت دوم اجازه می‌دهد در حالت سراسر سیستم اجرا شود.

-i, --input=

نام فایل ورودی. (پیش‌فرض: perf.data مگر اینکه stdin یک fifo باشد)

-d, --debug-mode

انجام بررسی‌های گوناگون مانند ترتیب نمونه‌ها و رویدادهای ازدست‌رفته.

-F, --fields

فهرستی از فیلدهای جداشده با کاما برای چاپ. گزینه‌ها عبارتند از: comm, tid, pid, time, cpu, event, trace, ip, sym, dso, dsoff, addr, symoff, srcline, period, iregs, uregs, brstack, brstacksym, flags, bpf-output, brstackinsn, brstackinsnlen, brstackdisasm, brstackoff, callindent, insn, disasm, insnlen, synth, phys_addr, metric, misc, srccode, ipc, data_page_size, code_page_size, ins_lat, machine_pid, vcpu, cgroup, retire_lat, brcntr,
فهرست فیلدها می‌تواند با نوع، trace، sw یا hw پیشوندگذاری شود
تا مشخص کند فهرست فیلدها به کدام نوع رویداد اعمال می‌شود.
برای نمونه، -F sw:comm,tid,time,ip,sym و -F trace:time,cpu,trace
perf script -F <fields>
معادل است با:
perf script -F trace:<fields> -F sw:<fields> -F hw:<fields>
یعنی در صورتی که رشته نوع مشخص نشود، فیلدهای تعیین‌شده
به همه انواع رویداد اعمال می‌شوند.
علاوه بر بازنویسی فیلدها، افزودن یا حذف فیلدها از مقادیر
پیش‌فرض نیز امکان‌پذیر است. برای نمونه:
-F -cpu,+insn
فیلد cpu را حذف و فیلد insn را اضافه می‌کند. افزودن/حذف فیلدها
نمی‌تواند با بازنویسی عادی ترکیب شود.
آرگومان‌ها به ترتیبی که دریافت می‌شوند پردازش می‌گردند. استفاده بعدی می‌تواند
درخواست پیشین را بازنشانی کند؛ مانند:
-F trace: -F comm,tid,time,ip,sym
نخستین -F رویدادهای trace را متوقف می‌کند (فهرست فیلدها "" است)، اما سپس
دومین فراخوانی فیلدها را به comm,tid,time,ip,sym تنظیم می‌کند. در این حالت
هشداری به کاربر داده می‌شود:
"Overriding previous field request for all events."
به‌عنوان روشی دیگر، این ترتیب را در نظر بگیرید:
-F comm,tid,time,ip,sym -F trace:
اولین -F فیلدها را برای تمام رویدادها تنظیم کرده و دومین -F
رویدادهای trace را متوقف می‌سازد. پیامی مبنی بر هشدار بازنویسی به
کاربر نمایش داده می‌شود، و نتیجهٔ موارد فوق این است که تنها رویدادهای
S/W و H/W با فیلدهای داده‌شده نمایش داده می‌شوند.
امکان افزودن/حذف فیلدها تنها برای یک نوع رویداد خاص وجود دارد:
-Fsw:-cpu,-period
فیلدهای cpu و period را از رویدادهای نرم‌افزاری حذف می‌کند.
برای گزینهٔ 'wildcard' اگر فیلد انتخاب‌شده توسط کاربر برای یک نوع رویداد
نامعتبر باشد، پیامی به کاربر نمایش داده می‌شود مبنی بر اینکه آن گزینه
برای آن نوع نادیده گرفته شده است. برای نمونه:
$ perf script -F comm,tid,trace
'trace' not valid for hardware events. Ignoring.
'trace' not valid for software events. Ignoring.
در مقابل، اگر نوع رویداد داده شود و یک فیلد نامعتبر مشخص گردد،
یک خطا خواهد بود. برای نمونه:
perf script -v -F sw:comm,tid,trace
'trace' not valid for software events.
در این مرحله نحوهٔ استفاده (راهنما) نمایش داده شده و perf-script خارج می‌شود.
فیلد flags ساختگی (synthesized) است و ممکن است هنگام رمزگشایی Instruction
Trace دارای مقدار باشد. پرچم‌ها "bcrosyiABExghDt" هستند که به‌ترتیب نمایانگر branch (انشعاب)،
call (فراخوانی)، return (بازگشت)، conditional (شرطی)، system (سیستم)، asynchronous (ناهمگام)، interrupt (وقفه)،
transaction abort (ابطال تراکنش)، trace begin (شروع ردگیری)، trace end (پایان ردگیری)، in transaction (درون تراکنش)، VM-Entry،
VM-Exit، interrupt disabled (وقفه غیرفعال) و interrupt disable toggle (تغییر وضعیت غیرفعال‌سازی وقفه) هستند.
ترکیب‌های شناخته‌شدهٔ پرچم‌ها به شکل خواناتری چاپ می‌شوند؛ مانند:
"call" برای "bc"، "return" برای "br"، "jcc" برای "bo"، "jmp" برای "b"،
"int" برای "bci"، "iret" برای "bri"، "syscall" برای "bcs"، "sysret" برای "brs"،
"async" برای "by"، "hw int" برای "bcyi"، "tx abrt" برای "bA"، "tr strt" برای "bB"،
"tr end" برای "bE"، "vmentry" برای "bcg" و "vmexit" برای "bch".
با این حال پرچم‌های "x" ،"D" و "t" در این موارد به‌صورت جداگانه نمایش داده خواهند شد؛
مانند "jcc     (xD)" برای یک انشعاب شرطی درون یک تراکنش
با وقفه‌های غیرفعال. توجه داشته باشید که غیرفعال شدن وقفه‌ها با "t"
و فعال شدن وقفه‌ها با "Dt" نشان داده می‌شود.
فیلد callindent ساختگی (synthesized) است و ممکن است هنگام
رمزگشایی Instruction Trace دارای مقدار باشد. برای فراخوانی‌ها و بازگشت‌ها، این فیلد
نام نماد را با دندانه‌گذاری با فاصله جهت نمایش عمق پشته (stack depth) نشان می‌دهد.
هنگام انجام رمزگشایی رد دستورالعمل‌ها، insn ،disasm و insnlen به‌ترتیب بایت‌های دستورالعمل، دستورالعمل‌های دیس‌اسمبل‌شده (نیازمند پشتیبانی libcapstone) و طول دستورالعمل جاری را ارائه می‌دهند.
فیلد synth توسط رویدادهای سنتز‌شده (synthesized events) استفاده می‌شود که ممکن است هنگام
رمزگشایی رد دستورالعمل‌ها (Instruction Trace decoding) ایجاد شوند.
فیلد ipc (دستورالعمل بر چرخه / instructions per cycle) سنتز‌شده است و ممکن است هنگام
رمزگشایی رد دستورالعمل‌ها (Instruction Trace decoding) دارای مقدار باشد.
فیلدهای machine_pid و vcpu از داده‌های حاصل از به‌کارگیری perf inject
برای درج یک فایل perf.data ضبط‌شده در داخل ماشین مجازی در یک فایل perf.data
ضبط‌شده روی میزبان به‌طور هم‌زمان، مشتق می‌شوند.
فیلدهای cgroup نیازمند نمونه‌ای هستند که شناسه cgroup را داشته باشد؛ شناسه‌ای که هنگام
ارسال گزینه "--all-cgroups" به 'perf record' ذخیره می‌شود.
در نهایت، کاربر نمی‌تواند فیلدها را برای همه انواع رویدادها روی none تنظیم کند؛
به این معنی که -F "" مجاز نیست.
خروجی brstack شامل اطلاعات مرتبط با انشعاب همراه با آدرس‌های خام با استفاده از نحو
FROM/TO/EVENT/INTX/ABORT/CYCLES/TYPE/SPEC به ترتیب زیر است:
FROM  : دستورالعمل مبدأ انشعاب
TO    : دستورالعمل مقصد انشعاب
EVENT : M=مقصد یا جهت انشعاب به نادرستی پیش‌بینی شده بود (mispredicted)
        P=مقصد یا جهت انشعاب پیش‌بینی شده بود (predicted)
        N=انشعاب محقق نشد (not-taken)
        -=بدون رویداد یا پشتیبانی‌نشده
INTX  : X=انشعاب در داخل یک ناحیه تراکنشی
        -=انشعاب در ناحیه تراکنش نیست یا پشتیبانی‌نشده
ABORT : A=ورودی سقط TSX
        -=ناحیه سقط‌شده نیست یا پشتیبانی‌نشده
CYCLES: تعداد چرخه‌هایی که از زمان ضبط آخرین انشعاب سپری شده است
TYPE  : نوع انشعاب: COND/UNCOND/IND/CALL/IND_CALL/RET و غیره.
        -=پشتیبانی‌نشده
SPEC  : اطلاعات حدس و گمانه‌زنی انشعاب: SPEC_WRONG_PATH/NON_SPEC_CORRECT_PATH/SPEC_CORRECT_PATH
        -=پشتیبانی‌نشده
فیلد brstacksym همانند brstack است، به‌جز اینکه آدرس‌های FROM و TO در صورت امکان به شکل نمادین چاپ می‌شوند.
هنگامی که brstackinsn مشخص شود، توالی‌های کامل اسمبلیِ توالی‌های انشعاب برای هر نمونه
چاپ می‌شود. این مسیر اجرای کاملی است که به نمونه منتهی می‌شود. این قابلیت تنها زمانی
پشتیبانی می‌شود که نمونه با perf record -b یا -j any ضبط شده باشد.
از brstackinsnlen برای چاپ طول brstackinsn استفاده کنید. برای مثال، شما
نمی‌توانید از دستورالعمل متوالی بعدی پس از یک انشعاب غیرشرطی مطلع شوید، مگر آنکه
آن را بر اساس طول آن محاسبه نمایید.
فیلد brstackdisasm مانند brstackinsn عمل می‌کند، اما اگر perf با کتابخانه
capstone ساخته شده باشد، دستورالعمل‌های دیس‌اسمبل‌شده را چاپ خواهد کرد.
فیلد brstackoff آفست را درون یک dso/باینری خاص چاپ خواهد کرد.
با گزینه metric، دستور perf script می‌تواند معیارهایی را برای دوره‌های نمونه‌برداری،
مشابه perf stat محاسبه کند. این امر مستلزم تعیین یک گروه با چندین رویداد است
که معیارها را با گزینه :S برای perf record تعریف می‌کنند. دستور perf بر روی رویداد
اول نمونه‌برداری انجام می‌دهد و معیارهای محاسبه‌شده را برای همه رویدادهای درون گروه چاپ می‌کند.
لطفاً توجه داشته باشید که معیار محاسبه‌شده در کل دوره نمونه‌برداری (از زمان آخرین نمونه)
میانگین‌گیری می‌شود، نه فقط برای نقطه نمونه‌برداری.
برای رویدادهای نمونه، نمایش فیلد misc با گزینه -F +misc امکان‌پذیر است؛
حروف زیر برای هر بیت نمایش داده می‌شوند:
PERF_RECORD_MISC_KERNEL               K
PERF_RECORD_MISC_USER                 U
PERF_RECORD_MISC_HYPERVISOR           H
PERF_RECORD_MISC_GUEST_KERNEL         G
PERF_RECORD_MISC_GUEST_USER           g
PERF_RECORD_MISC_MMAP_DATA*           M
PERF_RECORD_MISC_COMM_EXEC            E
PERF_RECORD_MISC_SWITCH_OUT           S
PERF_RECORD_MISC_SWITCH_OUT_PREEMPT   Sp
$ perf script -F +misc ...
 sched-messaging  1414 K     28690.636582:       4590 cycles ...
 sched-messaging  1407 U     28690.636600:     325620 cycles ...
 sched-messaging  1414 K     28690.636608:      19473 cycles ...
misc field ___________/

-k, --vmlinux=<file>

مسیر فایل vmlinux

--kallsyms=<file>

مسیر فایل kallsyms

--symfs=<directory[,layout]>

جستجوی فایل‌های دارای نماد نسبت به این دایرکتوری. چیدمان اختیاری (layout) می‌تواند hierarchy (پیش‌فرض، منطبق بر مسیر کامل) یا flat (تنها منطبق بر نام پایه) باشد. این گزینه زمانی مفید است که فایل‌های اشکال‌زدایی (debug) در یک ساختار دایرکتوری مسطح ذخیره شده باشند.

-G, --hide-call-graph

عدم نمایش زنجیره فراخوانی (call chain) هنگام چاپ نمادها.

--stop-bt

توقف نمایش گراف فراخوانی (callgraph) در این نمادها.

-C, --cpu

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

-c, --comms=

تنها نمایش رویدادها برای این commها. قالبی از CSV که ورودی‌های file://filename را پشتیبانی می‌کند.

--pid=

تنها نمایش رویدادها برای شناسه فرآیند (PID) داده‌شده (فهرست جداشده با کاما).

--tid=

تنها نمایش رویدادها برای شناسه رشته (TID) داده‌شده (فهرست جداشده با کاما).

-I, --show-info

نمایش اطلاعات تفصیلی درباره فایل perf.data. این گزینه اطلاعاتی را اضافه می‌کند که ممکن است بسیار حجیم باشند و در نتیجه نمایش را شلوغ کنند. این اطلاعات در حال حاضر شامل توپولوژی cpu و numa سیستم میزبان است. این گزینه تنها در حالت گزارش perf script قابل استفاده است.

--show-kernel-path

تلاش برای یافتن و وضوح مسیر [kernel.kallsyms]

--show-task-events نمایش رویدادهای مرتبط با وظیفه (task) (مانند FORK، COMM، EXIT).

--show-mmap-events نمایش رویدادهای مرتبط با mmap (مانند MMAP، MMAP2).

--show-namespace-events نمایش رویدادهای namespace یعنی رویدادهایی از نوع PERF_RECORD_NAMESPACES.

--show-switch-events نمایش رویدادهای تعویض زمینه (context switch) یعنی رویدادهایی از نوع PERF_RECORD_SWITCH یا PERF_RECORD_SWITCH_CPU_WIDE.

--show-lost-events نمایش رویدادهای ازدست‌رفته (lost) یعنی رویدادهایی از نوع PERF_RECORD_LOST.

--show-round-events نمایش رویدادهای دورِ پایان‌یافته یعنی رویدادهایی از نوع PERF_RECORD_FINISHED_ROUND.

--show-bpf-events نمایش رویدادهای bpf یعنی رویدادهایی از نوع PERF_RECORD_KSYMBOL و PERF_RECORD_BPF_EVENT.

--show-cgroup-events نمایش رویدادهای cgroup یعنی رویدادهایی از نوع PERF_RECORD_CGROUP.

--show-text-poke-events نمایش رویدادهای text poke یعنی رویدادهایی از نوع PERF_RECORD_TEXT_POKE و PERF_RECORD_KSYMBOL.

--demangle

رمزگشایی نام نمادها (demangle) به شکلی خوانا برای انسان. این گزینه به‌طور پیش‌فرض فعال است؛ غیرفعال‌سازی با --no-demangle انجام می‌شود.

--demangle-kernel

رمزگشایی نام نمادهای هسته (demangle) به شکلی خوانا برای انسان (برای هسته‌های ++C).

--addr2line=<path>

مسیر به باینری addr2line.

--header نمایش سربرگ perf.data.

--header-only تنها نمایش سربرگ perf.data.

--itrace

گزینه‌هایی برای رمزگشایی داده‌های ردگیری دستورالعمل (instruction tracing). گزینه‌ها عبارتند از:
i       تولید رویدادهای instructions
y       تولید رویدادهای cycles
b       تولید رویدادهای branches
c       تولید رویدادهای branches (فقط calls)
r       تولید رویدادهای branches (فقط returns)
x       تولید رویدادهای transactions
w       تولید رویدادهای ptwrite
p       تولید رویدادهای power (شامل رویدادهای PSB برای Intel PT)
o       تولید سایر رویدادهای ثبت‌شده به دلیل استفاده
        از aux-output (به perf record مراجعه کنید)
I       تولید رویدادهای وقفه (interrupt) یا مشابه (ناهمگام)
        (مانند Intel PT Event Trace)
e       تولید رویدادهای خطا (error)
d       ایجاد لاگ اشکال‌زدایی (debug)
f       تولید رویدادهای حافظه پنهان سطح اول (first level cache)
m       تولید رویدادهای حافظه پنهان سطح آخر (last level cache)
M       تولید رویدادهای حافظه (memory)
t       تولید رویدادهای TLB
a       تولید رویدادهای دسترسی از راه دور (remote access)
g       تولید یک زنجیره فراخوانی (call chain) (استفاده همراه با i یا x)
G       تولید یک زنجیره فراخوانی روی رکوردهای رویداد موجود
l       تولید ورودی‌های آخرین شاخه (last branch) (استفاده همراه با i یا x)
L       تولید ورودی‌های آخرین شاخه روی رکوردهای رویداد موجود
s       نادیده‌گرفتن تعداد اولیه‌ای از رویدادها
q       رمزگشایی سریع‌تر (با جزئیات کمتر)
A       محاسبه تقریبی IPC
Z       ترجیح بر نادیده‌گرفتن برچسب‌های زمانی (رمزگشایی اصطلاحاً «بی‌زمان» یا timeless)
T       استفاده از رد برچسب زمانی به عنوان زمان هسته (kernel time)
پیش‌فرض همه رویدادها است، یعنی همانند --itrace=iybxwpe،
به‌جز برای perf script که مقدار آن --itrace=ce است
علاوه بر این، دوره زمانی (پیش‌فرض 100000، به‌جز برای perf script که 1 است)
برای رویدادهای instructions می‌تواند در واحدهایی از موارد زیر مشخص شود:
i دستورالعمل‌ها (instructions) t تیک‌ها (ticks) ms میلی‌ثانیه (milliseconds) us میکروثانیه (microseconds) ns نانوثانیه (پیش‌فرض)
همچنین اندازهٔ زنجیرهٔ فراخوانی (پیش‌فرض 16، حداکثر 1024) را می‌توان برای رویدادهای
دستورالعمل‌ها یا تراکنش‌ها مشخص کرد.
همچنین تعداد مدخل‌های آخرین شاخه (پیش‌فرض 64، حداکثر 1024) را می‌توان برای
رویدادهای دستورالعمل‌ها یا تراکنش‌ها مشخص کرد.
مشابه گزینه‌های g و l، اندازه را می‌توان برای گزینه‌های G و L نیز مشخص کرد.
در x86، توجه داشته باشید که وقتی داده‌ها با PEBS بزرگ ثبت شده باشند، G و L
عملکرد ضعیفی دارند. برای جزئیات به صفحهٔ راهنمای linkperf:perf-intel-pt[1] مراجعه کنید.
همچنین می‌توان رویدادهای تولیدشده در ابتدا (دستورالعمل‌ها، شاخه‌ها، تراکنش‌ها،
ptwrite و power) را نادیده گرفت. این کار برای نادیده گرفتن کد راه‌اندازی مفید است.
--itrace=i0nss1000000
یک میلیون دستورالعمل نخست را نادیده می‌گیرد.
گزینهٔ 'e' می‌تواند با پرچم‌هایی دنبال شود که مشخص می‌کنند چه خطاهایی گزارش
خواهند شد یا نخواهند شد. پیش از هر پرچم باید '+' یا '-' قرار گیرد.
این پرچم‌ها عبارت‌اند از:
        o       سرریز (overflow)
        l       از دست رفتن داده‌های ردگیری (trace data lost)
در صورت پشتیبانی، گزینهٔ 'd' می‌تواند با پرچم‌هایی دنبال شود که مشخص می‌کنند چه
پیام‌های اشکال‌زدایی‌ای ثبت خواهند شد یا نخواهند شد. پیش از هر پرچم باید
'+' یا '-' قرار گیرد. این پرچم‌ها عبارت‌اند از:
        a       همهٔ رویدادهای perf
        e       خروجی فقط هنگام خطاها (اندازه قابل پیکربندی است - linkperf:perf-config[1] را ببینید)
        o       خروجی به stdout
در صورت پشتیبانی، گزینهٔ 'q' را می‌توان برای افزایش اثر تکرار کرد.
برای غیرفعال کردن کامل رمزگشایی، از --no-itrace استفاده کنید.

--full-source-path

نمایش مسیر کامل فایل‌های منبع برای خروجی srcline.

--max-stack

تنظیم محدودیت عمق پشته هنگام تجزیهٔ زنجیرهٔ فراخوانی؛ هر چیزی فراتر از عمق مشخص‌شده نادیده گرفته خواهد شد. این یک مصالحه میان از دست رفتن اطلاعات و پردازش سریع‌تر است، به‌ویژه برای بار‌های کاری که می‌توانند پشتهٔ زنجیرهٔ فراخوانی بسیار طولانی داشته باشند. توجه داشته باشید که هنگام استفاده از گزینهٔ --itrace، در صورتی که اندازهٔ زنجیرهٔ فراخوانی ساخته‌شده (synthesized) بزرگ‌تر باشد، جایگزین این مقدار خواهد شد.
پیش‌فرض: 127

--ns

استفاده از ۹ رقم اعشار هنگام نمایش زمان (یعنی نمایش نانوثانیه‌ها)

-f, --force

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

--time

تنها نمونه‌های درون بازهٔ زمانی ارائه‌شده تحلیل شوند: <start>,<stop>. زمان‌ها دارای قالب seconds.nanoseconds هستند. اگر زمان آغاز مشخص نشده باشد (یعنی رشتهٔ زمانی ,x.y باشد)، تحلیل از ابتدای فایل آغاز می‌شود. اگر زمان پایان مشخص نشده باشد (یعنی رشتهٔ زمانی x.y, باشد)، تحلیل تا انتهای فایل ادامه می‌یابد. چندین بازه را می‌توان با فاصله از هم جدا کرد، که در این حالت آرگومان باید در علامت نقل‌قول قرار گیرد؛ مانند: --time "1234.567,1234.789 1235,"
همچنین از درصد زمانی با چندین بازهٔ زمانی پشتیبانی می‌کند. رشتهٔ زمانی به‌صورت
'a%/n,b%/m,...' یا 'a%-b%,c%-%d,...' است.
برای نمونه:
انتخاب دومین برش زمانی 10٪:
perf script --time 10%/2
انتخاب برش زمانی از 0% تا 10%:
perf script --time 0%-10%
انتخاب اولین و دومین برش زمانی 10%:
perf script --time 10%/1,10%/2
انتخاب برش‌های 0% تا 10% و 30% تا 40%:
perf script --time 0%-10%,30%-40%

--max-blocks

تنظیم حداکثر تعداد بلوک‌های برنامه برای چاپ با brstackinsn به ازای هر نمونه.

--reltime

چاپ برچسب‌های زمانی نسبت به شروع ردگیری.

--deltatime

چاپ برچسب‌های زمانی نسبت به رویداد قبلی.

--per-event-dump

ایجاد فایل‌های جداگانه به ازای هر رویداد با نام "perf.data.EVENT.dump" به جای چاپ در خروجی استاندارد (stdout)؛ برای مثال جهت ایجاد flamegraphها مفید است.

--inline

اگر نشانی callgraph متعلق به یک تابع درون‌خطی (inlined) باشد، پشته درون‌خطی چاپ خواهد شد. هر مدخل دارای نام تابع و فایل/خط است. به‌طور پیش‌فرض فعال است، با --no-inline غیرفعال می‌شود.

--insn-trace[=<raw|disasm>]

نمایش جریان دستورالعمل‌ها به صورت بایت‌ها (raw) یا دیس‌اسمبل‌شده (disasm) برای ردگیری‌های intel_pt. مقدار پیش‌فرض raw است. برای استفاده از xed، مقدار raw را با --xed ترکیب کنید تا دیس‌اسمبل انجام‌شده توسط xed نمایش داده شود.

--xed

اجرای دیس‌اسمبلر xed روی خروجی. نیازمند نصب بودن دیس‌اسمبلر xed است.

-S, --symbols=symbol[,symbol...]

فقط نمادهای ذکرشده را در نظر می‌گیرد. نمادها معمولاً نام هستند اما می‌توانند نشانی هگزادسیمال نیز باشند.
نشانی هگزادسیمال می‌تواند نشانی شروع یک نماد یا
هر نشانی دیگری برای فیلتر کردن رکوردهای ردگیری باشد
برای مثال، برای انتخاب نماد noploop یا نشانی 0x4007a0:
perf script --symbols=noploop,0x4007a0
از فیلتر کردن رکوردهای ردگیری بر اساس نام نماد، نشانی شروع
نماد، هر نشانی هگزادسیمال و بازه نشانی پشتیبانی می‌کند.
ترتیب مقایسه به این صورت است:
1.مقایسه بر اساس نام نماد
2.مقایسه بر اساس نشانی شروع نماد.
3.مقایسه بر اساس هر نشانی هگزادسیمال.
4.مقایسه بر اساس بازه نشانی (به --addr-range مراجعه کنید).

--addr-range

همراه با -S یا --symbols برای فهرست کردن رکوردهای ردگیری‌شده در یک بازه نشانی استفاده می‌شود.
برای مثال، برای فهرست کردن رکوردهای ردگیری‌شده در بازه نشانی
[0x4007a0, 0x0x4007a9]:
perf script -S 0x4007a0 --addr-range 10
--dsos=
فقط نمادها را در این DSOها در نظر می‌گیرد.

--call-trace

جریان فراخوانی را برای ردگیری‌های intel_pt نمایش می‌دهد. پردازنده‌ها درهم‌تنیده‌اند، اما می‌توان با -C آن‌ها را پالایش کرد.

--call-ret-trace

جریان فراخوانی و بازگشت را برای ردگیری‌های intel_pt نمایش می‌دهد.

--graph-function

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

--switch-on EVENT_NAME

تنها پس از پیدا شدن این رویداد، رویدادها را در نظر می‌گیرد.

--switch-off EVENT_NAME

پس از پیدا شدن این رویداد، بررسی رویدادها را متوقف می‌کند.

--show-on-off-events

رویدادهای مربوط به --switch-on/off را نیز نمایش می‌دهد.

--stitch-lbr

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

--merge-callchains

ادغام زنجیره‌های فراخوانی به‌تعویق‌افتادهٔ کاربر را در صورت وجود فعال می‌کند. این رفتار پیش‌فرض است. اگر به هر دلیلی می‌خواهید رکوردهای مجزای CALLCHAIN_DEFERRED را مشاهده کنید، صریحاً از --no-merge-callchains استفاده کنید.

--guestmount=<path>

دایرکتوری سوار کردن (mount) سیستم‌فایل ریشهٔ سیستم‌عامل مهمان. کاربران دایرکتوری‌های ریشهٔ سیستم‌عامل مهمان را از طریق یک روش دسترسی به سیستم‌فایل، معمولاً sshfs، زیر <path> سوار می‌کنند. به عنوان مثال، اجرای ۲ سیستم‌عامل مهمان، که pid یکی ۸۸۸۸ و دیگری ۹۹۹۹ است:
$ mkdir ~/guestmount
$ cd ~/guestmount
$ sshfs -o allow_other,direct_io -p 5551 localhost:/ 8888/
$ sshfs -o allow_other,direct_io -p 5552 localhost:/ 9999/
$ perf script --guestmount=~/guestmount 

--guestkallsyms=<path>

رونوشت فایل /proc/kallsyms سیستم‌عامل مهمان. برنامهٔ perf برای دریافت نمادهای کرنل مهمان آن را می‌خواند. کاربران باید آن را از سیستم‌عامل مهمان کپی کنند.

--guestmodules=<path>

رونوشت فایل /proc/modules سیستم‌عامل مهمان. برنامهٔ perf برای دریافت اطلاعات ماژول‌های کرنل مهمان آن را می‌خواند. کاربران باید آن را از سیستم‌عامل مهمان کپی کنند.

--guestvmlinux=<path>

فایل vmlinux کرنل سیستم‌عامل مهمان.

--guest-code

مشخص می‌کند که کد مهمان در فرایند ناظر مجازی (hypervisor) قابل یافتن است، که حالتی معمول برای برنامه‌های آزمایشی KVM محسوب می‌شود.

perf-record(1), perf-script-perl(1), perf-script-python(1), perf-intel-pt(1), perf-dlfilter(1)

09/04/2026 perf