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.