'\" t .\" Title: perf-lock .\" 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: Persian .\" .TH "PERF\-LOCK" "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-lock \- تحلیل رویدادهای قفل .SH "خلاصه دستور (SYNOPSIS)" .sp .nf \fIperf lock\fR {record|report|script|info|contention} .fi .SH "توضیحات (DESCRIPTION)" .sp با دستور \fIperf lock\fR می‌توانید رفتارها و آمار گوناگون قفل‌ها را تحلیل کنید\&. .sp .if n \{\ .RS 4 .\} .nf دستور \*(Aqperf lock record \*(Aq رویدادهای قفل را بین شروع و پایان ضبط می‌کند\&. همچنین این دستور فایل "perf\&.data" را تولید می‌کند که حاوی نتایج ردگیری رویدادهای قفل است\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf دستور \*(Aqperf lock report\*(Aq داده‌های آماری را گزارش می‌دهد\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf دستور \*(Aqperf lock script\*(Aq رویدادهای خام قفل را نمایش می‌دهد\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf دستور \*(Aqperf lock info\*(Aq فراداده‌هایی مانند رشته‌ها یا نشانی‌های نمونه‌های قفل را نمایش می‌دهد\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf دستور \*(Aqperf lock contention\*(Aq آمار رقابت قفل را نمایش می‌دهد\&. .fi .if n \{\ .RE .\}.SH "گزینه‌های عمومی (COMMON OPTIONS)" .PP \-i, \-\-input= .RS 4 نام فایل ورودی\&. (پیش‌فرض: perf\&.data مگر اینکه stdin یک fifo باشد) .RE .PP \-\-output= .RS 4 نام فایل خروجی برای perf lock contention و report\&. .RE .PP \-v, \-\-verbose .RS 4 اطلاعات با جزئیات بیشتر (نمایش آدرس نمادها و غیره)\&. .RE .PP \-q, \-\-quiet .RS 4 هیچ هشدار یا پیامی نمایش داده نشود\&. (خنثی‌سازی \-v) .RE .PP \-D, \-\-dump\-raw\-trace .RS 4 تخلیهٔ ردگیری خام (raw trace) به صورت ASCII\&. .RE .PP \-f, \-\-force .RS 4 شکایت نکن، انجامش بده\&. .RE .PP \-\-vmlinux= .RS 4 مسیر فایل vmlinux .RE .PP \-\-kallsyms= .RS 4 مسیر فایل kallsyms .RE .SH "گزینه‌های گزارش (REPORT OPTIONS)" .PP \-k, \-\-key= .RS 4 کلید مرتب‌سازی\&. مقادیر ممکن: acquired (پیش‌فرض)، contended، avg_wait، wait_total، wait_max، wait_min\&. .RE .PP \-F, \-\-field= .RS 4 فیلدهای خروجی\&. به‌طور پیش‌فرض تمامی فیلدها نمایش داده می‌شوند، اما کاربران می‌توانند با استفاده از این گزینه آن را سفارشی‌سازی کنند\&. مقادیر ممکن: acquired، contended، avg_wait، wait_total، wait_max، wait_min\&. .RE .PP \-c, \-\-combine\-locks .RS 4 ادغام نمونه‌های قفل در یک کلاس یکسان (بر اساس نام)\&. .RE .PP \-t, \-\-threads .RS 4 گزینهٔ \-t برای نمایش آمار قفل بر اساس هر رشته (per\-thread) مانند زیر است: .sp .if n \{\ .RS 4 .\} .nf $ perf lock report \-t \-F acquired,contended,avg_wait .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf Name acquired contended avg wait (ns) .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf perf 240569 9 5784 swapper 106610 19 543 :15789 17370 2 14538 ContainerMgr 8981 6 874 sleep 5275 1 11281 ContainerThread 4416 4 944 RootPressureThr 3215 5 1215 rcu_preempt 2954 0 0 ContainerMgr 2560 0 0 unnamed 1873 0 0 EventManager_De 1845 1 636 futex\-default\-S 1609 0 0 .fi .if n \{\ .RE .\} .RE .PP \-E, \-\-entries= .RS 4 نمایش این تعداد مدخل\&. .RE.SH "گزینه‌های اطلاعات (INFO OPTIONS)" .PP \-t, \-\-threads .RS 4 تنها برون‌ریزی فهرست threadها در perf\&.data\&. .RE .PP \-m, \-\-map .RS 4 تنها برون‌ریزی نگاشت نمونه‌های قفل (جدول address:name)\&. .RE .SH "گزینه‌های رقابت (CONTENTION OPTIONS)" .PP \-k, \-\-key= .RS 4 کلید مرتب‌سازی\&. مقادیر ممکن: contended، wait_total (پیش‌فرض)، wait_max، wait_min، avg_wait\&. .RE .PP \-F, \-\-field= .RS 4 فیلدهای خروجی\&. به‌طور پیش‌فرض تمام فیلدها به جز فیلدهای wait_min نمایش داده می‌شوند و کاربران می‌توانند با استفاده از این گزینه آن را سفارشی‌سازی کنند\&. مقادیر ممکن: contended، wait_total، wait_max، wait_min، avg_wait\&. .RE .PP \-t, \-\-threads .RS 4 نمایش آمار رقابت قفل به ازای هر thread\&. .RE .PP \-b, \-\-use\-bpf .RS 4 استفاده از برنامه BPF برای جمع‌آوری آمار رقابت قفل به جای استفاده از داده‌های ورودی\&. .RE .PP \-a, \-\-all\-cpus .RS 4 جمع‌آوری در سطح کل سیستم از تمام CPUها\&. .RE .PP \-C, \-\-cpu= .RS 4 جمع‌آوری نمونه‌ها تنها روی فهرست CPUهای ارائه‌شده\&. چندین CPU را می‌توان به صورت فهرستی جداشده با کاما و بدون فاصله مشخص کرد: 0,1\&. بازه‌های CPU با \- مشخص می‌شوند: 0\-2\&. مقدار پیش‌فرض نظارت بر تمام CPUها است\&. .RE .PP \-p, \-\-pid= .RS 4 ثبت رویدادها روی شناسه فرایند (PID) موجود (فهرست جداشده با کاما)\&. .RE .PP \-\-tid= .RS 4 ثبت رویدادها روی شناسه thread موجود (فهرست جداشده با کاما)\&. .RE .PP \-M, \-\-map\-nr\-entries= .RS 4 حداکثر تعداد مدخل‌های نگاشت BPF (پیش‌فرض: 16384)\&. این مقدار به توانی از ۲ تراز خواهد شد\&. .RE .PP \-\-max\-stack= .RS 4 حداکثر عمق پشته هنگام جمع‌آوری رقابت قفل (پیش‌فرض: 8)\&. .RE .PP \-\-stack\-skip= .RS 4 تعداد سطوح عمق پشته برای نادیده‌گرفتن هنگام یافتن فراخواننده قفل (پیش‌فرض: 3)\&. .RE .PP \-E, \-\-entries= .RS 4 نمایش این تعداد مدخل\&. .RE .PP \-l, \-\-lock\-addr .RS 4 نمایش آمار رقابت قفل بر اساس آدرس\&. .RE .PP \-o, \-\-lock\-owner .RS 4 نمایش آمار رقابت قفل بر اساس مالکان\&. این گزینه می‌تواند با \-t که آمار قفل هر thread مالک را نشان می‌دهد، یا \-v که ردپای پشته مالک را نشان می‌دهد ترکیب شود\&. نیازمند \-\-use\-bpf است\&. .RE .PP \-Y, \-\-type\-filter= .RS 4 نمایش رقابت قفل تنها برای انواع قفل مشخص‌شده (فهرست جداشده با کاما)\&. مقادیر موجود عبارتند از: semaphore, spinlock, rwlock, rwlock:R, rwlock:W, rwsem, rwsem:R, rwsem:W, rtmutex, rwlock\-rt, rwlock\-rt:R, rwlock\-rt:W, percpu\-rwmem, pcpu\-sem, pcpu\-sem:R, pcpu\-sem:W, mutex .sp .if n \{\ .RS 4 .\} .nf توجه داشته باشید که گونه‌های RW قفل‌ها دارای پسوند :R و :W هستند\&. نام‌های بدون پسوند میان‌بُری برای هر دو گونه می‌باشند\&. مثال: rwsem = rwsem:R + rwsem:W\&. .fi .if n \{\ .RE .\} .RE .PP \-L, \-\-lock\-filter= .RS 4 نمایش رقابت قفل تنها برای آدرس‌ها یا نام‌های قفل ارائه‌شده (فهرست جداشده با کاما)\&. .RE .PP \-S, \-\-callstack\-filter= .RS 4 نمایش رقابت قفل تنها در صورتی که callstack شامل رشته ارائه‌شده باشد\&. توجه داشته باشید که این گزینه با زیررشته تطبیق داده می‌شود، بنابراین \fIrq\fR هم با \fIraw_spin_rq_lock\fR و هم با \fIirq_enter_rcu\fR مطابقت خواهد داشت\&. .RE .PP \-x, \-\-field\-separator= .RS 4 نمایش نتایج با استفاده از خروجی سبک CSV جهت تسهیل وارد کردن مستقیم به صفحات گسترده\&. ستون‌ها با رشته مشخص‌شده در SEP جدا می‌شوند\&. .RE .PP \-\-lock\-cgroup .RS 4 نمایش آمار رقابت قفل بر اساس cgroup\&. نیازمند \-\-use\-bpf است\&. .RE .PP \-G, \-\-cgroup\-filter= .RS 4 نمایش رقابت قفل تنها در cgroupهای مشخص‌شده (فهرست جداشده با کاما)\&. .RE .PP \-J, \-\-inject\-delay=<\m[blue]\fBtime@function\fR\m[]\&\s-2\u[1]\d\s+2> .RS 4 افزودن تاخیر به قفل مشخص‌شده\&. این تاخیر به بخش پایانی رقابت افزوده می‌شود تا مالک (جدید) قفل دچار تاخیر شود\&. اما با کند کردن مالک، سایر منتظران نیز دچار تاخیر خواهند شد\&. این قابلیت تنها با \-b/\-\-use\-bpf کار می‌کند\&. .sp .if n \{\ .RS 4 .\} .nf مقدار \*(Aqtime\*(Aq به نانوثانیه مشخص می‌شود اما می‌تواند پسوند واحد داشته باشد\&. واحدهای موجود "ms" ،"us" و "ns" هستند\&. در حال حاضر به دلایل ایمنی تا حداکثر 10ms تاخیر پذیرفته می‌شود\&. .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf توجه داشته باشید که پس از گرفتن قفل، انتظار فعال (busy\-wait) رخ خواهد داد\&. ایجاد تاخیر در قفل‌ها می‌تواند پیامدهای چشمگیری از جمله احتمال کرش هسته داشته باشد\&. لطفاً با مسئولیت خودتان از آن استفاده کنید\&. .fi .if n \{\ .RE .\} .RE.SH "همچنین ببینید (SEE ALSO)" .sp \fBperf\fR(1) .SH "نکات (NOTES)" .IP " 1." 4 time@function .RS 4 \%mailto:time@function .RE