hackbench(8) hackbench(8) # SPDX-License-Identifier: GPL-2.0-or-later نام (NAME) hackbench - آزمون ارزیابی کارایی و سنجش فشار برای زمان‌بند هسته خلاصه دستور (SYNOPSIS) hackbench [-f|--fds NUM] [-F|--fifo] [-g|--groups NUM] [-h|--help] [-l|--loops LOOPS] [-p|--pipe] [-s|--datasize SIZE] [-T|--threads] [-P|--process] توضیحات (DESCRIPTION) ابزار Hackbench هم یک محک (benchmark) و هم یک آزمون سنجش فشار (stress test) برای زمان‌بند هسته لینوکس است. وظیفه اصلی آن ایجاد تعداد مشخصی از جفت‌های موجودیت‌های قابل زمان‌بندی (یا ریسه‌ها یا فرآیندهای سنتی) است که از طریق سوکت‌ها یا لوله‌ها ارتباط برقرار می‌کنند، و اندازه‌گیری مدت زمانی که طول می‌کشد تا هر جفت داده‌ها را رفت و برگشت ارسال کنند. گزینه‌ها (OPTIONS) این برنامه‌ها از ساختار نحوی معمول خط فرمان گنو پیروی می‌کنند که در آن گزینه‌های طولانی با دو خط تیره ("--") آغاز می‌شوند. خلاصه‌ای از گزینه‌ها در ادامه آمده است: -f, --fds=NUM تعیین می‌کند هر فرآیند فرزند چه تعداد توصیف‌گر فایل باید استفاده کند. توجه داشته باشید که تعداد مؤثر دو برابر مقداری خواهد بود که در اینجا مشخص می‌کنید، زیرا هر یک از فرزندان فرستنده و گیرنده این تعداد توصیف‌گر فایل را باز خواهند کرد. -F,--fifo تغییر زمان‌بندی ریسه اصلی به SCHED_FIFO پس از ایجاد کارگران (workers). این امر به ریسه مدیریت اجازه می‌دهد تا پس از ایجاد تعداد زیادی فرآیند فرزند نیز اجرا شود. -g, --groups=NUM تعیین تعداد گروه‌های فرستنده و گیرنده که باید راه‌اندازی شوند. -h, --help نمایش صفحه راهنمای ساده. -l, --loops=LOOPS تعداد پیام‌هایی که هر جفت فرستنده/گیرنده باید ارسال کند. -p, --pipe ارسال داده‌ها از طریق لوله (pipe) به جای سوکت (پیش‌فرض). -s, --datasize=SIZE تنظیم حجم داده‌های ارسالی در هر پیام. -T, --threads هر فرزند فرستنده/گیرنده به صورت یک ریسه POSIX از فرآیند والد خواهد بود. -P, --process ابزار Hackbench روی تمامی فرزندان از fork() استفاده خواهد کرد (رفتار پیش‌فرض). مثال‌ها (EXAMPLES) اجرای 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 نویسندگان (AUTHORS) ابزار hackbench توسط Rusty Russell نوشته شده است، با مشارکت‌هایی از جانب Yanmin Zhang ، Ingo Molnar و David Sommerseth . این صفحه راهنما توسط Clark Williams و David Sommerseth نگاشته شده است. تاریخچه (HISTORY) این نسخه از hackbench بر پایه کدی است که از نشانی دریافت شده است. Yanmin Zhang کد اصلی hackbench برگرفته از را که از fork() استفاده می‌کرد، با نسخه تغییریافته‌ای از که تنها از pthread استفاده می‌کرد ادغام کرد و امکان تغییر رفتار در زمان اجرا را فراهم ساخت. از آن زمان، Hackbench بازنویسی‌های بیشتری را برای بهبود مدیریت خطاها و ردیابی مناسب فرزندان مشتق‌شده با fork() تجربه کرده است تا در صورت توقف غیرمنتظره، فرآیند زامبی بر روی سیستم باقی نماند. September 19, 2020 hackbench(8)