'\" t .\" Title: perf-sched .\" 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\-SCHED" "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-sched \- ابزاری برای ردگیری و سنجش ویژگی‌های زمان‌بند (تاخیرها) .SH "خلاصه دستور (SYNOPSIS)" .sp .nf \fIperf sched\fR {record|latency|map|replay|script|timehist|stats} .fi .SH "توضیحات (DESCRIPTION)" .sp چندین حالت مختلف از \fIperf sched\fR وجود دارد: .sp .if n \{\ .RS 4 .\} .nf دستور \*(Aqperf sched record \*(Aq برای ثبت رویدادهای زمان‌بندی یک بار کاری دلخواه\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf دستور \*(Aqperf sched latency\*(Aq برای گزارش تاخیرهای زمان‌بندی به ازای هر وظیفه و دیگر ویژگی‌های زمان‌بندی بار کاری\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf مثال کاربرد: perf sched record \-\- sleep 1 perf sched latency .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- Task | Runtime ms | Count | Avg delay ms | Max delay ms | Max delay start | Max delay end | \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- perf:(2) | 2\&.804 ms | 66 | avg: 0\&.524 ms | max: 1\&.069 ms | max start: 254752\&.314960 s | max end: 254752\&.316029 s NetworkManager:1343 | 0\&.372 ms | 13 | avg: 0\&.008 ms | max: 0\&.013 ms | max start: 254751\&.551153 s | max end: 254751\&.551166 s kworker/1:2\-xfs:4649 | 0\&.012 ms | 1 | avg: 0\&.008 ms | max: 0\&.008 ms | max start: 254751\&.519807 s | max end: 254751\&.519815 s kworker/3:1\-xfs:388 | 0\&.011 ms | 1 | avg: 0\&.006 ms | max: 0\&.006 ms | max start: 254751\&.519809 s | max end: 254751\&.519815 s sleep:147736 | 0\&.938 ms | 3 | avg: 0\&.006 ms | max: 0\&.007 ms | max start: 254751\&.313817 s | max end: 254751\&.313824 s .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf این دستور مقادیر Runtime (مدت‌زمانی که یک وظیفه واقعاً روی CPU در حال اجرا بوده)، Count (تعداد دفعاتی که تاخیر محاسبه شده) و delay (مدت‌زمانی که یک وظیفه آماده اجرا بوده اما در انتظار نگه داشته شده) را نمایش می‌دهد\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf وظایفی با نام دستور یکسان ادغام می‌شوند و تعداد موارد ادغام‌شده درون () نمایش داده می‌شود؛ با این حال اگر گزینه \-p استفاده شود، pid ذکر می‌گردد\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf دستور \*(Aqperf sched script\*(Aq برای مشاهده ردگیری دقیق بار کاری که ثبت شده است (در حال حاضر نام مستعاری برای \*(Aqperf script\*(Aq است)\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf دستور \*(Aqperf sched replay\*(Aq برای شبیه‌سازی بار کاری که از طریق perf sched record ضبط شده است\&. (این کار با راه‌اندازی ریسمان‌های شبیه‌سازی‌شده‌ای انجام می‌شود که بار کاری را بر اساس رویدادهای موجود در ردگیری تقلید می‌کنند\&. این ریسمان‌ها سپس می‌توانند زمان‌بندی‌ها (مدت‌زمان اجرای CPU و الگوهای خواب) بار کاری را دقیقاً همان‌گونه که در زمان ثبت رخ داده بود بازپخش کنند \- و می‌توانند آن را چندین بار تکرار کرده و کارایی آن را بسنجند\&.) .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf دستور \*(Aqperf sched map\*(Aq برای چاپ ساختار متنی تعویض زمینه (context\-switching) بار کاری ثبت‌شده از طریق perf sched record\&. ستون‌ها نمایانگر تک‌تک CPUها هستند و شناسه‌های اختصاری دو حرفی نشان‌دهنده وظایفی هستند که روی یک CPU در حال اجرا می‌باشند\&. یک \*(Aq*\*(Aq نشان‌دهنده CPU دارای رویداد است و یک نقطه نشان‌دهنده یک CPU بیکار است\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf دستور \*(Aqperf sched timehist\*(Aq تحلیلی از رویدادهای زمان‌بندی ارائه می‌دهد\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf مثال کاربرد: perf sched record \-\- sleep 1 perf sched timehist .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf به طور پیش‌فرض، رویدادهای زمان‌بندی به صورت مجزا نمایش داده می‌شوند، از جمله زمان انتظار (wait time، زمان بین رویدادهای sched\-out و sched\-in بعدی برای وظیفه)، تاخیر زمان‌بندی وظیفه (scheduling delay، زمان بین آماده به کار بودن و اجرای واقعی) و مدت‌زمان اجرای (run time) وظیفه: .fi .if n \{\ .RE .\}.sp .if n \{\ .RS 4 .\} .nf time cpu task name wait time sch delay run time [tid/pid] (msec) (msec) (msec) \-\-\-\-\-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\- 79371\&.874569 [0011] gcc[31949] 0\&.014 0\&.000 1\&.148 79371\&.874591 [0010] gcc[31951] 0\&.000 0\&.000 0\&.024 79371\&.874603 [0010] migration/10[59] 3\&.350 0\&.004 0\&.011 79371\&.874604 [0011] 1\&.148 0\&.000 0\&.035 79371\&.874723 [0005] 0\&.016 0\&.000 1\&.383 79371\&.874746 [0005] gcc[31949] 0\&.153 0\&.078 0\&.022 \&.\&.\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf زمان‌ها بر حسب msec\&.usec هستند\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf دستور \*(Aqperf sched stats {record | report | diff} \*(Aq به‌ترتیب برای ثبت، گزارش تفاوت در شمارنده‌های schedstat و نمایش اختلاف میان گزارش‌های perf sched stats به‌کار می‌رود\&. شمارنده‌های schedstat که در هسته لینوکس وجود دارند، از طریق فایل ``/proc/schedstat`` در دسترس قرار می‌گیرند\&. این شمارنده‌ها از طریق sysctl که توسط فایل ``/proc/sys/kernel/sched_schedstats`` کنترل می‌شود، فعال یا غیرفعال می‌شوند\&. این شمارنده‌ها رویدادهای متعددی از زمان‌بند، از جمله فراخوانی‌های ``schedule()``، رویدادهای توازن بار (load\-balancing) و فراخوانی‌های ``try_to_wakeup()`` را محاسبه می‌کنند\&. این قابلیت برای درک رفتار زمان‌بند در برابر بار کاری مفید است\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf نکته: در صورتی که در فاصله زمانی بین ثبت اسنپ‌شات‌های `/proc/schedstat`، بازآرایی توپولوژیک یا آنلاین/آفلاین شدن cpuها رخ دهد، این ابزار نتایج درستی ارائه نخواهد داد\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf نمونه کاربرد: perf sched stats record \-\- sleep 1 perf sched stats report perf sched stats diff .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf توضیحات تفصیلی درباره schedstat را می‌توان در مستندات هسته یافت: https://www\&.kernel\&.org/doc/html/latest/scheduler/sched\-stats\&.html .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf نتیجه را می‌توان به‌صورت زیر تفسیر کرد: .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf دستور `perf sched stats report` با شرح ستون‌های موجود در گزارش آغاز می‌شود\&. این نام‌های ستون پیش از آمار cpu و domain آورده شده‌اند تا خوانایی گزارش بهبود یابد\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- DESC \-> Description of the field COUNT \-> Value of the field PCT_CHANGE \-> Percent change with corresponding base value AVG_JIFFIES \-> Avg time in jiffies between two consecutive occurrence of event \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf مورد بعدی، کل زمان پروفایل‌سازی بر حسب jiffies است: .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- Time elapsed (in jiffies) : 2323 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf مورد بعدی، آمار زمان‌بندی CPU است\&. این موارد تفاضل‌های ساده‌ای از خطوط CPU در /proc/schedstat به‌همراه شرح آن‌ها هستند\&. این گزارش همچنین مقدار % را نسبت به آمار پایه چاپ می‌کند\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf در مثال زیر، schedule() پردازنده CPU0 را در 36\&.58% از زمان در حالت بیکار رها کرده است\&. 0\&.45% از کل فراخوانی‌های try_to_wake_up() برای بیدار کردن CPU محلی بوده است\&. و کل زمان انتظار وظایف روی CPU0 برابر با 48\&.70% از کل زمان اجرای وظایف روی همان CPU است\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- CPU 0 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- DESC COUNT PCT_CHANGE \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- yld_count : 0 array_exp : 0 sched_count : 402267 sched_goidle : 147161 ( 36\&.58% ) ttwu_count : 236309 ttwu_local : 1062 ( 0\&.45% ) rq_cpu_time : 7083791148 run_delay : 3449973971 ( 48\&.70% ) pcount : 255035 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- .fi .if n \{\ .RE .\}.sp .if n \{\ .RS 4 .\} .nf بخش بعدی آمار موازنه‌سازی بار (load balancing) است\&. زمان‌بند برای هر یک از دامنه‌های زمان‌بندی (مانند: `SMT`، `MC`، `DIE`\&.\&.\&.)، آمار را در سه دسته‌بندی زیر محاسبه می‌کند: .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf 1) Idle Load Balance: موازنه‌سازی بار انجام‌شده توسط یک CPU دیگر به نیابت از یک CPU که به مدت طولانی بی‌کار بوده است\&. 2) Busy Load Balance: موازنه‌سازی بار انجام‌شده زمانی که CPU مشغول بوده است\&. 3) New Idle Balance : موازنه‌سازی بار انجام‌شده هنگامی که یک CPU به‌تازگی بی‌کار شده است\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf ذیل هر یک از این سه دسته‌بندی، گزارش sched stats آمارهای متفاوتی از موازنه‌سازی بار را ارائه می‌دهد\&. در کنار آمارهای مستقیم، این گزارش حاوی معیارهای مشتق‌شده‌ای نیز هست که با * پیشوندگذاری شده‌اند\&. مثال: .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- CPU 0, DOMAIN SMT CPUS 0,64 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- DESC COUNT AVG_JIFFIES \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- busy_lb_count : 136 $ 17\&.08 $ busy_lb_balanced : 131 $ 17\&.73 $ busy_lb_failed : 0 $ 0\&.00 $ busy_lb_imbalance_load : 58 busy_lb_imbalance_util : 0 busy_lb_imbalance_task : 0 busy_lb_imbalance_misfit : 0 busy_lb_gained : 7 busy_lb_hot_gained : 0 busy_lb_nobusyq : 2 $ 1161\&.50 $ busy_lb_nobusyg : 129 $ 18\&.01 $ *busy_lb_success_count : 5 *busy_lb_avg_pulled : 1\&.40 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- idle_lb_count : 449 $ 5\&.17 $ idle_lb_balanced : 382 $ 6\&.08 $ idle_lb_failed : 3 $ 774\&.33 $ idle_lb_imbalance_load : 0 idle_lb_imbalance_util : 0 idle_lb_imbalance_task : 71 idle_lb_imbalance_misfit : 0 idle_lb_gained : 67 idle_lb_hot_gained : 0 idle_lb_nobusyq : 0 $ 0\&.00 $ idle_lb_nobusyg : 382 $ 6\&.08 $ *idle_lb_success_count : 64 *idle_lb_avg_pulled : 1\&.05 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- newidle_lb_count : 30471 $ 0\&.08 $ newidle_lb_balanced : 28490 $ 0\&.08 $ newidle_lb_failed : 633 $ 3\&.67 $ newidle_lb_imbalance_load : 0 newidle_lb_imbalance_util : 0 newidle_lb_imbalance_task : 2040 newidle_lb_imbalance_misfit : 0 newidle_lb_gained : 1348 newidle_lb_hot_gained : 0 newidle_lb_nobusyq : 6 $ 387\&.17 $ newidle_lb_nobusyg : 26634 $ 0\&.09 $ *newidle_lb_success_count : 1348 *newidle_lb_avg_pulled : 1\&.00 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf سطر زیر را در نظر بگیرید: .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf newidle_lb_balanced : 28490 $ 0\&.08 $ .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf در حالی که پروفایل‌سازی فعال بود، موازنه‌ساز بار ۲۸۴۹۰ بار تشخیص داد که بار روی CPU 0 که به‌تازگی بی‌کار شده نیاز به موازنه‌سازی دارد\&. مقدار درج‌شده درون علامت $، میانگین jiffies میان دو رویداد است (2323 / 28490 = 0\&.08)\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf بخش بعدی آمار active_load_balance() است\&. در زمان فعال بودن پروفایل‌سازی، alb فراخوانی نشد، از این رو تمام مقادیر آن 0 هستند\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- alb_count : 0 alb_failed : 0 alb_pushed : 0 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf بخش بعدی آمار sched_balance_exec() و sched_balance_fork() است\&. از آن‌ها استفاده نمی‌شود اما صرفاً برای سازگاری با نسخه‌های پیشین در RFC نگه داشته شده‌اند\&. در صورت عدم مخالفت، برنامه‌ریزی شده است که در بازبینی بعدی حذف شوند\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf بخش بعدی آمار بیدارباش (wakeup) است\&. این گزارش برای هر دامنه، آمار بیدار شدن وظایف (task\-wakeup) را نیز نمایش می‌دهد\&. مثال: .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- ttwu_wake_remote : 1590 ttwu_move_affine : 84 ttwu_move_balance : 0 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- .fi .if n \{\ .RE .\}.sp .if n \{\ .RS 4 .\} .nf مجموعه یکسانی از آمارها برای هر CPU و هر سطح دامنه (domain) گزارش می‌شود\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf نحوه تفسیر diff ~~~~~~~~~~~~~~~ .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf دستور `perf sched stats diff` همچنین با توضیح ستون‌های موجود در diff آغاز خواهد شد\&. سپس اختلاف زمانی را بر حسب jiffies نمایش می‌دهد\&. ترتیب مقادیر به ترتیب فایل‌های داده ورودی بستگی دارد\&. این دستور به‌طور پیش‌فرض به‌ترتیب `perf\&.data\&.old` و `perf\&.data` را برای مقایسه در نظر می‌گیرد\&. مثال: .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- Time elapsed (in jiffies) : 2009, 2001 \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf در زیر نمونه‌ای آورده شده است که تفاوت در آمارهای cpu و domain دو اجرا را نشان می‌دهد\&. در اینجا ستون سوم یا مقادیر محصور در `|\&.\&.\&.|` درصد تغییرات بین این دو را نشان می‌دهد\&. ستون‌های دوم و چهارم نمایش کنار همِ فیلدهای متناظر از `perf sched stats report` هستند\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- CPU \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- DESC COUNT1 COUNT2 PCT_CHANG> \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- yld_count : 0, 0 | 0\&.00> array_exp : 0, 0 | 0\&.00> sched_count : 528533, 412573 | \-21\&.94> sched_goidle : 193426, 146082 | \-24\&.48> ttwu_count : 313134, 385975 | 23\&.26> ttwu_local : 1126, 1282 | 13\&.85> rq_cpu_time : 8257200244, 8301250047 | 0\&.53> run_delay : 4728347053, 3997100703 | \-15\&.47> pcount : 335031, 266396 | \-20\&.49> \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf در زیر نمونه‌ای از diff آمارهای domain آورده شده است: .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- CPU , DOMAIN SMT \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- DESC COUNT1 COUNT2 PCT_CHANG> \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- busy_lb_count : 122, 80 | \-34\&.43> busy_lb_balanced : 115, 76 | \-33\&.91> busy_lb_failed : 1, 3 | 200\&.00> busy_lb_imbalance_load : 35, 49 | 40\&.00> busy_lb_imbalance_util : 0, 0 | 0\&.00> busy_lb_imbalance_task : 0, 0 | 0\&.00> busy_lb_imbalance_misfit : 0, 0 | 0\&.00> busy_lb_gained : 7, 2 | \-71\&.43> busy_lb_hot_gained : 0, 0 | 0\&.00> busy_lb_nobusyq : 0, 0 | 0\&.00> busy_lb_nobusyg : 115, 76 | \-33\&.91> *busy_lb_success_count : 6, 1 | \-83\&.33> *busy_lb_avg_pulled : 1\&.17, 2\&.00 | 71\&.43> \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- idle_lb_count : 568, 620 | 9\&.15> idle_lb_balanced : 462, 449 | \-2\&.81> idle_lb_failed : 11, 21 | 90\&.91> idle_lb_imbalance_load : 0, 0 | 0\&.00> idle_lb_imbalance_util : 0, 0 | 0\&.00> idle_lb_imbalance_task : 115, 189 | 64\&.35> idle_lb_imbalance_misfit : 0, 0 | 0\&.00> idle_lb_gained : 103, 169 | 64\&.08> idle_lb_hot_gained : 0, 0 | 0\&.00> idle_lb_nobusyq : 0, 0 | 0\&.00> idle_lb_nobusyg : 462, 449 | \-2\&.81> *idle_lb_success_count : 95, 150 | 57\&.89> *idle_lb_avg_pulled : 1\&.08, 1\&.13 | 3\&.92> \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- newidle_lb_count : 16961, 3155 | \-81\&.40> newidle_lb_balanced : 15646, 2556 | \-83\&.66> newidle_lb_failed : 397, 142 | \-64\&.23> newidle_lb_imbalance_load : 0, 0 | 0\&.00> newidle_lb_imbalance_util : 0, 0 | 0\&.00> newidle_lb_imbalance_task : 1376, 655 | \-52\&.40> newidle_lb_imbalance_misfit : 0, 0 | 0\&.00> newidle_lb_gained : 917, 457 | \-50\&.16> newidle_lb_hot_gained : 0, 0 | 0\&.00> newidle_lb_nobusyq : 3, 1 | \-66\&.67> newidle_lb_nobusyg : 14480, 2103 | \-85\&.48> *newidle_lb_success_count : 918, 457 | \-50\&.22> *newidle_lb_avg_pulled : 1\&.00, 1\&.00 | 0\&.11> \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- alb_count : 0, 1 | 0\&.00> alb_failed : 0, 0 | 0\&.00> alb_pushed : 0, 1 | 0\&.00> \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- sbe_count : 0, 0 | 0\&.00> sbe_balanced : 0, 0 | 0\&.00> sbe_pushed : 0, 0 | 0\&.00> \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- sbf_count : 0, 0 | 0\&.00> sbf_balanced : 0, 0 | 0\&.00> sbf_pushed : 0, 0 | 0\&.00> \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- ttwu_wake_remote : 2031, 2914 | 43\&.48> ttwu_move_affine : 73, 124 | 69\&.86> ttwu_move_balance : 0, 0 | 0\&.00> \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- .fi .if n \{\ .RE .\}.SH "گزینه‌ها (OPTIONS)" .sp قابل اعمال بر {record|latency|map|replay|script} .PP \-i, \-\-input= .RS 4 نام فایل ورودی\&. (پیش‌فرض: perf\&.data مگر اینکه stdin یک fifo باشد) .RE .PP \-v, \-\-verbose .RS 4 نمایش توضیحات بیشتر\&. (نمایش آدرس نمادها و غیره) .RE .PP \-D, \-\-dump\-raw\-trace= .RS 4 نمایش خروجی کامل و پرجزئیات داده‌های sched\&. .RE .PP \-f, \-\-force .RS 4 بدون پرسش یا اخطار انجام بده\&. .RE .SH "گزینه‌ها برای \FIPERF SCHED LATENCY\FR (OPTIONS FOR \FIPERF SCHED LATENCY\FR)" .PP \-C, \-\-CPU .RS 4 پردازنده‌ای (CPU) که ارزیابی عملکرد روی آن انجام می‌شود\&. .RE .PP \-p, \-\-pids .RS 4 آمار تاخیر (latency) بر حسب pid به جای نام دستور\&. .RE .PP \-s, \-\-sort .RS 4 مرتب‌سازی بر اساس کلید(ها): runtime، switch، avg، max به‌طور پیش‌فرض بر اساس "avg ,max ,switch ,runtime" مرتب می‌شود\&. .RE .SH "گزینه‌ها برای \FIPERF SCHED MAP\FR (OPTIONS FOR \FIPERF SCHED MAP\FR)" .PP \-\-compact .RS 4 فقط پردازنده‌های دارای فعالیت را نمایش بده\&. به مصورسازی در سامانه‌های دارای تعداد هسته بالا کمک می‌کند\&. .RE .PP \-\-cpus .RS 4 فقط ورودی‌های دارای فعالیت برای CPUهای مشخص‌شده را نمایش بده\&. .RE .PP \-\-color\-cpus .RS 4 برجسته‌سازی CPUهای مشخص‌شده\&. .RE .PP \-\-color\-pids .RS 4 برجسته‌سازی pidهای مشخص‌شده\&. .RE .PP \-\-task\-name .RS 4 نگاشت خروجی تنها برای نام وظیفه(های) مشخص‌شده\&. نام‌های وظایف را با کاما (بدون فاصله) جدا کنید\&. زمان sched\-out چاپ شده و با \fI*\-\fR برای نام وظیفه(های) داده‌شده نشان داده می‌شود\&. (\fI\-\fR نشان‌دهنده سایر وظایف است، در حالی که \fI\&.\fR حالت بیکار یا idle است)\&. .RE .PP \-\-fuzzy\-name .RS 4 نام وظیفه(های) داده‌شده می‌تواند به‌صورت تقریبی تطبیق داده شود (تطبیق فازی)\&. .RE .SH "گزینه‌ها برای \FIPERF SCHED TIMEHIST\FR (OPTIONS FOR \FIPERF SCHED TIMEHIST\FR)" .PP \-k, \-\-vmlinux= .RS 4 مسیر فایل vmlinux .RE .PP \-\-kallsyms= .RS 4 مسیر فایل kallsyms .RE .PP \-g, \-\-call\-graph .RS 4 نمایش زنجیره‌های فراخوانی (call chains) در صورت وجود (به‌طور پیش‌فرض فعال است)\&. .RE .PP \-\-max\-stack .RS 4 حداکثر تعداد توابع برای نمایش در backtrace؛ پیش‌فرض ۵\&. .RE .PP \-C=, \-\-cpu= .RS 4 فقط رویدادهای مربوط به CPU(های) مشخص‌شده را نمایش بده (فهرست جداشده با کاما)\&. .RE .PP \-p=, \-\-pid= .RS 4 فقط رویدادهای مربوط به شناسه فرایند (PID) مشخص‌شده را نمایش بده (فهرست جداشده با کاما)\&. .RE .PP \-t=, \-\-tid= .RS 4 فقط رویدادهای مربوط به شناسه رشته (TID) مشخص‌شده را نمایش بده (فهرست جداشده با کاما)\&. .RE .PP \-s, \-\-summary .RS 4 فقط خلاصه‌ای از زمان‌بندی بر حسب رشته همراه با کمینه، بیشینه و میانگین زمان‌های اجرا (به ثانیه) و انحراف معیار نسبی را نمایش بده\&. .RE .PP \-S, \-\-with\-summary .RS 4 نمایش تمام رویدادهای زمان‌بندی و به دنبال آن خلاصه‌ای بر حسب رشته همراه با کمینه، بیشینه و میانگین زمان‌های اجرا (به ثانیه) و انحراف معیار نسبی\&. .RE .PP \-\-symfs= .RS 4 جستجوی فایل‌های حاوی نمادها نسبت به این دایرکتوری\&. چیدمان (layout) اختیاری می‌تواند \fIhierarchy\fR (پیش‌فرض، تطبیق با مسیر کامل) یا \fIflat\fR (تنها تطبیق با نام پایه) باشد\&. این گزینه زمانی کاربرد دارد که فایل‌های اشکال‌زدایی در یک ساختار دایرکتوری مسطح ذخیره شده باشند\&. .RE .PP \-V, \-\-cpu\-visual .RS 4 نمایش راهنمای بصری برای تعویض‌های sched بر پایهٔ CPU: \fIi\fR زمان بیکاری (idle) را نشان می‌دهد و \fIs\fR رویدادهای زمان‌بند هستند\&. .RE .PP \-w, \-\-wakeups .RS 4 نمایش رویدادهای بیدارباش (wakeups)\&. .RE .PP \-M, \-\-migrations .RS 4 نمایش رویدادهای مهاجرت (migrations)\&. .RE .PP \-n, \-\-next .RS 4 نمایش وظیفهٔ بعدی (next task)\&. .RE .PP \-I, \-\-idle\-hist .RS 4 تنها نمایش رویدادهای مرتبط با حالت بیکاری (idle)\&. .RE .PP \-\-time .RS 4 فقط تحلیل نمونه‌های موجود در بازهٔ زمانی داده‌شده: ,\&. زمان‌ها دارای قالب ثانیه\&.میکروثانیه هستند\&. اگر زمان آغاز داده نشود (یعنی رشته زمان به‌صورت \fI,x\&.y\fR باشد)، تحلیل از ابتدای فایل آغاز می‌شود\&. اگر زمان پایان داده نشود (یعنی رشته زمان به‌صورت \fIx\&.y,\fR باشد)، تحلیل تا انتهای فایل ادامه می‌یابد\&. .RE .PP \-\-state .RS 4 نمایش وضعیت وظیفه هنگام خارج شدن از اجرا (switch out)\&. .RE .PP \-\-show\-prio .RS 4 نمایش اولویت وظیفه\&. .RE .PP \-\-prio .RS 4 فقط رویدادهای مربوط به اولویت(های) وظیفهٔ مشخص‌شده را نمایش بده\&. چندین اولویت می‌توانند به‌صورت یک فهرست جداشده با کاما و بدون فاصله ارائه شوند: 0,120\&. بازه‌های اولویت‌ها با \- مشخص می‌شوند: 120\-129\&. همچنین می‌توان ترکیبی از هر دو را ارائه کرد: 0,120\-129\&. .RE.PP \-P, \-\-pre\-migrations .RS 4 نمایش زمان انتظار پیش از مهاجرت (pre\-migration wait time)\&. زمان انتظار پیش از مهاجرت، مدت زمانی است که یک تسک در یک runqueue منتظر می‌ماند اما فرصت اجرا در آنجا را به دست نمی‌آورد و به یک runqueue متفاوت مهاجرت داده می‌شود که در نهایت در آنجا اجرا می‌گردد\&. این زمان بین sched_wakeup و migrate_task همان زمان انتظار پیش از مهاجرت است\&. .RE .SH "گزینه‌های \FIPERF SCHED REPLAY\FR (OPTIONS FOR \FIPERF SCHED REPLAY\FR)" .PP \-r, \-\-repeat .RS 4 تکرار بار کاری (workload) به تعداد n بار (0: بی‌نهایت)\&. پیش‌فرض 10 است\&. .RE .SH "همچنین ببینید (SEE ALSO)" .sp \fBperf-record\fR(1)