PERF-CONFIG(1) perf Manual PERF-CONFIG(1) نام (NAME) perf-config - دریافت و تنظیم متغیرها در فایل پیکربندی خلاصه دستور (SYNOPSIS) perf config [] [section.name[=value] ...] یا perf config [] -l | --list توضیحات (DESCRIPTION) با این دستور می‌توانید متغیرهای موجود در یک فایل پیکربندی را مدیریت کنید. گزینه‌ها (OPTIONS) -l, --list نمایش متغیرهای پیکربندی فعلی، شامل نام و مقدار، برای تمام بخش‌ها. --user برای گزینه‌های نوشتن و خواندن: نوشتن در فایل کاربری $HOME/.perfconfig یا خواندن از آن. --system برای گزینه‌های نوشتن و خواندن: نوشتن در فایل سراسری سیستم $(sysconfdir)/perfconfig یا خواندن از آن. فایل پیکربندی (CONFIGURATION FILE) فایل پیکربندی perf شامل متغیرهای متعددی برای تغییر جنبه‌های مختلف هر یک از ابزارهای آن است، از جمله خروجی، میزان مصرف دیسک و غیره. از فایل $HOME/.perfconfig برای ذخیره پیکربندی به ازای هر کاربر استفاده می‌شود. از فایل $(sysconfdir)/perfconfig می‌توان برای ذخیره پیکربندی پیش‌فرض سراسری سیستم استفاده کرد. می‌توان خواندن فایل‌های پیکربندی را با تنظیم متغیر محیطی PERF_CONFIG بر روی /dev/null غیرفعال کرد، یا با مقداردهی این متغیر، یک فایل پیکربندی جایگزین مشخص نمود. هنگام خواندن یا نوشتن، مقادیر به‌طور پیش‌فرض از فایل‌های پیکربندی سیستم و کاربر خوانده می‌شوند، و می‌توان از گزینه‌های --system و --user استفاده کرد تا به دستور اعلام شود فقط از آن مکان بخواند یا در آن بنویسد. نحو (Syntax) این فایل از بخش‌ها تشکیل شده است. هر بخش با نام خود که درون قلاب‌ها قرار گرفته آغاز می‌شود و تا شروع بخش بعدی ادامه می‌یابد. هر متغیر باید درون یک بخش قرار داشته باشد و قالبی به شکل name = value داشته باشد، برای مثال: [section] name1 = value1 name2 = value2 نام بخش‌ها به بزرگی و کوچکی حروف حساس است و می‌تواند شامل هر کاراکتری به جز خط جدید باشد (علامت نقل‌قول دوگانه " و بک‌اسلش باید به ترتیب به صورت \" و \\ اسکیپ شوند). سرآیندهای بخش نمی‌توانند در چند خط امتداد یابند. مثال (Example) با داشتن یک $HOME/.perfconfig شبیه به این: # # این فایل پیکربندی است، و # نویسه‌های # و ; نشان‌دهنده کامنت هستند # [colors] # متغیرهای رنگ top = red, default medium = green, default normal = lightgray, default selected = white, lightgray jump_arrows = blue, default addr = magenta, default root = white, blue [tui] # پیش‌فرض‌ها در صورت پیوند با libslang report = on annotate = on top = on [buildid] # پیش‌فرض، غیرفعال‌سازی با استفاده از /dev/null dir = ~/.debug [annotate] # پیش‌فرض‌ها hide_src_code = false use_offset = true jump_arrows = true show_nr_jumps = false [help] # قالب می‌تواند man، info، web یا html باشد format = man autocorrect = 0 [ui] show-headers = true [call-graph] # fp (framepointer), dwarf record-mode = fp print-type = graph order = caller sort-key = function [report] # پیش‌فرض‌ها sort_order = comm,dso,symbol percent-limit = 0 queue-size = 0 children = true group = true skip-empty = true می‌توانید با تنظیم این پیکربندی بر روی false، کد منبع قابلیت annotate را پنهان کنید: % perf config annotate.hide_src_code=true اگر می‌خواهید چندین مورد پیکربندی را اضافه یا ویرایش کنید، می‌توانید این‌گونه عمل کنید: % perf config ui.show-headers=false kmem.default=slab برای تغییر ترتیب مرتب‌سازی قابلیت report در فایل پیکربندی کاربر (یعنی ~/.perfconfig): % perf config --user report.sort-order=srcline برای تغییر رنگ‌های خط انتخاب‌شده به رنگ‌های پیش‌زمینه و پس‌زمینه دیگر در فایل پیکربندی سیستم (یعنی $(sysconf)/perfconfig): % perf config --system colors.selected=yellow,green برای بررسی حالت ضبط گراف فراخوانی: % perf config call-graph.record-mode اگر مایلید چندین جفت کلید/مقدار پیکربندی را بررسی کنید، می‌توانید این‌گونه عمل کنید: % perf config report.queue-size call-graph.order report.children برای بررسی مقدار پیکربندی ترتیب مرتب‌سازی گراف فراخوانی در فایل پیکربندی کاربر (یعنی ~/.perfconfig): % perf config --user call-graph.sort-order برای بررسی مقدار پیکربندی دایرکتوری buildid در فایل پیکربندی سیستم (یعنی $(sysconf)/perfconfig): % perf config --system buildid.dir متغیرها (Variables) colors.* متغیرهایی برای سفارشی‌سازی رنگ‌های استفاده‌شده در خروجی report، top و annotate در TUI. این متغیرها باید رنگ‌های پیش‌زمینه و پس‌زمینه را که با کاما از یکدیگر جدا شده‌اند مشخص کنند، به عنوان مثال: medium = green, lightgray اگر می‌خواهید از رنگ پیکربندی‌شده برای ترمینال خود استفاده کنید، آن را به صورت 'default' قرار دهید، برای نمونه: medium = default, lightgray رنگ‌های موجود: red, yellow, green, cyan, gray, black, blue, white, default, magenta, lightgray colors.top top به معنای درصد سربار بیشتر از ۵٪ است. و مقادیر این متغیر رنگ‌های درصد را مشخص می‌کنند. مقادیر کلیدی اصلی عبارتند از رنگ پیش‌زمینه red و رنگ پس‌زمینه default. colors.medium medium به معنای درصد سرباری است که بیش از ۰.۵٪ باشد. مقادیر پیش‌فرض عبارتند از green و default. colors.normal normal به معنای باقی درصدهای سربار به جز top، medium و selected است. مقادیر پیش‌فرض عبارتند از lightgray و default. colors.selected این متغیر رنگ‌ها را برای مدخل جاری در فهرستی از مدخل‌های زیردستورها (top، report، annotate) تعیین می‌کند. مقادیر پیش‌فرض عبارتند از black و lightgray. colors.jump_arrows رنگ‌ها برای پیکان‌های پرش در فهرست کد اسمبلی مانند jns، jmp، jane و غیره. مقادیر پیش‌فرض عبارتند از blue، default. colors.addr این متغیر رنگ‌ها را برای آدرس‌های حاصل از annotate تعیین می‌کند. مقادیر پیش‌فرض عبارتند از magenta، default. colors.root رنگ‌ها برای سرآیندها در خروجی زیردستورها (top، report). مقادیر پیش‌فرض عبارتند از white، blue. core.*, core.proc-map-timeout یک مهلت زمانی (بر حسب میلی‌ثانیه) برای تجزیه فایل‌های /proc//maps تنظیم می‌کند. این مقدار می‌تواند توسط گزینه --proc-map-timeout در زیردستورهای پشتیبانی‌شده بازنویسی شود. مهلت زمانی پیش‌فرض 500ms است. addr2line-disable-warn هنگامی که روی true تنظیم شود، تمامی هشدارهای حاصل از خروجی addr2line را غیرفعال می‌کند. مقدار پیش‌فرض false است که این هشدارها را نمایش می‌دهد. addr2line-timeout مهلت زمانی (بر حسب میلی‌ثانیه) را برای تجزیه خروجی addr2line تنظیم می‌کند. مهلت زمانی پیش‌فرض 5s است. tui., gtk. زیردستورهایی که می‌توان در اینجا پیکربندی کرد عبارتند از top، report و annotate. این مقادیر بولی هستند، برای نمونه: [tui] top = true باعث می‌شود TUI به عنوان پیش‌فرض برای زیردستور 'top' عمل کند. این قابلیت‌ها در صورتی در دسترس خواهند بود که کتابخانه‌های لازم در زمان ساخت ابزار شناسایی شده باشند. buildid.*, buildid.dir هر فایل اجرایی و کتابخانه اشتراکی در توزیع‌های مدرن همراه با یک شناسه مبتنی بر محتوا ارائه می‌شود که در صورت وجود، در سرآیند فایل perf.data درج خواهد شد تا در زمان تحلیل، آنچه را که برای تفکیک نمادها، حاشیه‌نویسی کد و غیره لازم است بیابد. ابزارهای ضبط همچنین یک پیوند سخت یا رونوشت از باینری‌ها، کتابخانه‌های اشتراکی، فایل‌های /proc/kallsyms و /proc/kcore را در یک دایرکتوری اختصاصی کاربر، $HOME/.debug/، ذخیره می‌کنند تا در زمان تحلیل استفاده شوند. متغیر buildid.dir می‌تواند هم برای تغییر مسیر این کش دایرکتوری و هم برای غیرفعال کردن کامل آن استفاده شود. اگر می‌خواهید آن را غیرفعال کنید، مقدار buildid.dir را برابر /dev/null قرار دهید. مقدار پیش‌فرض $HOME/.debug است buildid-cache.* buildid-cache.debuginfod=URLs نشانی‌های اینترنتی debuginfod را که هنگام بازیابی باینری‌های perf.data استفاده می‌شوند مشخص می‌کند؛ این گزینه از ساختار نحوی متغیر DEBUGINFOD_URLS پیروی می‌کند، مانند: buildid-cache.debuginfod=http://192.168.122.174:8002 annotate.* این تنظیمات کنترل آدرس‌ها، توابع پرش (jump) و کد منبع را در خطوط کد اسمبلی یک برنامه مشخص بر عهده دارند. annotate.disassemblers دی‌اسمبلر مورد استفاده را انتخاب می‌کند: "objdump"، "llvm"، "capstone"؛ در صورت مشخص نشدن، ابتدا در صورت در دسترس بودن "llvm"، سپس در صورت شکست "capstone" و در نهایت نسخه اصلی مبتنی بر "objdump" را امتحان می‌کند. انتخاب گزینه‌ای متفاوت زمانی مفید است که قابلیتی در یکی از گزینه‌ها بهترین پشتیبانی را داشته باشد، یا برای مقایسه خروجی هنگام شک درباره باگ‌ها و غیره. این مقدار می‌تواند فهرستی بر حسب اولویت باشد؛ اولین موردی که کار کند، فرآیند را نهایی می‌کند. annotate.addr2line فایل اجرایی addr2line برای تعیین نام فایل‌ها و شماره خطوط. annotate.objdump فایل اجرایی objdump مورد استفاده برای دی‌اسمبل و حاشیه‌نویسی (annotation)، از جمله در دستور perf test. annotate.disassembler_style برای تغییر سبک پیش‌فرض دی‌اسمبلر به مقداری دیگر که توسط binutils پشتیبانی می‌شود (مانند "intel") استفاده می‌شود؛ به راهنمای گزینه -M در صفحه راهنمای objdump مراجعه کنید. annotate.hide_src_code اگر برنامه‌ای که تحلیل می‌شود دارای کد منبع باشد، این گزینه به annotate اجازه می‌دهد فهرستی از کد اسمبلی را همراه با کد منبع چاپ کند. برای نمونه، بخشی از یک برنامه را با چهار خط در نظر بگیرید؛ اگر این گزینه برابر با true باشد، همان‌طور که در زیر نشان داده شده کدهای اسمبلی بدون کد منبع برنامه چاپ می‌شوند. │ push %rbp │ mov %rsp,%rbp │ sub $0x10,%rsp │ mov (%rdi),%rdx اما اگر این گزینه برابر با 'false' باشد، کد منبع آن بخش نیز می‌تواند همانند زیر چاپ شود. مقدار پیش‌فرض 'false' است. │ struct rb_node *rb_next(const struct rb_node *node) │ { │ push %rbp │ mov %rsp,%rbp │ sub $0x10,%rsp │ struct rb_node *parent; │ │ if (RB_EMPTY_NODE(node)) │ mov (%rdi),%rdx │ return n; این گزینه با مرورگرهای tui و stdio2 کار می‌کند. annotate.use_offset بر پایه اولین آدرس یک تابع بارگذاری‌شده، می‌توان از آفست (offset) استفاده کرد. به جای آدرس‌های اصلی کد اسمبلی، آدرس‌های تفریق‌شده از آدرس پایه چاپ می‌شوند. برای نمونه: اگر آدرس پایه همانند زیر برابر با 0XFFFFFFFF81624d50 باشد، ffffffff81624d50 یک آدرس در کد اسمبلی دارای آدرس مطلق مشخصی به صورت زیر است: ffffffff816250b8:│ mov 0x8(%r14),%rdi اما اگر use_offset برابر با 'true' باشد، آدرس تفریق‌شده از آدرس پایه چاپ می‌شود. مقدار پیش‌فرض true است. این گزینه فقط برای TUI اعمال می‌شود. 368:│ mov 0x8(%r14),%rdi این گزینه با مرورگرهای tui و stdio2 کار می‌کند. annotate.jump_arrows در میان کدهای اسمبلی ممکن است دستورات پرش وجود داشته باشد. بسته به مقدار بولی jump_arrows، فلش‌هایی که نشان می‌دهند دستور به کجا پرش می‌کند می‌توانند مانند زیر چاپ شوند یا خیر. │ ┌──jmp 1333 │ │ xchg %ax,%ax │1330:│ mov %r15,%r10 │1333:└─→cmp %r15,%r14 اگر jump_arrow برابر با 'false' باشد، فلش‌ها مانند زیر چاپ نمی‌شوند. مقدار پیش‌فرض 'false' است. │ ↓ jmp 1333 │ xchg %ax,%ax │1330: mov %r15,%r10 │1333: cmp %r15,%r14 این گزینه با مرورگر tui کار می‌کند. annotate.show_linenr هنگام نمایش کد منبع، اگر این گزینه برابر با true باشد، شماره خطوط همانند زیر چاپ می‌شوند. │1628 if (type & PERF_SAMPLE_IDENTIFIER) { │ ↓ jne 508 │1628 data->id = *array; │1629 array++; │1630 } اما اگر این گزینه برابر با 'false' باشد، چاپ نخواهند شد: مقدار پیش‌فرض 'false' است. │ if (type & PERF_SAMPLE_IDENTIFIER) { │ ↓ jne 508 │ data->id = *array; │ array++; │ } این گزینه با مرورگرهای tui و stdio2 کار می‌کند. annotate.show_nr_jumps بخشی از کد اسمبلی را در نظر بگیرید. │1382: movb $0x1,-0x270(%rbp) در صورت استفاده از این گزینه، تعداد انشعاب‌هایی که به آن آدرس پرش می‌کنند مانند زیر چاپ می‌شود. مقدار پیش‌فرض 'false' است. │1 1382: movb $0x1,-0x270(%rbp) این گزینه با مرورگرهای tui و stdio2 کار می‌کند. annotate.show_total_period برای مقایسه دو رکورد بر مبنای هر دستورالعمل، با فعال بودن این گزینه، تعداد کل نمونه‌های متعلق به یک خط در کد اسمبلی نمایش داده می‌شود. اگر این گزینه برابر با true باشد، دوره‌های زمانی کل به جای مقادیر درصدی همانند زیر چاپ می‌شوند. 302 │ mov %eax,%eax اما اگر این گزینه برابر با 'false' باشد، مقادیر درصدی مربوط به بار اضافه (overhead) چاپ می‌شود؛ یعنی: مقدار پیش‌فرض 'false' است. 99.93 │ mov %eax,%eax این گزینه با مرورگرهای tui، stdio2 و stdio کار می‌کند. annotate.show_nr_samples به‌طور پیش‌فرض دستور perf annotate درصد نمونه‌ها را نشان می‌دهد. از این گزینه می‌توان برای چاپ تعداد مطلق نمونه‌ها استفاده کرد. برای نمونه زمانی که روی false تنظیم شده باشد: Percent│ 74.03 │ mov %fs:0x28,%rax زمانی که روی true تنظیم شود: Samples│ 6 │ mov %fs:0x28,%rax این گزینه با مرورگرهای tui، stdio2 و stdio کار می‌کند. annotate.offset_level مقدار پیش‌فرض 1 است؛ به این معنی که فقط اهداف پرش دارای آفست نمایش داده شده دقیقاً در کنار دستورالعمل خواهند بود. هنگامی که روی 2 تنظیم شود، دستورات call نیز آفست‌هایشان نشان داده می‌شود، و مقادیر 3 یا بالاتر آفست‌ها را برای تمام دستورالعمل‌ها نمایش خواهند داد. این گزینه با مرورگرهای tui و stdio2 کار می‌کند. annotate.demangle خواناسازی (demangle) نام نمادها به شکلی خوانا برای انسان. مقدار پیش‌فرض true است. annotate.demangle_kernel خواناسازی (demangle) نام نمادهای هسته به شکلی خوانا برای انسان. مقدار پیش‌فرض true است. hist.*, hist.percentage این گزینه نحوه محاسبه سربار مدخل‌های فیلترشده را کنترل می‌کند - بدین معنی که مقدار این گزینه تنها در صورتی مؤثر است که یک فیلتر (بر اساس comm، dso یا نام نماد) وجود داشته باشد. مثال زیر را در نظر بگیرید: Overhead Symbols ........ ....... 33.33% foo 33.33% bar 33.33% baz این سربار اصلی است و ما نخستین مدخل یعنی 'foo' را فیلتر خواهیم کرد. مقدار 'relative' سربار 'bar' و 'baz' را برای هر کدام به 50.00% افزایش می‌دهد، در حالی که 'absolute' سربار فعلی آن‌ها (33.33%) را نمایش خواهد داد. ui.*, ui.show-headers این گزینه نمایش سرستون‌ها (مانند Overhead و Symbol) را در report و top کنترل می‌کند. اگر این گزینه false باشد، آن‌ها پنهان می‌شوند. این گزینه فقط برای TUI اعمال می‌شود. call-graph.* تنظیمات زیر نحوه مدیریت گراف‌های فراخوانی (به‌دست‌آمده از طریق گزینه‌های -g/--call-graph) را کنترل می‌کنند. call-graph.record-mode حالت مربوط به فضای کاربری می‌تواند fp (اشاره‌گر فریم)، dwarf و lbr باشد. مقدار dwarf تنها در صورتی مؤثر است که libunwind (یا نسخه جدیدی از libdw) روی سیستم موجود باشد؛ مقدار lbr فقط روی پردازنده‌های خاصی کار می‌کند. روش مربوط به فضای هسته نه توسط این گزینه، بلکه توسط پیکربندی هسته (CONFIG_UNWINDER_*) کنترل می‌شود. حالت 'defer' می‌تواند همراه با حالت 'fp' برای فعال‌سازی زنجیره‌های فراخوانی کاربری به‌تعویق‌افتاده (مانند 'fp,defer') استفاده شود. call-graph.dump-size اندازه پشته‌ای که برای باز کردن پشته پس از ثبت (post-unwinding) باید تخلیه (dump) شود. مقدار پیش‌فرض 8192 (بایت) است. هنگام استفاده از dwarf در record-mode، در صورت تعیین نشدن، اندازه پیش‌فرض استفاده خواهد شد. call-graph.print-type انواع چاپ (print-types) می‌توانند graph (گراف مطلق)، fractal (گراف نسبی)، flat و folded باشند. این گزینه نحوه نمایش سربار برای هر مدخل زنجیره فراخوانی را کنترل می‌کند. مثال زیر را در نظر بگیرید. Overhead Symbols ....... ....... 40.00% foo | ---foo | |--50.00%--bar | main | --50.00%--baz main این خروجی در قالب 'fractal' است. 'foo' دقیقاً نصف از 'bar' و نصف از 'baz' فراخوانی شده است، بنابراین 'fractal' برای هر کدام 50.00% را نشان می‌دهد (به این معنی که کل سربار 'foo' را 100% در نظر می‌گیرد). حالت 'graph' از مقدار سربار مطلق 'foo' به عنوان کل استفاده می‌کند، بنابراین هر یک از زنجیره‌های فراخوانی 'bar' و 'baz' دارای 20.00% سربار خواهند بود. اگر از 'flat' استفاده شود، زنجیره‌های فراخوانی به صورت تک‌ستونی و خطی نشان داده می‌شوند. حالت 'folded' به این معنی است که زنجیره‌های فراخوانی در یک خط و با نقطه-ویرگول از هم جدا می‌شوند. call-graph.order این گزینه ترتیب چاپ زنجیره‌های فراخوانی را کنترل می‌کند. مقدار پیش‌فرض callee است که به این معنی است که فراخوانده‌شده (callee) در بالا چاپ می‌شود و سپس فراخواننده (caller) آن و به همین ترتیب دنبال می‌شود. مقدار caller آن را به ترتیب معکوس چاپ می‌کند. اگر این گزینه تنظیم نشود و report.children یا top.children روی true تنظیم شده باشد (یا گزینه معادل در خط فرمان مشخص شده باشد)، مقدار پیش‌فرض این گزینه برای اجرای 'perf report' یا 'perf top' به 'caller' تغییر می‌یابد. سایر دستورها همچنان به صورت پیش‌فرض از 'callee' استفاده خواهند کرد. call-graph.sort-key زنجیره‌های فراخوانی در صورت داشتن اطلاعات یکسان ادغام می‌شوند. گزینه sort-key نحوه مقایسه زنجیره‌های فراخوانی را تعیین می‌کند. مقدار sort-key می‌تواند function یا address باشد. مقدار پیش‌فرض function است. call-graph.threshold هنگامی که زنجیره‌های فراخوانی زیادی وجود داشته باشند، خطوط بسیار زیادی چاپ خواهد شد. بنابراین perf زنجیره‌های فراخوانی کوچک زیر یک سربار معین (آستانه) را حذف می‌کند و این گزینه این آستانه را کنترل می‌کند. مقدار پیش‌فرض 0.5 (%) است. سربار بر اساس مقداری محاسبه می‌شود که به call-graph.print-type بستگی دارد. call-graph.print-limit این گزینه حداکثر تعداد خطوط زنجیره فراخوانی چاپ‌شده برای یک مدخل منفرد هیستوگرام است. مقدار پیش‌فرض 0 است که به معنای عدم وجود محدودیت است. report.*, report.sort_order امکان تغییر ترتیب مرتب‌سازی پیش‌فرض از "comm,dso,symbol" به مقداری دیگر را فراهم می‌کند؛ برای نمونه "sym,dso" ممکن است برای توسعه‌دهندگان هسته (کرنل) مناسب‌تر باشد. report.percent-limit این گزینه تا حد زیادی مشابه call-graph.threshold است اما برای مدخل‌های هیستوگرام (نمودار ستونی) عمل می‌کند. مدخل‌هایی که بار پردازشی (overhead) آن‌ها کمتر از این درصد باشد چاپ نخواهند شد. مقدار پیش‌فرض 0 است. اگر percent-limit برابر 10 باشد، فقط مدخل‌هایی چاپ می‌شوند که بیش از ۱۰٪ بار پردازشی دارند. report.queue-size این گزینه حداکثر اندازه تخصیص صف رویدادهای داخلی را برای مرتب‌سازی رویدادها تعیین می‌کند. مقدار پیش‌فرض 0 است که به معنای نبود محدودیت است. report.children منظور از Children توابعی است که از یک تابع دیگر فراخوانی شده‌اند. اگر این گزینه فعال (true) باشد، perf report زنجیره‌های فراخوانی فرزندان (children) را جمع‌آوری کرده و بار پردازشی کل (تجمعی) را در کنار بار پردازشی Self نمایش می‌دهد. لطفاً به صفحه راهنمای perf report مراجعه کنید. مقدار پیش‌فرض true است. report.group این گزینه برای نمایش یک‌جای اطلاعات گروه رویدادها است. نمونه خروجی با فعال بودن این گزینه؛ توجه کنید که به ازای هر رویداد در گروه یک ستون وجود دارد (ref-cycles و cycles): # group: {ref-cycles,cycles} # ======== # # Samples: 7K of event 'anon group { ref-cycles, cycles }' # Event count (approx.): 6876107743 # # Overhead Command Shared Object Symbol # ............... ....... ................. ................... # 99.84% 99.76% noploop noploop [.] main 0.07% 0.00% noploop ld-2.15.so [.] strcmp 0.03% 0.00% noploop [kernel.kallsyms] [k] timerqueue_del report.skip-empty این گزینه می‌تواند رفتار پیش‌فرض آمار (stat) را در مواجهه با نتایج خالی تغییر دهد. اگر روی true تنظیم شود، perf report --stat آمارهای با مقدار 0 را نمایش نخواهد داد. top.*, top.children مشابه report.children است. بنابراین در صورت فعال بودن، خروجی دستور top به طور پیش‌فرض دارای ستون بار پردازشی Children در کنار ستون بار پردازشی Self خواهد بود. مقدار پیش‌فرض true است. top.call-graph این گزینه عینا همانند call-graph.record-mode است، با این تفاوت که منحصراً برای زیردستور top کاربرد دارد. این گزینه فقط روش بازکردن پشته (unwind) را مشخص می‌کند. برای اینکه perf top عملاً از آن استفاده کند، باید گزینه خط فرمان -g مشخص شده باشد. man.*, man.viewer این گزینه می‌تواند ابزاری را برای مشاهده صفحات راهنما هنگام فراخوانی زیردستور help تعیین کند. ابزارهای پشتیبانی‌شده عبارتند از man، woman (به همراه کلاینت emacs) و konqueror. مقدار پیش‌فرض man است. همچنین می‌توان یک ابزار جدید نمایش راهنما را با استفاده از 'man..cmd' یا با تعیین مسیری متفاوت از طریق گزینه پیکربندی 'man..path' اضافه کرد. pager.*, pager. هنگامی که زیردستور روی stdio اجرا می‌شود، مشخص می‌کند که بر اساس این مقدار از پیجر (صفحه‌بند) استفاده کند یا خیر. مقدار پیش‌فرض unspecified است. kmem.*, kmem.default این گزینه تعیین می‌کند که در صورت استفاده نشدن از هیچ‌یک از گزینه‌های --slab یا --page، کدام تخصیص‌دهنده حافظه (allocator) مورد تحلیل قرار گیرد. مقدار پیش‌فرض slab است. record.*, record.build-id این گزینه می‌تواند cache، no-cache، skip یا mmap باشد. حالت cache داده‌ها را پس‌پردازش کرده و فایل‌های باینری را در حافظه پنهان شناسه بیلد (build-id) در مسیر (~/.debug) ذخیره یا به‌روزرسانی می‌کند. این حالت پیش‌فرض است. اما اگر این گزینه روی no-cache تنظیم شود، حافظه پنهان build-id را به‌روزرسانی نخواهد کرد. حالت skip مرحله پس‌پردازش را نادیده گرفته و حافظه پنهان را به‌روزرسانی نمی‌کند. حالت mmap مرحله پس‌پردازش را نادیده گرفته و شناسه‌های build-id را از رویدادهای MMAP می‌خواند. record.call-graph این گزینه عینا همانند call-graph.record-mode است، با این تفاوت که منحصراً برای زیردستور record کاربرد دارد. این گزینه فقط روش بازکردن پشته (unwind) را مشخص می‌کند. برای اینکه perf record عملاً از آن استفاده کند، باید گزینه خط فرمان -g مشخص شده باشد. record.aio استفاده از n بلوک کنترلی در حالت نوشتن ناهمگام ردگیری (ردگیری ناهمگام Posix AIO) (مقدار پیش‌فرض n: 1، حداکثر: 4). record.debuginfod نشانی debuginfod URL را جهت استفاده هنگام ذخیره فایل‌های باینری perf.data در حافظه پنهان مشخص می‌کند؛ این گزینه از همان نحو متغیر DEBUGINFOD_URLS پیروی می‌کند، مانند: http://192.168.122.174:8002 اگر مقدار URLها برابر 'system' باشد، مقدار متغیر محیطی سیستمی DEBUGINFOD_URLS استفاده می‌شود. diff.*, diff.order این گزینه شماره ستون را برای مرتب‌سازی نتیجه تعیین می‌کند. مقدار پیش‌فرض 0 است، که به معنای مرتب‌سازی بر اساس خط پایه (baseline) است. تنظیم آن روی 1، نتیجه را بر اساس دلتا (یا دیگر روش محاسباتی انتخاب‌شده) مرتب خواهد کرد. diff.compute این گزینه روش محاسبه نتیجه تفاوت (diff) را تعیین می‌کند. مقادیر مجاز عبارتند از: delta، delta-abs، ratio و wdiff. مقدار پیش‌فرض delta است. trace.*, trace.add_events امکان افزودن مجموعه‌ای از رویدادها را به موارد مشخص‌شده توسط کاربر فراهم می‌کند، یا در صورت مشخص نشدن هیچ رویدادی، به عنوان رویداد پیش‌فرض به کار می‌رود. کاربرد اولیه آن افزودن augmented_raw_syscalls.o برای فعال‌سازی منطق perf trace است که محتوای اشاره‌گر فراخوانی سیستم را پس از بار داده نقطه ردگیری (tracepoint payload) عادی جستجو می‌کند. trace.args_alignment تعداد ستون‌ها برای تراز کردن فهرست آرگومان‌ها؛ مقدار پیش‌فرض 70 است، مقدار 40 برای پیش‌فرض strace استفاده می‌شود، و صفر برای عدم تراز است. trace.no_inherit رشته‌های فرزند (children threads) دنبال نشوند. trace.show_arg_names آیا نام آرگومان‌های فراخوانی سیستم چاپ شوند؟ اگر خیر، trace.show_zeros تنظیم خواهد شد. trace.show_duration نمایش مدت‌زمان فراخوانی سیستم. trace.show_prefix اگر روی yes تنظیم شود، پیشوندهای متنی مشترک را در جدول‌ها نشان می‌دهد. حالت پیش‌فرض، حذف پیشوند مشترک در مواردی مانند "MAP_SHARED" و نمایش صرف "SHARED" است. trace.show_timestamp نمایش برچسب زمانی (timestamp) شروع فراخوانی سیستم. trace.show_zeros آرگومان‌های فراخوانی سیستم که برابر با صفر هستند پنهان (suppress) نشوند. trace.tracepoint_beautifiers استفاده از "libtraceevent" برای به‌کارگیری آن کتابخانه جهت غنی‌سازی آرگومان‌های نقطه ردگیری، یا "libbeauty" (حالت پیش‌فرض) برای استفاده از همان زیباسازهای آرگومان مورد استفاده در خطوط sys_enter+sys_exit شبیه به strace. ftrace.*, ftrace.tracer می‌تواند برای انتخاب ردیاب (tracer) پیش‌فرض هنگامی که هیچ‌یک از گزینه‌های -G یا -F مشخص نشده باشند استفاده شود. مقادیر مجاز عبارتند از: function و function_graph. samples.*, samples.context تعیین می‌کند که در مرورگر بافت نمونه (sample context browser) در perf report، چند نانوثانیه از بازه زمانی اطراف نمونه‌ها نمایش داده شود. scripts.* هر گزینه‌ای یک اسکریپت را تعریف می‌کند که به منوی اسکریپت‌ها در مرورگر تعاملی perf افزوده شده و خروجی آن نمایش داده می‌شود. نام گزینه همان نام نمایشی، و مقدار آن خط فرمان اسکریپت است. به این اسکریپت همان گزینه‌هایی منتقل می‌شود که به دستور کامل perf script ارسال می‌گردد، به‌ویژه فایل -i perfdata، --cpu و --tid. convert.*, convert.queue-size محدود کردن اندازه صف ordered_events تا بتوان اندازه تخصیص فایل‌های داده perf را بدون رویدادهای دور پایانی مناسب (finished round events) کنترل کرد. stat.*, stat.big-num (بولی) تغییر مقدار پیش‌فرض برای "--big-num". برای پیش‌فرض قرار دادن "--no-big-num"، مقدار "stat.big-num=false" را تنظیم کنید. intel-pt.*, intel-pt.cache-divisor, intel-pt.mispred-all در صورت تنظیم، رمزگشای Intel PT فلگ mispred (پیش‌بینی نادرست) را روی تمامی شاخه‌ها تنظیم می‌کند. intel-pt.max-loops در صورت تنظیم و غیرصفر بودن، حداکثر تعداد شاخه‌های بدون قیدوشرط رمزگشایی‌شده بدون مصرف هیچ‌گونه بسته ردگیری را مشخص می‌کند. در صورت فراتر رفتن از این حداکثر، خطای "Never-ending loop" (حلقه بی‌پایان) رخ می‌دهد. مقدار پیش‌فرض 100000 است. intel-pt.all-switch-events اگر کاربر دسترسی لازم را داشته باشد، همیشه تمامی رویدادهای تعویض بافت (context switch) را روی همه پردازنده‌ها ثبت می‌کند. auxtrace.*, auxtrace.dumpdir فقط مخصوص s390. دایرکتوری ذخیره بافر ردگیری کمکی (auxiliary trace buffer) را می‌توان با این گزینه تغییر داد. مثال: auxtrace.dumpdir=/tmp. اگر دایرکتوری وجود نداشته باشد یا نوع فایل نادرست باشد، دایرکتوری جاری استفاده می‌شود. itrace.*, debug-log-buffer-size اندازه گزارش لاگ به بایت برای خروجی هنگام استفاده از گزینه --itrace=d+e. به گزینه itrace در perf-script(1) یا perf-report(1) مراجعه کنید. مقدار پیش‌فرض 16384 است. daemon.*, daemon.base مسیر پایه برای داده‌های دیمن (daemon). داده‌های تمام نشست‌ها در این مسیر ذخیره می‌شوند. session-.*, session-.run یک نشست ضبط (record) جدید برای دیمن تعریف می‌کند. مقدار آن همان خط فرمان record بدون کلیدواژه record است. همچنین ببینید (SEE ALSO) perf(1) perf 09/04/2026 PERF-CONFIG(1)