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