hackbench(8) hackbench(8)
# SPDX-License-Identifier: GPL-2.0-or-later

hackbench - آزمون ارزیابی کارایی و سنجش فشار برای زمان‌بند هسته

hackbench [-f|--fds NUM] [-F|--fifo] [-g|--groups NUM] [-h|--help] [-l|--loops LOOPS] [-p|--pipe] [-s|--datasize SIZE] [-T|--threads] [-P|--process]

ابزار Hackbench هم یک محک (benchmark) و هم یک آزمون سنجش فشار (stress test) برای زمان‌بند هسته لینوکس است. وظیفه اصلی آن ایجاد تعداد مشخصی از جفت‌های موجودیت‌های قابل زمان‌بندی (یا ریسه‌ها یا فرآیندهای سنتی) است که از طریق سوکت‌ها یا لوله‌ها ارتباط برقرار می‌کنند، و اندازه‌گیری مدت زمانی که طول می‌کشد تا هر جفت داده‌ها را رفت و برگشت ارسال کنند.

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

تعیین می‌کند هر فرآیند فرزند چه تعداد توصیف‌گر فایل باید استفاده کند. توجه داشته باشید که تعداد مؤثر دو برابر مقداری خواهد بود که در اینجا مشخص می‌کنید، زیرا هر یک از فرزندان فرستنده و گیرنده این تعداد توصیف‌گر فایل را باز خواهند کرد.
تغییر زمان‌بندی ریسه اصلی به SCHED_FIFO پس از ایجاد کارگران (workers). این امر به ریسه مدیریت اجازه می‌دهد تا پس از ایجاد تعداد زیادی فرآیند فرزند نیز اجرا شود.
تعیین تعداد گروه‌های فرستنده و گیرنده که باید راه‌اندازی شوند.
نمایش صفحه راهنمای ساده.
تعداد پیام‌هایی که هر جفت فرستنده/گیرنده باید ارسال کند.
ارسال داده‌ها از طریق لوله (pipe) به جای سوکت (پیش‌فرض).
تنظیم حجم داده‌های ارسالی در هر پیام.
هر فرزند فرستنده/گیرنده به صورت یک ریسه POSIX از فرآیند والد خواهد بود.
ابزار Hackbench روی تمامی فرزندان از fork() استفاده خواهد کرد (رفتار پیش‌فرض).

اجرای hackbench بدون هیچ گزینه‌ای رفتار پیش‌فرض را در بر خواهد داشت؛ استفاده از fork() و ارسال داده‌ها میان فرستنده‌ها و گیرنده‌ها از طریق سوکت:

user@host: ~ $ hackbench
Running in process mode with 10 groups using 40 file descriptors each (== 400 tasks)
Each sender will pass 100 messages of 100 bytes
Time: 0.890

برای استفاده از لوله‌ها میان فرستنده‌ها و گیرنده‌ها و به کار بردن ریسه‌ها به جای fork():

user@host: ~ $ hackbench --pipe --threads   (or hackbench -p -T)
Running in threaded mode with 10 groups using 40 file descriptors each (== 400 tasks)
Each sender will pass 100 messages of 100 bytes
Time: 0.497

تنظیم اندازه داده‌ها به ۵۱۲ بایت، ارسال ۲۰۰ پیام به ازای هر جفت فرستنده/گیرنده و استفاده از ۱۵ گروه با ۲۵ توصیف‌گر فایل به ازای هر فرزند، در حالت فرآیند:

user@host: ~ $ hackbench -s 512 -l 200 -g 15 -f 25 -P
Running in process mode with 15 groups using 50 file descriptors each (== 750 tasks)
Each sender will pass 200 messages of 512 bytes
Time: 4.497

ابزار hackbench توسط Rusty Russell <rusty@rustcorp.com.au> نوشته شده است، با مشارکت‌هایی از جانب Yanmin Zhang <yanmin_zhang@linux.intel.com>، Ingo Molnar <mingo@elte.hu> و David Sommerseth <davids@redhat.com>.

این صفحه راهنما توسط Clark Williams <williams@redhat.com> و David Sommerseth <davids@redhat.com> نگاشته شده است.

این نسخه از hackbench بر پایه کدی است که از نشانی http://people.redhat.com/mingo/cfs-scheduler/tools/hackbench.c دریافت شده است. Yanmin Zhang کد اصلی hackbench برگرفته از
http://devresources.linuxfoundation.org/craiger/hackbench/src/hackbench.c را که از fork() استفاده می‌کرد، با نسخه تغییریافته‌ای از
http://www.bullopensource.org/posix/pi-futex/hackbench_pth.c که تنها از pthread استفاده می‌کرد ادغام کرد و امکان تغییر رفتار در زمان اجرا را فراهم ساخت. از آن زمان، Hackbench بازنویسی‌های بیشتری را برای بهبود مدیریت خطاها و ردیابی مناسب فرزندان مشتق‌شده با fork() تجربه کرده است تا در صورت توقف غیرمنتظره، فرآیند زامبی بر روی سیستم باقی نماند.

September 19, 2020