PERF-CONFIG(1) perf Manual PERF-CONFIG(1)

perf-config - دریافت و تنظیم متغیرها در فایل پیکربندی

perf config [<file-option>] [section.name[=value] ...]
یا
perf config [<file-option>] -l | --list

با این دستور می‌توانید متغیرهای موجود در یک فایل پیکربندی را مدیریت کنید.

-l, --list

نمایش متغیرهای پیکربندی فعلی، شامل نام و مقدار، برای تمام بخش‌ها.

--user

برای گزینه‌های نوشتن و خواندن: نوشتن در فایل کاربری $HOME/.perfconfig یا خواندن از آن.

--system

برای گزینه‌های نوشتن و خواندن: نوشتن در فایل سراسری سیستم $(sysconfdir)/perfconfig یا خواندن از آن.

فایل پیکربندی perf شامل متغیرهای متعددی برای تغییر جنبه‌های مختلف هر یک از ابزارهای آن است، از جمله خروجی، میزان مصرف دیسک و غیره. از فایل $HOME/.perfconfig برای ذخیره پیکربندی به ازای هر کاربر استفاده می‌شود. از فایل $(sysconfdir)/perfconfig می‌توان برای ذخیره پیکربندی پیش‌فرض سراسری سیستم استفاده کرد.

می‌توان خواندن فایل‌های پیکربندی را با تنظیم متغیر محیطی PERF_CONFIG بر روی /dev/null غیرفعال کرد، یا با مقداردهی این متغیر، یک فایل پیکربندی جایگزین مشخص نمود.

هنگام خواندن یا نوشتن، مقادیر به‌طور پیش‌فرض از فایل‌های پیکربندی سیستم و کاربر خوانده می‌شوند، و می‌توان از گزینه‌های --system و --user استفاده کرد تا به دستور اعلام شود فقط از آن مکان بخواند یا در آن بنویسد.

این فایل از بخش‌ها تشکیل شده است. هر بخش با نام خود که درون قلاب‌ها قرار گرفته آغاز می‌شود و تا شروع بخش بعدی ادامه می‌یابد. هر متغیر باید درون یک بخش قرار داشته باشد و قالبی به شکل name = value داشته باشد، برای مثال:

[section]
        name1 = value1
        name2 = value2

نام بخش‌ها به بزرگی و کوچکی حروف حساس است و می‌تواند شامل هر کاراکتری به جز خط جدید باشد (علامت نقل‌قول دوگانه " و بک‌اسلش باید به ترتیب به صورت \" و \\ اسکیپ شوند). سرآیندهای بخش نمی‌توانند در چند خط امتداد یابند.

با داشتن یک $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

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/<pid>/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 <load0>
یک آدرس در کد اسمبلی دارای آدرس مطلق مشخصی به صورت زیر است:
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.<tool>.cmd'
یا با تعیین مسیری متفاوت از طریق گزینه پیکربندی 'man.<tool>.path' اضافه کرد.

pager.*, pager.<subcommand>

هنگامی که زیردستور روی 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 پیروی می‌کند، مانند:
اگر مقدار 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-<NAME>.*, session-<NAME>.run

یک نشست ضبط (record) جدید برای دیمن تعریف می‌کند. مقدار آن همان خط فرمان record بدون کلیدواژه record است.

perf(1)

09/04/2026 perf