'\" t .\" Title: perf-stat .\" 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\-STAT" "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-stat \- اجرای یک دستور و جمع‌آوری آمار شمارنده‌های کارایی .SH "خلاصه دستور (SYNOPSIS)" .sp .nf \fIperf stat\fR [\-e | \-\-event=EVENT] [\-a] \fIperf stat\fR [\-e | \-\-event=EVENT] [\-a] \-\- [] \fIperf stat\fR [\-e | \-\-event=EVENT] [\-a] record [\-o file] \-\- [] \fIperf stat\fR report [\-i file] .fi .SH "توضیحات (DESCRIPTION)" .sp این دستور یک فرمان را اجرا کرده و آمار شمارنده‌های کارایی را از آن جمع‌آوری می‌کند\&. .SH "گزینه‌ها (OPTIONS)" .PP \&... .RS 4 هر دستوری که می‌توانید در یک پوسته مشخص کنید\&. .RE .PP record .RS 4 بخش STAT RECORD را ببینید\&. .RE .PP report .RS 4 بخش STAT REPORT را ببینید\&. .RE .PP \-e, \-\-event= .RS 4 انتخاب رویداد PMU\&. این انتخاب می‌تواند شامل موارد زیر باشد: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} یک نام نمادین برای رویداد (از \fIperf list\fR برای فهرست کردن همه رویدادها استفاده کنید) .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} یک رویداد خام PMU به شکل rN که در آن N یک مقدار هگزادسیمال است و کدگذاری خام ثبات را با ساختار ثبات‌های کنترل رویداد، همان‌طور که توسط مدخل‌ها در /sys/bus/event_source/devices/cpu/format/* شرح داده شده است، نشان می‌دهد\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} یک رویداد PMU نمادین یا خام که به دنبال آن یک دونقطه اختیاری و فهرستی از اصلاح‌کننده‌های رویداد می‌آید، مانند cpu\-cycles:p\&. برای جزئیات مربوط به اصلاح‌کننده‌های رویداد به صفحه راهنمای \fBperf-list\fR(1) مراجعه کنید\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} یک رویداد با قالب نمادین مانند \fIpmu/param1=0x3,param2/\fR که در آن param1 و param2 به عنوان قالب‌هایی برای PMU در /sys/bus/event_source/devices//format/* تعریف شده‌اند .sp .if n \{\ .RS 4 .\} .nf عبارت \*(Aqpercore\*(Aq یک توصیف‌گر رویداد است که شمارش رویدادها را برای هر دو رشته سخت‌افزاری درون یک هسته جمع می‌زند\&. برای مثال: perf stat \-A \-a \-e cpu/event,percore=1/,otherevent \&.\&.\&. .fi .if n \{\ .RE .\} .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} یک رویداد با قالب نمادین مانند \fIpmu/config=M,config1=N,config2=K/\fR که در آن M، N و K اعدادی (در قالب ده‌دهی، هگزادسیمال، اکتال) هستند\&. مقادیر قابل‌قبول برای هر یک از پارامترهای \fIconfig\fR، \fIconfig1\fR و \fIconfig2\fR توسط مدخل‌های متناظر در /sys/bus/event_source/devices//format/* تعریف شده‌اند .sp .if n \{\ .RS 4 .\} .nf توجه داشته باشید که دو نحو آخر از تطبیق پیشوند و glob در نام PMU پشتیبانی می‌کنند تا ایجاد رویدادها را در چندین نمونه از یک نوع PMU در سیستم‌های بزرگ (مانند PMUهای کنترل‌کننده حافظه) ساده کنند\&. چندین نمونه PMU برای PMUهای uncore معمول است، بنابراین پیشوند \*(Aquncore_\*(Aq نیز هنگام انجام این تطبیق نادیده گرفته می‌شود\&. .fi .if n \{\ .RE .\} .RE .RE .PP \-i, \-\-no\-inherit .RS 4 وظایف فرزند شمارنده‌ها را به ارث نمی‌برند .RE .PP \-p, \-\-pid= .RS 4 آمارگیری رویدادها روی شناسه فرایند موجود (فهرست جدا شده با کاما) .RE .PP \-t, \-\-tid= .RS 4 آمارگیری رویدادها روی شناسه رشته موجود (فهرست جدا شده با کاما) .RE .PP \-b, \-\-bpf\-prog .RS 4 آمارگیری رویدادها روی شناسه برنامه bpf موجود (فهرست جدا شده با کاما)، نیازمند دسترسی‌های ریشه (root)\&. از bpftool\-prog می‌توان برای یافتن شناسه برنامه تمام برنامه‌های bpf در سیستم استفاده کرد\&. برای مثال: .sp .if n \{\ .RS 4 .\} .nf # bpftool prog | head \-n 1 17247: tracepoint name sys_enter tag 192d548b9d754067 gpl .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf # perf stat \-e cycles,instructions \-\-bpf\-prog 17247 \-\-timeout 1000 .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf Performance counter stats for \*(AqBPF program(s) 17247\*(Aq: .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf 85,967 cycles 28,982 instructions # 0\&.34 insn per cycle .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf 1\&.102235068 seconds time elapsed .fi .if n \{\ .RE .\} .RE.PP \-\-bpf\-counters .RS 4 استفاده از برنامه‌های BPF برای تجمیع مقادیر خوانده‌شده از perf_events\&. این امکان را فراهم می‌کند تا چندین نشست perf\-stat که معیار یکسانی را می‌شمارند (مانند cycles، instructions و غیره)، شمارنده‌های سخت‌افزاری را به اشتراک بگذارند\&. برای استفاده پیش‌فرض از برنامه‌های BPF روی رویدادهای رایج، از «perf config stat\&.bpf\-counter\-events=» استفاده کنید\&. .RE .PP \-\-bpf\-attr\-map .RS 4 با گزینهٔ «\-\-bpf\-counters»، نشست‌های مختلف perf\-stat اطلاعات مربوط به برنامه‌ها و نگاشت‌های BPF اشتراکی را از طریق یک hashmap پین‌شده به اشتراک می‌گذارند\&. از «\-\-bpf\-attr\-map» برای مشخص کردن مسیر این hashmap پین‌شده استفاده کنید\&. مسیر پیش‌فرض /sys/fs/bpf/perf_attr_map است\&. .RE .PP \-\-pfm\-events events .RS 4 انتخاب یک رویداد PMU با استفاده از ساختار نحوی libpfm4 (ببینید \m[blue]\fBhttp://perfmon2\&.sf\&.net\fR\m[]) شامل پشتیبانی از فیلترهای رویداد\&. به عنوان مثال \fI\-\-pfm\-events inst_retired:any_p:u:c=1:i\fR\&. بیش از یک رویداد را می‌توان با استفاده از جداکننده کاما به این گزینه ارسال کرد\&. رویدادهای سخت‌افزاری و رویدادهای سخت‌افزاری عمومی را نمی‌توان با هم ترکیب کرد\&. مورد دوم باید به همراه گزینهٔ \-e استفاده شود\&. گزینهٔ \-e و این گزینه می‌توانند به صورت ترکیبی استفاده شوند\&. رویدادها را می‌توان با استفاده از نمادگذاری {} گروه‌بندی کرد\&. .RE .PP \-a, \-\-all\-cpus .RS 4 جمع‌آوری در سطح کل سیستم از تمام CPUها (در صورت مشخص نشدن هدف، پیش‌فرض است) .RE .PP \-\-no\-scale .RS 4 مقادیر شمارنده‌ها مقیاس‌بندی/نرمال‌سازی نشوند .RE .PP \-d, \-\-detailed .RS 4 چاپ آمار با جزئیات بیشتر، می‌تواند تا ۳ بار مشخص شود .sp .if n \{\ .RS 4 .\} .nf \-d: detailed events, L1 and LLC data cache \-d \-d: more detailed events, dTLB and iTLB events \-d \-d \-d: very detailed events, adding prefetch events .fi .if n \{\ .RE .\} .RE .PP \-r, \-\-repeat= .RS 4 تکرار دستور و چاپ میانگین + انحراف معیار (حداکثر: ۱۰۰)\&. مقدار 0 به معنای اجرای بی‌پایان است\&. .RE .PP \-B, \-\-big\-num .RS 4 چاپ اعداد بزرگ با جداکننده هزارگان بر اساس محلی‌سازی (locale)\&. به طور پیش‌فرض فعال است\&. برای غیرفعال‌سازی از «\-\-no\-big\-num» استفاده کنید\&. تنظیمات پیش‌فرض را می‌توان با «perf config stat\&.big\-num=false» تغییر داد\&. .RE .PP \-C, \-\-cpu= .RS 4 تنها روی فهرست CPUهای ارائه‌شده شمارش انجام شود\&. چندین CPU را می‌توان به صورت یک فهرست جداشده با کاما و بدون فاصله مشخص کرد: 0,1\&. بازه‌های CPU با \- مشخص می‌شوند: 0\-2\&. در حالت per\-thread، این گزینه نادیده گرفته می‌شود\&. گزینهٔ \-a همچنان برای فعال‌سازی پایش در سراسر سیستم لازم است\&. پیش‌فرض، شمارش روی تمام CPUها است\&. .RE .PP \-A, \-\-no\-aggr .RS 4 شمارش‌ها را در بین تمام CPUهای تحت نظارت تجمیع نکن\&. .RE .PP \-n, \-\-null .RS 4 اجرای تهی (null run) \- هیچ شمارنده‌ای را آغاز نکن\&. .RE .sp این گزینه می‌تواند برای سنجش صرف زمان سپری‌شده واقعی (wall\-clock time) \- یا ارزیابی سربار خام خود perf stat بدون اجرای هیچ شمارنده‌ای مفید باشد\&. .PP \-v, \-\-verbose .RS 4 توضیحات بیشتر (نمایش خطاهای باز کردن شمارنده و غیره) .RE .PP \-x SEP, \-\-field\-separator SEP .RS 4 چاپ مقادیر شمارش‌شده با خروجی به سبک CSV جهت آسان‌تر شدن وارد کردن مستقیم به نرم‌افزارهای صفحه‌گسترده\&. ستون‌ها با رشتهٔ مشخص‌شده در SEP از هم جدا می‌شوند\&. .RE .PP \-\-table .RS 4 نمایش زمان برای هر بار اجرا (گزینهٔ \-r) در قالب جدول، برای مثال: .sp .if n \{\ .RS 4 .\} .nf $ perf stat \-\-null \-r 5 \-\-table perf bench sched pipe .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf Performance counter stats for \*(Aqperf bench sched pipe\*(Aq (5 runs): .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf # Table of individual measurements: 5\&.189 (\-0\&.293) # 5\&.189 (\-0\&.294) # 5\&.186 (\-0\&.296) # 5\&.663 (+0\&.181) ## 6\&.186 (+0\&.703) #### .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf # Final result: 5\&.483 +\- 0\&.198 seconds time elapsed ( +\- 3\&.62% ) .fi .if n \{\ .RE .\} .RE .PP \-G name, \-\-cgroup name .RS 4 تنها در کانتینر (cgroup) با نام "name" پایش انجام شود\&. این گزینه تنها در حالت per\-cpu در دسترس است\&. سیستم‌فایل cgroup باید متصل (mounted) باشد\&. تمام ریسه‌های متعلق به کانتینر "name" هنگام اجرا روی CPUهای تحت پایش، رصد می‌شوند\&. چندین cgroup را می‌توان مشخص کرد\&. هر cgroup به رویداد متناظر اعمال می‌شود؛ یعنی cgroup اول به رویداد اول، cgroup دوم به رویداد دوم و به همین ترتیب\&. امکان تعیین یک cgroup خالی (پایش مداوم) با استفاده از مقداری مانند \-G foo,,bar وجود دارد\&. گروه‌های cgroup باید رویدادهای متناظر داشته باشند؛ یعنی همیشه به رویدادهایی که پیش‌تر در خط فرمان تعریف شده‌اند اشاره می‌کنند\&. اگر کاربر بخواهد چندین رویداد را برای یک cgroup خاص ردیابی کند، می‌تواند از \fI\-e e1 \-e e2 \-G foo,foo\fR یا صرفاً از \fI\-e e1 \-e e2 \-G foo\fR استفاده کند\&. .RE .sp اگر بخواهید برای مثال \fIcycles\fR را برای یک cgroup و همچنین در سطح کل سیستم پایش کنید، می‌توان از این خط فرمان استفاده کرد: \fIperf stat \-e cycles \-G cgroup_name \-a \-e cycles\fR\&. .PP \-\-for\-each\-cgroup name .RS 4 گسترش فهرست رویدادها برای هر cgroup در "name" (امکان تعیین چند cgroup جداشده با کاما وجود دارد)\&. همچنین از الگوهای regex برای مطابقت با چندین گروه پشتیبانی می‌کند\&. این گزینه اثری مشابه با تکرار گزینهٔ \-e و گزینهٔ \-G برای هر رویداد ضرب در نام cgroup دارد\&. از این گزینه نمی‌توان همراه با گزینهٔ \-G/\-\-cgroup استفاده کرد\&. .RE .PP \-o file, \-\-output file .RS 4 چاپ خروجی در فایل تعیین‌شده\&. .RE .PP \-\-append .RS 4 الحاق به فایل خروجی تعیین‌شده با گزینهٔ \-o\&. اگر \-o مشخص نشده باشد، نادیده گرفته می‌شود\&. .RE .PP \-\-log\-fd .RS 4 ثبت خروجی در fd، به جای stderr\&. این گزینه مکمل \-\-output بوده و استفاده هم‌زمان از هر دو مجاز نیست\&. گزینهٔ \-\-append ممکن است در اینجا استفاده شود\&. مثال‌ها: 3>results perf stat \-\-log\-fd 3 \-\- $cmd 3>>results perf stat \-\-log\-fd 3 \-\-append \-\- $cmd .RE .PP \-\-control=fifo:ctl\-fifo[,ack\-fifo], \-\-control=fd:ctl\-fd[,ack\-fd] .RS 4 توصیف‌گرهای ctl\-fifo / ack\-fifo باز شده و به عنوان ctl\-fd / ack\-fd به شرح زیر استفاده می‌شوند\&. گوش دادن روی توصیف‌گر ctl\-fd برای دریافت دستور کنترلی اندازه‌گیری (\fIenable\fR: فعال‌سازی رویدادها، \fIdisable\fR: غیرفعال‌سازی رویدادها)\&. اندازه‌گیری‌ها را می‌توان با رویدادهای غیرفعال با استفاده از گزینهٔ \-\-delay=\-1 آغاز کرد\&. ارسال اختیاری وضعیت اتمام دستور کنترلی (\fIack\en\fR) به توصیف‌گر ack\-fd برای همگام‌سازی با فرایند کنترل‌کننده انجام می‌شود\&. مثالی از اسکریپت شل bash برای فعال و غیرفعال کردن رویدادها در طول اندازه‌گیری: .sp .if n \{\ .RS 4 .\} .nf #!/bin/bash .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf ctl_dir=/tmp/ .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf ctl_fifo=${ctl_dir}perf_ctl\&.fifo test \-p ${ctl_fifo} && unlink ${ctl_fifo} mkfifo ${ctl_fifo} exec {ctl_fd}<>${ctl_fifo} .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf ctl_ack_fifo=${ctl_dir}perf_ctl_ack\&.fifo test \-p ${ctl_ack_fifo} && unlink ${ctl_ack_fifo} mkfifo ${ctl_ack_fifo} exec {ctl_fd_ack}<>${ctl_ack_fifo} .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf perf stat \-D \-1 \-e cpu\-cycles \-a \-I 1000 \e \-\-control fd:${ctl_fd},${ctl_fd_ack} \e \e\-\- sleep 30 & perf_pid=$! .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf sleep 5 && echo \*(Aqenable\*(Aq >&${ctl_fd} && read \-u ${ctl_fd_ack} e1 && echo "enabled(${e1})" sleep 10 && echo \*(Aqdisable\*(Aq >&${ctl_fd} && read \-u ${ctl_fd_ack} d1 && echo "disabled(${d1})" .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf exec {ctl_fd_ack}>&\- unlink ${ctl_ack_fifo} .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf exec {ctl_fd}>&\- unlink ${ctl_fifo} .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf wait \-n ${perf_pid} exit $? .fi .if n \{\ .RE .\} .RE.PP \-\-pre, \-\-post .RS 4 قلاب‌های (hooks) پیش و پس از اندازه‌گیری، برای نمونه: .RE .sp perf stat \-\-repeat 10 \-\-null \-\-sync \-\-pre \fImake \-s O=defconfig\-build/clean\fR \-\- make \-s \-j64 O=defconfig\-build/ bzImage .PP \-I msecs, \-\-interval\-print msecs .RS 4 چاپ تغییرات شمارش (count deltas) در هر N میلی‌ثانیه (حداقل: ۱ میلی‌ثانیه)\&. درصد سربار (overhead) در برخی موارد، مانند بازه‌های کوچکِ زیر ۱۰۰ میلی‌ثانیه، ممکن است بالا باشد\&. با احتیاط استفاده شود\&. مثال: \fIperf stat \-I 1000 \-e cycles \-a sleep 5\fR .RE .sp اگر معیار (metric) وجود داشته باشد، با شمارش‌های ایجادشده در این بازه محاسبه شده و پس از علامت # چاپ می‌شود\&. .PP \-\-interval\-count times .RS 4 چاپ تغییرات شمارش به تعداد دفعات مشخص\&. این گزینه باید همراه با گزینهٔ «\-I» استفاده شود\&. مثال: \fIperf stat \-I 1000 \-\-interval\-count 2 \-e cycles \-a\fR .RE .PP \-\-interval\-clear .RS 4 پاک‌سازی صفحه پیش از بازه بعدی\&. .RE .PP \-\-timeout msecs .RS 4 متوقف کردن نشست \fIperf stat\fR و چاپ تغییرات شمارش پس از N میلی‌ثانیه (حداقل: ۱۰ میلی‌ثانیه)\&. این گزینه با گزینهٔ «\-I» پشتیبانی نمی‌شود\&. مثال: \fIperf stat \-\-time 2000 \-e cycles \-a\fR .RE .PP \-\-metric\-only .RS 4 تنها معیارهای محاسبه‌شده چاپ شوند\&. آن‌ها در یک سطر منفرد چاپ می‌شوند\&. هیچ مقدار خامی نمایش داده نمی‌شود\&. با \-\-per\-thread پشتیبانی نمی‌شود\&. .RE .PP \-\-per\-socket .RS 4 تجمیع شمارش‌ها به ازای هر سوکت پردازنده برای اندازه‌گیری‌های حالت سراسری سیستم (system\-wide)\&. این حالتی مفید برای تشخیص عدم تعادل بین سوکت‌ها است\&. برای فعال‌سازی این حالت، علاوه بر \-a از \-\-per\-socket استفاده کنید (حالت سراسری سیستم)\&. خروجی شامل شماره سوکت و تعداد پردازنده‌های برخط (online) روی آن سوکت است\&. این گزینه برای برآورد میزان تجمیع سودمند است\&. .RE .PP \-\-per\-die .RS 4 تجمیع شمارش‌ها به ازای هر قالب پردازنده (die) برای اندازه‌گیری‌های حالت سراسری سیستم (system\-wide)\&. این حالتی مفید برای تشخیص عدم تعادل بین قالب‌ها (dies) است\&. برای فعال‌سازی این حالت، علاوه بر \-a از \-\-per\-die استفاده کنید (حالت سراسری سیستم)\&. خروجی شامل شماره die و تعداد پردازنده‌های برخط روی آن die است\&. این گزینه برای برآورد میزان تجمیع سودمند است\&. .RE .PP \-\-per\-cluster .RS 4 تجمیع شمارش‌ها به ازای هر خوشه پردازنده (processor cluster) برای اندازه‌گیری‌های حالت سراسری سیستم\&. این حالتی مفید برای تشخیص عدم تعادل بین خوشه‌ها است\&. برای فعال‌سازی این حالت، علاوه بر \-a از \-\-per\-cluster استفاده کنید (حالت سراسری سیستم)\&. خروجی شامل شماره خوشه و تعداد پردازنده‌های برخط روی آن خوشه است\&. این گزینه برای برآورد میزان تجمیع سودمند است\&. اطلاعات شناسه خوشه و پردازنده‌های مرتبط را می‌توان از مسیر /sys/devices/system/cpu/cpuX/topology/cluster_{id, cpus} به دست آورد\&. .RE .PP \-\-per\-cache .RS 4 تجمیع شمارش‌ها به ازای هر نمونه حافظهٔ نهان (cache instance) برای اندازه‌گیری‌های حالت سراسری سیستم\&. به طور پیش‌فرض، تجمیع برای سطحی از حافظهٔ نهان که بالاترین شاخص را در سیستم دارد انجام می‌شود\&. برای تعیین سطحی مشخص، سطح کش را در کنار گزینه در قالب [Ll][1\-9][0\-9]* ذکر کنید\&. برای مثال: استفاده از گزینهٔ «\-\-per\-cache=l3» یا «\-\-per\-cache=L3» اطلاعات را در مرز حافظهٔ نهان سطح ۳ سیستم تجمیع خواهد کرد\&. .RE .PP \-\-per\-core .RS 4 تجمیع شمارش‌ها به ازای هر پردازنده فیزیکی برای اندازه‌گیری‌های حالت سراسری سیستم\&. این حالتی مفید برای تشخیص عدم تعادل بین هسته‌های فیزیکی است\&. برای فعال‌سازی این حالت، علاوه بر \-a از \-\-per\-core استفاده کنید (حالت سراسری سیستم)\&. خروجی شامل شماره هسته و تعداد پردازنده‌های منطقی برخط روی آن پردازنده فیزیکی است\&. .RE .PP \-\-per\-thread .RS 4 تجمیع شمارش‌ها به ازای هر ریسهٔ تحت نظارت، هنگام نظارت بر ریسه‌ها (گزینهٔ \-t) یا فرایندها (گزینهٔ \-p)\&. .RE .PP \-\-per\-node .RS 4 تجمیع شمارش‌ها به ازای هر گره NUMA برای اندازه‌گیری‌های حالت سراسری سیستم\&. این حالتی مفید برای تشخیص عدم تعادل بین گره‌های NUMA است\&. برای فعال‌سازی این حالت، علاوه بر \-a از \-\-per\-node استفاده کنید (حالت سراسری سیستم)\&. .RE .PP \-D msecs, \-\-delay msecs .RS 4 پس از شروع برنامه، پیش از آغاز اندازه‌گیری msecs میلی‌ثانیه درنگ کند (\-1: شروع با رویدادهای غیرفعال‌شده)\&. این گزینه برای نادیده گرفتن مرحلهٔ راه‌اندازی اولیه برنامه، که اغلب رفتار بسیار متفاوتی دارد، مفید است\&. .RE .PP \-T, \-\-transaction .RS 4 چاپ آمار اجرای تراکنشی در صورت پشتیبانی\&. .RE .PP \-\-metric\-no\-group .RS 4 به طور پیش‌فرض، رویدادها برای محاسبه یک معیار در گروه‌های ضعیف (weak groups) قرار داده می‌شوند\&. گروه تلاش می‌کند زمان‌بندی «همه یا هیچ» را برای رویدادها اعمال کند\&. گزینهٔ \-\-metric\-no\-group رویدادها را در خارج از گروه‌ها قرار می‌دهد و ممکن است شانس زمان‌بندی شدن رویداد را افزایش داده و دقت بیشتری فراهم کند\&. با این حال، از آنجا که ممکن است رویدادها با یکدیگر زمان‌بندی نشوند، دقت معیارهایی نظیر دستورالعمل در هر چرخه (instructions per cycle) ممکن است کاهش یابد؛ چرا که هر دو معیار ممکن است دیگر به طور هم‌زمان اندازه‌گیری نشوند\&. .RE .PP \-\-metric\-no\-merge .RS 4 به طور پیش‌فرض، اگر یک گروه شامل تمام رویدادهای مورد نیاز گروه دیگر باشد، رویدادهای معیار در گروه‌های ضعیف مختلف می‌توانند به اشتراک گذاشته شوند\&. در چنین شرایطی یکی از گروه‌ها حذف می‌شود که این کار تسهیم رویداد (event multiplexing) را کاهش داده و موجب می‌شود مجموع معیارهای گروه‌های خاص به ۱۰۰٪ برسد\&. عیب به اشتراک‌گذاری گروه این است که گروه ممکن است نیاز به تسهیم پیدا کند و بنابراین دقت برای یک گروه کوچک که نیازی به تسهیم نداشته است کاهش می‌یابد\&. این گزینه منطق ادغام رویداد را از اشتراک‌گذاری رویدادها بین گروه‌ها منع می‌کند و می‌تواند برای افزایش دقت در این سناریو به کار رود\&. .RE .PP \-\-metric\-no\-threshold .RS 4 آستانه‌های معیار ممکن است تعداد رویدادهای لازم جهت محاسبهٔ اینکه آیا یک معیار از عبارت آستانهٔ خود فراتر رفته است را افزایش دهند\&. این ممکن است مطلوب نباشد، چرا که به عنوان مثال این رویدادها می‌توانند باعث ایجاد تسهیم (multiplexing) شوند\&. این گزینه افزودن رویدادهای عبارت آستانه را برای یک معیار غیرفعال می‌کند\&. با این حال، اگر رویدادهای کافی برای محاسبه آستانه وجود داشته باشد، آستانه همچنان محاسبه شده و برای رنگ‌آمیزی مقدار محاسبه‌شدهٔ معیار به کار می‌رود\&. .RE .PP \-\-quiet .RS 4 هیچ خروجی، هشدار یا پیامی چاپ نشود\&. این گزینه همراه با perf stat record در ادامه مفید است تا داده‌ها صرفاً درون فایل perf\&.data نوشته شوند\&. .RE .PP \-\-no\-affinity .RS 4 هنگام پیمایش روی پردازنده‌ها (CPUs)، وابستگی پردازنده زمان‌بند (scheduler CPU affinities) تغییر نکند\&. این کار بهینه‌سازی مربوط به به حداقل رساندن وقفه‌های بین‌پردازنده‌ای (interprocessor interrupts) را غیرفعال می‌کند\&. .RE .SH "ثبت آمار (STAT RECORD)" .sp داده‌های stat را درون فایل دادهٔ perf ذخیره می‌کند\&. .PP \-o file, \-\-output file .RS 4 نام فایل خروجی\&. .RE .SH "گزارش آمار (STAT REPORT)" .sp داده‌های stat را از فایل دادهٔ perf خوانده و گزارش می‌دهد\&. .PP \-i file, \-\-input file .RS 4 نام فایل ورودی\&. .RE .PP \-\-per\-socket .RS 4 تجمیع شمارش‌ها به ازای هر سوکت پردازنده برای اندازه‌گیری‌های حالت سراسری سیستم\&. .RE .PP \-\-per\-die .RS 4 تجمیع شمارش‌ها به ازای هر قالب پردازنده (die) برای اندازه‌گیری‌های حالت سراسری سیستم\&. .RE .PP \-\-per\-cluster .RS 4 تجمیع شمارش‌ها به ازای هر خوشه پردازنده برای اندازه‌گیری‌های حالت سراسری سیستم\&. .RE .PP \-\-per\-cache .RS 4 تجمیع شمارش‌ها به ازای هر نمونه حافظهٔ نهان برای اندازه‌گیری‌های حالت سراسری سیستم\&. به طور پیش‌فرض، تجمیع برای سطحی از حافظهٔ نهان با بالاترین نمایه در سیستم رخ می‌دهد\&. جهت تعیین یک سطح خاص، سطح کش را در کنار گزینه در قالب [Ll][1\-9][0\-9]* ذکر کنید\&. برای مثال: استفاده از گزینهٔ «\-\-per\-cache=l3» یا «\-\-per\-cache=L3» اطلاعات را در مرز حافظهٔ نهان سطح ۳ سیستم تجمیع خواهد کرد\&. .RE .PP \-\-per\-core .RS 4 تجمیع شمارش‌ها به ازای هر پردازنده فیزیکی برای اندازه‌گیری‌های حالت سراسری سیستم\&. .RE .PP \-M, \-\-metrics .RS 4 چاپ معیارها یا گروه‌های معیار مشخص‌شده در فهرستی جداشده با کاما\&. برای یک گروه، تمام معیارهای آن گروه اضافه می‌شوند\&. رویدادهای حاصل از معیارها به صورت خودکار اندازه‌گیری می‌شوند\&. جهت مشاهدهٔ معیارها و گروه‌های معیار موجود، خروجی perf list را بررسی کنید\&. .sp .if n \{\ .RS 4 .\} .nf هنگامی که اطلاعات آستانه برای یک معیار موجود باشد، رنگ قرمز برای نشان دادن اینکه معیار از آستانه فراتر رفته به کار می‌رود در حالی که رنگ سبز نشان می‌دهد فراتر نرفته است\&. رنگ پیش‌فرض به این معناست که هیچ اطلاعات آستانه‌ای در دسترس نبوده یا آستانه قابل محاسبه نبوده است\&. .fi .if n \{\ .RE .\} .RE .PP \-A, \-\-no\-aggr, \-\-no\-merge .RS 4 شمارش‌ها در بین پردازنده‌ها (CPUs) یا واحدهای PMU تحت نظارت تجمیع/ادغام نشوند\&. .RE .sp هنگامی که چندین رویداد از یک مشخصهٔ رویداد واحد ایجاد می‌شوند، stat به طور پیش‌فرض شمارش‌های رویداد را تجمیع کرده و نتیجه را در یک سطر نمایش می‌دهد\&. این گزینه این رفتار را غیرفعال کرده و هر رویداد و شمارش‌های آن را به صورت جداگانه نمایش می‌دهد\&. .sp رویدادهای چندگانه زمانی از یک مشخصهٔ رویدادِ واحد ایجاد می‌شوند که: .sp .RS 4 .ie n \{\ \h'-04' 1.\h'+01'\c .\} .el \{\ .sp -1 .IP " 1." 4.2 .\} نظارت بر PID درخواست نشده باشد و سیستم بیش از یک CPU داشته باشد\&. برای نمونه، سیستمی با ۸ ریسهٔ SMT روی هر ریسه یک رویداد باز شده خواهد داشت و تجمیع در میان آن‌ها انجام می‌پذیرد\&. .RE .sp .RS 4 .ie n \{\ \h'-04' 2.\h'+01'\c .\} .el \{\ .sp -1 .IP " 2." 4.2 .\} از تطبیق پیشوند یا الگوی نویسه‌وحشی (glob wildcard) برای نام PMU استفاده شود\&. به عنوان مثال، ممکن است چندین PMU کنترل‌کننده حافظه وجود داشته باشند که عموماً پسوند 0_، 1_ و غیره دارند\&. به طور پیش‌فرض، چنانچه PMU بدون پسوند مشخص شود (مانند uncore_imc به جای uncore_imc_0)، تمام شمارش‌های رویداد با یکدیگر ترکیب خواهند شد\&. .RE .sp .RS 4 .ie n \{\ \h'-04' 3.\h'+01'\c .\} .el \{\ .sp -1.IP " 3." 4.2 .\} نام‌های مستعاری (Aliases) که بلافاصله پس از رویدادهای Kernel PMU توسط perf list فهرست می‌شوند، استفاده می‌گردند\&. .PP \-\-hybrid\-merge .RS 4 شمارش رویدادهای هسته را از تمام PMUهای هسته ادغام می‌کند\&. در سامانه‌های ترکیبی (hybrid) یا big\&.LITTLE، به‌طور پیش‌فرض هر PMU هسته شمارش خود را جداگانه گزارش می‌دهد\&. این گزینه ادغام شمارش‌های PMU هسته را اجباری می‌کند تا رفتاری نزدیک‌تر به داشتن یک نوع CPU واحد در سامانه ارائه دهد\&. .RE .PP \-\-topdown .RS 4 معیارهای بالا به پایین (top\-down) پشتیبانی‌شده توسط CPU را چاپ می‌کند\&. این امر با تفکیک چرخه‌های مصرف‌شده به frontend bound، backend bound، bad speculation و retiring، امکان تعیین گلوگاه‌ها در خط لوله (pipeline) پردازنده را برای بارهای کاری وابسته به پردازنده (CPU bound) فراهم می‌سازد\&. .RE .RE .sp مفهوم Frontend bound بدین معناست که CPU نمی‌تواند دستورالعمل‌ها را با سرعت کافی واکشی (fetch) و رمزگشایی (decode) کند\&. مفهوم Backend bound بدین معناست که محاسبات یا دسترسی به حافظه گلوگاه اصلی است\&. عبارت Bad Speculation نشان‌دهنده هدر رفتن چرخه‌های پردازنده به دلیل پیش‌بینی‌های نادرست انشعاب (branch mispredictions) و مشکلات مشابه است\&. مفهوم Retiring یعنی پردازنده بدون گلوگاه مشهودی محاسبات را انجام داده است\&. گلوگاه تنها زمانی یک گلوگاه واقعی است که بار کاری واقعاً محدود به CPU باشد و نه چیز دیگر\&. .sp برای دریافت بهترین نتایج، معمولاً ایده خوبی است که از آن همراه با حالت بازه‌ای مانند \-I 1000 استفاده شود، چرا که گلوگاه بارهای کاری می‌تواند مکرراً تغییر کند\&. .sp این گزینه \-\-metric\-only را فعال می‌کند، مگر اینکه با \-\-no\-metric\-only لغو شود\&. .sp محدودیت‌های زیر تنها برای پردازنده‌های قدیمی‌تر Intel و Atom اعمال می‌شوند؛ در پردازنده‌های جدیدتر (IceLake و پس از آن)، معیارهای TopDown می‌توانند برای هر رشته‌ای (thread) جمع‌آوری شوند: .sp معیارهای بالا به پایین به‌جای هر رشته پردازنده، به ازای هر هسته جمع‌آوری می‌شوند\&. حالت per core به‌طور خودکار فعال می‌شود و گزینه \-a (پایش سراسری) مورد نیاز است که مستلزم دسترسی ریشه (root) یا تنظیم perf\&.perf_event_paranoid=\-1 می‌باشد\&. .sp تحلیل Topdown از کل Performance Monitoring Unit استفاده می‌کند و برای کسب بهترین نتیجه، نیازمند غیرفعال کردن NMI watchdog (به عنوان کاربر ریشه) است: echo 0 > /proc/sys/kernel/nmi_watchdog\&. در غیر این صورت، ممکن است گلوگاه‌ها در بارهای کاری با فازهای متغیر، متناقض و ناپایدار باشند\&. .sp برای تفسیر نتایج، معمولاً لازم است بدانیم بار کاری روی کدام CPUها اجرا می‌شود\&. در صورت نیاز می‌توان با استفاده از taskset، اجرای آن روی پردازنده‌های خاص را اجباری کرد\&. .PP \-\-record\-tpebs .RS 4 نمونه‌برداری خودکار را روی رویدادهای retire_latency در Intel TPEBS (رویداد دارای اصلاح‌کننده :R) فعال می‌کند\&. بدون این گزینه، perf مقدار پویای retire_latency را در زمان اجرا ثبت نمی‌کند\&. در حال حاضر، هنگامی که این گزینه تنظیم نشده باشد، مقدار صفر به رویداد retire_latency اختصاص می‌یابد\&. قابلیت سخت‌افزاری TPEBS از ریزمعماری Intel Granite Rapids آغاز می‌شود\&. این گزینه فقط در X86_64 وجود دارد و روی پلتفرم‌های Intel دارای ویژگی TPEBS معنادار است\&. .RE .PP \-\-tpebs\-mode=[mean|min|max|last] .RS 4 نحوه ترکیب زمان‌های نمونه‌برداری رویدادهای تاخیر بازنشستگی (retirement latency) را تنظیم می‌کند\&. مقدار پیش‌فرض "mean" میانگین تاخیر بازنشستگی را ارائه می‌دهد\&. مقادیر "min" یا "max" به ترتیب کمترین یا بیشترین زمان‌های تاخیر بازنشستگی را به دست می‌دهند\&. مقدار "last" از زمان آخرین نمونه تاخیر بازنشستگی استفاده می‌کند\&. .RE .PP \-\-td\-level .RS 4 آمار بالا به پایین (top\-down) را برابر با سطح ورودی چاپ می‌کند\&. این گزینه به کاربران اجازه می‌دهد تا به‌جای معیارهای بالا به پایین سطح ۱، سطح معیارهای مد نظر خود را چاپ کنند\&. .RE .sp از آنجا که سطوح بالاتر معیارهای بیشتری را گردآوری کرده و از شمارنده‌های بیشتری استفاده می‌کنند، دقت کمتری خواهند داشت\&. طبق یک قرارداد، می‌توان یک معیار را با افزودن \fI_group\fR به آن بررسی کرد و این کار دقت را نسبت به گردآوری تمام معیارها برای یک سطح افزایش می‌دهد\&. برای نمونه، تحلیل سطح ۱ ممکن است \fItma_frontend_bound\fR را برجسته کند\&. این معیار را می‌توان با \fItma_frontend_bound_group\fR و اجرای \fIperf stat \-M tma_frontend_bound_group\&...\fR به شکل دقیق‌تر و عمیق‌تر کاوش کرد\&. .sp در صورتی که ورودی بالاتر از حداکثر سطح پشتیبانی‌شده باشد، با خطا متوقف می‌شود\&. .PP \-\-smi\-cost .RS 4 در صورت پشتیبانی از رویدادهای msr/aperf/ و msr/smi/، هزینه SMI را اندازه می‌گیرد\&. .RE .sp در طول اندازه‌گیری، مقدار /sys/device/cpu/freeze_on_smi به منظور متوقف کردن (freeze) شمارنده‌های هسته هنگام بروز SMI تنظیم می‌شود\&. شمارنده aperf تحت تأثیر این تنظیم قرار نخواهد گرفت\&. هزینه SMI را می‌توان با (aperf \- unhalted core cycles) اندازه گرفت\&. .sp در عمل، درصد چرخه‌های SMI برای تحلیل‌های متمرکز بر کارایی بسیار مفید است\&. گزینه \-\-metric_only به‌طور پیش‌فرض اعمال خواهد شد\&. خروجی درصد چرخه‌های SMI است که برابر است با: (aperf \- unhalted core cycles) / aperf .sp کاربرانی که مایل به دریافت مقدار واقعی هستند می‌توانند گزینه \-\-no\-metric\-only را اعمال کنند\&. .PP \-\-all\-kernel .RS 4 پیکربندی تمام رویدادهای استفاده‌شده برای اجرا در فضای هسته (kernel space)\&. .RE .PP \-\-all\-user .RS 4 پیکربندی تمام رویدادهای استفاده‌شده برای اجرا در فضای کاربر (user space)\&. .RE .PP \-\-percore\-show\-thread .RS 4 اصلاح‌کننده رویداد "percore" از جمع بستن شمارش رویدادها برای همه رشته‌های سخت‌افزاری در یک هسته و نمایش شمارش به ازای هر هسته پشتیبانی می‌کند\&. .RE .sp این گزینه همراه با فعال بودن اصلاح‌کننده رویداد "percore"، شمارش رویدادها را برای تمام رشته‌های سخت‌افزاری در یک هسته جمع می‌زند اما مجموع شمارش‌ها را به ازای هر رشته سخت‌افزاری نمایش می‌دهد\&. این گزینه اساساً جایگزینی برای بیت any بوده و برای پس‌پردازش مناسب است\&. .PP \-\-summary .RS 4 خلاصه را برای حالت بازه‌ای (\-I) چاپ می‌کند\&. .RE .PP \-\-no\-csv\-summary .RS 4 از چاپ \fIsummary\fR در ستون نخست برای خروجی خلاصه CSV خودداری می‌کند\&. این گزینه باید همراه با \-x و \-\-summary استفاده شود\&. .RE .sp این گزینه را می‌توان در پیکربندی perf با تنظیم متغیر \fIstat\&.no\-csv\-summary\fR فعال کرد\&. .sp $ perf config stat\&.no\-csv\-summary=true .PP \-\-cputype .RS 4 برای پلتفرم ترکیبی (hybrid)، رویدادها را تنها روی پردازنده‌های منطبق با این نوع فعال می‌کند (مانند core یا atom)" .RE .PP \-\-pmu\-filter .RS 4 در صورت وجود چندین PMU از یک نوع، رویدادها را فقط روی PMU مشخص‌شده اعمال و فعال می‌کند (مانند hisi_sicl2_cpa0 یا hisi_sicl0_cpa0) .RE .SH "مثال‌ها (EXAMPLES)" .sp $ perf stat \-\- make .sp .if n \{\ .RS 4 .\} .nf Performance counter stats for \*(Aqmake\*(Aq: .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf 83723\&.452481 task\-clock:u (msec) # 1\&.004 CPUs utilized 0 context\-switches:u # 0\&.000 K/sec 0 cpu\-migrations:u # 0\&.000 K/sec 3,228,188 page\-faults:u # 0\&.039 M/sec 229,570,665,834 cycles:u # 2\&.742 GHz 313,163,853,778 instructions:u # 1\&.36 insn per cycle 69,704,684,856 branches:u # 832\&.559 M/sec 2,078,861,393 branch\-misses:u # 2\&.98% of all branches .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf 83\&.409183620 seconds time elapsed .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf 74\&.684747000 seconds user 8\&.739217000 seconds sys .fi .if n \{\ .RE .\}.SH "زمان‌بندی‌ها (TIMINGS)" .sp همان‌طور که در مثال بالا نشان داده شده است، می‌توانیم ۳ نوع زمان‌بندی را نمایش دهیم\&. ما همیشه مدت زمانی را که شمارنده‌ها فعال/زنده بوده‌اند نمایش می‌دهیم: .sp .if n \{\ .RS 4 .\} .nf 83\&.409183620 seconds time elapsed .fi .if n \{\ .RE .\} .sp برای نشست‌های بار کاری، همچنین زمانی را که بار کاری در فضای کاربری/سیستمی سپری کرده است نمایش می‌دهیم: .sp .if n \{\ .RS 4 .\} .nf 74\&.684747000 seconds user 8\&.739217000 seconds sys .fi .if n \{\ .RE .\} .sp این زمان‌ها دقیقاً همان زمان‌هایی هستند که توسط ابزار \fItime\fR نمایش داده می‌شوند\&. .SH "قالب CSV (CSV FORMAT)" .sp با \-x، دستور perf stat می‌تواند خروجی‌ای با قالبی نه‌چندان استانداردِ CSV تولید کند؛ ویرگول‌ها در خروجی درون "" قرار نمی‌گیرند\&. برای اینکه تجزیهٔ آن آسان‌تر شود، توصیه می‌شود از نویسهٔ متفاوتی مانند \-x \e; استفاده کنید\&. .sp فیلدها به این ترتیب هستند: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} برچسب زمانی اختیاری بر حسب میکروثانیه (usec) به‌صورت کسری از ثانیه (با \-I xxx) .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} شناسه اختیاری CPU، هسته، یا سوکت .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} تعداد اختیاری CPUهای منطقی تجمیع‌شده .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} مقدار شمارنده .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} واحد مقدار شمارنده یا خالی .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} نام رویداد .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} مدت‌زمان اجرای شمارنده .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} درصد زمانی از اندازه‌گیری که شمارنده در حال اجرا بوده است .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} واریانس اختیاری در صورت جمع‌آوری چندین مقدار با \-r .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} مقدار اختیاری سنجه (metric) .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} واحد اختیاری سنجه .RE .sp ممکن است سنجه‌های اضافی چاپ شوند در حالی که تمام فیلدهای قبلی خالی هستند\&..SH "پشتیبانی از ساختار هایبرید اینتل (INTEL HYBRID SUPPORT)" .sp پشتیبانی از رویدادهای هایبرید اینتل در ابزارهای perf\&. .sp برای برخی از پلتفرم‌های اینتل، مانند AlderLake، که پلتفرمی هایبرید است و از پردازنده‌های atom و core تشکیل شده است\&. هر پردازنده فهرست رویدادهای اختصاصی خود را دارد\&. بخشی از رویدادها روی پردازنده core در دسترس هستند، بخشی روی پردازنده atom و حتی بخشی روی هر دو\&. .sp کرنل دو PMU جدید پردازنده را از طریق sysfs ارائه می‌دهد: /sys/bus/event_source/devices/cpu_core /sys/bus/event_source/devices/cpu_atom .sp فایل‌های \fIcpus\fR در زیر این دایرکتوری‌ها ایجاد می‌شوند\&. برای مثال، .sp cat /sys/bus/event_source/devices/cpu_core/cpus 0\-15 .sp cat /sys/bus/event_source/devices/cpu_atom/cpus 16\-23 .sp این نشان می‌دهد که cpu0\-cpu15 پردازنده‌های core و cpu16\-cpu23 پردازنده‌های atom هستند\&. .sp مانند گذشته، برای فهرست کردن رویدادهای نمادین از perf\-list استفاده کنید\&. .sp perf list .sp inst_retired\&.any [Fixed Counter: Counts the number of instructions retired\&. Unit: cpu_atom] inst_retired\&.any [Number of instructions retired\&. Fixed Counter \- architectural event\&. Unit: cpu_core] .sp عبارت \fIUnit: xxx\fR به توضیحات کوتاه افزوده شده است تا مشخص کند رویداد متعلق به کدام PMU است\&. رویدادهای هم‌نام با PMU متفاوت پشتیبانی می‌شوند\&. .sp فعال‌سازی رویداد هایبرید با یک PMU مشخص .sp برای فعال‌سازی رویدادی که صرفاً مخصوص core یا مخصوص atom است، نحو زیر پشتیبانی می‌شود: .sp .if n \{\ .RS 4 .\} .nf cpu_core// or cpu_atom// .fi .if n \{\ .RE .\} .sp برای مثال، شمارش رویداد \fIcycles\fR روی پردازنده‌های core\&. .sp .if n \{\ .RS 4 .\} .nf perf stat \-e cpu_core/cycles/ .fi .if n \{\ .RE .\} .sp ایجاد خودکار دو رویداد برای یک رویداد سخت‌افزاری .sp هنگام ایجاد یک رویداد، در صورتی که آن رویداد روی هر دو پردازنده atom و core موجود باشد، دو رویداد به‌طور خودکار ایجاد می‌شوند\&. یکی برای atom و دیگری برای core\&. بیشتر رویدادهای سخت‌افزاری و رویدادهای cache روی هر دو cpu_core و cpu_atom در دسترس هستند\&. .sp رویدادهای سخت‌افزاری دارای پیکربندی‌های از پیش تعریف‌شده هستند (برای مثال 0 برای cycles)\&. اما در پلتفرم هایبرید، کرنل باید بداند که رویداد از کجا می‌آید (از atom یا از core)\&. نوع اولیه رویداد در perf، یعنی PERF_TYPE_HARDWARE نمی‌تواند اطلاعات PMU را حمل کند\&. بنابراین اکنون این نوع گسترش یافته تا نوعی آگاه از PMU باشد\&. شناسه نوع PMU در attr\&.config[63:32] ذخیره می‌شود\&. .sp شناسه نوع PMU از sysfs بازیابی می‌شود\&. /sys/bus/event_source/devices/cpu_atom/type /sys/bus/event_source/devices/cpu_core/type .sp طرح‌بندی جدید attr\&.config برای PERF_TYPE_HARDWARE: .sp PERF_TYPE_HARDWARE: 0xEEEEEEEE000000AA AA: شناسه رویداد سخت‌افزاری EEEEEEEE: شناسه نوع PMU .sp رویداد cache نیز مشابه است\&. نوع PERF_TYPE_HW_CACHE برای آگاهی از PMU ارتقا یافته است\&. شناسه نوع PMU در attr\&.config[63:32] ذخیره می‌شود\&. .sp طرح‌بندی جدید attr\&.config برای PERF_TYPE_HW_CACHE: .sp PERF_TYPE_HW_CACHE: 0xEEEEEEEE00DDCCBB BB: شناسه cache سخت‌افزاری CC: شناسه عملیات cache سخت‌افزاری DD: شناسه نتیجه عملیات cache سخت‌افزاری EEEEEEEE: شناسه نوع PMU .sp هنگام فعال‌سازی یک رویداد سخت‌افزاری بدون تعیین PMU، مانند perf stat \-e cycles \-a (در این مثال از حالت سرتاسری سیستم استفاده شده است)، دو رویداد به‌طور خودکار ایجاد می‌شوند\&. .sp .if n \{\ .RS 4 .\} .nf \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- perf_event_attr: size 120 config 0x400000000 sample_type IDENTIFIER read_format TOTAL_TIME_ENABLED|TOTAL_TIME_RUNNING disabled 1 inherit 1 exclude_guest 1 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- .fi .if n \{\ .RE .\} .sp و .sp .if n \{\ .RS 4 .\} .nf \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- perf_event_attr: size 120 config 0x800000000 sample_type IDENTIFIER read_format TOTAL_TIME_ENABLED|TOTAL_TIME_RUNNING disabled 1 inherit 1 exclude_guest 1 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- .fi .if n \{\ .RE .\} .sp نوع 0 برابر با PERF_TYPE_HARDWARE است\&. مقدار 0x4 در 0x400000000 نشان‌دهنده PMU پردازنده‌های cpu_core است\&. مقدار 0x8 در 0x800000000 نشان‌دهنده PMU پردازنده‌های cpu_atom است (شناسه نوع PMU برای atom تصادفی است)\&. .sp کرنل \fIcycles\fR (0x400000000) را روی cpu0\-cpu15 (پردازنده‌های core) ایجاد می‌کند، و \fIcycles\fR (0x800000000) را روی cpu16\-cpu23 (پردازنده‌های atom) می‌سازد\&. .sp در نتیجه perf\-stat، دو رویداد نمایش داده می‌شود: .sp .if n \{\ .RS 4 .\} .nf Performance counter stats for \*(Aqsystem wide\*(Aq: .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf 6,744,979 cpu_core/cycles/ 1,965,552 cpu_atom/cycles/ .fi .if n \{\ .RE .\} .sp اولین \fIcycles\fR رویداد core و دومین \fIcycles\fR رویداد atom است\&. .sp مثال در حالت ریسه (Thread mode): .sp دستور perf\-stat شمارش‌های مقیاس‌بندی‌شده را برای رویداد هایبرید گزارش کرده و درصدی را نیز نمایش می‌دهد\&. این درصد برابر است با نسبت زمان اجرای رویداد به زمان فعال بودن آن (running time/enabling time)\&. .sp به عنوان یک مثال، \fItriad_loop\fR روی cpu16 (هسته atom) اجرا می‌شود، در حالی که می‌توان دید مقدار مقیاس‌بندی‌شده برای چرخه‌های core برابر با 160,444,092 و درصد آن 0\&.47% است\&. .sp perf stat \-e cycles \-\- taskset \-c 16 \&./triad_loop .sp همانند قبل، دو رویداد ایجاد می‌شود\&. .sp .if n \{\ .RS 4 .\} .nf \&.ft C perf_event_attr: size 120 config 0x400000000 sample_type IDENTIFIER read_format TOTAL_TIME_ENABLED|TOTAL_TIME_RUNNING disabled 1 inherit 1 enable_on_exec 1 exclude_guest 1 \&.ft .fi .if n \{\ .RE .\} .sp و .sp .if n \{\ .RS 4 .\} .nf \&.ft C perf_event_attr: size 120 config 0x800000000 sample_type IDENTIFIER read_format TOTAL_TIME_ENABLED|TOTAL_TIME_RUNNING disabled 1 inherit 1 enable_on_exec 1 exclude_guest 1 \&.ft .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf Performance counter stats for \*(Aqtaskset \-c 16 \&./triad_loop\*(Aq: .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf 233,066,666 cpu_core/cycles/ (0\&.43%) 604,097,080 cpu_atom/cycles/ (99\&.57%) .fi .if n \{\ .RE .\} .sp perf\-record: .sp اگر گزینه \fI\-e\fR در perf record مشخص نشده باشد، در پلتفرم هایبرید دو رویداد پیش‌فرض \fIcycles\fR ایجاد شده و به فهرست رویدادها افزوده می‌شوند\&. یکی برای core و دیگری برای atom\&. .sp perf\-stat: .sp اگر گزینه \fI\-e\fR در perf stat مشخص نشده باشد، در پلتفرم هایبرید، علاوه بر رویدادهای نرم‌افزاری، رویدادهای زیر ایجاد شده و به ترتیب به فهرست رویدادها افزوده می‌شوند\&. .sp cpu_core/cycles/, cpu_atom/cycles/, cpu_core/instructions/, cpu_atom/instructions/, cpu_core/branches/, cpu_atom/branches/, cpu_core/branch\-misses/, cpu_atom/branch\-misses/ .sp البته، هر دو دستور perf\-stat و perf\-record از فعال‌سازی رویداد هایبرید با یک PMU مشخص پشتیبانی می‌کنند\&. .sp برای نمونه: perf stat \-e cpu_core/cycles/ perf stat \-e cpu_atom/cycles/ perf stat \-e cpu_core/r1a/ perf stat \-e cpu_atom/L1\-icache\-loads/ perf stat \-e cpu_core/cycles/,cpu_atom/instructions/ perf stat \-e \fI{cpu_core/cycles/,cpu_core/instructions/}\fR .sp اما دستور \fI{cpu_core/cycles/,cpu_atom/instructions/}\fR یک هشدار بازمی‌گرداند و گروه‌بندی را غیرفعال می‌کند، زیرا PMUهای موجود در گروه با یکدیگر مطابقت ندارند (cpu_core در برابر cpu_atom)\&..SH "قالب JSON (JSON FORMAT)" .sp با \-j، ابزار perf stat قادر است خروجی را در قالب JSON تولید کند که برای تجزیه قابل استفاده است\&. .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} interval : برچسب زمانی اختیاری به کسری از ثانیه (همراه با \-I) .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} گزینه‌های تجمیع اختیاری: .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} core : شناسهٔ هسته (همراه با \-\-per\-core) .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} die : شناسهٔ die (همراه با \-\-per\-die) .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} socket : شناسهٔ سوکت (همراه با \-\-per\-socket) .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} node : شناسهٔ گره (همراه با \-\-per\-node) .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} thread : شناسهٔ نخ (همراه با \-\-per\-thread) .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} counters : تعداد شمارنده‌های تجمیع‌شدهٔ PMU .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} counter\-value : مقدار شمارنده .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} unit : واحد مقدار شمارنده یا خالی .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} event : نام رویداد .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} variance : واریانس اختیاری در صورت جمع‌آوری چندین مقدار (همراه با \-r) .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} event\-runtime : زمان اجرای رویداد .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} pcnt\-running : درصد زمانی که رویداد در حال اجرا بوده است .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} metric\-value : مقدار اختیاری متریک .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} metric\-unit : واحد اختیاری متریک .RE.SH "همچنین ببینید (SEE ALSO)" .sp \fBperf-top\fR(1), \fBperf-list\fR(1)