PERF-BENCH(1) perf Manual PERF-BENCH(1)

perf-bench - چارچوبی عمومی برای مجموعه‌های سنجش کارایی

perf bench [<common options>] <subsystem> <suite> [<options>]

دستور perf bench یک چارچوب عمومی برای مجموعه‌های سنجش کارایی (بنچمارک) است.

-r, --repeat=

تعداد دفعات تکرار اجرا را مشخص می‌کند (پیش‌فرض ۱۰).

-f, --format=

سبک قالب را مشخص می‌کند. سبک‌های قالب‌بندی موجود در حال حاضر عبارت‌اند از:

default

سبک پیش‌فرض. این سبک عمدتاً برای خواندن توسط انسان طراحی شده است.
.ft C
% perf bench sched pipe                      # with no style specified
(executing 1000000 pipe operations between two tasks)
        Total time:5.855 sec
                5.855061 usecs/op
                170792 ops/sec
.ft

simple

این سبک ساده برای پردازش خودکار توسط اسکریپت‌ها مناسب است.
.ft C
% perf bench --format=simple sched pipe      # specified simple
5.988
.ft

sched

سازوکارهای زمان‌بند و IPC.

syscall

کارایی (توان عملیاتی) فراخوان‌های سیستمی.

mem

کارایی دسترسی به حافظه.

numa

بنچمارک‌های زمان‌بندی NUMA و مدیریت حافظه (MM).

futex

بنچمارک‌های آزمون تنش futex.

epoll

بنچمارک‌های آزمون تنش Eventpoll (epoll).

internals

بنچمارک عملکردهای داخلی perf.

uprobe

بنچمارک سربار uprobe + BPF.

all

همهٔ زیرسیستم‌های بنچمارک.

messaging

مجموعهٔ آزمون برای ارزیابی کارایی زمان‌بند و سازوکارهای IPC. بر پایهٔ hackbench اثر Rusty Russell.

گزینه‌های messaging

-p, --pipe

استفاده از pipe() به‌جای socketpair()

-t, --thread

اجرا به‌صورت چندنخی (multi-thread) به‌جای چندفرآیندی (multi-process)

-g, --group=

مشخص کردن تعداد گروه‌ها

-l, --nr_loops=

مشخص کردن تعداد تکرارها (حلقه‌ها)

مثال messaging

.ft C
% perf bench sched messaging                 # run with default
options (20 sender and receiver processes per group)
(10 groups == 400 processes run)
      Total time:0.308 sec
% perf bench sched messaging -t -g 20        # be multi-thread, with 20 groups
(20 sender and receiver threads per group)
(20 groups == 800 threads run)
      Total time:0.582 sec
.ft

pipe

مجموعهٔ آزمون برای فراخوان سیستمی pipe(). بر پایهٔ pipe-test-1m.c اثر Ingo Molnar.

گزینه‌های pipe

-l, --loop=

مشخص کردن تعداد تکرارها (حلقه‌ها).

-G, --cgroups=

نام‌های cgroupها برای فرستنده و گیرنده، که با کاما از یکدیگر جدا شده‌اند. این گزینه برای بررسی سربار تعویض زمینهٔ (context switching) مربوط به cgroup مفید است. توجه داشته باشید که perf این cgroupها را ایجاد یا حذف نمی‌کند، بنابراین کاربران باید پیش از استفاده اطمینان حاصل کنند که این cgroupها وجود دارند و در دسترس هستند.

مثال pipe

.ft C
% perf bench sched pipe
(executing 1000000 pipe operations between two tasks)
        Total time:8.091 sec
                8.091833 usecs/op
                123581 ops/sec
% perf bench sched pipe -l 1000              # loop 1000
(executing 1000 pipe operations between two tasks)
        Total time:0.016 sec
                16.948000 usecs/op
                59004 ops/sec
% perf bench sched pipe -G AAA,BBB
(executing 1000000 pipe operations between cgroups)
# Running 'sched/pipe' benchmark:
# Executed 1000000 pipe operations between two processes
     Total time: 6.886 [sec]
       6.886208 usecs/op
         145217 ops/sec
.ft

basic

مجموعه‌ای برای ارزیابی کارایی توان عملیاتی فراخوانی‌های سیستمی پایه (هر دو معیار usecs/op و ops/sec). این مجموعه از یک تک‌رشته استفاده می‌کند که صرفاً getppid(2) را اجرا می‌کند؛ یک فراخوانی سیستمی ساده که نتیجهٔ آن توسط glibc کَش نمی‌شود.

memcpy

مجموعه‌ای برای ارزیابی کارایی کپی سادهٔ حافظه به روش‌های گوناگون.

گزینه‌های memcpy

-s, --size

تعیین اندازهٔ حافظه برای کپی (پیش‌فرض: 1MB). واحدهای در دسترس عبارتند از B، KB، MB، GB و TB (غیرحساس به بزرگی و کوچکی حروف).

-p, --page

تعیین اندازهٔ صفحه (page-size) برای نگاشت بافرهای حافظه (پیش‌فرض: 4KB). مقادیر در دسترس عبارتند از 4KB، 2MB و 1GB (غیرحساس به بزرگی و کوچکی حروف).

-k, --chunk

تعیین اندازهٔ تکه (chunk-size) برای هر فراخوانی. (پیش‌فرض: 0، یا full-extent) واحدهای در دسترس عبارتند از B، KB، MB، GB و TB (غیرحساس به بزرگی و کوچکی حروف).

-f, --function

تعیین تابع برای کپی (پیش‌فرض: default). توابع در دسترس به معماری وابسته هستند. در x86-64، موارد x86-64-unrolled، x86-64-movsq و x86-64-movsb پشتیبانی می‌شوند.

-l, --nr_loops

تکرار فراخوانی memcpy به این تعداد دفعات.

-c, --cycles

استفاده از رویداد cpu-cycles در perf به‌جای فراخوانی سیستمی gettimeofday.

memset

مجموعه‌ای برای ارزیابی کارایی مقداردهی سادهٔ حافظه به روش‌های گوناگون.

گزینه‌های memset

-s, --size

تعیین اندازهٔ حافظه برای مقداردهی (پیش‌فرض: 1MB). واحدهای در دسترس عبارتند از B، KB، MB، GB و TB (غیرحساس به بزرگی و کوچکی حروف).

-p, --page

تعیین اندازهٔ صفحه (page-size) برای نگاشت بافرهای حافظه (پیش‌فرض: 4KB). مقادیر در دسترس عبارتند از 4KB، 2MB و 1GB (غیرحساس به بزرگی و کوچکی حروف).

-k, --chunk

تعیین اندازهٔ تکه (chunk-size) برای هر فراخوانی. (پیش‌فرض: 0، یا full-extent) واحدهای در دسترس عبارتند از B، KB، MB، GB و TB (غیرحساس به بزرگی و کوچکی حروف).

-f, --function

تعیین تابع برای مقداردهی (پیش‌فرض: default). توابع در دسترس به معماری وابسته هستند. در x86-64، موارد x86-64-unrolled، x86-64-stosq و x86-64-stosb پشتیبانی می‌شوند.

-l, --nr_loops

تکرار فراخوانی memset به این تعداد دفعات.

-c, --cycles

استفاده از رویداد cpu-cycles در perf به‌جای فراخوانی سیستمی gettimeofday.

mmap

مجموعه‌ای برای ارزیابی کارایی زیرسیستم حافظه برای حافظهٔ نگاشت‌شده با mmap().

گزینه‌های mmap

-s, --size

تعیین اندازهٔ حافظه برای مقداردهی (پیش‌فرض: 1MB). واحدهای در دسترس عبارتند از B، KB، MB، GB و TB (غیرحساس به بزرگی و کوچکی حروف).

-p, --page

تعیین اندازهٔ صفحه (page-size) برای نگاشت بافرهای حافظه (پیش‌فرض: 4KB). مقادیر در دسترس عبارتند از 4KB، 2MB و 1GB (غیرحساس به بزرگی و کوچکی حروف).

-r, --randomize

تعیین سید (seed) برای تصادفی‌سازی آفست دسترسی به صفحه (پیش‌فرض: 0، یا بدون تصادفی‌سازی).

-f, --function

تعیین تابع برای تنظیم (پیش‌فرض: all). توابع در دسترس عبارتند از demand و populate، که اولی صفحات ناحیه را به‌صورت تقاضامحور (demand faulting) بارگذاری کرده و دومی از نگاشت مشتاقانه (eager mapping) استفاده می‌کند.

-l, --nr_loops

تکرار فراخوانی mmap() به این تعداد دفعات.

-c, --cycles

استفاده از رویداد cpu-cycles در perf به‌جای فراخوانی سیستمی gettimeofday.

-t, --threads=<NUM>

ایجاد چندین رشته برای فراخوانی هم‌روند mmap/munmap.

mem

مجموعه آزمون برای ارزیابی بارهای کاری NUMA.

hash

مجموعه آزمون برای ارزیابی جدول‌های درهم‌سازی (hash tables).

wake

مجموعه آزمون برای ارزیابی فراخوانی‌های wake.

wake-parallel

مجموعه آزمون برای ارزیابی فراخوانی‌های موازی wake.

requeue

مجموعه آزمون برای ارزیابی فراخوانی‌های requeue.

lock-pi

مجموعه آزمون برای ارزیابی فراخوانی‌های lock_pi در futex.

wait

مجموعه آزمون برای ارزیابی فراخوانی‌های هم‌روند epoll_wait.

ctl

مجموعه آزمون برای ارزیابی فراخوانی‌های چندگانه epoll_ctl.

synthesize

مجموعه آزمون برای ارزیابی کارایی سنتز رویدادهای perf.

perf(1)

09/04/2026 perf