'\" t .\" Title: perf-report .\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author] .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: 09/04/2026 .\" Manual: perf Manual .\" Source: perf .\" Language: English .\" .TH "PERF\-REPORT" "1" "09/04/2026" "perf" "perf Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "نام (NAME)" perf-report \- خواندن perf\&.data (ایجاد شده توسط perf record) و نمایش پروفایل .SH "خلاصه دستور (SYNOPSIS)" .sp .nf \fIperf report\fR [\-i | \-\-input=file] .fi .SH "توضیحات (DESCRIPTION)" .sp این دستور اطلاعات پروفایل شمارنده‌های کارایی ثبت‌شده توسط perf record را نمایش می‌دهد\&. .SH "گزینه‌ها (OPTIONS)" .PP \-i, \-\-input= .RS 4 نام فایل ورودی\&. (پیش‌فرض: perf\&.data مگر اینکه stdin یک fifo باشد) .RE .PP \-v, \-\-verbose .RS 4 پرگویی بیشتر\&. (نمایش نشانی نماد و غیره) .RE .PP \-q, \-\-quiet .RS 4 هیچ هشدار یا پیامی نمایش داده نشود\&. (خنثی‌سازی \-v) .RE .PP \-n, \-\-show\-nr\-samples .RS 4 نمایش تعداد نمونه‌ها برای هر نماد .RE .PP \-\-show\-cpu\-utilization .RS 4 نمایش درصد نمونه‌ها برای حالت‌های مختلف cpu\&. .RE .PP \-T, \-\-threads .RS 4 نمایش شمارنده‌های رویداد بر پایه هر رشته (per\-thread)\&. فایل داده‌های ورودی باید با گزینهٔ \-s ضبط شده باشد\&. .RE .PP \-c, \-\-comms= .RS 4 تنها در نظر گرفتن نمادها در این commها\&. قالب CSV که ورودی‌های \m[blue]\fBfile://filename\fR\m[] را می‌فهمد\&. این گزینه بر درصد ستون‌های سربار (overhead) و تاخیر (latency) اثر می‌گذارد\&. برای اطلاعات بیشتر \-\-percentage را ببینید\&. .RE .PP \-\-pid= .RS 4 تنها نمایش رویدادها برای شناسهٔ فرایند داده‌شده (فهرست جداشده با کاما)\&. .RE .PP \-\-tid= .RS 4 تنها نمایش رویدادها برای شناسهٔ رشته داده‌شده (فهرست جداشده با کاما)\&. .RE .PP \-d, \-\-dsos= .RS 4 تنها در نظر گرفتن نمادها در این dsoها\&. قالب CSV که ورودی‌های \m[blue]\fBfile://filename\fR\m[] را می‌فهمد\&. این گزینه بر درصد ستون‌های سربار و تاخیر اثر می‌گذارد\&. برای اطلاعات بیشتر \-\-percentage را ببینید\&. .RE .PP \-S, \-\-symbols= .RS 4 تنها در نظر گرفتن این نمادها\&. قالب CSV که ورودی‌های \m[blue]\fBfile://filename\fR\m[] را می‌فهمد\&. این گزینه بر درصد ستون‌های سربار و تاخیر اثر می‌گذارد\&. برای اطلاعات بیشتر \-\-percentage را ببینید\&. .RE .PP \-\-symbol\-filter= .RS 4 تنها نمایش نمادهایی که (به‌طور جزئی) با این پالایه مطابقت دارند\&. .RE .PP \-U, \-\-hide\-unresolved .RS 4 تنها نمایش مدخل‌هایی که به یک نماد تفکیک شده‌اند\&. .RE .PP \-\-parallelism .RS 4 تنها در نظر گرفتن این سطوح موازی‌سازی\&. سطح موازی‌سازی تعداد رشته‌هایی است که در زمان نمونه‌برداری به‌طور فعال روی CPUها اجرا می‌شوند\&. این پرچم یک عدد تکی، فهرست جداشده با کاما، و بازه‌ها را می‌پذیرد (برای مثال: "1"، "7,8"، "1,64\-128")\&. این گزینه برای درک عملکرد یک برنامه در فازهای ترتیبی/موازی‌سازی اندک در مقایسه با فازهای موازی‌سازی بالا سودمند است\&. این گزینه بر درصد ستون‌های سربار و تاخیر اثر می‌گذارد\&. برای اطلاعات بیشتر \-\-percentage را ببینید\&. همچنین برای جزئیات بیشتر بخش \(oqCPU and latency overheads\(cq را ببینید\&. .RE .PP \-\-latency .RS 4 نمایش پروفایل مبتنی بر تاخیر به‌جای پروفایل پیش‌فرض مبتنی بر مصرف CPU (نیازمند پرچم \-\-latency در perf record)\&. .RE .PP \-s, \-\-sort= .RS 4 مرتب‌سازی مدخل‌های هیستوگرام بر پایه کلید(های) داده‌شده \- می‌توان چندین کلید را در قالب CSV تعیین کرد\&. کلیدهای مرتب‌سازی زیر موجود هستند: pid، comm، dso، symbol، parent، cpu، socket، srcline، weight، local_weight، cgroup_id، addr، comm_nodigit\&. .sp .if n \{\ .RS 4 .\} .nf هر کلید معنای زیر را دارد: .fi .if n \{\ .RE .\} .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} comm: دستور (نام) وظیفه که می‌تواند از طریق /proc//comm خوانده شود .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} pid: دستور و tid وظیفه .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} tgid: دستور و tgid وظیفه .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} dso: نام کتابخانه یا ماژولِ اجراشده در زمان نمونه‌برداری .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} dso_size: اندازهٔ کتابخانه یا ماژولِ اجراشده در زمان نمونه‌برداری .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} symbol: نام تابعِ اجراشده در زمان نمونه‌برداری .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1.IP \(bu 2.3 .\} symbol_size: اندازهٔ تابع اجراشده در زمان نمونه‌برداری .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} parent: نام تابع منطبق‌شده با فیلتر regex والد\&. ورودی‌های غیرمنطبق به‌صورت "[other]" نمایش داده می‌شوند\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} cpu: شمارهٔ cpu که تسک در زمان نمونه‌برداری روی آن اجرا شده است .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} socket: شماره سوکت پردازنده که تسک در زمان نمونه‌برداری روی آن اجرا شده است .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} parallelism: تعداد threadهای در حال اجرا در زمان نمونه‌برداری .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} srcline: نام فایل و شماره خط اجراشده در زمان نمونه‌برداری\&. اطلاعات اشکال‌زدایی DWARF باید ارائه شده باشد\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} srcfile: نام فایل منبعِ نمونه‌ها\&. به اطلاعات dwarf نیاز دارد\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} weight: وزن اختصاصی رویداد، مانند تاخیر حافظه یا هزینه لغو transaction\&. این وزن سراسری است\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} local_weight: نسخهٔ وزن محلی از وزن بالا\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} cgroup_id: شناسهٔ به‌دست‌آمده از شماره‌های دستگاه و inode در فضای نام cgroup\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} cgroup: مسیر cgroup در cgroupfs\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} transaction: پرچم‌های abort تراکنش\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} overhead: درصد سربار CPU نمونه\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} latency: درصد سربار تاخیر (wall\-clock) نمونه\&. برای جزئیات بیشتر به بخش \(oqCPU and latency overheads\(cq مراجعه کنید\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} overhead_sys: درصد سربار CPU نمونه در حال اجرا در حالت سیستم .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} overhead_us: درصد سربار CPU نمونه در حال اجرا در حالت کاربر .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} overhead_guest_sys: درصد سربار CPU نمونه در حال اجرا در حالت سیستم روی ماشین مهمان .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} overhead_guest_us: درصد سربار CPU نمونه در حال اجرا در حالت کاربر روی ماشین مهمان .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} sample: تعداد نمونه .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1.IP \(bu 2.3 .\} period: تعداد خام شمارش رویداد نمونه .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} time: جداسازی نمونه‌ها بر اساس برچسب زمانی با تفکیک‌پذیری تعیین‌شده توسط \-\-time\-quantum (پیش‌فرض 100ms)\&. همراه با overhead و قبل از آن مشخص شود\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} code_page_size: اندازه صفحه کُد مربوط به آدرس کُد نمونه‌برداری‌شده (ip) .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} ins_lat: تاخیر دستورالعمل بر حسب چرخه‌های هسته\&. این مقدار، تاخیر سراسری دستورالعمل است .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} local_ins_lat: نسخه محلی تاخیر دستورالعمل .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} p_stage_cyc: در powerpc، تعداد چرخه‌های سپری‌شده در یک مرحله پایپ‌لاین را نشان می‌دهد\&. و در حال حاضر فقط در powerpc پشتیبانی می‌شود\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} addr: آدرس مجازی (کامل) دستورالعمل نمونه‌برداری‌شده .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} retire_lat: در X86، توقف پایپ‌لاین این دستورالعمل را در مقایسه با دستورالعمل قبلی بر حسب چرخه گزارش می‌دهد\&. و در حال حاضر فقط در X86 پشتیبانی می‌شود .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} simd: پرچم‌های توصیف‌کننده یک عملیات SIMD\&. نوع معماری می‌تواند ASE (Advanced SIMD extension) متعلق به Arm\(cq، یا SVE، یا SME باشد\&. این ویژگی یک برچسب اضافه برای گزاره (predicate) ارائه می‌دهد: "e" برای گزاره خالی، "p" برای گزاره جزئی، "d" برای گزاره غیرفعال، و "f" برای گزاره کامل\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} type: نوع داده دسترسی به حافظه نمونه\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} typeoff: آفست در نوع داده دسترسی به حافظه نمونه\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} symoff: آفست در نماد (symbol)\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} weight1: مقدار میانگین وزن خاص رویداد (فیلد ۱ از weight_struct)\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} weight2: مقدار میانگین وزن خاص رویداد (فیلد ۲ از weight_struct)\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} weight3: مقدار میانگین وزن خاص رویداد (فیلد ۳ از weight_struct)\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} comm_nodigit: مشابه comm، با این تفاوت که اعداد با "" جایگزین می‌شوند .sp .if n \{\ .RS 4 .\} .nf به‌طور پیش‌فرض، کلیدهای overhead، comm، dso و symbol استفاده می‌شوند\&. (یعنی \-\-sort overhead,comm,dso,symbol)\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf اگر گزینه \-\-branch\-stack استفاده شود، کلیدهای مرتب‌سازی زیر نیز در دسترس خواهند بود: .fi .if n \{\ .RE .\} .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} dso_from: نام کتابخانه یا ماژول مبدا پرش (انشعاب) .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1.IP \(bu 2.3 .\} dso_to: نام کتابخانه یا ماژولی که به آن پرش شده است .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} symbol_from: نام تابعی که پرش از آن انجام شده است .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} symbol_to: نام تابعی که به آن پرش شده است .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} srcline_from: فایل مبدأ و خطی که پرش از آن انجام شده است .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} srcline_to: فایل مبدأ و خطی که به آن پرش شده است .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} mispredict: مقدار "N" برای پرش پیش‌بینی‌شده، "Y" برای پرش نادرست پیش‌بینی‌شده .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} in_tx: پرش درون تراکنش TSX .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} abort: لغو تراکنش TSX\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} cycles: چرخه‌ها در بلوک پایه (basic block) .sp .if n \{\ .RS 4 .\} .nf و کلیدهای مرتب‌سازی پیش‌فرض به comm، dso_from، symbol_from، dso_to و symbol_to تغییر می‌یابند؛ گزینه \*(Aq\-\-branch\-stack\*(Aq را ببینید\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf هنگامی که کلید مرتب‌سازی symbol مشخص شود، ستون‌های "IPC" و "IPC Coverage" به‌طور خودکار فعال می‌شوند\&. ستون "IPC" میانگین IPC به ازای هر تابع را گزارش می‌دهد و ستون "IPC coverage" درصد دستورالعمل‌های دارای IPC نمونه‌برداری‌شده در این تابع را گزارش می‌کند\&. منظور از IPC تعداد دستورالعمل بر چرخه (Instruction Per Cycle) است\&. پایین بودن آن نشان‌دهنده احتمال وجود یک گلوگاه عملکردی در هنگام اجرای تابع است، مانند گلوگاه دسترسی به حافظه\&. چنانچه تابعی دارای سربار بالا و IPC پایین باشد، ارزش بررسی بیشتر جهت بهینه‌سازی کارایی را دارد\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf در صورت استفاده از گزینه \-\-mem\-mode، کلیدهای مرتب‌سازی زیر نیز در دسترس خواهند بود (ناسازگار با \-\-branch\-stack): symbol_daddr، dso_daddr، locked، tlb، mem، snoop، dcacheline، blocked\&. .fi .if n \{\ .RE .\} .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} symbol_daddr: نام نماد داده‌ای که در زمان نمونه‌برداری عملیات روی آن اجرا می‌شد .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} dso_daddr: نام کتابخانه یا ماژول حاوی داده‌ای که در زمان نمونه‌برداری عملیات روی آن اجرا می‌شد .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} locked: مشخص می‌کند آیا گذرگاه در زمان نمونه‌برداری قفل بوده است یا خیر .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} tlb: نوع دسترسی tlb برای داده در زمان نمونه‌برداری .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} mem: نوع دسترسی به حافظه برای داده در زمان نمونه‌برداری .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} snoop: نوع snoop (در صورت وجود) برای داده در زمان نمونه‌برداری .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1.IP \(bu 2.3 .\} dcacheline: خط کَشی که آدرس داده در زمان نمونه‌برداری روی آن قرار دارد .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} phys_daddr: آدرس فیزیکی داده‌ای که در زمان نمونه‌برداری عملیات روی آن انجام می‌شود .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} data_page_size: اندازه صفحه داده‌ای که در زمان نمونه‌برداری عملیات روی آن انجام می‌شود .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} blocked: دلیل مسدود شدن دسترسی بارگذاری برای داده در زمان نمونه‌برداری .sp .if n \{\ .RS 4 .\} .nf و کلیدهای مرتب‌سازی پیش‌فرض به local_weight، mem، sym، dso، symbol_daddr، dso_daddr، snoop، tlb، locked، blocked، local_ins_lat تغییر می‌یابند، \*(Aq\-\-mem\-mode\*(Aq را ببینید\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf اگر فایل داده دارای رویداد(های) tracepoint باشد، کلیدهای مرتب‌سازی (پویای) زیر نیز در دسترس خواهند بود: trace, trace_fields, [\&.][/raw] .fi .if n \{\ .RE .\} .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} trace: خروجی ردیابی چاپ‌شده به‌صورت خوانا (pretty-printed) در یک ستون منفرد .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} trace_fields: فیلدهای موجود در tracepointها در ستون‌های جداگانه .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} : نام اختیاری رویداد و فیلد برای یک فیلد مشخص .sp .if n \{\ .RS 4 .\} .nf حالت آخر از نام‌های رویداد و فیلد تشکیل شده است\&. اگر نام رویداد حذف شود، تمام رویدادها را برای پیدا کردن نام فیلد منطبق جستجو می‌کند\&. فیلد منطبق فقط برای رویدادی که دارای آن فیلد است نمایش داده خواهد شد\&. نام رویداد از تطابق زیررشته پشتیبانی می‌کند بنابراین نیازی نیست کاربر هر بار نام کامل زیرسیستم و رویداد را مشخص کند\&. برای مثال، رویداد \*(Aqsched:sched_switch\*(Aq تا زمانی که مبهم نباشد می‌تواند به \*(Aqswitch\*(Aq کوتاه شود\&. همچنین رویداد می‌تواند با نمایه‌اش (شروع از ۱) با پیشوند \*(Aq%\*(Aq مشخص شود\&. بنابراین \*(Aq%1\*(Aq رویداد اول، \*(Aq%2\*(Aq رویداد دوم و الی آخر است\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf نام فیلد می‌تواند پسوند \*(Aq/raw\*(Aq داشته باشد که چاپ خوانا را غیرفعال کرده و مقدار خام فیلد را مانند اعداد هگزادسیمال نمایش می‌دهد\&. گزینه \-\-raw\-trace اثری مشابه برای تمام کلیدهای مرتب‌سازی پویا دارد\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf اگر همه رویدادها در فایل داده از نوع tracepoint باشند، کلیدهای مرتب‌سازی پیش‌فرض به \*(Aqtrace\*(Aq تغییر می‌یابند\&. .fi .if n \{\ .RE .\} .RE .RE .PP \-F, \-\-fields= .RS 4 مشخص کردن فیلد خروجی \- چند کلید را می‌توان در قالب CSV مشخص کرد\&. فیلدهای زیر در دسترس هستند: overhead، latency، overhead_sys، overhead_us، overhead_children، sample، period، weight1، weight2، weight3، ins_lat، p_stage_cyc و retire_lat\&. ۳ نام آخر نام‌های مستعار برای وزن‌های متناظر هستند\&. هنگامی که از فیلدهای وزن استفاده شود، مقدار میانگین وزن را نمایش خواهند داد\&. .sp .if n \{\ .RS 4 .\} .nf همچنین می‌تواند شامل هر کلید(های) مرتب‌سازی باشد\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf به‌طور پیش‌فرض، هر کلید مرتب‌سازی که در \-F مشخص نشده باشد به‌طور خودکار پیوست خواهد شد\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf اگر کلیدها با پیشوند \*(Aq+\*(Aq شروع شوند، فیلد(های) مشخص‌شده را به ترتیب پیش‌فرض فیلدها اضافه می‌کند\&. برای مثال: perf report \-F +period,sample\&. .fi .if n \{\ .RE .\} .RE .PP \-p, \-\-parent= .RS 4 یک پالایه عبارت باقاعده (regex) برای شناسایی والد\&. والد فراخواننده این تابع است و از میان زنجیره فراخوانی (callchain) جستجو می‌شود، بنابراین به ثبت اطلاعات زنجیره فراخوانی نیاز دارد\&. این الگو در قالب عبارت باقاعده گسترده است و به‌طور پیش‌فرض روی "^sys_|^do_page_fault" تنظیم شده است، \fI\-\-sort parent\fR را ببینید\&. .RE .PP \-x, \-\-exclude\-other .RS 4 فقط نمایش ورودی‌هایی با تطابق والد (parent\-match)\&. .RE .PP \-w, \-\-column\-widths= .RS 4 اجبار عرض هر ستون به فهرست ارائه‌شده، جهت خوانایی در پایانه‌های بزرگ\&. ۰ به معنای نبود محدودیت است (رفتار پیش‌فرض)\&. .RE .PP \-t, \-\-field\-separator= .RS 4 استفاده از یک نویسه جداکننده خاص و پر نکردن فاصله‌ها با فاصله سفید، و جایگزینی تمام رخدادهای این جداکننده در نام‌های نماد (و سایر خروجی‌ها) با یک نویسه \fI\&.\fR ، که در نتیجه تنها جداکننده نامعتبر محسوب می‌شود\&. .RE .PP \-D, \-\-dump\-raw\-trace .RS 4 تخلیه ردیابی خام در قالب ASCII\&. .RE.PP \-\-disable\-order .RS 4 غیرفعال‌سازی مرتب‌سازی خام ردگیری (raw trace)\&. .RE .PP \-g, \-\-call\-graph= .RS 4 نمایش زنجیره‌های فراخوانی با استفاده از نوع (type)، حداقل آستانه درصدی، محدودیت چاپ (print limit)، ترتیب فراخوانی، کلید مرتب‌سازی (sort key)، و شاخه اختیاری (branch) و مقدار (value)\&. توجه داشته باشید که ترتیب پارامترها ثابت نیست و می‌توان هر پارامتری را با ترتیبی دلخواه مشخص کرد\&. تنها استثنا print_limit است که باید پس از threshold مشخص شود\&. .sp .if n \{\ .RS 4 .\} .nf print_type می‌تواند یکی از موارد زیر باشد: \- flat: تک‌ستونی، نمایش خطی زنجیره‌های فراخوانی\&. \- graph: استفاده از یک نمودار درختی، نمایش نرخ‌های سربار مطلق\&. (پیش‌فرض) \- fractal: مانند graph، اما نرخ‌های نسبی را نمایش می‌دهد\&. هر شاخه از درخت به عنوان یک شیء پروفایل‌شده جدید در نظر گرفته می‌شود\&. \- folded: زنجیره‌های فراخوانی در یک خط و جداشده با نقطه‌ویرگول نمایش داده می‌شوند \- none: غیرفعال‌سازی نمایش زنجیره فراخوانی\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf threshold مقداری درصدی است که حداقل درصد لازم را برای گنجانده شدن در گراف فراخوانی خروجی مشخص می‌کند\&. پیش‌فرض 0\&.5 (%) است\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf print_limit تنها زمانی اعمال می‌شود که از واسط stdio استفاده شود\&. این برای محدود کردن تعداد مدخل‌های گراف فراخوانی در یک مدخل تکی hist است\&. توجه داشته باشید که باید بعد از threshold مشخص شود (اما لزوماً نباید متوالی باشد)\&. پیش‌فرض 0 (نامحدود) است\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf order می‌تواند یکی از این موارد باشد: \- callee: گراف فراخوانی بر پایه callee\&. \- caller: گراف فراخوانی معکوس بر پایه caller\&. پیش‌فرض هنگام استفاده از \-\-children مقدار \*(Aqcaller\*(Aq است، در غیر این صورت \*(Aqcallee\*(Aq\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf sort_key می‌تواند این موارد باشد: \- function: مقایسه بر اساس توابع (پیش‌فرض) \- address: مقایسه بر اساس آدرس‌های کد به صورت انفرادی \- srcline: مقایسه بر اساس نام فایل مبدأ و شماره خط .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf branch می‌تواند این مورد باشد: \- branch: در صورت موجود بودن، اطلاعات آخرین branch در گراف فراخوانی گنجانده شود\&. معمولاً استفاده از \-\-branch\-history برای این کار راحت‌تر است\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf value می‌تواند این موارد باشد: \- percent: نمایش درصد سربار (پیش‌فرض) \- period: نمایش دوره رویداد \- count: نمایش تعداد رویداد .fi .if n \{\ .RE .\} .RE .PP \-\-children .RS 4 انباشتن زنجیره فراخوانی فرزندان در مدخل والد تا بتوانند در خروجی نمایش داده شوند\&. خروجی شامل یک ستون جدید "Children" خواهد بود و داده‌ها بر اساس آن مرتب می‌شوند\&. این کار نیازمند ضبط زنجیره‌های فراخوانی است\&. برای جزئیات بیشتر بخش \(oqOverhead calculation\(cq را ببینید\&. به‌طور پیش‌فرض فعال است، برای غیرفعال‌سازی از \-\-no\-children استفاده کنید\&. .RE .PP \-\-max\-stack .RS 4 تنظیم محدودیت عمق پشته هنگام پردازش زنجیره فراخوانی؛ هر چیزی فراتر از عمق مشخص‌شده نادیده گرفته خواهد شد\&. این یک مصالحه میان از دست رفتن اطلاعات و پردازش سریع‌تر است، به‌ویژه برای بارهای کاری که می‌توانند پشته زنجیره فراخوانی بسیار طویلی داشته باشند\&. توجه داشته باشید که هنگام استفاده از گزینه \-\-itrace، در صورتی که اندازه زنجیره فراخوانی سنتز‌شده بزرگ‌تر باشد، جایگزین این مقدار خواهد شد\&. .sp .if n \{\ .RS 4 .\} .nf پیش‌فرض: 127 .fi .if n \{\ .RE .\} .RE .PP \-G, \-\-inverted .RS 4 نام مستعار برای گراف فراخوانی معکوس بر پایه caller\&. .RE .PP \-\-ignore\-callees= .RS 4 نادیده گرفتن calleeهای تابع(هایی) که با عبارت باقاعده (regex) داده‌شده مطابقت دارند\&. این کار اثر گردآوری callerهای هر یک از این توابع را در یک نقطه از درخت گراف فراخوانی دارد\&. .RE .PP \-\-pretty= .RS 4 سبک چاپ خوانا (pretty printing)\&. مقادیر key: normal، raw .RE .PP \-\-stdio .RS 4 استفاده از واسط stdio\&. .RE .PP \-\-stdio\-color .RS 4 \fIalways\fR، \fInever\fR یا \fIauto\fR، که امکان پیکربندی خروجی رنگی را علاوه بر "color\&.ui" در \&.perfconfig، از طریق خط فرمان فراهم می‌کند\&. از \fI\-\-stdio\-color always\fR برای تولید خروجی رنگی حتی هنگام هدایت به لوله (pipe) یا فایل استفاده کنید\&. استفاده از فقط \fI\-\-stdio\-color\fR معادل استفاده از \fIalways\fR است\&. .RE .PP \-\-tui .RS 4 استفاده از واسط کاربری متنی (TUI) که با قابلیت annotate یکپارچه است و امکان بررسی دقیق‌تر DSOها یا رشته‌ها را در کنار سایر قابلیت‌ها فراهم می‌کند\&. استفاده از \-\-tui نیازمند یک tty است؛ اگر موجود نباشد، مانند زمان هدایت با pipe به دستورات دیگر، از واسط stdio استفاده می‌شود\&. .RE .PP \-\-gtk .RS 4 استفاده از واسط GTK2\&. .RE .PP \-k, \-\-vmlinux= .RS 4 مسیر فایل vmlinux .RE .PP \-\-ignore\-vmlinux .RS 4 نادیده گرفتن فایل‌های vmlinux\&. .RE .PP \-\-kallsyms= .RS 4 مسیر فایل kallsyms .RE .PP \-m, \-\-modules .RS 4 بارگذاری نمادهای ماژول\&. هشدار: این گزینه فقط باید همراه با \-k و یک هسته زنده (LIVE kernel) استفاده شود\&. .RE .PP \-f, \-\-force .RS 4 اعتبارسنجی مالکیت انجام نشود\&. .RE .PP \-\-symfs= .RS 4 جستجوی فایل‌های دارای نمادها به صورت نسبی نسبت به این دایرکتوری\&. طرح چیدمان اختیاری (layout) می‌تواند \fIhierarchy\fR (پیش‌فرض، تطبیق با مسیر کامل) یا \fIflat\fR (فقط تطبیق با نام پایه) باشد\&. این گزینه زمانی مفید است که فایل‌های دیباگ در یک ساختار دایرکتوری مسطح (flat) ذخیره شده باشند\&. .RE .PP \-C, \-\-cpu .RS 4 تنها نمونه‌ها برای فهرست پردازنده‌های (CPU) ارائه‌شده گزارش شوند\&. چندین CPU را می‌توان به صورت فهرستی جداشده با کاما و بدون فاصله وارد کرد: 0,1\&. محدوده‌های پردازنده‌ها با \- مشخص می‌شوند: 0\-2\&. مقدار پیش‌فرض گزارش نمونه‌ها در تمام پردازنده‌ها است\&. .RE.PP \-M, \-\-disassembler\-style= .RS 4 تنظیم سبک واساز (disassembler style) برای objdump\&. .RE .PP \-\-source .RS 4 چیدن متناوب کد منبع با کد اسمبلی\&. به‌طور پیش‌فرض فعال است، با \-\-no\-source غیرفعال می‌شود\&. .RE .PP \-\-asm\-raw .RS 4 نمایش کدبندی خام دستورالعمل‌های اسمبلی\&. .RE .PP \-\-show\-total\-period .RS 4 نمایش ستونی شامل مجموع دوره‌ها (periods)\&. .RE .PP \-I, \-\-show\-info .RS 4 نمایش اطلاعات تکمیلی درباره فایل perf\&.data\&. این گزینه اطلاعاتی را اضافه می‌کند که ممکن است بسیار حجیم باشند و در نتیجه نمایش را شلوغ کنند\&. در حال حاضر شامل این موارد است: مکان‌شناسی (توپولوژی) cpu و numa در سیستم میزبان\&. .RE .PP \-b, \-\-branch\-stack .RS 4 استفاده از نشانی‌های شاخه‌های طی‌شدهٔ نمونه‌برداری‌شده به‌جای نشانی دستورالعمل برای ساخت بافت‌نگارها (histograms)\&. برای تولید خروجی معنادار، فایل perf\&.data باید با استفاده از perf record \-b یا perf record \-\-branch\-filter xxx که در آن xxx یک گزینه پالایه شاخه است، به‌دست آمده باشد\&. دستور perf report قادر است به‌طور خودکار تشخیص دهد که آیا یک فایل perf\&.data شامل پشته‌های شاخه هست یا خیر و به‌طور خودکار به حالت نمای شاخه تغییر وضعیت می‌دهد، مگر اینکه از \-\-no\-branch\-stack استفاده شود\&. .RE .PP \-\-branch\-history .RS 4 افزودن نشانی‌های شاخه‌های طی‌شدهٔ نمونه‌برداری‌شده به پشته فراخوانی (callstack)\&. این امکان را می‌دهد تا مسیری که برنامه تا هر نمونه طی کرده است بررسی شود\&. برای گردآوری داده‌ها باید از \-b (یا \-j) و \-g استفاده شده باشد\&. .sp .if n \{\ .RS 4 .\} .nf همچنین با برخی پرچم‌های شاخه نمایش داده می‌شود که می‌توانند شامل این موارد باشند: \- Predicted: نمایش میانگین درصد شاخه‌های پیش‌بینی‌شده\&. (تعداد پیش‌بینی‌شده / تعداد کل) \- Abort: نمایش تعداد شاخه‌های لغوشده tsx\&. \- Cycles: چرخه‌ها در بلوک پایه (basic block)\&. .fi .if n \{\ .RE .\} .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} iterations: نمایش میانگین تعداد تکرارها در فهرست callchain\&. .RE .RE .PP \-\-addr2line= .RS 4 مسیر به فایل اجرایی addr2line\&. .RE .PP \-\-objdump= .RS 4 مسیر به فایل اجرایی objdump\&. .RE .PP \-\-prefix=PREFIX, \-\-prefix\-strip=N .RS 4 حذف N مدخل نخست از نام مسیر فایل‌های منبع در فایل‌های اجرایی و افزودن PREFIX\&. این قابلیت امکان نمایش کد منبع کامپایل‌شده روی سیستم‌هایی با ساختار فایل‌سیستم متفاوت را فراهم می‌کند\&. .RE .PP \-\-group .RS 4 نمایش اطلاعات گروه رویدادها در کنار هم\&. این گزینه خروجی گروهی را حتی اگر هیچ گروهی در فایل داده تعریف نشده باشد تحمیل می‌کند\&. .RE .PP \-\-group\-sort\-idx .RS 4 مرتب‌سازی خروجی بر اساس رویداد واقع در نمایه n در گروه\&. اگر n نامعتبر باشد، مرتب‌سازی بر اساس رویداد نخست انجام می‌شود\&. این گزینه می‌تواند از چندین گروه با تعداد رویدادهای متفاوت پشتیبانی کند\&. هشدار: این گزینه باید روی رویدادهای گروه‌بندی‌شده استفاده شود\&. .RE .PP \-\-demangle .RS 4 رمزگشایی (demangle) نام نمادها به شکل خوانا برای انسان\&. به‌طور پیش‌فرض فعال است، با \-\-no\-demangle غیرفعال می‌شود\&. .RE .PP \-\-demangle\-kernel .RS 4 رمزگشایی (demangle) نام نمادهای هسته به شکل خوانا برای انسان (برای هسته‌های ++C)\&. .RE .PP \-\-mem\-mode .RS 4 استفاده از نشانی‌های داده نمونه‌ها افزون بر نشانی‌های دستورالعمل برای ساخت بافت‌نگارها\&. برای تولید خروجی معنادار، فایل perf\&.data باید با استفاده از perf record \-d \-W و با بهره‌گیری از یک رویداد ویژه مانند \-e cpu/mem\-loads/p یا \-e cpu/mem\-stores/p تهیه شده باشد\&. برای دسترسی ساده‌تر \fIperf mem\fR را ببینید\&. .RE .PP \-\-percent\-limit .RS 4 مدخل‌هایی که سربار (overhead) آن‌ها کمتر از آن درصد باشد نمایش داده نمی‌شوند\&. (پیش‌فرض: 0)\&. توجه داشته باشید که این گزینه همچنین حد درصد (آستانه) callchainها را تعیین می‌کند\&. با این حال، مقدار پیش‌فرض آستانه callchain با مقدار پیش‌فرض مدخل‌های بافت‌نگار متفاوت است\&. لطفاً برای جزئیات به گزینه \-\-call\-graph مراجعه کنید\&. .RE .PP \-\-percentage .RS 4 تعیین چگونگی نمایش درصد سربار پردازنده و تاخیر برای مدخل‌های پالایش‌شده\&. پالایه‌ها می‌توانند با گزینه‌های \-\-comms، \-\-dsos، \-\-symbols و/یا \-\-parallelism و همچنین عملیات بزرگ‌نمایی (Zoom) روی TUI (مانند thread، dso، غیره) اعمال شوند\&. .sp .if n \{\ .RS 4 .\} .nf مقدار "relative" بدین معناست که تنها نسبت به مدخل‌های پالایش‌شده سنجیده می‌شود، به‌طوری که مجموع مدخل‌های نمایش‌داده‌شده همواره 100%\& خواهد بود\&. مقدار "absolute" بدین معناست که مقدار اصلی قبل و بعد از اعمال پالایه حفظ می‌شود\&. .fi .if n \{\ .RE .\} .RE .PP \-\-header .RS 4 نمایش اطلاعات سرآیند در فایل perf\&.data\&. این اطلاعات شامل مواردی گوناگون نظیر نام میزبان، نسخه سیستم‌عامل و perf، اطلاعات cpu/mem، خط فرمان perf، فهرست رویدادها و غیره است\&. در حال حاضر تنها خروجی \-\-stdio از این قابلیت پشتیبانی می‌کند\&. .RE .PP \-\-header\-only .RS 4 تنها نمایش سرآیند perf\&.data (گزینه \-\-stdio را تحمیل می‌کند)\&. .RE .PP \-\-time .RS 4 تنها تحلیل نمونه‌های موجود در بازه زمانی ارائه‌شده: ,\&. زمان‌ها دارای قالب ثانیه\&.نانوثانیه هستند\&. اگر start داده نشود (یعنی رشته زمان به صورت \fI,x\&.y\fR باشد) تحلیل از ابتدای فایل آغاز می‌شود\&. اگر زمان stop داده نشود (یعنی رشته زمان به صورت \fIx\&.y,\fR باشد) تحلیل تا انتهای فایل ادامه می‌یابد\&. چندین بازه را می‌توان با فاصله جدا کرد، که مستلزم قرار دادن آرگومان داخل کوتیشن است؛ مانند \-\-time "1234\&.567,1234\&.789 1235," .sp .if n \{\ .RS 4 .\} .nf همچنین از درصد زمان با چندین بازه زمانی پشتیبانی می‌کند\&. رشته زمان به‌صورت \*(Aqa%/n,b%/m,\&.\&.\&.\*(Aq یا \*(Aqa%\-b%,c%\-%d,\&.\&.\&.\*(Aq است\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf برای نمونه: انتخاب برش زمانی دوم 10%: .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf perf report \-\-time 10%/2 .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf انتخاب برش زمانی از 0% تا 10%: .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf perf report \-\-time 0%\-10% .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf انتخاب برش‌های زمانی اول و دوم 10%: .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf perf report \-\-time 10%/1,10%/2 .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf انتخاب برش‌های 0% تا 10% و 30% تا 40%: .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf perf report \-\-time 0%\-10%,30%\-40% .fi .if n \{\ .RE .\} .RE.PP \-\-switch\-on EVENT_NAME .RS 4 تنها رویدادهای پس از یافت شدن این رویداد را در نظر می‌گیرد\&. .sp .if n \{\ .RS 4 .\} .nf این قابلیت می‌تواند برای اندازه‌گیری بار کاری فقط پس از اتمام یک فاز مقداردهی اولیه مفید باشد؛ به این صورت که یک perf probe در آن نقطه درج شده و سپس از این گزینه همراه با آن پروب استفاده شود\&. .fi .if n \{\ .RE .\} .RE .PP \-\-switch\-off EVENT_NAME .RS 4 پس از یافت شدن این رویداد، در نظر گرفتن رویدادها را متوقف می‌کند\&. .RE .PP \-\-show\-on\-off\-events .RS 4 رویدادهای \-\-switch\-on/off را نیز نشان می‌دهد\&. این گزینه در حال حاضر اثری بر \fIperf report\fR ندارد اما احتمالاً حالت پیش‌فرض را به این تغییر خواهیم داد که رویدادهای switch\-on/off در حالت \-\-group نشان داده نشوند و چنانچه به‌جز رویدادهای off/on تنها یک رویداد دیگر وجود داشت، مستقیماً به مرورگر هیستوگرام برود، دقیقاً مانند رفتاری که \fIperf report\fR بدون تعیین صریح هیچ رویدادی دارد\&. .RE .PP \-\-itrace .RS 4 گزینه‌هایی برای رمزگشایی داده‌های ردگیری دستورالعمل‌ها (instruction tracing)\&. این گزینه‌ها عبارتند از: .sp .if n \{\ .RS 4 .\} .nf 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) .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf حالت پیش‌فرض شامل تمام رویدادها است؛ یعنی مشابه \-\-itrace=iybxwpe، به‌جز در perf script که پیش‌فرض آن \-\-itrace=ce می‌باشد\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf علاوه بر این، دوره یا Period (پیش‌فرض ۱۰۰۰۰۰، به‌جز در perf script که ۱ است) برای رویدادهای دستورالعمل‌ها را می‌توان بر حسب این واحدها تعیین کرد: .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf i دستورالعمل‌ها (instructions) t تیک‌ها (ticks) ms میلی‌ثانیه us میکروثانیه ns نانوثانیه (پیش‌فرض) .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf همچنین اندازه زنجیره فراخوانی (پیش‌فرض ۱۶، حداکثر ۱۰۲۴) برای رویدادهای دستورالعمل‌ها یا تراکنش‌ها قابل تعیین است\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf همچنین تعداد ورودی‌های آخرین شاخه (پیش‌فرض ۶۴، حداکثر ۱۰۲۴) برای رویدادهای دستورالعمل‌ها یا تراکنش‌ها قابل تعیین است\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf مشابه گزینه‌های g و l، اندازه را می‌توان برای گزینه‌های G و L نیز تعیین کرد\&. در x86 توجه داشته باشید که اگر داده‌ها با PEBS بزرگ ثبت شده باشند، عملکرد G و L بسیار ضعیف خواهد بود\&. برای جزئیات به صفحه راهنمای linkperf:perf\-intel\-pt[1] مراجعه کنید\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf همچنین امکان رد کردن رویدادهای اولیه‌ی تولیدشده (دستورالعمل‌ها، شاخه‌ها، تراکنش‌ها، ptwrite، توان) وجود دارد\&. این قابلیت برای نادیده گرفتن کدهای مقداردهی اولیه سودمند است\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf \-\-itrace=i0nss1000000 .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf از یک میلیون دستورالعمل نخست صرف‌نظر می‌کند\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf گزینه \*(Aqe\*(Aq می‌تواند با پرچم‌هایی دنبال شود که مشخص می‌کنند چه خطاهایی گزارش بشوند یا نشوند\&. هر پرچم باید قبل از خود یک \*(Aq+\*(Aq یا \*(Aq\-\*(Aq داشته باشد\&. این پرچم‌ها عبارتند از: o سرریز (overflow) l از دست رفتن داده‌های ردگیری (trace data lost) .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf در صورت پشتیبانی، گزینه \*(Aqd\*(Aq می‌تواند با پرچم‌هایی دنبال شود که بر پیام‌های اشکال‌زداییِ ثبتی اثر می‌گذارند\&. هر پرچم باید قبل از خود یک \*(Aq+\*(Aq یا \*(Aq\-\*(Aq داشته باشد\&. این پرچم‌ها عبارتند از: a تمام رویدادهای perf e خروجی تنها هنگام بروز خطا (اندازه قابل تنظیم است \- به linkperf:perf\-config[1] مراجعه کنید) o خروجی به stdout .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf در صورت پشتیبانی، می‌توان گزینه \*(Aqq\*(Aq را برای افزایش اثر آن تکرار کرد\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf برای غیرفعال‌سازی کامل فرایند رمزگشایی، از \-\-no\-itrace استفاده کنید\&. .fi .if n \{\ .RE .\} .RE.PP \-\-full\-source\-path .RS 4 نمایش مسیر کامل فایل‌های منبع برای خروجی srcline\&. .RE .PP \-\-show\-ref\-call\-graph .RS 4 هنگامی که چندین رویداد نمونه‌برداری می‌شوند، ممکن است نیازی به جمع‌آوری گراف‌های فراخوانی (callgraphs) برای همه آن‌ها نباشد\&. نقاط نمونه‌برداری معمولاً به یکدیگر نزدیک هستند و جمع‌آوری گراف فراخوانی روی یک رویداد مرجع کافی است\&. بنابراین کاربر می‌تواند از تغییردهنده رویداد "call\-graph=no" برای غیرفعال کردن گراف فراخوانی در سایر رویدادها جهت کاهش سربار استفاده کند\&. با این حال، perf report نمی‌تواند گراف فراخوانی را برای رویدادی که گراف فراخوانی آن غیرفعال شده است نمایش دهد\&. این گزینه perf report را گسترش می‌دهد تا گراف‌های فراخوانی مرجع را که توسط رویداد مرجع جمع‌آوری شده‌اند، در رویدادهای فاقد گراف فراخوانی نمایش دهد\&. .RE .PP \-\-stitch\-lbr .RS 4 نمایش گراف فراخوانی با LBRهای پیوندخورده (stitched LBRs) که ممکن است گراف فراخوانی کامل‌تری ارائه دهد\&. فایل perf\&.data باید با استفاده از perf record \-\-call\-graph lbr به دست آمده باشد\&. به‌طور پیش‌فرض غیرفعال است\&. در موارد متداول همراه با سرریز پشته فراخوانی، می‌تواند پشته‌های فراخوانی بهتری نسبت به خروجی پیش‌فرض پشته فراخوانی lbr بازسازی کند\&. اما این روش بی‌نقص نیست\&. ممکن است مواردی وجود داشته باشد که به دلیل تطابق‌های نادرست، پشته‌های فراخوانی نادرستی ایجاد کند\&. محدودیت‌های شناخته‌شده شامل مواردی مانند مدیریت استثناها در setjmp/longjmp است که در آن‌ها فراخوانی‌ها/بازگشت‌ها تطابق نخواهند داشت\&. .RE .PP \-\-socket\-filter .RS 4 تنها گزارش نمونه‌هایی روی سوکت پردازنده که با این فیلتر تطابق دارند\&. .RE .PP \-\-samples=N .RS 4 ذخیره N نمونه مجزا برای هر مدخل هیستوگرام جهت نمایش زمینه (context) در مرورگر tui دستور perf report\&. .RE .PP \-\-raw\-trace .RS 4 هنگام نمایش خروجی traceevent، از print fmt یا پلاگین‌ها استفاده نشود\&. .RE .PP \-H, \-\-hierarchy .RS 4 فعال‌سازی خروجی سلسله‌مراتبی\&. در حالت سلسله‌مراتبی، هر کلید مرتب‌سازی نمونه‌ها را بر اساس معیار گروه‌بندی کرده و سپس با استفاده از کلید مرتب‌سازی سطح پایین‌تر، آن را زیرتقسیم می‌کند\&. .sp .if n \{\ .RS 4 .\} .nf برای مثال: در خروجی عادی: .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf 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 .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf در خروجی سلسله‌مراتبی: .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf 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 .fi .if n \{\ .RE .\} .RE .PP \-\-inline .RS 4 اگر یک آدرس در گراف فراخوانی متعلق به یک تابع درون‌خطی (inlined) باشد، پشته درون‌خطی چاپ خواهد شد\&. هر مدخل، نام تابع یا فایل/خط است\&. به‌طور پیش‌فرض فعال است، با \-\-no\-inline غیرفعال می‌شود\&. .RE .PP \-\-mmaps .RS 4 نمایش خروجی \-\-tasks به همراه اطلاعات mmap در قالبی مشابه /proc//maps\&. .sp .if n \{\ .RS 4 .\} .nf لطفاً توجه داشته باشید که تمام mmapها ذخیره نمی‌شوند؛ گزینه‌های تأثیرگذار بر موارد شامل‌شده، برای نمونه عبارتند از \*(Aqperf record \-\-data\*(Aq\&. .fi .if n \{\ .RE .\} .RE .PP \-\-ns .RS 4 نمایش برچسب‌های زمانی در مقیاس نانوثانیه\&. .RE .PP \-\-stats .RS 4 نمایش آمار کلی رویدادها بدون هرگونه پردازش بیشتر\&. (مانند آنچه در انتهای دستور perf report \-D نمایش داده می‌شود) .RE .PP \-\-tasks .RS 4 نمایش تسک‌های پایش‌شده ذخیره‌شده در داده‌های perf\&. نمایش pid/tid/ppid به همراه رشته دستور به صورت تراز شده جهت تفکیک تسک‌های والد و فرزند\&. .RE .PP \-\-percent\-type .RS 4 تنظیم نوع درصد یادداشت‌نویسی از میان گزینه‌های زیر: global\-period، local\-period، global\-hits، local\-hits .sp .if n \{\ .RS 4 .\} .nf کلیدواژه‌های local/global تعیین می‌کنند که آیا درصد در دامنه تابع (local) محاسبه شود یا در کل داده‌ها (global)\&. کلیدواژه‌های period/hits مبنای محاسبه درصد را مشخص می‌کنند \- دوره نمونه‌ها (period) یا تعداد نمونه‌ها (hits)\&. .fi .if n \{\ .RE .\} .RE .PP \-\-time\-quantum .RS 4 پیکربندی کوانتوم زمانی برای کلید مرتب‌سازی time\&. مقدار پیش‌فرض 100ms است\&. واحدهای s، us، ms، ns را می‌پذیرد\&. .RE .PP \-\-total\-cycles .RS 4 هنگامی که \-\-total\-cycles مشخص شده باشد، مرتب‌سازی تمام بلوک‌ها بر اساس \fISampled Cycles%\fR را پشتیبانی می‌کند\&. این ویژگی برای تمرکز بر داغ‌ترین بلوک‌ها در سطح کلی مفید است\&. در خروجی، ستون‌های جدیدی وجود دارد: .sp .if n \{\ .RS 4 .\} .nf \*(AqSampled Cycles%\*(Aq \- تجمیع چرخه‌های نمونه‌برداری‌شده بلوک / کل چرخه‌های نمونه‌برداری‌شده \*(AqSampled Cycles\*(Aq \- تجمیع چرخه‌های نمونه‌برداری‌شده بلوک \*(AqAvg Cycles%\*(Aq \- میانگین چرخه‌های نمونه‌برداری‌شده بلوک / مجموع میانگین کل چرخه‌های نمونه‌برداری‌شده بلوک \*(AqAvg Cycles\*(Aq \- میانگین چرخه‌های نمونه‌برداری‌شده بلوک \*(AqBranch Counter\*(Aq \- هیستوگرام شمارنده انشعاب بلوک (با \-v تعداد نمایش داده می‌شود) .fi .if n \{\ .RE .\} .RE .PP \-\-skip\-empty .RS 4 عدم چاپ نتایج 0 در خروجی \-\-stat\&. .RE.SH "سربارهای پردازنده و تاخیر (CPU AND LATENCY OVERHEADS)" .sp دو مفهوم از زمان وجود دارد: زمان ساعت دیواری (wall\-clock time) و زمان پردازنده (CPU time)\&. برای یک برنامه تک‌نخی، یا برنامه‌ای که روی یک ماشین تک‌هسته‌ای اجرا می‌شود، این مفاهیم یکسان هستند\&. با این حال، برای یک برنامه چندنخی/چندفرآیندی که روی یک ماشین چندهسته‌ای اجرا می‌شود، این مفاهیم تفاوت چشمگیری دارند\&. در ازای هر ثانیه از زمان ساعت دیواری، به تعداد هسته‌ها ثانیه زمان پردازنده داریم\&. ابزار perf می‌تواند سربار را برای هر دو زمان اندازه بگیرد (که به ترتیب در ستون‌های \fIoverhead\fR و \fIlatency\fR برای زمان پردازنده و زمان ساعت دیواری نشان داده می‌شوند)\&. .sp بهینه‌سازی سربار پردازنده برای بهبود توان عملیاتی (\fIthroughput\fR) مفید است، در حالی که بهینه‌سازی سربار تاخیر برای بهبود تاخیر (\fIlatency\fR) سودمند است\&. درک این که کدام‌یک در یک موقعیت عملی پیش‌رو مفید است اهمیت بالایی دارد\&. برای نمونه، مورد نخست ممکن است برای بهبود حداکثر توان عملیاتی یک سرور ساخت CI که با بهره‌گیری ۱۰۰٪ از پردازنده کار می‌کند مفید باشد، در حالی که مورد دوم ممکن است برای بهبود تاخیر درک‌شده توسط کاربر در ساخت یک برنامه تعاملی کارآمد باشد\&. این سربارها ممکن است در برخی موارد تفاوت فاحشی داشته باشند\&. برای مثال، برنامه‌ای را در نظر بگیرید که تابع \fIfoo\fR را به مدت ۹ ثانیه با ۱ نخ اجرا می‌کند، و سپس تابع \fIbar\fR را به مدت ۱ ثانیه با ۱۲۸ نخ به اجرا درمی‌آورد (۱۲۸ ثانیه زمان پردازنده مصرف می‌کند)\&. سربار پردازنده عبارت است از: \fIfoo\fR \- 6\&.6%، \fIbar\fR \- 93\&.4%\&. در حالی که سربار تاخیر عبارت است از: \fIfoo\fR \- 90%، \fIbar\fR \- 10%\&. اگر تلاش کنیم با در نظر گرفتن سربار پردازنده (که در این مورد گمراه‌کننده است) زمان اجرای برنامه را بهینه‌سازی کنیم، روی تابع \fIbar\fR تمرکز خواهیم کرد، اما این کار در بهترین حالت تنها می‌تواند ۱۰٪ زمان اجرا را بهبود بخشد\&. .sp به‌طور پیش‌فرض، perf تنها سربار پردازنده را نشان می‌دهد\&. برای نمایش سربار تاخیر، از \fIperf record \-\-latency\fR و \fIperf report\fR استفاده کنید: .sp .if n \{\ .RS 4 .\} .nf \&.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 .fi .if n \{\ .RE .\} .sp برای مرتب‌سازی بر اساس سربار تاخیر، از \fIperf report \-\-latency\fR استفاده کنید: .sp .if n \{\ .RS 4 .\} .nf \&.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 .fi .if n \{\ .RE .\} .sp برای دستیابی به درک دقیق‌تری از تفاوت میان سربارها، می‌توانید هیستوگرام موازی‌سازی را با پرچم‌های \fI\-\-sort=latency,parallelism,comm,symbol \-\-hierarchy\fR بررسی کنید\&. این کار کسری از زمان (ساعت دیواری) را که در آن بار کاری از تعداد متفاوتی هسته استفاده می‌کند، نشان می‌دهد (ستون \fIParallelism\fR)\&. برای نمونه، در مورد زیر بار کاری در بیشتر زمان تنها از ۱ هسته استفاده می‌کند، اما دارای فازهایی با موازی‌سازی بسیار بالا نیز هست که تفاوت چشمگیر میان سربارهای پردازنده و ساعت دیواری را توجیه می‌کند: .sp .if n \{\ .RS 4 .\} .nf \&.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 .fi .if n \{\ .RE .\} .sp با باز کردن خطوط مربوطه، می‌توانید ببینید چه دستورها/توابعی در سطح موازی‌سازی مشخص اجرا می‌شوند: .sp .if n \{\ .RS 4 .\} .nf \&.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 .fi .if n \{\ .RE .\} .sp برای مشاهده نمایه معمولی در سطح توابع برای سطوح موازی‌سازی مشخص (تعداد نخ‌هایی که به‌طور فعال روی پردازنده‌ها در حال اجرا هستند)، می‌توانید از فیلتر \fI\-\-parallelism\fR استفاده کنید\&. برای مثال، جهت مشاهده نمایه فقط برای فازهای با موازی‌سازی پایین یک بار کاری، از پرچم‌های \fI\-\-latency \-\-parallelism=1\-2\fR استفاده کنید\&. .SH "محاسبه سربار (OVERHEAD CALCULATION)" .sp هنگامی که perf زنجیره‌های فراخوانی (callchains) را گردآوری می‌کند، سربار پردازنده می‌تواند در دو ستون \fIChildren\fR و \fISelf\fR نمایش داده شود (و ستون‌های متناظر \fIWall\fR برای سربار زمان ساعت دیواری)\&. سربار \fIself\fR صرفاً با جمع زدن تمامی مقادیر دوره‌ها (period) مربوط به یک مدخل \- معمولاً یک تابع (نماد) \- محاسبه می‌شود\&. این مقداری است که perf به‌طور سنتی نمایش می‌دهد و مجموع تمام مقادیر سربار \fIself\fR باید ۱۰۰٪ باشد\&. .sp سربار \fIchildren\fR با افزودن تمامی مقادیر دوره‌های توابع فرزند محاسبه می‌شود تا بتواند کل سربار توابع سطح بالاتر را نشان دهد، حتی اگر آن‌ها مستقیماً کار زیادی انجام ندهند\&. در اینجا منظور از \fIChildren\fR توابعی است که از تابعی دیگر (والد) فراخوانی شده‌اند\&. .sp شاید گیج‌کننده به نظر برسد که مجموع تمام مقادیر سربار \fIchildren\fR از ۱۰۰٪ بیشتر می‌شود، زیرا هر یک از آن‌ها خود تجمعی از سربار \fIself\fR توابع فرزندش است\&. اما با فعال بودن این مورد، کاربران می‌توانند تشخیص دهند کدام تابع بیشترین سربار را دارد حتی اگر نمونه‌ها میان توابع فرزند پراکنده باشند\&. .sp مثال زیر را در نظر بگیرید؛ سه تابع مانند زیر وجود دارند\&. .sp .if n \{\ .RS 4 .\} .nf \&.ft C void foo(void) { /* do something */ } void bar(void) { /* do something */ foo(); } int main(void) { bar() return 0; } \&.ft .fi .if n \{\ .RE .\} .sp در این حالت \fIfoo\fR فرزندی برای \fIbar\fR است، و \fIbar\fR فرزند بی‌واسطه \fImain\fR است، بنابراین \fIfoo\fR نیز فرزند \fImain\fR به شمار می‌رود\&. به بیان دیگر، \fImain\fR والد \fIfoo\fR و \fIbar\fR است، و \fIbar\fR والد \fIfoo\fR است\&. .sp فرض کنید تمام نمونه‌ها فقط در \fIfoo\fR و \fIbar\fR ثبت شده‌اند\&. هنگامی که نمونه‌برداری با زنجیره‌های فراخوانی انجام شود، خروجی در حالت معمول (فقط سربار self) دستور perf report چیزی مانند زیر را نشان خواهد داد: .sp .if n \{\ .RS 4 .\} .nf \&.ft C Overhead Symbol \&.\&.\&.\&.\&.\&.\&.\&. \&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&.\&. 60\&.00% foo | \-\-\- foo bar main __libc_start_main 40\&.00% bar | \-\-\- bar main __libc_start_main \&.ft .fi .if n \{\ .RE .\} .sp هنگامی که گزینه \-\-children فعال باشد، مقادیر سربار \fIself\fR توابع فرزند (یعنی \fIfoo\fR و \fIbar\fR) به والدین افزوده می‌شوند تا سربار \fIchildren\fR محاسبه شود\&. در این حالت گزارش ممکن است به این صورت نمایش داده شود: .sp .if n \{\ .RS 4 .\} .nf \&.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 .fi .if n \{\ .RE .\} .sp در خروجی بالا، سربار \fIself\fR تابع \fIfoo\fR (۶۰٪) به سربار \fIchildren\fR مربوط به \fIbar\fR، \fImain\fR و \fI__libc_start_main\fR افزوده شد\&. به همین ترتیب، سربار \fIself\fR تابع \fIbar\fR (۴۰٪) به سربار \fIchildren\fR مربوط به \fImain\fR و \fI\e_\e_libc_start_main\fR اضافه شد\&. .sp بنابراین \fI\e_\e_libc_start_main\fR و \fImain\fR در ابتدا نمایش داده می‌شوند، زیرا سربار \fIchildren\fR یکسانی (۱۰۰٪) دارند (اگرچه سربار \fIself\fR آن‌ها صفر است) و آن‌ها والدین \fIfoo\fR و \fIbar\fR هستند\&. .sp از نسخه v3\&.16 به بعد، سربار \fIchildren\fR به‌طور پیش‌فرض نمایش داده می‌شود و خروجی بر اساس مقادیر آن مرتب می‌گردد\&. سربار \fIchildren\fR را می‌توان با مشخص کردن گزینه \-\-no\-children در خط فرمان یا افزودن \fIreport\&.children = false\fR یا \fItop\&.children = false\fR در فایل پیکربندی perf غیرفعال کرد\&..SH "همچنین ببینید (SEE ALSO)" .sp \fBperf-stat\fR(1), \fBperf-annotate\fR(1), \fBperf-record\fR(1), \fBperf-intel-pt\fR(1)