PERF-REPORT(1) perf Manual PERF-REPORT(1)

perf-report - خواندن perf.data (ایجاد شده توسط perf record) و نمایش پروفایل

perf report [-i <file> | --input=file]

این دستور اطلاعات پروفایل شمارنده‌های کارایی ثبت‌شده توسط perf record را نمایش می‌دهد.

-i, --input=

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

-v, --verbose

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

-q, --quiet

هیچ هشدار یا پیامی نمایش داده نشود. (خنثی‌سازی -v)

-n, --show-nr-samples

نمایش تعداد نمونه‌ها برای هر نماد

--show-cpu-utilization

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

-T, --threads

نمایش شمارنده‌های رویداد بر پایه هر رشته (per-thread). فایل داده‌های ورودی باید با گزینهٔ -s ضبط شده باشد.

-c, --comms=

تنها در نظر گرفتن نمادها در این commها. قالب CSV که ورودی‌های file://filename را می‌فهمد. این گزینه بر درصد ستون‌های سربار (overhead) و تاخیر (latency) اثر می‌گذارد. برای اطلاعات بیشتر --percentage را ببینید.

--pid=

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

--tid=

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

-d, --dsos=

تنها در نظر گرفتن نمادها در این dsoها. قالب CSV که ورودی‌های file://filename را می‌فهمد. این گزینه بر درصد ستون‌های سربار و تاخیر اثر می‌گذارد. برای اطلاعات بیشتر --percentage را ببینید.

-S, --symbols=

تنها در نظر گرفتن این نمادها. قالب CSV که ورودی‌های file://filename را می‌فهمد. این گزینه بر درصد ستون‌های سربار و تاخیر اثر می‌گذارد. برای اطلاعات بیشتر --percentage را ببینید.

--symbol-filter=

تنها نمایش نمادهایی که (به‌طور جزئی) با این پالایه مطابقت دارند.

-U, --hide-unresolved

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

--parallelism

تنها در نظر گرفتن این سطوح موازی‌سازی. سطح موازی‌سازی تعداد رشته‌هایی است که در زمان نمونه‌برداری به‌طور فعال روی CPUها اجرا می‌شوند. این پرچم یک عدد تکی، فهرست جداشده با کاما، و بازه‌ها را می‌پذیرد (برای مثال: "1"، "7,8"، "1,64-128"). این گزینه برای درک عملکرد یک برنامه در فازهای ترتیبی/موازی‌سازی اندک در مقایسه با فازهای موازی‌سازی بالا سودمند است. این گزینه بر درصد ستون‌های سربار و تاخیر اثر می‌گذارد. برای اطلاعات بیشتر --percentage را ببینید. همچنین برای جزئیات بیشتر بخش ‘CPU and latency overheads’ را ببینید.

--latency

نمایش پروفایل مبتنی بر تاخیر به‌جای پروفایل پیش‌فرض مبتنی بر مصرف CPU (نیازمند پرچم --latency در perf record).

-s, --sort=

مرتب‌سازی مدخل‌های هیستوگرام بر پایه کلید(های) داده‌شده - می‌توان چندین کلید را در قالب CSV تعیین کرد. کلیدهای مرتب‌سازی زیر موجود هستند: pid، comm، dso، symbol، parent، cpu، socket، srcline، weight، local_weight، cgroup_id، addr، comm_nodigit.
هر کلید معنای زیر را دارد:
•comm: دستور (نام) وظیفه که می‌تواند از طریق /proc/<pid>/comm خوانده شود
•pid: دستور و tid وظیفه
•tgid: دستور و tgid وظیفه
•dso: نام کتابخانه یا ماژولِ اجراشده در زمان نمونه‌برداری
•dso_size: اندازهٔ کتابخانه یا ماژولِ اجراشده در زمان نمونه‌برداری
•symbol: نام تابعِ اجراشده در زمان نمونه‌برداری
•symbol_size: اندازهٔ تابع اجراشده در زمان نمونه‌برداری
•parent: نام تابع منطبق‌شده با فیلتر regex والد. ورودی‌های غیرمنطبق به‌صورت "[other]" نمایش داده می‌شوند.
•cpu: شمارهٔ cpu که تسک در زمان نمونه‌برداری روی آن اجرا شده است
•socket: شماره سوکت پردازنده که تسک در زمان نمونه‌برداری روی آن اجرا شده است
•parallelism: تعداد threadهای در حال اجرا در زمان نمونه‌برداری
•srcline: نام فایل و شماره خط اجراشده در زمان نمونه‌برداری. اطلاعات اشکال‌زدایی DWARF باید ارائه شده باشد.
•srcfile: نام فایل منبعِ نمونه‌ها. به اطلاعات dwarf نیاز دارد.
•weight: وزن اختصاصی رویداد، مانند تاخیر حافظه یا هزینه لغو transaction. این وزن سراسری است.
•local_weight: نسخهٔ وزن محلی از وزن بالا.
•cgroup_id: شناسهٔ به‌دست‌آمده از شماره‌های دستگاه و inode در فضای نام cgroup.
•cgroup: مسیر cgroup در cgroupfs.
•transaction: پرچم‌های abort تراکنش.
•overhead: درصد سربار CPU نمونه.
•latency: درصد سربار تاخیر (wall-clock) نمونه. برای جزئیات بیشتر به بخش ‘CPU and latency overheads’ مراجعه کنید.
•overhead_sys: درصد سربار CPU نمونه در حال اجرا در حالت سیستم
•overhead_us: درصد سربار CPU نمونه در حال اجرا در حالت کاربر
•overhead_guest_sys: درصد سربار CPU نمونه در حال اجرا در حالت سیستم روی ماشین مهمان
•overhead_guest_us: درصد سربار CPU نمونه در حال اجرا در حالت کاربر روی ماشین مهمان
•sample: تعداد نمونه
•period: تعداد خام شمارش رویداد نمونه
•time: جداسازی نمونه‌ها بر اساس برچسب زمانی با تفکیک‌پذیری تعیین‌شده توسط --time-quantum (پیش‌فرض 100ms). همراه با overhead و قبل از آن مشخص شود.
•code_page_size: اندازه صفحه کُد مربوط به آدرس کُد نمونه‌برداری‌شده (ip)
•ins_lat: تاخیر دستورالعمل بر حسب چرخه‌های هسته. این مقدار، تاخیر سراسری دستورالعمل است
•local_ins_lat: نسخه محلی تاخیر دستورالعمل
•p_stage_cyc: در powerpc، تعداد چرخه‌های سپری‌شده در یک مرحله پایپ‌لاین را نشان می‌دهد. و در حال حاضر فقط در powerpc پشتیبانی می‌شود.
•addr: آدرس مجازی (کامل) دستورالعمل نمونه‌برداری‌شده
•retire_lat: در X86، توقف پایپ‌لاین این دستورالعمل را در مقایسه با دستورالعمل قبلی بر حسب چرخه گزارش می‌دهد. و در حال حاضر فقط در X86 پشتیبانی می‌شود
•simd: پرچم‌های توصیف‌کننده یک عملیات SIMD. نوع معماری می‌تواند ASE (Advanced SIMD extension) متعلق به Arm’، یا SVE، یا SME باشد. این ویژگی یک برچسب اضافه برای گزاره (predicate) ارائه می‌دهد: "e" برای گزاره خالی، "p" برای گزاره جزئی، "d" برای گزاره غیرفعال، و "f" برای گزاره کامل.
•type: نوع داده دسترسی به حافظه نمونه.
•typeoff: آفست در نوع داده دسترسی به حافظه نمونه.
•symoff: آفست در نماد (symbol).
•weight1: مقدار میانگین وزن خاص رویداد (فیلد ۱ از weight_struct).
•weight2: مقدار میانگین وزن خاص رویداد (فیلد ۲ از weight_struct).
•weight3: مقدار میانگین وزن خاص رویداد (فیلد ۳ از weight_struct).
•comm_nodigit: مشابه comm، با این تفاوت که اعداد با "<N>" جایگزین می‌شوند
به‌طور پیش‌فرض، کلیدهای overhead، comm، dso و symbol استفاده می‌شوند.
(یعنی --sort overhead,comm,dso,symbol).
اگر گزینه --branch-stack استفاده شود، کلیدهای مرتب‌سازی زیر نیز
در دسترس خواهند بود:
•dso_from: نام کتابخانه یا ماژول مبدا پرش (انشعاب)
•dso_to: نام کتابخانه یا ماژولی که به آن پرش شده است
•symbol_from: نام تابعی که پرش از آن انجام شده است
•symbol_to: نام تابعی که به آن پرش شده است
•srcline_from: فایل مبدأ و خطی که پرش از آن انجام شده است
•srcline_to: فایل مبدأ و خطی که به آن پرش شده است
•mispredict: مقدار "N" برای پرش پیش‌بینی‌شده، "Y" برای پرش نادرست پیش‌بینی‌شده
•in_tx: پرش درون تراکنش TSX
•abort: لغو تراکنش TSX.
•cycles: چرخه‌ها در بلوک پایه (basic block)
و کلیدهای مرتب‌سازی پیش‌فرض به comm، dso_from، symbol_from، dso_to
و symbol_to تغییر می‌یابند؛ گزینه '--branch-stack' را ببینید.
هنگامی که کلید مرتب‌سازی symbol مشخص شود، ستون‌های "IPC" و "IPC Coverage"
به‌طور خودکار فعال می‌شوند. ستون "IPC" میانگین IPC به ازای هر تابع را گزارش می‌دهد
و ستون "IPC coverage" درصد دستورالعمل‌های دارای IPC نمونه‌برداری‌شده در این تابع را
گزارش می‌کند. منظور از IPC تعداد دستورالعمل بر چرخه (Instruction Per Cycle) است.
پایین بودن آن نشان‌دهنده احتمال وجود یک گلوگاه عملکردی در هنگام اجرای تابع است،
مانند گلوگاه دسترسی به حافظه. چنانچه تابعی دارای سربار بالا و IPC پایین باشد،
ارزش بررسی بیشتر جهت بهینه‌سازی کارایی را دارد.
در صورت استفاده از گزینه --mem-mode، کلیدهای مرتب‌سازی زیر نیز در دسترس
خواهند بود (ناسازگار با --branch-stack):
symbol_daddr، dso_daddr، locked، tlb، mem، snoop، dcacheline، blocked.
•symbol_daddr: نام نماد داده‌ای که در زمان نمونه‌برداری عملیات روی آن اجرا می‌شد
•dso_daddr: نام کتابخانه یا ماژول حاوی داده‌ای که در زمان نمونه‌برداری عملیات روی آن اجرا می‌شد
•locked: مشخص می‌کند آیا گذرگاه در زمان نمونه‌برداری قفل بوده است یا خیر
•tlb: نوع دسترسی tlb برای داده در زمان نمونه‌برداری
•mem: نوع دسترسی به حافظه برای داده در زمان نمونه‌برداری
•snoop: نوع snoop (در صورت وجود) برای داده در زمان نمونه‌برداری
•dcacheline: خط کَشی که آدرس داده در زمان نمونه‌برداری روی آن قرار دارد
•phys_daddr: آدرس فیزیکی داده‌ای که در زمان نمونه‌برداری عملیات روی آن انجام می‌شود
•data_page_size: اندازه صفحه داده‌ای که در زمان نمونه‌برداری عملیات روی آن انجام می‌شود
•blocked: دلیل مسدود شدن دسترسی بارگذاری برای داده در زمان نمونه‌برداری
و کلیدهای مرتب‌سازی پیش‌فرض به local_weight، mem، sym، dso،
symbol_daddr، dso_daddr، snoop، tlb، locked، blocked، local_ins_lat تغییر می‌یابند،
'--mem-mode' را ببینید.
اگر فایل داده دارای رویداد(های) tracepoint باشد، کلیدهای مرتب‌سازی
(پویای) زیر نیز در دسترس خواهند بود:
trace, trace_fields, [<event>.]<field>[/raw]
•trace: خروجی ردیابی چاپ‌شده به‌صورت خوانا (pretty-printed) در یک ستون منفرد
•trace_fields: فیلدهای موجود در tracepointها در ستون‌های جداگانه
•<field name>: نام اختیاری رویداد و فیلد برای یک فیلد مشخص
حالت آخر از نام‌های رویداد و فیلد تشکیل شده است. اگر نام رویداد
حذف شود، تمام رویدادها را برای پیدا کردن نام فیلد منطبق جستجو می‌کند.
فیلد منطبق فقط برای رویدادی که دارای آن فیلد است نمایش داده خواهد شد.
نام رویداد از تطابق زیررشته پشتیبانی می‌کند بنابراین نیازی نیست کاربر
هر بار نام کامل زیرسیستم و رویداد را مشخص کند. برای مثال، رویداد
'sched:sched_switch' تا زمانی که مبهم نباشد می‌تواند به 'switch'
کوتاه شود. همچنین رویداد می‌تواند با نمایه‌اش (شروع از ۱) با پیشوند '%'
مشخص شود. بنابراین '%1' رویداد اول، '%2' رویداد دوم و الی آخر است.
نام فیلد می‌تواند پسوند '/raw' داشته باشد که چاپ خوانا را غیرفعال
کرده و مقدار خام فیلد را مانند اعداد هگزادسیمال نمایش می‌دهد. گزینه
--raw-trace اثری مشابه برای تمام کلیدهای مرتب‌سازی پویا دارد.
اگر همه رویدادها در فایل داده از نوع tracepoint باشند، کلیدهای
مرتب‌سازی پیش‌فرض به 'trace' تغییر می‌یابند.

-F, --fields=

مشخص کردن فیلد خروجی - چند کلید را می‌توان در قالب CSV مشخص کرد. فیلدهای زیر در دسترس هستند: overhead، latency، overhead_sys، overhead_us، overhead_children، sample، period، weight1، weight2، weight3، ins_lat، p_stage_cyc و retire_lat. ۳ نام آخر نام‌های مستعار برای وزن‌های متناظر هستند. هنگامی که از فیلدهای وزن استفاده شود، مقدار میانگین وزن را نمایش خواهند داد.
همچنین می‌تواند شامل هر کلید(های) مرتب‌سازی باشد.
به‌طور پیش‌فرض، هر کلید مرتب‌سازی که در -F مشخص نشده باشد به‌طور خودکار
پیوست خواهد شد.
اگر کلیدها با پیشوند '+' شروع شوند، فیلد(های) مشخص‌شده را به ترتیب
پیش‌فرض فیلدها اضافه می‌کند. برای مثال: perf report -F +period,sample.

-p, --parent=<regex>

یک پالایه عبارت باقاعده (regex) برای شناسایی والد. والد فراخواننده این تابع است و از میان زنجیره فراخوانی (callchain) جستجو می‌شود، بنابراین به ثبت اطلاعات زنجیره فراخوانی نیاز دارد. این الگو در قالب عبارت باقاعده گسترده است و به‌طور پیش‌فرض روی "^sys_|^do_page_fault" تنظیم شده است، --sort parent را ببینید.

-x, --exclude-other

فقط نمایش ورودی‌هایی با تطابق والد (parent-match).

-w, --column-widths=<width[,width...]>

اجبار عرض هر ستون به فهرست ارائه‌شده، جهت خوانایی در پایانه‌های بزرگ. ۰ به معنای نبود محدودیت است (رفتار پیش‌فرض).

-t, --field-separator=

استفاده از یک نویسه جداکننده خاص و پر نکردن فاصله‌ها با فاصله سفید، و جایگزینی تمام رخدادهای این جداکننده در نام‌های نماد (و سایر خروجی‌ها) با یک نویسه . ، که در نتیجه تنها جداکننده نامعتبر محسوب می‌شود.

-D, --dump-raw-trace

تخلیه ردیابی خام در قالب ASCII. --disable-order
غیرفعال‌سازی مرتب‌سازی خام ردگیری (raw trace).

-g, --call-graph=<print_type,threshold[,print_limit],order,sort_key[,branch],value>

نمایش زنجیره‌های فراخوانی با استفاده از نوع (type)، حداقل آستانه درصدی، محدودیت چاپ (print limit)، ترتیب فراخوانی، کلید مرتب‌سازی (sort key)، و شاخه اختیاری (branch) و مقدار (value). توجه داشته باشید که ترتیب پارامترها ثابت نیست و می‌توان هر پارامتری را با ترتیبی دلخواه مشخص کرد. تنها استثنا print_limit است که باید پس از threshold مشخص شود.
print_type می‌تواند یکی از موارد زیر باشد:
- flat: تک‌ستونی، نمایش خطی زنجیره‌های فراخوانی.
- graph: استفاده از یک نمودار درختی، نمایش نرخ‌های سربار مطلق. (پیش‌فرض)
- fractal: مانند graph، اما نرخ‌های نسبی را نمایش می‌دهد. هر شاخه از
         درخت به عنوان یک شیء پروفایل‌شده جدید در نظر گرفته می‌شود.
- folded: زنجیره‌های فراخوانی در یک خط و جداشده با نقطه‌ویرگول نمایش داده می‌شوند
- none: غیرفعال‌سازی نمایش زنجیره فراخوانی.
threshold مقداری درصدی است که حداقل درصد لازم را برای گنجانده شدن در
گراف فراخوانی خروجی مشخص می‌کند.  پیش‌فرض 0.5 (%) است.
print_limit تنها زمانی اعمال می‌شود که از واسط stdio استفاده شود. این برای محدود کردن
تعداد مدخل‌های گراف فراخوانی در یک مدخل تکی hist است. توجه داشته باشید که باید
بعد از threshold مشخص شود (اما لزوماً نباید متوالی باشد).
پیش‌فرض 0 (نامحدود) است.
order می‌تواند یکی از این موارد باشد:
- callee: گراف فراخوانی بر پایه callee.
- caller: گراف فراخوانی معکوس بر پایه caller.
پیش‌فرض هنگام استفاده از --children مقدار 'caller' است، در غیر این صورت 'callee'.
sort_key می‌تواند این موارد باشد:
- function: مقایسه بر اساس توابع (پیش‌فرض)
- address: مقایسه بر اساس آدرس‌های کد به صورت انفرادی
- srcline: مقایسه بر اساس نام فایل مبدأ و شماره خط
branch می‌تواند این مورد باشد:
- branch: در صورت موجود بودن، اطلاعات آخرین branch در گراف فراخوانی گنجانده شود.
          معمولاً استفاده از --branch-history برای این کار راحت‌تر است.
value می‌تواند این موارد باشد:
- percent: نمایش درصد سربار (پیش‌فرض)
- period: نمایش دوره رویداد
- count: نمایش تعداد رویداد

--children

انباشتن زنجیره فراخوانی فرزندان در مدخل والد تا بتوانند در خروجی نمایش داده شوند. خروجی شامل یک ستون جدید "Children" خواهد بود و داده‌ها بر اساس آن مرتب می‌شوند. این کار نیازمند ضبط زنجیره‌های فراخوانی است. برای جزئیات بیشتر بخش ‘Overhead calculation’ را ببینید. به‌طور پیش‌فرض فعال است، برای غیرفعال‌سازی از --no-children استفاده کنید.

--max-stack

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

-G, --inverted

نام مستعار برای گراف فراخوانی معکوس بر پایه caller.

--ignore-callees=<regex>

نادیده گرفتن calleeهای تابع(هایی) که با عبارت باقاعده (regex) داده‌شده مطابقت دارند. این کار اثر گردآوری callerهای هر یک از این توابع را در یک نقطه از درخت گراف فراخوانی دارد.

--pretty=<key>

سبک چاپ خوانا (pretty printing). مقادیر key: normal، raw

--stdio

استفاده از واسط stdio.

--stdio-color

always، never یا auto، که امکان پیکربندی خروجی رنگی را علاوه بر "color.ui" در .perfconfig، از طریق خط فرمان فراهم می‌کند. از --stdio-color always برای تولید خروجی رنگی حتی هنگام هدایت به لوله (pipe) یا فایل استفاده کنید. استفاده از فقط --stdio-color معادل استفاده از always است.

--tui

استفاده از واسط کاربری متنی (TUI) که با قابلیت annotate یکپارچه است و امکان بررسی دقیق‌تر DSOها یا رشته‌ها را در کنار سایر قابلیت‌ها فراهم می‌کند. استفاده از --tui نیازمند یک tty است؛ اگر موجود نباشد، مانند زمان هدایت با pipe به دستورات دیگر، از واسط stdio استفاده می‌شود.

--gtk

استفاده از واسط GTK2.

-k, --vmlinux=<file>

مسیر فایل vmlinux

--ignore-vmlinux

نادیده گرفتن فایل‌های vmlinux.

--kallsyms=<file>

مسیر فایل kallsyms

-m, --modules

بارگذاری نمادهای ماژول. هشدار: این گزینه فقط باید همراه با -k و یک هسته زنده (LIVE kernel) استفاده شود.

-f, --force

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

--symfs=<directory[,layout]>

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

-C, --cpu

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

--source

چیدن متناوب کد منبع با کد اسمبلی. به‌طور پیش‌فرض فعال است، با --no-source غیرفعال می‌شود.

--asm-raw

نمایش کدبندی خام دستورالعمل‌های اسمبلی.

--show-total-period

نمایش ستونی شامل مجموع دوره‌ها (periods).

-I, --show-info

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

-b, --branch-stack

استفاده از نشانی‌های شاخه‌های طی‌شدهٔ نمونه‌برداری‌شده به‌جای نشانی دستورالعمل برای ساخت بافت‌نگارها (histograms). برای تولید خروجی معنادار، فایل perf.data باید با استفاده از perf record -b یا perf record --branch-filter xxx که در آن xxx یک گزینه پالایه شاخه است، به‌دست آمده باشد. دستور perf report قادر است به‌طور خودکار تشخیص دهد که آیا یک فایل perf.data شامل پشته‌های شاخه هست یا خیر و به‌طور خودکار به حالت نمای شاخه تغییر وضعیت می‌دهد، مگر اینکه از --no-branch-stack استفاده شود.

--branch-history

افزودن نشانی‌های شاخه‌های طی‌شدهٔ نمونه‌برداری‌شده به پشته فراخوانی (callstack). این امکان را می‌دهد تا مسیری که برنامه تا هر نمونه طی کرده است بررسی شود. برای گردآوری داده‌ها باید از -b (یا -j) و -g استفاده شده باشد.
همچنین با برخی پرچم‌های شاخه نمایش داده می‌شود که می‌توانند شامل این موارد باشند:
- Predicted: نمایش میانگین درصد شاخه‌های پیش‌بینی‌شده.
             (تعداد پیش‌بینی‌شده / تعداد کل)
- Abort: نمایش تعداد شاخه‌های لغوشده tsx.
- Cycles: چرخه‌ها در بلوک پایه (basic block).
•iterations: نمایش میانگین تعداد تکرارها در فهرست callchain.

--addr2line=<path>

مسیر به فایل اجرایی addr2line.

--objdump=<path>

مسیر به فایل اجرایی objdump.

--prefix=PREFIX, --prefix-strip=N

حذف N مدخل نخست از نام مسیر فایل‌های منبع در فایل‌های اجرایی و افزودن PREFIX. این قابلیت امکان نمایش کد منبع کامپایل‌شده روی سیستم‌هایی با ساختار فایل‌سیستم متفاوت را فراهم می‌کند.

--group

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

--group-sort-idx

مرتب‌سازی خروجی بر اساس رویداد واقع در نمایه n در گروه. اگر n نامعتبر باشد، مرتب‌سازی بر اساس رویداد نخست انجام می‌شود. این گزینه می‌تواند از چندین گروه با تعداد رویدادهای متفاوت پشتیبانی کند. هشدار: این گزینه باید روی رویدادهای گروه‌بندی‌شده استفاده شود.

--demangle

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

--demangle-kernel

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

--mem-mode

استفاده از نشانی‌های داده نمونه‌ها افزون بر نشانی‌های دستورالعمل برای ساخت بافت‌نگارها. برای تولید خروجی معنادار، فایل perf.data باید با استفاده از perf record -d -W و با بهره‌گیری از یک رویداد ویژه مانند -e cpu/mem-loads/p یا -e cpu/mem-stores/p تهیه شده باشد. برای دسترسی ساده‌تر perf mem را ببینید.

--percent-limit

مدخل‌هایی که سربار (overhead) آن‌ها کمتر از آن درصد باشد نمایش داده نمی‌شوند. (پیش‌فرض: 0). توجه داشته باشید که این گزینه همچنین حد درصد (آستانه) callchainها را تعیین می‌کند. با این حال، مقدار پیش‌فرض آستانه callchain با مقدار پیش‌فرض مدخل‌های بافت‌نگار متفاوت است. لطفاً برای جزئیات به گزینه --call-graph مراجعه کنید.

--percentage

تعیین چگونگی نمایش درصد سربار پردازنده و تاخیر برای مدخل‌های پالایش‌شده. پالایه‌ها می‌توانند با گزینه‌های --comms، --dsos، --symbols و/یا --parallelism و همچنین عملیات بزرگ‌نمایی (Zoom) روی TUI (مانند thread، dso، غیره) اعمال شوند.
مقدار "relative" بدین معناست که تنها نسبت به مدخل‌های پالایش‌شده سنجیده می‌شود،
به‌طوری که مجموع مدخل‌های نمایش‌داده‌شده همواره 100% خواهد بود. مقدار
"absolute" بدین معناست که مقدار اصلی قبل و بعد از اعمال پالایه حفظ می‌شود.

--header

نمایش اطلاعات سرآیند در فایل perf.data. این اطلاعات شامل مواردی گوناگون نظیر نام میزبان، نسخه سیستم‌عامل و perf، اطلاعات cpu/mem، خط فرمان perf، فهرست رویدادها و غیره است. در حال حاضر تنها خروجی --stdio از این قابلیت پشتیبانی می‌کند.

--header-only

تنها نمایش سرآیند perf.data (گزینه --stdio را تحمیل می‌کند).

--time

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

--switch-off EVENT_NAME

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

--show-on-off-events

رویدادهای --switch-on/off را نیز نشان می‌دهد. این گزینه در حال حاضر اثری بر perf report ندارد اما احتمالاً حالت پیش‌فرض را به این تغییر خواهیم داد که رویدادهای switch-on/off در حالت --group نشان داده نشوند و چنانچه به‌جز رویدادهای off/on تنها یک رویداد دیگر وجود داشت، مستقیماً به مرورگر هیستوگرام برود، دقیقاً مانند رفتاری که perf report بدون تعیین صریح هیچ رویدادی دارد.

--itrace

گزینه‌هایی برای رمزگشایی داده‌های ردگیری دستورالعمل‌ها (instruction tracing). این گزینه‌ها عبارتند از:
i       تولید رویدادهای دستورالعمل‌ها (instructions)
y       تولید رویدادهای چرخه‌ها (cycles)
b       تولید رویدادهای شاخه‌ها (branches)
c       تولید رویدادهای شاخه‌ها (فقط فراخوانی‌ها یا calls)
r       تولید رویدادهای شاخه‌ها (فقط بازگشت‌ها یا returns)
x       تولید رویدادهای تراکنش‌ها (transactions)
w       تولید رویدادهای ptwrite
p       تولید رویدادهای توان (شامل رویدادهای PSB برای Intel PT)
o       تولید سایر رویدادهای ثبت‌شده به دلیل استفاده
        از aux-output (به perf record مراجعه کنید)
I       تولید رویدادهای وقفه یا موارد مشابه (ناهمگام)
        (مانند Intel PT Event Trace)
e       تولید رویدادهای خطا (error)
d       ایجاد یک گزارش اشکال‌زدایی (debug log)
f       تولید رویدادهای حافظه پنهان سطح اول (L1 cache)
m       تولید رویدادهای حافظه پنهان سطح آخر (LLC)
M       تولید رویدادهای حافظه (memory)
t       تولید رویدادهای TLB
a       تولید رویدادهای دسترسی از راه دور (remote access)
g       تولید یک زنجیره فراخوانی (همراه با i یا x استفاده شود)
G       تولید زنجیره فراخوانی روی رکوردهای رویداد موجود
l       تولید ورودی‌های آخرین شاخه (همراه با i یا x استفاده شود)
L       تولید ورودی‌های آخرین شاخه روی رکوردهای رویداد موجود
s       صرف‌نظر کردن از تعداد اولیه‌ای از رویدادها
q       رمزگشایی سریع‌تر (با جزئیات کمتر)
A       تخمین تقریبی IPC
Z       ترجیح به نادیده گرفتن برچسب‌های زمانی (رمزگشایی اصطلاحاً «timeless»)
T       استفاده از برچسب زمانی ردگیری به‌عنوان زمان هسته (kernel time)
حالت پیش‌فرض شامل تمام رویدادها است؛ یعنی مشابه --itrace=iybxwpe،
به‌جز در perf script که پیش‌فرض آن --itrace=ce می‌باشد.
علاوه بر این، دوره یا Period (پیش‌فرض ۱۰۰۰۰۰، به‌جز در perf script که ۱ است)
برای رویدادهای دستورالعمل‌ها را می‌توان بر حسب این واحدها تعیین کرد:
i       دستورالعمل‌ها (instructions)
t       تیک‌ها (ticks)
ms      میلی‌ثانیه
us      میکروثانیه
ns      نانوثانیه (پیش‌فرض)
همچنین اندازه زنجیره فراخوانی (پیش‌فرض ۱۶، حداکثر ۱۰۲۴) برای رویدادهای
دستورالعمل‌ها یا تراکنش‌ها قابل تعیین است.
همچنین تعداد ورودی‌های آخرین شاخه (پیش‌فرض ۶۴، حداکثر ۱۰۲۴) برای رویدادهای
دستورالعمل‌ها یا تراکنش‌ها قابل تعیین است.
مشابه گزینه‌های g و l، اندازه را می‌توان برای گزینه‌های G و L نیز تعیین کرد.
در x86 توجه داشته باشید که اگر داده‌ها با PEBS بزرگ ثبت شده باشند، عملکرد G و L
بسیار ضعیف خواهد بود. برای جزئیات به صفحه راهنمای linkperf:perf-intel-pt[1] مراجعه کنید.
همچنین امکان رد کردن رویدادهای اولیه‌ی تولیدشده (دستورالعمل‌ها، شاخه‌ها،
تراکنش‌ها، ptwrite، توان) وجود دارد. این قابلیت برای نادیده گرفتن کدهای مقداردهی اولیه سودمند است.
--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.

--show-ref-call-graph

هنگامی که چندین رویداد نمونه‌برداری می‌شوند، ممکن است نیازی به جمع‌آوری گراف‌های فراخوانی (callgraphs) برای همه آن‌ها نباشد. نقاط نمونه‌برداری معمولاً به یکدیگر نزدیک هستند و جمع‌آوری گراف فراخوانی روی یک رویداد مرجع کافی است. بنابراین کاربر می‌تواند از تغییردهنده رویداد "call-graph=no" برای غیرفعال کردن گراف فراخوانی در سایر رویدادها جهت کاهش سربار استفاده کند. با این حال، perf report نمی‌تواند گراف فراخوانی را برای رویدادی که گراف فراخوانی آن غیرفعال شده است نمایش دهد. این گزینه perf report را گسترش می‌دهد تا گراف‌های فراخوانی مرجع را که توسط رویداد مرجع جمع‌آوری شده‌اند، در رویدادهای فاقد گراف فراخوانی نمایش دهد.

--stitch-lbr

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

--socket-filter

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

--samples=N

ذخیره N نمونه مجزا برای هر مدخل هیستوگرام جهت نمایش زمینه (context) در مرورگر tui دستور perf report.

--raw-trace

هنگام نمایش خروجی traceevent، از print fmt یا پلاگین‌ها استفاده نشود.

-H, --hierarchy

فعال‌سازی خروجی سلسله‌مراتبی. در حالت سلسله‌مراتبی، هر کلید مرتب‌سازی نمونه‌ها را بر اساس معیار گروه‌بندی کرده و سپس با استفاده از کلید مرتب‌سازی سطح پایین‌تر، آن را زیرتقسیم می‌کند.
برای مثال:
در خروجی عادی:
perf report -s dso,sym
# Overhead  Shared Object      Symbol
    50.00%  [kernel.kallsyms]  [k] kfunc1
    20.00%  perf               [.] foo
    15.00%  [kernel.kallsyms]  [k] kfunc2
    10.00%  perf               [.] bar
     5.00%  libc.so            [.] libcall
در خروجی سلسله‌مراتبی:
perf report -s dso,sym --hierarchy
#   Overhead  Shared Object / Symbol
    65.00%    [kernel.kallsyms]
      50.00%    [k] kfunc1
      15.00%    [k] kfunc2
    30.00%    perf
      20.00%    [.] foo
      10.00%    [.] bar
     5.00%    libc.so
       5.00%    [.] libcall

--inline

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

--mmaps

نمایش خروجی --tasks به همراه اطلاعات mmap در قالبی مشابه /proc/<PID>/maps.
لطفاً توجه داشته باشید که تمام mmapها ذخیره نمی‌شوند؛ گزینه‌های تأثیرگذار بر موارد
شامل‌شده، برای نمونه عبارتند از 'perf record --data'.

--ns

نمایش برچسب‌های زمانی در مقیاس نانوثانیه.

--stats

نمایش آمار کلی رویدادها بدون هرگونه پردازش بیشتر. (مانند آنچه در انتهای دستور perf report -D نمایش داده می‌شود)

--tasks

نمایش تسک‌های پایش‌شده ذخیره‌شده در داده‌های perf. نمایش pid/tid/ppid به همراه رشته دستور به صورت تراز شده جهت تفکیک تسک‌های والد و فرزند.

--percent-type

تنظیم نوع درصد یادداشت‌نویسی از میان گزینه‌های زیر: global-period، local-period، global-hits، local-hits
کلیدواژه‌های local/global تعیین می‌کنند که آیا درصد در دامنه تابع
(local) محاسبه شود یا در کل داده‌ها (global).
کلیدواژه‌های period/hits مبنای محاسبه درصد را مشخص می‌کنند -
دوره نمونه‌ها (period) یا تعداد نمونه‌ها (hits).

--time-quantum

پیکربندی کوانتوم زمانی برای کلید مرتب‌سازی time. مقدار پیش‌فرض 100ms است. واحدهای s، us، ms، ns را می‌پذیرد.

--total-cycles

هنگامی که --total-cycles مشخص شده باشد، مرتب‌سازی تمام بلوک‌ها بر اساس Sampled Cycles% را پشتیبانی می‌کند. این ویژگی برای تمرکز بر داغ‌ترین بلوک‌ها در سطح کلی مفید است. در خروجی، ستون‌های جدیدی وجود دارد:
'Sampled Cycles%' - تجمیع چرخه‌های نمونه‌برداری‌شده بلوک / کل چرخه‌های نمونه‌برداری‌شده
'Sampled Cycles'  - تجمیع چرخه‌های نمونه‌برداری‌شده بلوک
'Avg Cycles%'     - میانگین چرخه‌های نمونه‌برداری‌شده بلوک / مجموع میانگین کل
                    چرخه‌های نمونه‌برداری‌شده بلوک
'Avg Cycles'      - میانگین چرخه‌های نمونه‌برداری‌شده بلوک
'Branch Counter'  - هیستوگرام شمارنده انشعاب بلوک (با -v تعداد نمایش داده می‌شود)

--skip-empty

عدم چاپ نتایج 0 در خروجی --stat.

دو مفهوم از زمان وجود دارد: زمان ساعت دیواری (wall-clock time) و زمان پردازنده (CPU time). برای یک برنامه تک‌نخی، یا برنامه‌ای که روی یک ماشین تک‌هسته‌ای اجرا می‌شود، این مفاهیم یکسان هستند. با این حال، برای یک برنامه چندنخی/چندفرآیندی که روی یک ماشین چندهسته‌ای اجرا می‌شود، این مفاهیم تفاوت چشمگیری دارند. در ازای هر ثانیه از زمان ساعت دیواری، به تعداد هسته‌ها ثانیه زمان پردازنده داریم. ابزار perf می‌تواند سربار را برای هر دو زمان اندازه بگیرد (که به ترتیب در ستون‌های overhead و latency برای زمان پردازنده و زمان ساعت دیواری نشان داده می‌شوند).

بهینه‌سازی سربار پردازنده برای بهبود توان عملیاتی (throughput) مفید است، در حالی که بهینه‌سازی سربار تاخیر برای بهبود تاخیر (latency) سودمند است. درک این که کدام‌یک در یک موقعیت عملی پیش‌رو مفید است اهمیت بالایی دارد. برای نمونه، مورد نخست ممکن است برای بهبود حداکثر توان عملیاتی یک سرور ساخت CI که با بهره‌گیری ۱۰۰٪ از پردازنده کار می‌کند مفید باشد، در حالی که مورد دوم ممکن است برای بهبود تاخیر درک‌شده توسط کاربر در ساخت یک برنامه تعاملی کارآمد باشد. این سربارها ممکن است در برخی موارد تفاوت فاحشی داشته باشند. برای مثال، برنامه‌ای را در نظر بگیرید که تابع foo را به مدت ۹ ثانیه با ۱ نخ اجرا می‌کند، و سپس تابع bar را به مدت ۱ ثانیه با ۱۲۸ نخ به اجرا درمی‌آورد (۱۲۸ ثانیه زمان پردازنده مصرف می‌کند). سربار پردازنده عبارت است از: foo - 6.6%، bar - 93.4%. در حالی که سربار تاخیر عبارت است از: foo - 90%، bar - 10%. اگر تلاش کنیم با در نظر گرفتن سربار پردازنده (که در این مورد گمراه‌کننده است) زمان اجرای برنامه را بهینه‌سازی کنیم، روی تابع bar تمرکز خواهیم کرد، اما این کار در بهترین حالت تنها می‌تواند ۱۰٪ زمان اجرا را بهبود بخشد.

به‌طور پیش‌فرض، perf تنها سربار پردازنده را نشان می‌دهد. برای نمایش سربار تاخیر، از perf record --latency و perf report استفاده کنید:

.ft C
Overhead  Latency  Command
  93.88%   25.79%  cc1
   1.90%   39.87%  gzip
   0.99%   10.16%  dpkg-deb
   0.57%    1.00%  as
   0.40%    0.46%  sh
.ft

برای مرتب‌سازی بر اساس سربار تاخیر، از perf report --latency استفاده کنید:

.ft C
Latency  Overhead  Command
 39.87%     1.90%  gzip
 25.79%    93.88%  cc1
 10.16%     0.99%  dpkg-deb
  4.17%     0.29%  git
  2.81%     0.11%  objtool
.ft

برای دستیابی به درک دقیق‌تری از تفاوت میان سربارها، می‌توانید هیستوگرام موازی‌سازی را با پرچم‌های --sort=latency,parallelism,comm,symbol --hierarchy بررسی کنید. این کار کسری از زمان (ساعت دیواری) را که در آن بار کاری از تعداد متفاوتی هسته استفاده می‌کند، نشان می‌دهد (ستون Parallelism). برای نمونه، در مورد زیر بار کاری در بیشتر زمان تنها از ۱ هسته استفاده می‌کند، اما دارای فازهایی با موازی‌سازی بسیار بالا نیز هست که تفاوت چشمگیر میان سربارهای پردازنده و ساعت دیواری را توجیه می‌کند:

.ft C
  Latency  Overhead     Parallelism / Command / Symbol
+  56.98%     2.29%     1
+  16.94%     1.36%     2
+   4.00%    20.13%     125
+   3.66%    18.25%     124
+   3.48%    17.66%     126
+   3.26%     0.39%     3
+   2.61%    12.93%     123
.ft

با باز کردن خطوط مربوطه، می‌توانید ببینید چه دستورها/توابعی در سطح موازی‌سازی مشخص اجرا می‌شوند:

.ft C
  Latency  Overhead     Parallelism / Command / Symbol
-  56.98%     2.29%     1
      32.80%     1.32%     gzip
       4.46%     0.18%     cc1
       2.81%     0.11%     objtool
       2.43%     0.10%     dpkg-source
       2.22%     0.09%     ld
       2.10%     0.08%     dpkg-genchanges
.ft

برای مشاهده نمایه معمولی در سطح توابع برای سطوح موازی‌سازی مشخص (تعداد نخ‌هایی که به‌طور فعال روی پردازنده‌ها در حال اجرا هستند)، می‌توانید از فیلتر --parallelism استفاده کنید. برای مثال، جهت مشاهده نمایه فقط برای فازهای با موازی‌سازی پایین یک بار کاری، از پرچم‌های --latency --parallelism=1-2 استفاده کنید.

هنگامی که perf زنجیره‌های فراخوانی (callchains) را گردآوری می‌کند، سربار پردازنده می‌تواند در دو ستون Children و Self نمایش داده شود (و ستون‌های متناظر Wall برای سربار زمان ساعت دیواری). سربار self صرفاً با جمع زدن تمامی مقادیر دوره‌ها (period) مربوط به یک مدخل - معمولاً یک تابع (نماد) - محاسبه می‌شود. این مقداری است که perf به‌طور سنتی نمایش می‌دهد و مجموع تمام مقادیر سربار self باید ۱۰۰٪ باشد.

سربار children با افزودن تمامی مقادیر دوره‌های توابع فرزند محاسبه می‌شود تا بتواند کل سربار توابع سطح بالاتر را نشان دهد، حتی اگر آن‌ها مستقیماً کار زیادی انجام ندهند. در اینجا منظور از Children توابعی است که از تابعی دیگر (والد) فراخوانی شده‌اند.

شاید گیج‌کننده به نظر برسد که مجموع تمام مقادیر سربار children از ۱۰۰٪ بیشتر می‌شود، زیرا هر یک از آن‌ها خود تجمعی از سربار self توابع فرزندش است. اما با فعال بودن این مورد، کاربران می‌توانند تشخیص دهند کدام تابع بیشترین سربار را دارد حتی اگر نمونه‌ها میان توابع فرزند پراکنده باشند.

مثال زیر را در نظر بگیرید؛ سه تابع مانند زیر وجود دارند.

.ft C
void foo(void) {
    /* do something */
}
void bar(void) {
    /* do something */
    foo();
}
int main(void) {
    bar()
    return 0;
}
.ft

در این حالت foo فرزندی برای bar است، و bar فرزند بی‌واسطه main است، بنابراین foo نیز فرزند main به شمار می‌رود. به بیان دیگر، main والد foo و bar است، و bar والد foo است.

فرض کنید تمام نمونه‌ها فقط در foo و bar ثبت شده‌اند. هنگامی که نمونه‌برداری با زنجیره‌های فراخوانی انجام شود، خروجی در حالت معمول (فقط سربار self) دستور perf report چیزی مانند زیر را نشان خواهد داد:

.ft C
Overhead  Symbol
........  .....................
  60.00%  foo
          |
          --- foo
              bar
              main
              __libc_start_main
  40.00%  bar
          |
          --- bar
              main
              __libc_start_main
.ft

هنگامی که گزینه --children فعال باشد، مقادیر سربار self توابع فرزند (یعنی foo و bar) به والدین افزوده می‌شوند تا سربار children محاسبه شود. در این حالت گزارش ممکن است به این صورت نمایش داده شود:

.ft C
Children      Self  Symbol
........  ........  ....................
 100.00%     0.00%  __libc_start_main
          |
          --- __libc_start_main
 100.00%     0.00%  main
          |
          --- main
              __libc_start_main
 100.00%    40.00%  bar
          |
          --- bar
              main
              __libc_start_main
  60.00%    60.00%  foo
          |
          --- foo
              bar
              main
              __libc_start_main
.ft

در خروجی بالا، سربار self تابع foo (۶۰٪) به سربار children مربوط به bar، main و __libc_start_main افزوده شد. به همین ترتیب، سربار self تابع bar (۴۰٪) به سربار children مربوط به main و \_\_libc_start_main اضافه شد.

بنابراین \_\_libc_start_main و main در ابتدا نمایش داده می‌شوند، زیرا سربار children یکسانی (۱۰۰٪) دارند (اگرچه سربار self آن‌ها صفر است) و آن‌ها والدین foo و bar هستند.

از نسخه v3.16 به بعد، سربار children به‌طور پیش‌فرض نمایش داده می‌شود و خروجی بر اساس مقادیر آن مرتب می‌گردد. سربار children را می‌توان با مشخص کردن گزینه --no-children در خط فرمان یا افزودن report.children = false یا top.children = false در فایل پیکربندی perf غیرفعال کرد..SH "همچنین ببینید (SEE ALSO)"

perf-stat(1), perf-annotate(1), perf-record(1), perf-intel-pt(1)

09/04/2026 perf