'\" t .\" Title: perf-probe .\" 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\-PROBE" "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\-probe \- تعریف نقاط ردیابی پویای جدید .SH "خلاصه دستور (SYNOPSIS)" .sp .nf \fIperf probe\fR [options] \-\-add=\fIPROBE\fR [\&...] یا \fIperf probe\fR [options] PROBE یا \fIperf probe\fR [options] \-\-del=\fI[GROUP:]EVENT\fR [\&...] یا \fIperf probe\fR \-\-list[=[GROUP:]EVENT] یا \fIperf probe\fR [options] \-\-line=\fILINE\fR یا \fIperf probe\fR [options] \-\-vars=\fIPROBEPOINT\fR یا \fIperf probe\fR [options] \-\-funcs یا \fIperf probe\fR [options] \-\-definition=\fIPROBE\fR [\&...] .fi .SH "توضیحات (DESCRIPTION)" .sp این دستور رویدادهای نقاط ردیابی پویا (dynamic tracepoint events) را بر پایه نمادها و ثبات‌ها بدون اطلاعات دیباگ، یا از طریق عبارت‌های زبان C (شماره خطوط C، نام توابع C، و متغیرهای محلی C) همراه با اطلاعات دیباگ (debuginfo) تعریف می‌کند. .SH "گزینه‌ها (OPTIONS)" .PP \-k, \-\-vmlinux=PATH .RS 4 مشخص کردن مسیر vmlinux دارای اطلاعات دیباگ (باینری Dwarf). تنها در صورت استفاده از این گزینه همراه با \-\-definition می‌توانید یک فایل آفلاین vmlinux ارائه دهید. .RE .PP \-m, \-\-module=MODNAME|PATH .RS 4 مشخص کردن نام ماژولی که perf\-probe در آن به جستجوی نقاط پروب یا خطوط می‌پردازد. اگر مسیر فایل ماژول داده شود، perf\-probe با آن به عنوان یک ماژول آفلاین رفتار می‌کند (بدین معنا که می‌توانید روی ماژولی که هنوز بارگذاری نشده پروب قرار دهید). .RE .PP \-s, \-\-source=PATH .RS 4 مشخص کردن مسیر کد منبع هسته. .RE .PP \-\-symfs= .RS 4 جستجوی فایل‌های حاوی نمادها نسبت به این دایرکتوری. طرح‌بندی (layout) اختیاری می‌تواند \fIhierarchy\fR (پیش‌فرض، مطابق با مسیر کامل) یا \fIflat\fR (تنها مطابق با نام پایه) باشد. این ویژگی هنگامی که فایل‌های دیباگ در یک ساختار دایرکتوری مسطح نگهداری می‌شوند مفید است. .RE .PP \-v, \-\-verbose .RS 4 نمایش جزئیات بیشتر (نمایش آرگومان‌های تجزیه‌شده و غیره). همراه با \-q قابل استفاده نیست. .RE .PP \-q, \-\-quiet .RS 4 عدم نمایش هرگونه هشدار یا پیام. همراه با \-v قابل استفاده نیست. .RE .PP \-a, \-\-add= .RS 4 تعریف یک رویداد پروب (برای جزئیات به بخش ساختار پروب (PROBE SYNTAX) مراجعه کنید). .RE .PP \-d, \-\-del= .RS 4 حذف رویدادهای پروب. این گزینه نویسه‌های عام سراسری (\fI*\fR، \fI?\fR) و کلاس‌های کاراکتری (مانند [a\-z] و [!A\-Z]) را می‌پذیرد. .RE .PP \-l, \-\-list[=[GROUP:]EVENT] .RS 4 فهرست کردن رویدادهای پروب فعلی. این گزینه الگوهای فیلتر کردن نام رویدادها را نیز می‌پذیرد. هنگامی که این گزینه همراه با \-\-cache به کار رود، perf به جای پروب‌های زنده، تمام پروب‌های کش‌شده را نمایش می‌دهد. .RE .PP \-L, \-\-line= .RS 4 نمایش خطوطی از کد منبع که امکان قرار دادن پروب روی آن‌ها وجود دارد. این گزینه به آرگومانی نیاز دارد که محدوده‌ای از کد منبع را مشخص کند (برای جزئیات به بخش ساختار خط (LINE SYNTAX) مراجعه کنید). .RE .PP \-V, \-\-vars= .RS 4 نمایش متغیرهای محلی در دسترس در نقطه پروب داده‌شده. ساختار آرگومان مشابه PROBE SYNTAX است، اما بدون آرگومان (NO ARGs). .RE .PP \-\-externs .RS 4 (فقط برای \-\-vars) نمایش متغیرهای تعریف‌شده خارجی علاوه بر متغیرهای محلی. .RE .PP \-\-no\-inlines .RS 4 (فقط برای \-\-add) جستجو تنها برای توابع غیر درون‌خطی (non\-inlined). توابعی که فاقد نمونه (instance) باشند نادیده گرفته می‌شوند. .RE .PP \-F, \-\-funcs[=FILTER] .RS 4 نمایش توابع در دسترس در ماژول یا هسته مشخص‌شده. همراه با \-x/\-\-exec می‌تواند توابع موجود در یک فایل اجرایی فضای کاربری یا کتابخانه مشترک را نیز فهرست کند. این گزینه همچنین یک قاعده فیلتر (FILTER) را به عنوان آرگومان می‌پذیرد. .RE .PP \-D, \-\-definition= .RS 4 نمایش تعریف trace\-event تبدیل‌شده از probe\-event داده‌شده به جای نوشتن آن در tracing/[k,u]probe_events. .RE .PP \-\-filter=FILTER .RS 4 (فقط برای \-\-vars و \-\-funcs) تنظیم فیلتر. فیلتر ترکیبی از الگوهای glob است؛ برای جزئیات به بخش الگوی فیلتر (FILTER PATTERN) مراجعه کنید. فیلتر پیش‌فرض برای \-\-vars برابر "!\fIk???tab_* & !\fRcrc_*" و برای \-\-funcs برابر "!_*" است. در صورت مشخص شدن چند فیلتر، تنها آخرین فیلتر اعمال می‌شود. .RE .PP \-f, \-\-force .RS 4 افزودن اجباری رویدادها با نام موجود. .RE .PP \-n, \-\-dry\-run .RS 4 اجرای آزمایشی. با این گزینه، \-\-add و \-\-del عملیات واقعی افزودن و حذف را اجرا نمی‌کنند. .RE .PP \-\-cache .RS 4 (همراه با \-\-add) کش کردن پروب‌ها. هر رویدادی که با موفقیت اضافه شود در فایل کش نیز ذخیره می‌گردد. (همراه با \-\-list) نمایش پروب‌های کش‌شده. (همراه با \-\-del) حذف پروب‌های کش‌شده. .RE .PP \-\-max\-probes=NUM .RS 4 تنظیم حداکثر تعداد نقاط پروب برای یک رویداد. مقدار پیش‌فرض ۱۲۸ است. .RE .sp \-\-target\-ns=PID: دریافت اطلاعات فضای‌نام mount از pid هدف. این گزینه هنگام ایجاد uprobe برای فرآیندی استفاده می‌شود که در فضای‌نام mount متفاوتی نسبت به ابزار perf(1) قرار دارد. .PP \-x, \-\-exec=PATH .RS 4 مشخص کردن مسیر فایل اجرایی یا کتابخانه مشترک برای ردیابی در فضای کاربری. می‌تواند همراه با گزینه \-\-funcs نیز به کار رود. .RE .PP \-\-demangle .RS 4 دی‌منگل کردن (رمزگشایی) نمادهای برنامه. گزینه \-\-no\-demangle نیز برای غیرفعال کردن دی‌منگلینگ نمادها در دسترس است. .RE .PP \-\-demangle\-kernel .RS 4 دی‌منگل کردن نمادهای هسته. گزینه \-\-no\-demangle\-kernel نیز برای غیرفعال کردن دی‌منگلینگ نمادهای هسته در دسترس است. .RE .sp در صورت عدم استفاده از گزینه‌های \-m/\-x، دستور perf probe بررسی می‌کند که آیا اولین آرگومان پس از گزینه‌ها یک نام مسیر مطلق است یا خیر. اگر یک مسیر مطلق باشد، perf probe از آن به عنوان ماژول هدف یا باینری فضای کاربری هدف برای پروب استفاده می‌کند. .SH "ساختار پروب (PROBE SYNTAX)" .sp نقاط پروب بر اساس ساختار زیر تعریف می‌شوند: .sp .if n \{\ .RS 4 .\} .nf 1) Define event based on function name [[GROUP:]EVENT=]FUNC[@SRC][:RLN|+OFFS|%return|;PTN] [ARG \&.\&.\&.] .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf 2) Define event based on source file with line number [[GROUP:]EVENT=]SRC:ALN [ARG \&.\&.\&.] .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf 3) Define event based on source file with lazy pattern [[GROUP:]EVENT=]SRC;PTN [ARG \&.\&.\&.] .fi .if n \{\ .RE .\} .sp .if n \{\ .RS 4 .\} .nf 4) Pre\-defined SDT events or cached event with name %[sdt_PROVIDER:]SDTEVENT or, sdt_PROVIDER:SDTEVENT .fi .if n \{\ .RE .\} .sp شناسه \fIEVENT\fR نام رویداد جدید را مشخص می‌کند؛ در صورت حذف، نام تابع مورد پروب قرار می‌گیرد و برای پروب‌های بازگشتی (return probes)، پسوند "__return" به طور خودکار به انتهای نام تابع افزوده می‌شود. همچنین می‌توانید یک نام گروه را از طریق \fIGROUP\fR تعیین کنید؛ در صورت حذف، نام \fIprobe\fR برای kprobe و \fIprobe_\fR برای uprobe استفاده می‌شود. توجه داشته باشید که استفاده از نام گروه موجود ممکن است با رویدادهای دیگر تداخل ایجاد کند. به ویژه، استفاده از نام گروه رزروشده برای ماژول‌های هسته می‌تواند رویدادهای تعبیه‌شده در آن ماژول‌ها را پنهان سازد. شناسه \fIFUNC\fR نام تابع مورد پروب را مشخص می‌کند و می‌تواند یکی از گزینه‌های زیر را داشته باشد: \fI+OFFS\fR میزان آفست از آدرس ورودی تابع بر حسب بایت است، \fI:RLN\fR شماره خط نسبی از خط ورودی تابع است، و \fI%return\fR نشان‌دهنده پروب کردن بازگشت تابع می‌باشد. همچنین \fI;PTN\fR الگوی تطبیق تنبل (lazy matching pattern) را مشخص می‌کند (به بخش تطبیق تنبل (LAZY MATCHING) مراجعه کنید). توجه داشته باشید که \fI;PTN\fR باید در انتهای تعریف نقطه پروب بیاید. علاوه بر این، \fI@SRC\fR فایل منبع حاوی آن تابع را مشخص می‌کند. همچنین می‌توان یک نقطه پروب را بر اساس شماره خط منبع یا تطبیق تنبل با استفاده از ساختار \fISRC:ALN\fR یا \fISRC;PTN\fR تعیین کرد، که در آن \fISRC\fR مسیر فایل منبع، \fI:ALN\fR شماره خط و \fI;PTN\fR الگوی تطبیق تنبل است. شناسه \fIARG\fR آرگومان‌های این نقطه پروب را تعیین می‌کند (به بخش آرگومان‌های پروب (PROBE ARGUMENT) مراجعه کنید). شناسه‌های \fISDTEVENT\fR و \fIPROVIDER\fR نام رویداد از پیش تعریف‌شده هستند که توسط SDT کاربر (Statically Defined Tracing) یا پروب‌های از پیش کش‌شده با نام رویداد مشخص شده‌اند. توجه داشته باشید که پیش از استفاده از رویداد SDT، باینری هدف (که رویدادهای SDT در آن تعریف شده‌اند) باید توسط \fBperf-buildid-cache\fR(1) اسکن شود تا رویدادهای SDT به عنوان رویدادهای کش‌شده ثبت شوند. .sp برای جزئیات مربوط به SDT، نشانی زیر را ببینید: \m[blue]\fBhttps://sourceware\&.org/gdb/onlinedocs/gdb/Static\-Probe\-Points\&.html\fR\m[] .SH "کاراکترهای گریز (ESCAPED CHARACTERS)" .sp در ساختار پروب، کاراکترهای \fI=\fR، \fI@\fR، \fI+\fR، \fI:\fR و \fI;\fR به عنوان کاراکترهای ویژه شناخته می‌شوند. می‌توانید از یک بک‌اسلش (\fI\e\fR) برای اسکیپ کردن کاراکترهای ویژه استفاده کنید. این قابلیت زمانی مفید است که نیاز دارید روی نمادهای نسخه‌دار خاصی پروب قرار دهید (مانند پسوندهای @GLIBC_\&...) یا فایلی از کد منبع را مشخص کنید که نام آن حاوی کاراکترهای ویژه است. توجه داشته باشید که معمولاً بک‌اسلش منفرد توسط شل مصرف می‌شود؛ بنابراین ممکن است نیاز به ارسال بک‌اسلش دوگانه (\e\e) یا قرار دادن عبارت درون کوتیشن تکی (\*(AqAAA\e@BBB\*(Aq) داشته باشید. برای نحوه استفاده، بخش مثال‌ها (EXAMPLES) را ببینید. .SH "آرگومان‌های پروب (PROBE ARGUMENT)" .sp هر آرگومان پروب از ساختار زیر پیروی می‌کند: .sp .if n \{\ .RS 4 .\} .nf [NAME=]LOCALVAR|$retval|%REG|@SYMBOL[:TYPE][@user] .fi .if n \{\ .RE .\} .sp شناسه \fINAME\fR نام این آرگومان را مشخص می‌کند (اختیاری). می‌توانید از نام متغیر محلی، عضو ساختار داده محلی (مانند var\(->field یا var\&.field2)، آرایه محلی با اندیس ثابت (مانند array[1]، var\(->array[0]، var\(->pointer[2]) یا قالب آرگومان kprobe\-tracer (مانند $retval، %ax و غیره) استفاده کنید. توجه داشته باشید که اگر یک عضو ساختار داده محلی را مشخص کنید، نام این آرگومان برابر با نام آخرین عضو تنظیم خواهد شد (برای نمونه field2 برای \fIvar\(->field1\&.field2\fR). آرگومان‌های ویژه \fI$vars\fR و \fI$params\fR نیز برای NAME در دسترس هستند؛ \fI$vars\fR به متغیرهای محلی (شامل پارامترهای تابع) که در نقطه پروب مشخص‌شده قابل دسترس هستند گسترش می‌یابد. \fI$params\fR فقط به پارامترهای تابع بسط داده می‌شود. شناسه \fITYPE\fR نوع داده این آرگومان را تعیین می‌کند (اختیاری). در صورت حذف، perf probe نوع داده را به طور خودکار بر پایه اطلاعات دیباگ (*) تعیین می‌کند. در حال حاضر، انواع داده پایه (u8/u16/u32/u64/s8/s16/s32/s64)، اعداد صحیح در مبنای شانزده (x/x8/x16/x32/x64)، تبدیل علامت‌داری (u/s)، رشته ("string") و میدان بیتی (bitfield) پشتیبانی می‌شوند (برای جزئیات به بخش انواع داده (TYPES) مراجعه کنید). در سیستم‌های x86، شناسه %REG همیشه فرم کوتاه ثبات است: برای نمونه %AX؛ بنابراین %RAX یا %EAX مجاز نیست. ویژگی "@user" یک مشخصه ویژه است که نشان می‌دهد با LOCALVAR به عنوان حافظه فضای کاربری رفتار خواهد شد. این ویژگی تنها برای رویدادهای kprobe معتبر است. .SH "انواع داده (TYPES)" .sp انواع پایه (u8/u16/u32/u64/s8/s16/s32/s64) و اعداد صحیح مبنای ۱۶ (x8/x16/x32/x64) از نوع عدد صحیح هستند. پیشوندهای \fIs\fR و \fIu\fR به ترتیب نشان‌دهنده علامت‌دار (signed) و بدون علامت (unsigned) بودن این انواع هستند، و \fIx\fR نشان می‌دهد که مقدار در مبنای شانزده نمایش داده می‌شود. آرگومان‌های ردیابی‌شده در مبنای ۱۰ (sNN/uNN) یا مبنای ۱۶ (xNN) نمایش داده می‌شوند. همچنین می‌توانید از \fIs\fR یا \fIu\fR تنها برای تعیین علامت‌داری استفاده کنید و تشخیص اندازه آن را به عهده perf probe بگذارید. علاوه بر این، می‌توانید از \fIx\fR برای تعیین صریح نمایش در مبنای ۱۶ استفاده نمایید (اندازه نیز به طور خودکار تشخیص داده می‌شود). نوع داده رشته (string) نوعی ویژه است که یک رشته با پایان تهی ("null\-terminated") را از فضای هسته واکشی می‌کند. این بدان معناست که اگر محفظه رشته به حافظه جانبی منتقل شده باشد (paged out)، عملیات با شکست مواجه شده و مقدار NULL ذخیره می‌گردد. نوع \fIstring\fR را تنها می‌توانید برای متغیر محلی یا عضو ساختاری تعیین کنید که یک آرایه یا اشاره‌گری به نوع \fIchar\fR یا \fIunsigned char\fR باشد. میدان بیتی (Bitfield) نوع ویژه دیگری است که ۳ پارامتر می‌گیرد: پهنای بیت (bit\-width)، آفست بیت (bit\-offset) و اندازه محفظه (container\-size، معمولاً ۳۲). ساختار آن به شرح زیر است: .sp .if n \{\ .RS 4 .\} .nf b@/ .fi .if n \{\ .RE .\} .SH "ساختار خط (LINE SYNTAX)" .sp محدوده خط با ساختار زیر توصیف می‌شود: .sp .if n \{\ .RS 4 .\} .nf "FUNC[@SRC][:RLN[+NUM|\-RLN2]]|SRC[:ALN[+NUM|\-ALN2]]" .fi .if n \{\ .RE .\} .sp شناسه FUNC نام تابع مربوط به خطوط نمایشی را مشخص می‌کند. \fIRLN\fR شماره خط شروع نسبت به خط ورودی تابع است و \fIRLN2\fR شماره خط پایان است. مشابه ساختار پروب، \fISRC\fR مسیر فایل منبع، \fIALN\fR شماره خط شروع و \fIALN2\fR شماره خط پایان در فایل است. همچنین با استفاده از \fINUM\fR می‌توان تعداد خطوطی را که باید نمایش داده شوند مشخص کرد. علاوه بر این، ترکیب \fIFUNC@SRC\fR برای جستجوی یک تابع خاص هنگامی که چندین تابع نام مشترکی دارند مناسب است. بنابراین، "source\&.c:100\-120" خطوط بین شماره‌های ۱۰۰ تا ۱۲۰ را در فایل source\&.c نشان می‌دهد؛ و "func:10+20" تعداد ۲۰ خط را از خط دهم تابع func نمایش می‌دهد. .SH "تطبیق تنبل (LAZY MATCHING)" .sp تطبیق تنبل خطوط شبیه به تطبیق الگوهای glob است با این تفاوت که فاصله‌ها در هر دو بخش الگو و هدف نادیده گرفته می‌شوند. بنابراین این روش نویسه‌های عام (\fI*\fR، \fI?\fR) و کلاس‌های کاراکتری (مانند [a\-z] و [!A\-Z]) را می‌پذیرد. .sp برای نمونه، الگوی \fIa=*\fR می‌تواند با \fIa=b\fR، \fIa = b\fR، \fIa == b\fR و مواردی از این دست تطبیق یابد. .sp این ویژگی نوعی انعطاف‌پذیری و پایداری را برای تعاریف نقاط پروب در برابر تغییرات جزئی کد فراهم می‌کند. برای مثال، خط دهم واقعی تابع schedule() ممکن است با ویرایش schedule() به راحتی جابه‌جا شود، اما همان خطی که با الگوی \fIrq=cpu_rq*\fR تطبیق دارد همچنان در تابع وجود داشته باشد. .SH "الگوی فیلتر (FILTER PATTERN)" .sp الگوی فیلتر، الگوی (یا الگوهای) تطبیق glob برای فیلتر کردن متغیرها است. علاوه بر این، می‌توانید از "!" برای تعیین قاعده حذف (filter\-out) استفاده کنید. همچنین می‌توانید چندین قاعده را ترکیب‌شده با "&" یا "|" مشخص نمایید و با استفاده از "(" و ")" این قواعد را در یک قاعده دسته‌بندی کنید. .sp برای نمونه، با گزینه \-\-filter "foo* | bar*"، دستور perf probe \-V متغیرهایی را که با "foo" یا "bar" شروع می‌شوند نشان می‌دهد. با گزینه \-\-filter "!foo* & *bar"، دستور perf probe \-V متغیرهایی را که با "foo" شروع نمی‌شوند و به "bar" ختم می‌شوند (مانند "fizzbar") نمایش می‌دهد؛ اما "foobar" فیلتر و حذف می‌شود. .SH "مثال‌ها (EXAMPLES)" .sp نمایش خطوطی از ()schedule که می‌توان روی آن‌ها پروب قرار داد: .sp .if n \{\ .RS 4 .\} .nf \&./perf probe \-\-line schedule .fi .if n \{\ .RE .\} .sp افزودن یک پروب روی خط ۱۲ تابع ()schedule همراه با ثبت متغیر محلی cpu: .sp .if n \{\ .RS 4 .\} .nf \&./perf probe schedule:12 cpu یا \&./perf probe \-\-add=\*(Aqschedule:12 cpu\*(Aq .fi .if n \{\ .RE .\} .sp افزودن یک یا چند پروب که نام آن‌ها با "schedule" شروع می‌شود: .sp .if n \{\ .RS 4 .\} .nf \&./perf probe schedule* یا \&./perf probe \-\-add=\*(Aqschedule*\*(Aq .fi .if n \{\ .RE .\} .sp افزودن پروب‌ها روی خطوطی از تابع ()schedule که ()update_rq_clock را فراخوانی می‌کنند: .sp .if n \{\ .RS 4 .\} .nf \&./perf probe \*(Aqschedule;update_rq_clock*\*(Aq یا \&./perf probe \-\-add=\*(Aqschedule;update_rq_clock*\*(Aq .fi .if n \{\ .RE .\} .sp حذف تمامی پروب‌های روی ()schedule: .sp .if n \{\ .RS 4 .\} .nf \&./perf probe \-\-del=\*(Aqschedule*\*(Aq .fi .if n \{\ .RE .\} .sp افزودن پروب در تابع ()zfree روی bin/zsh/: .sp .if n \{\ .RS 4 .\} .nf \&./perf probe \-x /bin/zsh zfree یا \&./perf probe /bin/zsh zfree .fi .if n \{\ .RE .\} .sp افزودن پروب در تابع ()malloc روی libc: .sp .if n \{\ .RS 4 .\} .nf \&./perf probe \-x /lib/libc\&.so\&.6 malloc یا \&./perf probe /lib/libc\&.so\&.6 malloc .fi .if n \{\ .RE .\} .sp افزودن یک uprobe به یک فرآیند هدف که در یک فضای‌نام mount متفاوت اجرا می‌شود: .sp .if n \{\ .RS 4 .\} .nf \&./perf probe \-\-target\-ns \-x /lib64/libc\&.so\&.6 malloc .fi .if n \{\ .RE .\} .sp افزودن یک پروب USDT به یک فرآیند هدف که در یک فضای‌نام mount متفاوت اجرا می‌شود: .sp .if n \{\ .RS 4 .\} .nf \&./perf probe \-\-target\-ns \-x /usr/lib/jvm/java\-1\&.8\&.0\-openjdk\-1\&.8\&.0\&.121\-0\&.b13\&.el7_3\&.x86_64/jre/lib/amd64/server/libjvm\&.so %sdt_hotspot:thread__sleep__end .fi .if n \{\ .RE .\} .sp افزودن یک پروب روی یک نماد نسخه‌دار مشخص با استفاده از گریز بک‌اسلش: .sp .if n \{\ .RS 4 .\} .nf \&./perf probe \-x /lib64/libc\-2\&.25\&.so \*(Aqmalloc_get_state\e@GLIBC_2\&.2\&.5\*(Aq .fi .if n \{\ .RE .\} .sp افزودن یک پروب در یک فایل منبع حاوی کاراکترهای ویژه با استفاده از گریز بک‌اسلش: .sp .if n \{\ .RS 4 .\} .nf \&./perf probe \-x /opt/test/a\&.out \*(Aqfoo\e+bar\&.c:4\*(Aq .fi .if n \{\ .RE .\} .SH "مجوزها و متغیرهای هسته (PERMISSIONS AND SYSCTL)" .sp از آنجا که perf probe به ftrace (مسیر tracefs) و kallsyms (مسیر proc/kallsyms/) وابسته است، باید به مجوزهای دسترسی و برخی متغیرهای کنترلی sysctl توجه داشته باشید. .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} از آنجا که tracefs و kallsyms برای دسترسی نیاز به کاربر ریشه (root) یا کاربر مجاز دارند، دستورات زیر از perf probe نیز به آن نیاز خواهند داشت: \-\-add، \-\-del، \-\-list (به جز هنگام استفاده از گزینه \-\-cache). .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} مدیر سیستم می‌تواند tracefs را با دسترسی ۷۵۵ مجدداً مانت کند (sudo mount \-o remount,mode=755 /sys/kernel/tracing/) تا به کاربران عادی اجازه اجرای دستور perf probe \-\-list داده شود. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} مقدار proc/sys/kernel/kptr_restrict = 2/ (محدودسازی برای همه کاربران) مانع از بازیابی اطلاعات مهم از kallsyms توسط perf probe می‌شود. برای دستورات فوق باید مقدار آن را روی ۱ (محدودسازی کاربران بدون دسترسی CAP_SYSLOG) تنظیم کنید. از آنجا که پروب در فضای کاربری نیازی به دسترسی به kallsyms ندارد، این تنظیم تنها برای پروب توابع هسته (kprobes) است. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} از آنجا که دستورات perf probe فایل‌های vmlinux (برای هسته) یا فایل debuginfo (شامل برنامه‌های فضای کاربری) را می‌خوانند، باید مطمئن شوید که دسترسی خواندن این فایل‌ها را دارید. .RE .SH "همچنین ببینید (SEE ALSO)" .sp \fBperf-trace\fR(1), \fBperf-record\fR(1), \fBperf-buildid-cache\fR(1)