| PERF-CONFIG(1) | perf Manual | PERF-CONFIG(1) |
نام (NAME)
perf-config - دریافت و تنظیم متغیرها در فایل پیکربندی
خلاصه دستور (SYNOPSIS)
perf config [<file-option>] [section.name[=value] ...] یا perf config [<file-option>] -l | --list
توضیحات (DESCRIPTION)
با این دستور میتوانید متغیرهای موجود در یک فایل پیکربندی را مدیریت کنید.
گزینهها (OPTIONS)
-l, --list
--user
--system
فایل پیکربندی (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.*
medium = green, lightgray
اگر میخواهید از رنگ پیکربندیشده برای ترمینال خود استفاده کنید، آن را به صورت 'default' قرار دهید، برای نمونه:
medium = default, lightgray
رنگهای موجود: red, yellow, green, cyan, gray, black, blue, white, default, magenta, lightgray
colors.top
colors.medium
colors.normal
colors.selected
colors.jump_arrows
colors.addr
colors.root
core.*, core.proc-map-timeout
addr2line-disable-warn
addr2line-timeout
tui., gtk.
[tui]
top = true
باعث میشود TUI به عنوان پیشفرض برای زیردستور 'top' عمل کند. این قابلیتها در صورتی در دسترس خواهند بود که کتابخانههای لازم در زمان ساخت ابزار شناسایی شده باشند.
buildid.*, buildid.dir
ابزارهای ضبط همچنین یک پیوند سخت یا رونوشت از باینریها، کتابخانههای اشتراکی، فایلهای /proc/kallsyms و /proc/kcore را در یک دایرکتوری اختصاصی کاربر، $HOME/.debug/، ذخیره میکنند تا در زمان تحلیل استفاده شوند.
متغیر buildid.dir میتواند هم برای تغییر مسیر این کش دایرکتوری و هم برای غیرفعال کردن کامل آن استفاده شود. اگر میخواهید آن را غیرفعال کنید، مقدار buildid.dir را برابر /dev/null قرار دهید. مقدار پیشفرض $HOME/.debug است
buildid-cache.*
buildid-cache.debuginfod=http://192.168.122.174:8002
annotate.*
annotate.disassemblers
انتخاب گزینهای متفاوت زمانی مفید است که قابلیتی در یکی از گزینهها بهترین پشتیبانی را داشته باشد، یا برای مقایسه خروجی هنگام شک درباره باگها و غیره.
این مقدار میتواند فهرستی بر حسب اولویت باشد؛ اولین موردی که کار کند، فرآیند را نهایی میکند.
annotate.addr2line
annotate.objdump
annotate.disassembler_style
annotate.hide_src_code
│ 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
ffffffff81624d50 <load0>
یک آدرس در کد اسمبلی دارای آدرس مطلق مشخصی به صورت زیر است:
ffffffff816250b8:│ mov 0x8(%r14),%rdi
اما اگر use_offset برابر با 'true' باشد، آدرس تفریقشده از آدرس پایه چاپ میشود. مقدار پیشفرض true است. این گزینه فقط برای TUI اعمال میشود.
368:│ mov 0x8(%r14),%rdi
این گزینه با مرورگرهای tui و stdio2 کار میکند.
annotate.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
│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
302 │ mov %eax,%eax
اما اگر این گزینه برابر با 'false' باشد، مقادیر درصدی مربوط به بار اضافه (overhead) چاپ میشود؛ یعنی: مقدار پیشفرض 'false' است.
99.93 │ mov %eax,%eax
این گزینه با مرورگرهای tui، stdio2 و stdio کار میکند.
annotate.show_nr_samples
Percent│ 74.03 │ mov %fs:0x28,%rax
زمانی که روی true تنظیم شود:
Samples│
6 │ mov %fs:0x28,%rax
این گزینه با مرورگرهای tui، stdio2 و stdio کار میکند.
annotate.offset_level
این گزینه با مرورگرهای tui و stdio2 کار میکند.
annotate.demangle
annotate.demangle_kernel
hist.*, hist.percentage
Overhead Symbols ........ ....... 33.33% foo 33.33% bar 33.33% baz
این سربار اصلی است و ما نخستین مدخل یعنی 'foo' را فیلتر خواهیم کرد. مقدار 'relative' سربار 'bar' و 'baz' را برای هر کدام به 50.00% افزایش میدهد، در حالی که 'absolute' سربار فعلی آنها (33.33%) را نمایش خواهد داد.
ui.*, ui.show-headers
call-graph.*
call-graph.record-mode
حالت 'defer' میتواند همراه با حالت 'fp' برای فعالسازی زنجیرههای فراخوانی کاربری بهتعویقافتاده (مانند 'fp,defer') استفاده شود.
call-graph.dump-size
call-graph.print-type
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
اگر این گزینه تنظیم نشود و report.children یا top.children روی true تنظیم شده باشد (یا گزینه معادل در خط فرمان مشخص شده باشد)، مقدار پیشفرض این گزینه برای اجرای 'perf report' یا 'perf top' به 'caller' تغییر مییابد. سایر دستورها همچنان به صورت پیشفرض از 'callee' استفاده خواهند کرد.
call-graph.sort-key
call-graph.threshold
call-graph.print-limit
report.*, report.sort_order
report.percent-limit
report.queue-size
report.children
report.group
# 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
top.*, top.children
top.call-graph
man.*, man.viewer
همچنین میتوان یک ابزار جدید نمایش راهنما را با استفاده از 'man.<tool>.cmd' یا با تعیین مسیری متفاوت از طریق گزینه پیکربندی 'man.<tool>.path' اضافه کرد.
pager.*, pager.<subcommand>
kmem.*, kmem.default
record.*, record.build-id
record.call-graph
record.aio
record.debuginfod
اگر مقدار URLها برابر 'system' باشد، مقدار متغیر محیطی سیستمی DEBUGINFOD_URLS استفاده میشود.
diff.*, diff.order
diff.compute
trace.*, trace.add_events
trace.args_alignment
trace.no_inherit
trace.show_arg_names
trace.show_duration
trace.show_prefix
trace.show_timestamp
trace.show_zeros
trace.tracepoint_beautifiers
ftrace.*, ftrace.tracer
samples.*, samples.context
scripts.*
convert.*, convert.queue-size
stat.*, stat.big-num
intel-pt.*, intel-pt.cache-divisor, intel-pt.mispred-all
intel-pt.max-loops
intel-pt.all-switch-events
auxtrace.*, auxtrace.dumpdir
itrace.*, debug-log-buffer-size
daemon.*, daemon.base
session-<NAME>.*, session-<NAME>.run
همچنین ببینید (SEE ALSO)
| 09/04/2026 | perf |