| STRESS-NG(1) | General Commands Manual | STRESS-NG(1) |
نام (NAME)
stress-ng - نسل جدید stress، ابزاری برای بارگذاری و اعمال فشار بر سیستم رایانهای
خلاصه دستور (SYNOPSIS)
stress-ng [OPTION [ARG]] ...
توضیحات (DESCRIPTION)
برنامه stress-ng یک سیستم رایانهای را به روشهای انتخابی و گوناگون تحت آزمون استرس قرار میدهد. این ابزار برای به چالش کشیدن زیرسیستمهای فیزیکی رایانه و همچنین رابطهای هسته سیستمعامل طراحی شده است. stress-ng همچنین طیف گستردهای از آزمونهای استرس مختص پردازنده مرکزی (CPU) را ارائه میدهد که محاسبات ممیز شناور (floating point)، اعداد صحیح (integer)، دستکاری بیتها (bit manipulation)، حافظه نهان (cache)، دستورالعملهای برداری (vector instructions) و جریان کنترل (control flow) را به کار میگیرند.
هدف اولیه stress-ng این بود که سیستم را وادار به کار سنگین کند تا مشکلات سختافزاری مانند افزایش بیش از حد دما (thermal overruns) و همچنین باگهای سیستمعامل که تنها در زمان کوبش شدید سیستم (system thrashing) رخ میدهند آشکار شوند. از stress-ng با احتیاط استفاده کنید؛ زیرا برخی از این آزمونها میتوانند باعث داغ شدن بیش از حد سختافزارهایی با طراحی ضعیف شوند و همچنین کوبش شدید سیستم را در پی داشته باشند که متوقف کردن آن ممکن است دشوار باشد.
برنامه stress-ng همچنین میتواند نرخ گذردهی (throughput) آزمون را اندازه بگیرد؛ این قابلیت برای بررسی تغییرات کارایی در نگارشهای مختلف سیستمعامل یا انواع سختافزار مفید است. با این حال، هدف این ابزار هرگز استفاده به عنوان یک مجموعه آزمون بنچمارک دقیق نبوده است، بنابراین آن را به این منظور به کار نبرید.
اجرای stress-ng با مجوزهای ریشه (root)، تنظیمات مدیریت کمبود حافظه (OOM) را در سیستمهای لینوکس به گونهای تنظیم میکند که عوامل استرس (stressors) در شرایط کمبود حافظه متوقفنشدنی باشند؛ بنابراین از این دسترسی با هوشمندی و دقت استفاده کنید. با دسترسیهای مناسب، stress-ng امکان تنظیم کلاس و سطوح ionice را نیز فراهم میسازد که این مورد نیز باید با احتیاط استفاده شود.
میتوان تعداد فرآیندهای فراخوانیشده را به ازای هر نوع آزمون استرس تعیین کرد؛ تعیین مقدار صفر، تعداد پردازندههای موجود را بر اساس خروجی sysconf(_SC_NPROCESSORS_CONF) انتخاب میکند و در صورتی که قابل تشخیص نباشد، تعداد پردازندههای برخط (online CPUs) به کار گرفته میشود. اگر مقدار کمتر از صفر باشد، تعداد پردازندههای برخط استفاده خواهد شد. تعیین این مقدار به صورت درصد، درصدی از پردازندههای پیکربندیشده را انتخاب میکند (که به سمت نزدیکترین عدد صحیح پایین گرد میشود).
گزینهها (OPTIONS)
گزینههای عمومی کنترل stress-ng:
- --abort
- این گزینه در صورتی که هر یک از عوامل استرس به دلیل خطا پیش از موعد خاتمه یابد، تمام عوامل استرس در حال اجرا را وادار به لغو (پایان یافتن) میکند.
- -A, --aggressive
- گزینههای تهاجمیتری را برای swap، حافظه نهان (cache) و حافظه فعال میکند و همچنین همبستگی پردازنده (CPU affinity) را اجباری کرده و سرعت پردازنده را به حداکثر میرساند. این کار ممکن است آزمونهای مبتنی بر حافظه را کُند کند، انرژی بیشتری مصرف نماید و تعادل زمان کاربری (user time) در برابر زمان سیستمی (system time) را بسته به نوع عامل استرسِ مورد استفاده تغییر دهد. به طور مشخص، این گزینه madvise تصادفی را برای نگاشت/لغو نگاشتهای حافظه فعال میسازد (که بالقوه موجب فعالیت بیش از حد swap میشود)، صفحات نگاشتشده در حافظه را به حضور فیزیکی در حافظه وادار میکند، همبستگی پردازنده فرآیندهای استرس را تغییر میدهد و در صورت امکان، P-stateها و فرکانسهای پردازنده را به بیشترین حد ممکن میرساند.
- -a N, --all N, --parallel N
- تعداد N نمونه از تمام عوامل استرس را به صورت موازی اجرا میکند. اگر N کمتر از صفر باشد، تعداد پردازندههای برخط (online) برای تعداد نمونهها استفاده میشود. اگر N صفر باشد، از تعداد پردازندههای پیکربندیشده در سیستم استفاده میشود. تعیین N به صورت درصد، درصدی از پردازندههای پیکربندیشده را انتخاب میکند (که به سمت نزدیکترین عدد صحیح پایین گرد میشود)..SH "گزینهها (OPTIONS)"
- --autogroup
- با این گزینه، هر فراخوانی موفق nice(2) تلاش خواهد کرد تا تنظیمات /proc/self/autogroup را نیز روی سطح niceness فرایند فراخواننده تنظیم کند. این گزینه فقط برای لینوکس و زمان فعال بودن CONFIG_SCHED_AUTOGROUP برای زمانبند CFS در دسترس است؛ برای جزئیات بیشتر درباره چگونگی تأثیر این مورد بر رفتار زمانبندی تعاملی، sched(7) را ببینید. فقط لینوکس.
- -b N, --backoff N
- بین شروع هر فرایند کارگر استرس (stress worker) به مدت N میکروثانیه درنگ میکند. این گزینه به کاربر امکان میدهد تا آزمونهای استرس را در طول زمان بهتدریج افزایش دهد.
- --buddystat S
- هر S ثانیه اندازههای حافظه آزاد تخصیصدهنده buddy و برآورد درصدی تکهتکهشدگی (fragmentation) را برای نواحی و بخشهای حافظه نمایش میدهد. فقط لینوکس.
- --buildinfo
- اطلاعات ساخت مانند تاریخ و زمان ساخت، کامپایلر استفادهشده، فلگهای کامپایل و پیونددهنده (linker) و نسخه استاندارد C استفادهشده را گزارش میدهد.
- --c-states
- میزان ماندگاری پردازنده در وضعیتهای مختلف C-state را گزارش میدهد.
- --change-cpu
- این گزینه فرایندهای فرزند برخی تنشزاها (stressors) را مجبور میکند در هنگام راهاندازی به یک پردازنده (CPU) متفاوت از والد منتقل شوند. توجه داشته باشید که در طول اجرای استرسور، ممکن است زمانبند تصمیم بگیرد والد را به همان پردازنده فرزند منتقل کند. استرسورهایی که تحت تأثیر این گزینه قرار میگیرند، از نوع کلاینت/سرور هستند، مانند استرسورهای شبکه (sock، sockmany، udp و غیره) یا استرسورهای تعویض زمینه (switch، pipe و غیره).
- --class name
- کلاس
استرسورها
را برای
اجرا مشخص
میکند.
استرسورها
در یک یا
چند کلاس
زیر
دستهبندی
میشوند: compute،
cpu، cpu-cache، device، fp، gpu،
hot، interrupt، integer، ipc، io،
filesystem، memory، network، os، pipe،
scheduler، search، signal، sort، tlb،
vector و vm. برخی
استرسورها
تنها در یک
کلاس قرار
میگیرند؛
برای
نمونه،
استرسور `get`
فقط در کلاس
`os` قرار دارد.
سایر
استرسورها
در بیش از
یک کلاس
قرار
میگیرند؛
برای مثال،
استرسور `lsearch`
در
کلاسهای
`cpu`، `cpu-cache`، `memory` و `search`
قرار
میگیرد
زیرا هر
چهار مورد
را به کار
میگیرد.
انتخاب یک
کلاس خاص،
تمامی
استرسورهای
موجود در آن
کلاس را
تنها در
صورت اجرا
به همراه
گزینه --sequential
اجرا خواهد
کرد.
مشخص کردن یک نام به همراه یک علامت سؤال اسکیپشده (برای مثال --class vm\?) تمامی استرسورهای آن کلاس خاص را چاپ میکند.
- --compact-memory
- در شروع هر بار فراخوانی استرسور، حافظه را فشرده (compact) میکند تا تکهتکهشدگی حافظه کاهش یابد؛ به دسترسی ریشه (root) نیاز دارد (فقط لینوکس).
- --config
- پیکربندی استفادهشده برای ساخت stress-ng را چاپ میکند.
- -n, --dry-run
- گزینهها را تجزیه میکند، اما آزمونهای استرس را اجرا نمیکند. یک عملیات بیاثر (no-op).
- --dentrystat S
- هر S ثانیه تعداد مدخلهای دایرکتوری (directory entries) تخصیصیافته، تعداد مدخلهای دایرکتوری منفی (negative dentry) در حال استفاده و صفحات درخواستشده را نمایش میدهد. فقط لینوکس.
- --exercised
- ویژگیها، کتابخانهها و فراخوانیهای سیستمی بهکارگرفتهشده توسط هسته هر استرسور را نمایش میدهد.
- --exercise-feature list
- استرسورهایی
را فعال
میکند که
یک یا چند
ویژگی
مشخصشده
در فهرست
ارائهشده
را به کار
میگیرند،
برای مثال:
--exercise-features branch,registers
برای به کار
گرفتن
انشعابها
و ثباتهای
پردازنده.
از
گزینههای
--all، --permute یا --seq
برای مشخص
کردن نحوه
اجرای
استرسورها
استفاده
کنید.
ویژگیهای
موجود به
شرح زیر
است:
ویژگی توضیحات \? نمایش ویژگیهای اختصاصی هر استرسور atomic عملیات اتمیک (atomic operations) backend-bound-rob پر شدن بافر بازآرایی (ROB) از دستورالعملهای در حال اجرا که باعث توقف در اجرا میشود bogo-ops-stable مقدار bogo-ops پایدار است و میتوان برای بنچمارک به آن اعتماد کرد branch عملیات سنگین انشعاب (branch) branch-miss خطاهای پیشبینی انشعاب پردازنده (branch misses) bus-lock عملیات قفل شکافته (split lock) یا دسترسیهای قفلشده بالا chaotic-load ایجاد بار کاری نامنظم و آشوبناک روی سیستم cipher محاسبات الگوریتمهای رمزنگاری (cipher) context-switches اعمال نرخ بالای تعویض زمینه (context switch) cpu-shift عملیات شیفت و چرخش به چپ/راست پردازنده cpu-bit عملیات منطقی بیتی پردازنده (and، or، xor، not) cpu-heavy-ops اشباع خط لوله اجرا (pipeline) با عملیات سنگین cpu-instructions اعمال نرخ دستورالعمل بالاتر از حد معمول cpu-migrations ایجاد مهاجرت استرسورها بین پردازندهها cpu-opcode اجرای کدهای عملیاتی (opcodes) غیرمعمول، نامعتبر یا دارای سطح دسترسی cpu-vector اعمال عملیات برداری پردازنده crypto محاسبات رمزنگاری d-cache عملیات حافظه نهان داده (data cache) d-cache-l1-read عملیات خواندن حافظه نهان داده سطح ۱ (L1) d-cache-l1-write عملیات نوشتن حافظه نهان داده سطح ۱ (L1) d-cache-ll-read عملیات خواندن پایینترین سطح حافظه نهان داده (LLC) d-cache-ll-write عملیات نوشتن پایینترین سطح حافظه نهان داده (LLC) d-cache-miss خطای حافظه نهان داده (خواندن یا نوشتن) d-cache-prefetch پیشواکشی (prefetch) حافظه نهان داده (در صورت در دسترس بودن) d-cache-read-miss خطای خواندن حافظه نهان داده d-cache-write-miss خطای نوشتن حافظه نهان داده d-tlb-read-miss خطای خواندن در TLB داده (بافر ترجمه نشانی) d-tlb-write-miss خطای نوشتن در TLB داده (بافر ترجمه نشانی) directory عملیات دایرکتوری در فایلسیستم file-lock عملیات قفل کردن فایل frontend-decoder به کار گرفتن رمزگشای پیشانی (frontend decoder) دستورالعملهای پردازنده filemap-page-cache برخورد یا خطای page cache نگاشت فایل هسته fp عملیات ممیز شناور (floating point) fp-complex عملیات ممیز شناور مختلط fp-decimal عملیات ممیز شناور دهدهی fp-division عملیات تقسیم ممیز شناور fp-ops نرخ نسبتاً بالای عملیات ممیز شناور frontend-bound-bandwidth فرانتاند دستورالعملها را با سرعتی کمتر از توان اجرای بکاند واکشی و رمزگشایی میکند hash محاسبات هش heap اعمال تخصیص حافظه از طریق heap hot-package گرم شدن بسته فیزیکی پردازنده (package) hotplug اتصال یا جدا کردن گرم سختافزار (مانند پردازندهها و حافظه) i-cache عملیات حافظه نهان دستورالعمل (instruction cache) i-tlb-read-miss خطای خواندن در TLB دستورالعمل (بافر ترجمه نشانی) integer عملیات اعداد صحیح integer-division عملیات تقسیم اعداد صحیح integer-ops نرخ نسبتاً بالای عملیات اعداد صحیح hash محاسبات هش heap اعمال تخصیص حافظه از طریق heap hot-package گرم شدن بسته فیزیکی پردازنده interrupt نرخ بالای وقفه (interrupt) io-async عملیات ناهمگام ورودی/خروجی (I/O) فایل io-read عملیات نسبتاً بالای خواندن I/O io-therm عملیات I/O که میتواند دمای دستگاه I/O را به طور محسوسی افزایش دهد io-wait بخش عمده زمان اجرا صرف انتظار برای تکمیل I/O میشود io-write عملیات نسبتاً بالای نوشتن I/O ioport-read عملیات خواندن از درگاههای I/O (ioport) ioport-write عملیات نوشتن در درگاههای I/O (ioport) ipc سازوکارهای پایهای ارتباط بینفرایندی (IPC) kmalloc تخصیص حافظه فیزیکی پیوسته در هسته (kmalloc) load-average میانگین بار (load average) بالا (معمولاً حداقل ۴ برابر تعداد نمونههای استرسور) lock-contention رقابت بر سر قفلهای هسته (lock contention) maple-tree-read خواندن ساختار maple tree هسته (درخت محدوده داده بدون همپوشانی) maple-tree-write نوشتن در ساختار maple tree هسته (درخت محدوده داده بدون همپوشانی) memory-bus به کار گرفتن بالقوه سنگین گذرگاه حافظه memory-bound اشباع پهنای باند حافظه و/یا خطاهای حافظه نهان memory-cmp عملیات مقایسه حافظه (در جستجو و مرتبسازی) memory-copy عملیات کپی حافظه memory-load عملیات نسبتاً سنگین بارگذاری (load) حافظه memory-stall مکث در خط لوله اجرا ناشی از انتظار برای حافظه memory-store عملیات نسبتاً سنگین ذخیرهسازی (store) حافظه memory-stream عملیات جاری (streaming) خواندن و/یا نوشتن حافظه memory-misaligned خواندن/نوشتنهای ناتراز (misaligned) حافظه mmap-lock قفل نگاشت حافظه هسته (mmap) oom تحریک خطاهای کمبود حافظه (out-of-memory) page-faults-kernel خطاهای نقص صفحه (page faults) در فضای هسته page-faults-major خطاهای نقص صفحه عمده (major) در فضای کاربری page-faults-minor خطاهای نقص صفحه جزئی (minor) در فضای کاربری page-faults-user خطاهای نقص صفحه در فضای کاربری power-core مصرف توان بالای هسته پردازنده power-package مصرف توان بالای بسته فیزیکی پردازنده (package) power-uncore مصرف توان بالای بخشهای غیرهستهای پردازنده (uncore) registers به کار گرفتن ثباتهای پردازنده (CPU registers) speculation-mispredict تحریک خطای پیشبینی اجرای حدسی پردازنده (speculation misprediction) stack عملیات حافظه پشته (stack) فرایند string عملیات رشتهها (string) swap استفاده از مبادله صفحات (swapfile) syscall-rate نرخ بالای فراخوانیهای سیستمی بر ثانیه system-time حدود ۹۰ درصد یا بیشتر از زمان اجرا در فضای هسته timer به کار گرفتن ساعتها، هشدارها و تایمرها tlb به کار گرفتن بافر ترجمه نشانی (TLB) tlb-flush تخلیه بافر ترجمه نشانی (TLB flushes) user-time حدود ۹۹ درصد یا بیشتر از زمان اجرا در فضای کاربری virt عملیات ماشین مجازی vmalloc به کار گرفتن سنگین تخصیص حافظه هسته از طریق vmalloc writeback-dirty-folio بازنویسی صفحات فولیو کثیف (dirty folio pages) بر روی حافظه ذخیرهسازی writeback-dirty-inode بازنویسی inodeهای کثیف فایل بر روی حافظه ذخیرهسازی --exercise-library list فعالسازی تنشزاهایی که یک یا چند کتابخانهٔ مشخصشده در فهرست ارائهشده را میآزمایند؛ برای نمونه: --exercise-library pthread,z برای کتابخانههای libpthread و libz. برای تعیین نحوه اجرای تنشزاها از گزینههای --all، --permute یا --seq استفاده کنید. کتابخانههای موجود به شرح زیر هستند: lB lB l lx. کتابخانه توضیحات \? نمایش کتابخانههای استفادهشده به ازای هر تنشزا acl libacl (فهرستهای کنترل دسترسی) aio libaio (ورودی/خروجی ناهمگام) apparmor libapparmor (AppArmor) bsd libbsd (توابع گوناگون کتابخانه استاندارد C در BSD) crypt libcrypt (کتابخانه رمزنگاری) dl libdl (پیوند پویای اشیاء) egl libegl (لایه توزیع مستقل از سازنده برای میانجیگری فراخوانیهای API در OpenGL) gbm libgbm (رابط برنامهنویسی مدیریت عمومی بافر) glesv2 libglesv2 (OpenGL ES 2.0) gmp libgmp (اعداد با دقت چندگانه GNU) IPSec_MB libIPSec_MB (رمزنگاری چندبافری Intel ® برای IPSec) jpeg libjpeg (کدک تصویر JPEG) judy libjudy (آرایههای پویا) lzma liblzma (فشردهسازی/بازگشایی lzma) m libm (توابع ریاضی) md libmd (خلاصه پیام BSD) mpfr libmpfr (ممیز شناور با دقت چندگانه GNU) nl libnl (پروتکل Netlink) pthread libpthread (رشتههای POSIX) rt librt (بلادرنگ POSIX) sctp libsctp (رابط سوکت SCTP) xxhash libxxhash (هش بسیار سریع) z libz (فشردهسازی/بازگشایی z) - --exercise-syscall list
- فعالسازی تنشزاهایی که یک یا چند فراخوانی سیستمی مشخصشده در فهرست ارائهشده را میآزمایند؛ برای نمونه: --exercise-syscall mmap,fork برای فراخوانیهای سیستمی mmap و fork. استفاده از \? به عنوان گزینهٔ فهرست، فراخوانیهای سیستمیِ استفادهشده توسط هر تنشزا را نمایش میدهد. برای تعیین نحوه اجرای تنشزاها از گزینههای --all، --permute یا --seq استفاده کنید.
- --ftrace
- فعالسازی ردگیری فراخوانیهای توابع هسته (فقط در Linux). این گزینه از سازوکار ftrace در debugfs هسته برای ثبت تمام توابع هسته که هنگام اجرای stress-ng روی سیستم استفاده میشوند، بهره میبرد. دقت این ویژگی تنها به اندازه خروجی ftrace هسته است، بنابراین ممکن است دادههای گزارششده مقداری نوسان یا تغییرپذیری داشته باشند.
- -h, --help
- نمایش راهنما.
- --ignite-cpu
- تغییر کنترلهای هسته برای تلاش در جهت به حداکثر رساندن کارایی پردازنده (CPU). این عمل برای تغییر کنترلهای گوناگون در رابط /sys نیازمند امتیازات دسترسی ریشه (root) است. در حال حاضر این قابلیت تنها روی سیستمهای x86 با Intel P-State فعال در Linux کار میکند.
- --interrupts
- بررسی وقوع هرگونه وقفه مدیریت سیستم یا وقفههای خطا؛ برای نمونه تجاوز از آستانه حرارتی، استثناهای بررسی ماشین و غیره. توجه داشته باشید که این وقفهها برای تمامی تنشزاهای در حال اجرای همروند به حساب میآیند، بنابراین شمارش کل برای همه تنشزاها بیش از مقدار واقعی محاسبه خواهد شد.
- --ionice-class class
- تعیین کلاس ionice (فقط در Linux). میتواند idle (پیشفرض)، besteffort، be، realtime یا rt باشد.
- --ionice-level level
- تعیین سطح ionice (فقط در Linux). برای idle تنها مقدار ممکن 0 است. برای besteffort یا realtime مقادیر بین 0 (بالاترین اولویت) تا 7 (پایینترین اولویت) هستند. برای جزئیات بیشتر به ionice(1) مراجعه کنید.
- --ios
- گزارش میانگین نرخ خواندن/نوشتن ورودی/خروجی (فقط در Linux).
- -I S, --iostat S
- هر S ثانیه
یکبار،
آمار
ورودی/خروجی
(I/O) را روی
دستگاهی که
پروندههای
موقت stress-ng را
ذخیره
میکند
نمایش
میدهد. این
دستگاه یا
دستگاهِ
مربوط به
پوشه کاری
فعلی است یا
مسیری که با
--temp-path مشخص شده
است. در حال
حاضر
گزینهای
مخصوص Linux است.
فیلدهای
خروجی
عبارتند از:
عنوان ستون توضیحات Inflight تعداد درخواستهای ورودی/خروجی که به درایور دستگاه ارسال شدهاند اما هنوز کامل نشدهاند Rd K/s نرخ خواندن بر حسب ۱۰۲۴ بایت در ثانیه Wr K/s نرخ نوشتن بر حسب ۱۰۲۴ بایت در ثانیه Rd/s تعداد خواندن در هر ثانیه Wr/s تعداد نوشتن در هر ثانیه - -j jobfile, --job jobfile
- اجرای تنشزاها با استفاده از یک jobfile. پروندهٔ jobfile در اصل فایلی حاوی گزینههای stress-ng (بدون -- آغازین) است که در هر خط یک گزینه قرار میگیرد. خطوط میتوانند حاوی توضیحاتی باشند که با نویسهٔ # آغاز میشوند. یک مثال ساده به شرح زیر است:
run sequential # run stressors sequentially verbose # verbose output metrics-brief # show metrics at end of run timeout 60s # stop each stressor after 60 seconds # # vm stressor options: # vm 2 # 2 vm stressors vm-bytes 128M # 128 MB available memory shared by 2 vm stressors vm-keep # keep vm mapping vm-populate # populate memory # # memcpy stressor options: # memcpy 5 # 5 memcpy stressors
run sequential - اجرای
استرسورها
بهصورت
متوالی
run parallel - اجرای
همزمان
استرسورها
بهصورت
موازی
توجه
داشته
باشید که `run parallel'
پیشفرض
است.
- --keep-files
- فایلها و دایرکتوریهای ایجادشده توسط استرسورها را حذف نمیکند. این گزینه میتواند برای اهداف اشکالزدایی مفید باشد. عموماً توصیه نمیشود چرا که میتواند سیستم فایل را پر کند.
- -k, --keep-name
- بهطور پیشفرض، stress-ng تلاش میکند نام فرایندهای استرس را بر اساس کارکردشان تغییر دهد؛ این گزینه این رفتار را غیرفعال کرده و نام فرایندها را همان نام فرایند والد، یعنی stress-ng، نگه میدارد.
- -K, --klog-check
- گزارشهای هسته (kernel log) را برای پیامهای خطا و هشدار هسته بررسی کرده و بهمحض شناسایی گزارش میدهد. فقط ویژه لینوکس است و برای خواندن لاگ هسته به دسترسی root نیاز دارد.
- --ksm
- قابلیت KSM یا ادغام صفحات همسان هسته (kernel samepage merging) را فعال میکند (فقط ویژه لینوکس). این یک ویژگی کاهش افزونگی (de-duplication) برای صرفهجویی در حافظه از طریق ادغام صفحات ناشناس (خصوصی) است.
- --limit-as
- حداکثر اندازه حافظه مجازی (فضای آدرس) فرایند استرسور را تعیین میکند؛ rlimit(2) RLIMIT_AS را ببینید. این پارامتر میتواند به عنوان یک مقدار مطلق برحسب بایت (مثلاً 1G برای ۱ گیگابایت) یا درصدی از حافظه آزاد فعلی، مثلاً 20%، مشخص شود.
- --limit-data
- حداکثر اندازه بخش داده (دادههای مقداردهیشده، دادههای مقداردهینشده و heap) فرایند استرسور را تنظیم میکند؛ rlimit(2) RLIMIT_DATA را ببینید. این پارامتر میتواند به عنوان یک مقدار مطلق برحسب بایت (مثلاً 128M برای ۱۲۸ مگابایت) یا درصدی از حافظه آزاد کنونی، مثلاً 5%، تعیین گردد.
- --limit-stack
- حداکثر اندازه پشته (stack) فرایند استرسور را مشخص میکند؛ rlimit(2) RLIMIT_STACK را ببینید. این پارامتر میتواند به عنوان یک مقدار مطلق برحسب بایت (مثلاً 2M برای ۲ مگابایت) یا درصدی از حافظه آزاد فعلی، مثلاً 1%، تعیین شود.
- --log-brief
- بهطور پیشفرض stress-ng نام برنامه، نوع پیام و شناسه فرایند (PID) را به عنوان پیشوند در تمام خروجیها میآورد. گزینه --log-brief پیامها را بدون این فیلدها نمایش میدهد تا خروجی خلوتتری ایجاد شود.
- -L filename, --log-file filename
- پیامها را در فایل لاگ مشخصشده مینویسد؛ این گزینه جایگزین خروجی در stdout نمیشود، بلکه یک نسخه ثبتشده از آن را در فایل مربوطه ایجاد میکند. خطوط خروجی بهطور خودکار روی فایل لاگ fsync میشوند تا از دست رفتن دادهها کاهش یابد.
- --log-lockless
- پیامهای لاگ از یک قفل استفاده میکنند تا از درهمآمیختگی بلوکهای پیامهای استرسورها جلوگیری شود؛ با این حال ممکن است این امر در هنگام ارسال حجم بالایی از پیامهای لاگ در حالت پرگو (verbose) و زمان اجرای استرسورهای پرتعداد، باعث رقابت بر سر منابع (contention) شود؛ به عنوان مثال هنگام آزمایش مقیاسپذیری پردازنده با فرایندهای بسیار روی پردازندههای متعدد. این گزینه قفلگذاری پیامهای لاگ را غیرفعال میکند.
- --make-it-fail
- تزریق خطا (fault injection) را روی فرایندهای استرسور فعال میکند (فقط در لینوکس، نیازمند اجرا با دسترسی ریشه برای نوشتن در /proc/self/make-it-fail). رابطهای کاربری sysfs تزریق خطای هسته لینوکس در /sys/kernel/debug باید همزمان با استفاده از این گزینه تنظیم شوند و لازم است قابلیت تزریق خطا در هسته فعال باشد.
- --maximize
- تنظیمات پیشفرض استرسور را نادیده گرفته و در عوض آنها را روی حداکثر مقادیر مجاز قرار میدهد. در صورت نیاز، این پیشفرضها همیشه میتوانند توسط گزینههای تنظیمی مربوط به هر استرسور بازنویسی شوند.
- --max-fd N
- حداکثر محدودیت توصیفکنندههای فایل (مقدار عددی یا درصدی از حداکثر مجاز سیستم) را تعیین میکند. بهطور پیشفرض، stress-ng میتواند از تمام توصیفکنندههای فایل موجود استفاده کند؛ این گزینه محدودیت را در بازه ۱۰ تا حداکثر سقف مجاز RLIMIT_NOFILE تنظیم میکند. همچنین میتوان از مقادیر درصدی استفاده کرد؛ مثلاً 50% نیمی از حداکثر توصیفکنندههای فایل مجاز است. توجه داشته باشید که خود stress-ng حدود ۵ عدد از توصیفکنندههای فایل در دسترس را استفاده میکند، بنابراین هنگام اعمال این تنظیم این نکته را مد نظر داشته باشید.
- --mbind list
- تخصیص حافظه NUMA سختگیرانه را بر اساس فهرست ارائهشده از گرههای NUMA تنظیم میکند؛ تخصیص صفحات از گرهای با حافظه آزاد کافی که نزدیکترین فاصله را به گره(های) مشخصشده محل تخصیص دارد انجام خواهد شد. این گزینه از فراخوانی set_mempolicy(2) لینوکس با حالت MPOL_BIND بهره میبرد. گرههای NUMA مورد استفاده با فهرستی از گرهها (از 0 تا N − 1) که با کاما از هم جدا شدهاند تعیین میشوند. همچنین میتوان با استفاده از `-' محدودهای از گرههای NUMA را مشخص کرد، برای نمونه: --mbind 0,2-3,6,7-11
- -M, --metrics
- تعداد کل عملیاتهای صوری (bogo operations) انجامشده توسط فرایندهای استرس را نمایش میدهد. توجه داشته باشید که اینها معیار قابل اعتمادی برای کارایی یا توان پردازشی نیستند و به هیچ عنوان برای اهداف بنچمارک طراحی نشدهاند. برخی از استرسورها معیارهای جانبی دیگری دارند که از bogo-ops کاربردیتر هستند و این موارد عموماً برای مشاهده رفتار سیستم تحت انواع مختلف بار کاری مفیدتر خواهند بود.
ستونهای اطلاعاتی زیر نمایش داده میشوند:
| عنوان ستون | توضیحات |
| bogo ops | تعداد تکرارهای استرسور در طول اجرا. این معیاری از مقدار «کار» کلی انجامشده در قالب bogo operation است. از این مقدار به عنوان مقیاس قابل اعتمادی برای توان پردازشی جهت بنچمارک استفاده نکنید. |
| real time (secs) | میانگین مدتزمان ساعت دیواری (به ثانیه) استرسور. این برابر با مجموع زمان ساعت دیواری تمام نمونههای آن استرسور خاص، تقسیم بر تعداد استرسورهای در حال اجرا است. |
| usr time (secs) | مجموع زمان کاربر (به ثانیه) مصرفشده برای اجرای تمام نمونههای استرسور. |
| sys time (secs) | مجموع زمان سیستم (به ثانیه) مصرفشده برای اجرای تمام نمونههای استرسور. |
| bogo ops/s (real time) | مجموع عملیاتهای bogo در هر ثانیه بر اساس زمان اجرای ساعت دیواری. زمان ساعت دیواری نشاندهنده زمان اجرای ظاهری است. هر چه پردازندههای بیشتری در سیستم وجود داشته باشد، بار کاری بیشتر بین آنها توزیع شده و در نتیجه زمان ساعت دیواری کاهش و نرخ bogo ops افزایش مییابد. این در اصل نرخ bogo ops «ظاهری» سیستم است. |
| bogo ops/s (usr+sys time) | مجموع عملیاتهای bogo در هر ثانیه بر اساس زمان تجمعی کاربر و سیستم. این نرخ واقعی bogo ops سیستم با در نظر گرفتن زمان اجرای واقعی استرسور در تمام پردازندهها است. معمولاً با اضافه کردن استرسورهای همزمان بیشتر، به دلیل رقابت بر سر حافظه نهان (cache)، رم، واحدهای اجرایی، گذرگاهها و دستگاههای I/O، این مقدار کاهش مییابد. |
| CPU used per instance (%) | درصد کل CPU مصرفشده تقسیم بر تعداد نمونههای استرسور. مقدار 100% نشاندهنده ۱ پردازنده کامل است. برخی از استرسورها چندین ریسه (thread) اجرا میکنند، بنابراین ممکن است مقداری بیشتر از 100% نیز ثبت شود. |
| RSS Max (KB) | حجم مقیم در حافظه یا resident set size (RSS)، بخشی از حافظه (برحسب کیلوبایت) که توسط فرایند در حافظه اصلی اشغال شده است. |
- --metrics-brief
- فهرست خلاصهتری از معیارهای استرسور را نشان میدهد (شامل CPU used per instance نمیشود).
- --minimize
- تنظیمات پیشفرض استرسور را نادیده گرفته و در عوض آنها را روی حداقل مقادیر مجاز قرار میدهد. این پیشفرضها در صورت نیاز همواره میتوانند توسط گزینههای تنظیمی مربوط به هر استرسور بازنویسی شوند.
- --no-madvise
- از نسخه 0.02.26، برنامه stress-ng قبل از هر فراخوانی mmap(2) و munmap(2) بهطور خودکار madvise(2) را با گزینههای تصادفی madvise فراخوانی میکند تا زیرسیستم حافظه مجازی (vm) را کمی سختتر تحت فشار بگذارد. گزینه --no-advise این رفتار پیشفرض را خاموش میکند..TP --no-madvise-opts madvice-list مشخص کردن یک یا چند گزینه توصیهای madvise(2) برای عدم استفاده. بهطور پیشفرض، stress-ng تمام گزینههای توصیهای madvise موجود را فعال میکند تا پیش از هر فراخوانی mmap(2) و munmap(2) یکی را بهصورت تصادفی انتخاب کند؛ این گزینه امکان غیرفعال کردن یک یا چند مورد از آنها را فراهم میکند. گزینههای توصیهای موجود (بسته به سیستم) به شرح زیر هستند: cold، dodump، dofork، dontdump، dontfork، dontneed، free، hugepage، mergeable، nohugepage، normal، pageout، populate-read، populate-write، random، sequential، unmergeable و willneed.
- --no-oom-adjust
- غیرفعال کردن هر نوع تنظیم امتیاز کمبود حافظه (out-of-memory)، و حفظ مقادیر پیشفرض سیستم. در حالت عادی stress-ng امتیازات کمبود حافظه را روی تنشزاها تنظیم میکند تا فشار حافظه بیشتری ایجاد کند. این گزینه این تنظیمات را غیرفعال میکند.
- --no-rand-seed
- تولیدکننده اعداد شبهتصادفی stress-ng را با یک مقدار اولیه (seed) شبهتصادفی مقداردهی اولیه نمیکند، بلکه آن را با مقادیر ثابت مقداردهی میکند. این کار آزمونها را وادار میکند تا هر بار با شرایط اولیه یکسان اجرا شوند که در صورت نیاز به آزمونهای تنش تکرارپذیر، میتواند مفید باشد.
- --oom-avoid
- تلاش برای جلوگیری از شرایط کمبود حافظه که میتواند منجر به خاتمه دادن تنشزاها توسط کُشندهٔ کمبود حافظه (OOM killer) شود. این گزینه سناریوهای کمبود حافظه و سوآپینگ (swapping) را پیش از تخصیص حافظه بررسی میکند و بنابراین مقداری سربار به تنشزاها اضافه کرده و سرعت تخصیص حافظه آنها را کاهش میدهد.
- --oom-avoid-bytes N
- مشخص کردن آستانه کمبود حافظه برای جلوگیری از انجام هرگونه تخصیص حافظه بیشتر. این پارامتر میتواند به عنوان یک مقدار مطلق بر حسب بایت (مثلاً 2M برای ۲ مگابایت) یا درصدی از حافظه آزاد کنونی، مثلاً %5 (پیشفرض ۲.۵٪ است) مشخص شود. این گزینه بهطور ضمنی --oom-avoid را فعال میکند. این گزینه به سیستم امکان میدهد تا حافظه آزاد کافی برای تلاش در جلوگیری از پایان دادن فرایندها توسط کُشنده کمبود حافظه داشته باشد.
- --oom-no-child
- غیرفعال کردن اجرای تنشزا به عنوان یک فرایند فرزند با والدی که مشکلات کمبود حافظه (OOM) را بررسی میکند. این کار سربار ناشی از فرایند فرزند اضافه را کاهش میدهد اما بهطور غیرمستقیم بازآفرینی تنشزاهایی که توسط OOM کشته شدهاند و تشخیص OOM را نیز غیرفعال کرده و ممکن است به خطاهای اعتبارسنجی bogo-op منجر شود.
- -O, --oomable
- اگر تنشزایی توسط کُشندهٔ کمبود حافظه (OOM) خاتمه یافت، آن را مجدداً اجرا نکن. رفتار پیشفرض این است که اگر کُشنده OOM هسته فرایند را خاتمه داد، یک نمونه جدید از تنشزا راهاندازی مجدد شود. این گزینه این رفتار پیشفرض را غیرفعال میکند.
- --page-in
- لمس کردن صفحههای تخصیصیافتهای که در حافظه اصلی نیستند، و وادار کردن آنها به بارگذاری مجدد در حافظه (page in). این یک گزینه مفید برای وادار کردن تمام صفحههای تخصیصیافته به بارگذاری در حافظه هنگام استفاده از تنشزاهای bigheap، mmap و vm است. در صورتی که حافظه موجود در سیستم کمتر از اندازههای بافر تخصیصیافته باشد، این گزینه کارایی را به شدت کاهش خواهد داد. این گزینه از mincore(2) برای تشخیص صفحههایی که در حافظه اصلی نیستند و در نتیجه برای بارگذاری مجدد نیاز به لمس شدن دارند، استفاده میکند.
- --pathological
- فعال کردن تنشزاهایی که به هنگ کردن سیستمها معروف هستند. برخی تنشزاها میتوانند به سرعت منابع را مصرف کنند که ممکن است سیستم را متوقف (hang) کند، یا کارهایی انجام دهند که میتواند سیستم را قفل کرده یا باعث راهاندازی مجدد آن شود. این تنشزاها بهطور پیشفرض فعال نیستند، این گزینه آنها را فعال میکند، اما احتمالاً شما نمیخواهید این کار را انجام دهید. به شما هشدار داده شد. این گزینه بر روی این تنشزاها اعمال میشود: bad-ioctl، bind-mount، cpu-online، mlockmany، oom-pipe، smi، sysinval و watchdog.
- --pause T
- مکث به مدت T ثانیه بین هر تنشزا. این گزینه برای خنک شدن سیستمها بین هر بار فراخوانی تنشزا مفید است. بهطور پیشفرض این گزینه غیرفعال است.
- --perf
- اندازهگیری فعالیتهای پردازنده و سیستم با استفاده از رویدادهای perf. فقط برای لینوکس و با مسئولیت خود کاربر (caveat emptor)، بر اساس آنچه در perf_event_open(2) آمده است: "همیشه نتایج خود را دوباره بررسی کنید! رویدادهای تعمیمیافته گوناگون مقادیر نادرستی داشتهاند". توجه داشته باشید که در لینوکس ۴.۷ برای کارکرد این گزینه نیاز به قابلیتهای CAP_SYS_ADMIN است، یا اینکه برای استفاده از آن بدون CAP_SYS_ADMIN باید مقدار /proc/sys/kernel/perf_event_paranoid به کمتر از ۲ تنظیم شود.
- --permute N
- اجرای تمامی جایگشتهای تنشزاهای انتخابشده با N نمونه از تنشزاهای جایگشتیافته در هر اجرا. اگر N کمتر از صفر باشد، از تعداد پردازندههای برخط برای تعداد نمونهها استفاده میشود. اگر N صفر باشد، از تعداد پردازندههای پیکربندیشده در سیستم استفاده میشود. مشخص کردن N به صورت درصد، درصدی از پردازندههای پیکربندیشده را انتخاب میکند (گرد شده به پایین به نزدیکترین عدد صحیح). این گزینه چندین اجرا با تمام جایگشتهای تنشزاها تا حداکثر 2↑20 جایگشت را انجام میدهد. از این گزینه همراه با گزینه --with یا --class برای مشخص کردن تنشزاهایی که باید جایگشت یابند استفاده کنید.
- --progress
- نمایش پیشرفت اجرا هنگام اجرای تنشزاها با گزینه --sequential.
- -q, --quiet
- عدم نمایش هیچگونه خروجی.
- -r N, --random N
- شروع به کار N کارگر تنش تصادفی. اگر N برابر با ۰ باشد، از تعداد پردازندههای پیکربندیشده برای N استفاده میشود.
- --randprocname
- فعالسازی تولید تصادفی نام فرایند برای تنشزا. این کار نام فرایندهای تنشزا را درهممیآمیزد تا پایش فرایندها و احتمالاً زمانبندی هوشمند فرایندها را که از نام فرایند برای اعمال تغییرات بهینهسازی سیستم استفاده میکنند، دچار سردرگمی کند.
- --rapl
- گزارش اندازهگیریهای انرژی حد میانگین توان در حال اجرا (RAPL) برای نمونههای تنشزا. در حال حاضر فقط برای لینوکس و x86، نیازمند دسترسی ریشه (root) برای خواندن رابطهای هسته RAPL است. توجه داشته باشید که دامنههای RAPL پشتیبانیشده ممکن است بین دستگاههای مختلف متفاوت باشد.
- --raplstat S
- هر S ثانیه اندازهگیریهای انرژی RAPL را نشان میدهد. در حال حاضر فقط برای لینوکس و x86، نیازمند دسترسی ریشه (root) برای خواندن رابطهای هسته RAPL است.
- --resctrl p1[,p2,..,pn],s1[,s2..,sm]
- مشخص کردن پارتیشنهای حافظه نهان کنترل منابع و اعمال آنها بر نمونههای تنشزا (فقط ARM MPAM)
- پارامترهای p1..pn فهرستی از ۱ تا n تعریف پارتیشنبندی حافظه نهان هستند، که در آن p1..pn به شکل زیر میباشند:
- pN=node[:cachelevel]:hexbitmask:bandwidth
- که در آن:
• مقدار node گره خوشهای پردازندهها را برای استفاده مشخص میکند
• مقدار cachelevel سطح حافظه نهان مورد استفاده را مشخص میکند (اختیاری است، پیشفرض سطح پیشفرض MPAM یعنی L3 است)
• مقدار hexbitmask یک ماسک بیتی در مبنای شانزده است که بخشهای حافظه نهان مورد استفاده را مشخص میکند
• مقدار bandwidth پهنای باند مورد استفاده است؛ برای MPAM این مقدار درصد بهرهوری بین ۱ تا ۱۰۰ است
- برای مثال: p1=1:L3:fff:50
- پارامترهای s1..sm فهرستی از ۱ تا m از نمونههای تنشزا هستند که این تنظیمات پارتیشنبندی حافظه نهان را به شکل زیر اعمال میکنند:
- stressor-name=stressor-instances@pN
- که در آن:
• مقدار stressor-instances فهرستی از نمونههایی است که تنظیمات پارتیشنبندی حافظه نهان pN روی آنها اعمال میشود.
• مقدار pN پارتیشن حافظه نهان pN را مشخص میکند
- مثال زیر پارتیشن resctrl با نام p1 را به تنشزای matrix روی نمونههای ۰، ۱، ۵، ۸، ۱۲، ۱۳ و ۱۴ اعمال میکند:
- matrix=0-1,5,8,12-14@p1
- مثال زیر دو پارتیشن resctrl را مشخص میکند: p1 از گره خوشه ۱، حافظه نهان L3 و ۳ بخش اول حافظه نهان استفاده کرده و آن را روی ۱۰٪ بهرهوری تنظیم میکند. p2 از خوشه ۱، حافظه نهان پیشفرض L3، تمام بخشهای حافظه نهان به جز ۳۲ تای اول استفاده کرده و آن را روی ۹۰٪ بهرهوری تنظیم میکند. ۳ نمونه از تنشزای stream اجرا میشوند که در آن نمونههای ۰ تا ۱ تنشزای stream از p1، و نمونه ۲ از p2 استفاده میکنند.
sudo stress-ng --resctrl p1=1:l3:7:10,p2=1:ff8:90,\ stream=0-1@p1,stream=2@p2 --stream 3
توجه داشته باشید که اعمال پارامترهای نامعتبر resctrl به resctrl sysfs خطاهای EINVAL ایجاد خواهد کرد. این پارامترها در طول پردازش گزینهها بررسی صحت نمیشوند، زیرا صحت آنها تنها در زمان اعمال شدن قابل تشخیص است.
- --sched scheduler
- انتخاب زمانبند مشخصشده (فقط در لینوکس). برای مشاهده فهرست زمانبندهای موجود از این دستور استفاده کنید: stress-ng --sched which
- --sched-prio prio
- انتخاب سطح اولویت زمانبند (فقط در لینوکس). اگر زمانبند از این قابلیت پشتیبانی نکند، سطح اولویت پیشفرض ۰ انتخاب میشود.
- --sched-period period
- انتخاب پارامتر دوره (period) برای زمانبند deadline (فقط در لینوکس). مقدار پیشفرض ۰ است (بر حسب نانوثانیه)..TP --sched-runtime runtime انتخاب پارامتر runtime برای زمانبند deadline (فقط در لینوکس). مقدار پیشفرض 99999 (به نانوثانیه) است.
- --sched-deadline deadline
- انتخاب پارامتر deadline برای زمانبند deadline (فقط در لینوکس). مقدار پیشفرض 100000 (به نانوثانیه) است.
- --sched-reclaim
- استفاده از ویژگی بازپسگیری پهنای باند CPU برای زمانبند deadline (فقط در لینوکس).
- --seed N
- تنظیم عدد تصادفی جهت تولید یک مقدار اولیه (seed) با اندازه ۶۴ بیتی. این گزینه به استرسورها اجازه میدهد در هر فراخوانی از دنبالههای یکسانِ تولیدکننده اعداد تصادفی استفاده کنند.
- --settings
- نمایش تنظیمات گزینههای مختلف.
- --sequential N
- اجرای ترتیبی تمام استرسورها بهصورت تکبهتک و بهطور پیشفرض به مدت ۶۰ ثانیه. تعداد نمونههای راهاندازیشده از هر استرسور مجزا برابر با N است. اگر N کمتر از صفر باشد، تعداد پردازندههای برخط (online) برای تعداد نمونهها استفاده میشود. اگر N صفر باشد، از تعداد پردازندههای موجود در سیستم استفاده میشود. مشخص کردن N بهصورت درصد، درصدی از پردازندههای پیکربندیشده را انتخاب میکند (گرد شده رو به پایین به نزدیکترین عدد صحیح).
گزینهها (OPTIONS)
از گزینه --timeout برای مشخص کردن مدت زمان اجرای هر استرسور استفاده کنید.
- --skip-silent
- بیصدا کردن پیامهایی که گزارش میدهند یک استرسور نادیده گرفته شده است؛ زیرا به قابلیتهایی نیاز دارد که توسط سیستم پشتیبانی نمیشوند، مانند فراخوانیهای سیستمی پیادهسازینشده، منابع ناموجود یا قابلیتهای خاص پردازنده.
- --smart
- پویش دستگاههای بلوکی برای تغییرات آماری S.M.A.R.T. (فقط در لینوکس). این کار نیازمند دسترسی root برای خواندن دادههای Self-Monitoring, Analysis and Reporting Technology از تمام دستگاههای بلوکی است و هرگونه تغییر در آمارها را گزارش میدهد. یک نکته قابل توجه این است که سازندگان دستگاه مجموعههای متفاوتی از دادهها را ارائه میدهند، معنای دقیق دادهها ممکن است مبهم بوده و دادهها ممکن است نادرست باشند.
- --sn
- استفاده از نماد علمی (مانند 2.412e+01) برای معیارها.
- --status N
- گزارش در هر N ثانیه از تعداد استرسورهای در حال اجرا، در حال خروج، جمعآوریشده (reaped) و ناموفق، تعداد استرسورهایی که سیگنال خاتمه SIGARLM را دریافت کردهاند، و همچنین مدتزمان اجرای فعلی.
- --stderr
- نوشتن پیامها در stderr. در نسخه 0.15.08 خروجی در stdout نوشته میشود؛ پیش از این بهدلیل یک سهلانگاری تاریخی خروجی به stderr میرفت. این گزینه امکان بازگشت به رفتار پیش از نسخه 0.15.08 را فراهم میکند.
- --stdout
- ارسال تمام خروجی به stdout. این حالت پیشفرض جدید برای نسخه 0.15.08 است. برای رفتار اولیه از گزینه --stderr استفاده کنید.
- --stressor-time
- (نیازمند پرچم -v) ثبت زمانهای شروع و پایان اجرای هر نمونه استرسور در سطح اشکالزدایی (debug)، در قالب: stressor [start|finish] HR:MN:SS.HS YYYY:MM:DD که در آن HR ساعت، MN دقیقه، SS ثانیه، HS صدم ثانیه، YYYY سال، MM ماه، و DD روز ماه است. اگر localtime(2) پشتیبانی نشود، زمان بهصورت ثانیههای سپریشده از Epoch ثبت میشود.
- --stressors
- چاپ نام استرسورهای موجود در خروجی.
- --sync-start
- همگامسازی شروع؛ منتظر ماندن برای ایجاد استرسورها و آغاز همه استرسورها پس از اینکه همگی در وضعیت آمادهبهکار قرار گرفتند.
- --syslog
- ثبت خروجی (بهجز پیامهای پرگویانه -v) در syslog.
- --taskset list
- تنظیم
وابستگی
پردازنده (CPU
affinity) بر اساس
فهرست
پردازندههای
ارائهشده؛
stress-ng مقید
میشود که
فقط از این
پردازندهها
استفاده
کند (برای
سیستمهایی
که sched_setaffinity(2) را
ارائه
میدهند).
پردازندههای
مورد
استفاده با
فهرستی از
پردازندهها
(از 0 تا N − 1) که
با کاما از
هم جدا
شدهاند
مشخص
میشوند.
میتوان
بازهای از
پردازندهها
را با
استفاده از
'-' مشخص کرد،
برای نمونه:
--taskset 0,2-3,6,7-11 یا
کلیدواژههای
زیر:
کلیدواژه توضیحات even پردازندههای با شماره زوج odd پردازندههای با شماره فرد all تمام پردازندهها random انتخاب تصادفی پردازندهها packageN پردازندههای موجود در package N طبق آنچه در /sys/devices/system/cpu/cpu*/topology/package_cpus_list مشخص شده است clusterN پردازندههای موجود در package N طبق آنچه در /sys/devices/system/cpu/cpu*/topology/cluster_cpus_list مشخص شده است dieN پردازندههای موجود در package N طبق آنچه در /sys/devices/system/cpu/cpu*/topology/die_cpus_list مشخص شده است coreN پردازندههای موجود در package N طبق آنچه در /sys/devices/system/cpu/cpu*/topology/core_cpus_list مشخص شده است - --taskset-random
- تغییر تصادفی وابستگی پردازنده (CPU affinity) استرسور به میزان پنج برابر نرخ تیک ساعت (در صورت تعریف شدن) یا با فرکانس 400Hz در حین انتظار برای اتمام استرسورها.
- --temp-path path
- مشخص کردن مسیری برای دایرکتوریهای موقت و فایلهای موقت stress-ng؛ مسیر پیشفرض، دایرکتوری کاری فعلی است. این مسیر باید دسترسی خواندن و نوشتن برای فرایندهای تنش stress-ng داشته باشد.
- --thermalstat S
- نمایش آمار بار حرارتی و پردازنده در هر S ثانیه. این گزینه میانگین فرکانس پردازنده به گیگاهرتز (میانگین پردازندههای برخط)، حداقل فرکانس پردازنده، حداکثر فرکانس پردازنده، میانگین بار (۱ دقیقه، ۵ دقیقه و ۱۵ دقیقه) و دمای زونهای حرارتی موجود را به درجه سانتیگراد نشان میدهد.
- --thrash
- این گزینه فقط هنگام اجرا روی لینوکس و با دسترسیهای root قابل استفاده است. این گزینه یک فرایند کوبش (thrasher) پسزمینه را راهاندازی میکند که تمام فرایندهای سیستم را پیمایش کرده و تلاش میکند تا جای ممکن صفحات بیشتری را به حافظه وارد (page-in) کند. همچنین بهطور دورهای page cache را دور میریزد، اشیاء اسلب (slab) قابل بازپسگیری و pagecache را آزاد میکند و صفحات را به گرههای مختلف NUMA اختصاص میدهد. این کار باعث مقدار قابل توجهی کوبش حافظه مجازی (swap thrashing) در یک سیستم با تخصیص بیشازحد (over-committed) خواهد شد.
- -t N, --timeout T
- اجرای هر آزمون تنش حداقل به مدت T ثانیه. همچنین میتوان واحدهای زمانی را بر حسب ثانیه، دقیقه، ساعت، روز یا سال با پسوندهای s، m، h، d یا y مشخص کرد. به هر استرسور در زمان اتمام مهلت (timeout) یک سیگنال SIGALRM ارسال میشود، با این حال اگر آزمون تنش به swap منتقل شده باشد، در یک فراخوانی سیستمی غیرقابل وقفه باشد یا در حال پاکسازی باشد (مانند حذف صدها فایل آزمایشی)، ممکن است مدتی طول بکشد تا در نهایت خاتمه یابد. مقدار مهلت 0، باعث اجرای همیشگی stress-ng بدون هیچ محدودیت زمانی میشود. مهلت زمانی پیشفرض ۲۴ ساعت است.
- --timer-slack N
- تنظیم سستی تایمر (timer slack) به ازای هر فرایند بر روی N نانوثانیه (فقط در لینوکس). افزایش سستی تایمر به هسته اجازه میدهد تا با افزودن مقداری انعطافپذیری به زمانهای انقضای تایمر، رویدادهای تایمر را با یکدیگر ادغام کرده و در نتیجه بیدارباشها (wakeups) را کاهش دهد. برعکس، کاهش سستی تایمر موجب افزایش بیدارباشها خواهد شد. مقدار 0 برای timer-slack، مقدار پیشفرض سیستم یعنی 50000 نانوثانیه را تنظیم میکند.
- --times
- نمایش زمانهای تجمعی کاربر و سیستم تمام فرایندهای فرزند در پایان اجرای تنش. درصد بهرهوری از زمان پردازنده موجود نیز بر اساس تعداد پردازندههای برخط سیستم محاسبه میشود.
- --timestamp
- افزودن برچسب زمانی بر حسب ساعت، دقیقه، ثانیه و صدم ثانیه به خروجی ثبت وقایع.
- --tz
- جمعآوری دماها از زونهای حرارتی (thermal zones) موجود روی دستگاه (فقط در لینوکس). برخی دستگاهها ممکن است یک یا چند زون حرارتی داشته باشند، در حالی که برخی دیگر ممکن است هیچکدام را نداشته باشند.
- -v, --verbose
- نمایش تمام خروجیهای اشکالزدایی، هشدارها و اطلاعات عادی.
- --verify
- تأیید صحت نتایج در هنگام اجرای یک آزمون. این گزینه در همه آزمونها در دسترس نیست. این قابلیت محاسبات یا محتویات حافظه حاصل از اجرای آزمون را اعتبارسنجی کرده و خرابیهای شناساییشده را با برچسب `fail' گزارش میکند.
- --verifiable
- چاپ نام استرسورهایی که با گزینه --verify قابل تأیید صحت هستند.
- -V, --version
- نمایش نسخه stress-ng، نسخه toolchain مورد استفاده برای ساخت stress-ng و اطلاعات سیستم..TP --vmstat S هر S ثانیه آماری را درباره فرآیندها، حافظه، صفحهبندی (paging)، ورودی/خروجی بلوکی (block I/O)، وقفهها، تعویض زمینه (context switch)، دیسکها و فعالیت CPU نمایش میدهد. خروجی مشابه خروجی ابزار vmstat(8) است. در سیستمهای مختلف UNIX بهطور کامل پشتیبانی نمیشود.
- --vmstat-units [ k | m | g | t | p | e ]
- واحدهای حافظه vmstat را بر حسب کیلوبایت (k)، مگابایت (m)، گیگابایت (g)، ترابایت (t)، پتابایت (p) یا اگزابایت (e) مشخص میکند. مقدار پیشفرض بر حسب کیلوبایت است.
- -w, --with list
- استرسورهایی را مشخص میکند که هنگام استفاده از گزینههای --all، --seq یا --permute باید اجرا شوند. برای مثال جهت اجرای ۵ نمونه از استرسورهای cpu، hash، nop و vm بهطور پشت سر هم (متوالی) به مدت ۱ دقیقه به ازای هر استرسور، از این دستور استفاده کنید:
stress-ng --seq 5 --with cpu,hash,nop,vm --timeout 1m
- -x, --exclude list
- فهرستی از یک یا چند استرسور را برای مستثنی کردن (یعنی اجرا نکردن آنها) مشخص میکند. این گزینه زمانی مفید است که کاربر استرسورهای زیادی را برای اجرا از طریق گزینه --class یا گزینههای --sequential، --all و --random انتخاب کرده باشد و بخواهد استرسورهای خاصی را کنار بگذارد. برای مثال، اجرای همروند استرسورهای ردهی CPU و مستثنی کردن استرسورهای numa و search:
stress-ng --class cpu --all 1 -x numa,bsearch,hsearch,lsearch
- -Y, --yaml filename
- آمار جمعآوریشده را در فایلی با قالب YAML به نام `filename' ذخیره میکند.
گزینههای اختصاصی استرسورها:
- استرسور Access (دسترسی)
- --access N
- تعداد N ورکر را آغاز میکند که حالتهای مختلف بیتهای دسترسی فایل (خواندن، نوشتن، اجرا) را برای مالک فایل بررسی کرده و با استفاده از access(2) و faccessat(2) بررسی میکنند که آیا مجوزهای کاربری فایل معتبر و درست هستند یا خیر.
- --access-ops N
- ورکرهای access را پس از N بررسی bogo صحت دسترسی متوقف میکند.
- استرسور Process accounting (حسابرسی فرآیند)
- --acct N
- تعداد N ورکر را آغاز میکند که رابط حسابرسی acct(2) را به کار میگیرند. یک فایل حسابرسی باز میشود و یک فرآیند فرزند ایجاد شده و خاتمه مییابد و دادههای حسابرسی خوانده شده و صحتسنجی میشوند. اندازه فایل حسابرسی به حداکثر 16MB محدود است. تنها در لینوکس پشتیبانی میشود و به قابلیتهای CAP_SYS_PACCT نیاز دارد.
- --acct-ops N
- پس از خواندن N رکورد حسابرسی bogo متوقف میشود.
- استرسور POSIX Access Control List (فهرست کنترل دسترسی)
- --acl N
- تعداد N ورکر را آغاز میکند که جایگشتهای مختلف تنظیمات مجوزهای دسترسی ACL را روی برچسبهای user، group و other به کار میگیرند.
- --acl-rand
- پیش از بهکارگیری ACLها، ترتیب مجوزهای دسترسی ACL را تصادفی (از طریق بر زدن) میکند.
- --acl-ops N
- ورکرهای acl را پس از اعمال N تنظیم bogo acl متوقف میکند.
- استرسور Affinity (وابستگی پردازنده)
- --affinity N
- تعداد N ورکر را آغاز میکند که ۱۶ فرآیند را برای تغییر سریع وابستگی پردازنده (CPU affinity) اجرا میکنند (برای سیستمهایی که sched_setaffinity(2) را ارائه میدهند). تعویض سریع وابستگی پردازنده میتواند باعث افت کارایی حافظه پنهان (cache) و نرخ بالای تعویض زمینه (context switch) شود.
- --affinity-delay N
- پیش از تغییر وابستگی به CPU بعدی، به مدت N نانوثانیه تاخیر ایجاد میکند. این تاخیر پیش از انتقال فرآیند به CPU دیگر، به مدت N نانوثانیه روی عملیات واگذاری (yield) زمانبندی CPU به چرخش درجا (spin) میپردازد. مقدار پیشفرض 0 نانوثانیه است.
- --affinity-ops N
- ورکرهای affinity را پس از N عملیات bogo affinity متوقف میکند.
- --affinity-pin
- تمام ۱۶ فرآیند هر استرسور را به یک CPU سنجاق (pin) میکند. تمام ۱۶ فرآیند از CPU انتخابشده توسط استرسور والد اصلی پیروی میکنند و باری سنگین را به آن CPU تحمیل مینمایند.
- --affinity-procs N
- تعداد فرآیندهایی که باید به ازای هر نمونه affinity اجرا شوند را مشخص میکند؛ دامنه مجاز بین ۲ تا ۱۰۲۴ و مقدار پیشفرض ۱۶ است.
- --affinity-rand
- وابستگی CPU را به جای حالت پیشفرضِ متوالی، بهطور تصادفی تغییر میدهد.
- --affinity-sleep N
- پیش از تغییر وابستگی به CPU بعدی، به مدت N نانوثانیه به خواب میرود (sleep).
- استرسور Kernel crypto AF_ALG API (رابط رمزنگاری هسته)
- --af-alg N
- تعداد N ورکر را آغاز میکند که دامنه سوکت AF_ALG را با درهمسازی (هش کردن) و رمزنگاری پیامهای تصادفی با اندازههای مختلف به کار میگیرند. این کار موتورهای رمزنگاری موجود در هسته لینوکس شامل انواع هش، سایفر (cipher)، rng و aead را به چالش میکشد.
- --af-alg-dump
- فهرست داخلی نشاندهنده الگوریتمهای رمزنگاری که از فایل /proc/crypto تجزیه شدهاند را در خروجی استاندارد (stdout) میریزد (dump).
- --af-alg-ops N
- ورکرهای af-alg را پس از هش شدن N پیام AF_ALG متوقف میکند.
- --af-alg-type [ all | ahash | shash | skcipher | rng | aead ]
- نوع رمزنگاری را مشخص میکند؛ مقدار `all' به عنوان پیشفرض از تمام انواع استفاده میکند.
- استرسور Asynchronous I/O (POSIX AIO - ورودی/خروجی ناهمگام)
- --aio N
- تعداد N ورکر را آغاز میکند که با استفاده از رابط POSIX aio، چندین خواندن و نوشتن ناهمگام کوچک ورودی/خروجی را روی یک فایل موقت نسبتاً کوچک صادر میکنند. این کار صرفاً حافظه پنهان (cache) سیستمفایل را درگیر کرده و زمان زیادی از کاربر و هسته را صرف صدور و مدیریت درخواستهای ورودی/خروجی میکند. بهطور پیشفرض، هر فرآیند ورکر به ۱۶ درخواست همروند ورودی/خروجی رسیدگی میکند.
- --aio-ops N
- ورکرهای ورودی/خروجی ناهمگام POSIX را پس از N درخواست bogo ورودی/خروجی ناهمگام متوقف میکند.
- --aio-requests N
- تعداد درخواستهای ورودی/خروجی ناهمگام POSIX را که هر ورکر باید صادر کند مشخص مینماید؛ مقدار پیشفرض ۱۶ است و بازه ۱ تا ۴۰۹۶ مجاز میباشد.
- استرسور Asynchronous I/O (Linux AIO - ورودی/خروجی ناهمگام)
- --aiol N
- تعداد N ورکر را آغاز میکند که با استفاده از فراخوانهای سیستمی aio لینوکس شامل io_setup(2)، io_submit(2)، io_getevents(2) و io_destroy(2)، چندین نوشتن ناهمگام تصادفی ورودی/خروجی با اندازه 4K صادر میکنند. بهطور پیشفرض، هر فرآیند ورکر به ۱۶ درخواست همروند ورودی/خروجی رسیدگی میکند.
- --aiol-ops N
- ورکرهای ورودی/خروجی ناهمگام لینوکس را پس از N درخواست bogo ورودی/خروجی ناهمگام متوقف میکند.
- --aiol-requests N
- تعداد درخواستهای ورودی/خروجی ناهمگام لینوکس را که هر ورکر باید صادر کند مشخص مینماید؛ مقدار پیشفرض ۱۶ است و بازه ۱ تا ۴۰۹۶ مجاز میباشد.
- استرسور Alarm (هشدار)
- --alarm N
- تعداد N ورکر را آغاز میکند که alarm(2) را با مقادیر MAXINT، 0 و تاخیرهای خواب و هشدار تصادفی که پیش از موعد قطع میشوند، به کار میگیرند. پیش از زمانبندی هر هشدار، هشدارهای در انتظار قبلی با فراخوانیهای هشدار صفر ثانیهای لغو میشوند.
- --alarm-ops N
- پس از N عملیات bogo مربوط به alarm متوقف میشود. آزمونگر فشار AppArmor
- --apparmor N
- شروع N پردازهٔ کارگر که بخشهای گوناگون رابط AppArmor را به کار میگیرند. در حال حاضر، برای اجرای این آزمون خاص نیاز به دسترسی ریشه (root) است. تنها روی سیستمهای لینوکس با پشتیبانی از AppArmor در دسترس بوده و نیازمند قابلیت CAP_MAC_ADMIN است.
- --apparmor-ops
- متوقف کردن کارگرهای AppArmor پس از N عملیات ساختگی (bogo operations).
- آزمونگر فشار اتمیک (Atomic stressor)
- --atomic N
- شروع N پردازهٔ کارگر که عملیات توکار مختلف __atomic_*() در GCC را روی اعداد صحیح ۸، ۱۶، ۳۲ و ۶۴ بیتی که بین N کارگر به اشتراک گذاشته شدهاند، به کار میگیرند. این آزمونگر فشار تنها برای ساختهایی با استفاده از GCC نسخهٔ 4.7.4 یا بالاتر در دسترس است. این آزمونگر توقفهای مکرر کَش بخش جلویی (front end cache stalls) و ارجاعات حافظهٔ نهان (cache references) بسیاری را تحمیل میکند. توجه داشته باشید که سیستمهای ۳۲ بیتی در حال حاضر اعداد صحیح ۶۴ بیتی را به کار نمیگیرند.
- --atomic-ops N
- متوقف کردن کارگرهای اتمیک پس از N عملیات اتمیک ساختگی (bogo atomic operations).
- آزمونگر فشار پشتهٔ جایگزین نامعتبر (Bad alternative stack stressor)
- --bad-altstack N
- شروع N پردازهٔ کارگر که پشتههای سیگنال جایگزین خراب را برای مدیریت SIGSEGV و SIGBUS ایجاد میکنند، که این امر به نوبهٔ خود خطاهای ثانویهٔ SIGSEGV/SIGBUS تولید میکند. برای ساخت پشتهها از روشهای مخرب و متنوعی استفاده میشود که بهصورت تصادفی انتخاب میگردند:
- لغو نگاشت (unmapping) پشتهٔ سیگنال جایگزین، پیش از فعالسازی مدیریت سیگنال.
- تغییر دادن پشتهٔ سیگنال جایگزین تنها به حالت فقطخواندنی، فقطنوشتنی، یا فقطاجرایی.
- استفاده از یک پشتهٔ سیگنال جایگزین NULL.
- استفاده از شیء گردانندهٔ سیگنال به عنوان پشتهٔ سیگنال جایگزین.
- لغو نگاشت پشتهٔ سیگنال جایگزین حین اجرای گردانندهٔ سیگنال.
- استفاده از یک بخش متنی (text segment) فقطخواندنی برای پشتهٔ سیگنال جایگزین.
- استفاده از یک پشتهٔ سیگنال جایگزین با اندازهای کوچکتر از حد مجاز.
- استفاده از VDSO به عنوان پشتهٔ سیگنال جایگزین.
- استفاده از پشتهٔ جایگزین نگاشتشده روی /dev/zero.
- استفاده از پشتهٔ جایگزین نگاشتشده روی یک فایل موقت با اندازهٔ صفر برای تولید خطای SIGBUS.
- --bad-altstack-ops N
- متوقف کردن آزمونگرهای فشار پشتهٔ جایگزین نامعتبر پس از N عملیات ساختگی SIGSEGV.
- آزمونگر فشار ioctl نامعتبر (Bad ioctl stressor)
- --bad-ioctl N
- شروع N پردازهٔ کارگر که مجموعهای از فراخوانیهای نامعتبر و غیرمجاز خواندن با ioctl(2) (با استفاده از _IOR) و نوشتن با ioctl (با استفاده از _IOR به همراه صفحات نگاشتشده با PROT_NONE) را در سراسر راهاندازهای دستگاه انجام میدهند. این عمل خواندنهای به اندازهٔ صفحه (page size)، ۶۴ بیتی، ۳۲ بیتی، ۱۶ بیتی و ۸ بیتی و همچنین نشانیهای NULL، صفحات غیرقابلخواندن و صفحات نگاشتشده با PROT_NONE را به بوتهٔ آزمایش میگذارد. در حال حاضر تنها برای لینوکس موجود است و نیازمند گزینهٔ --pathological است.
- --bad-ioctl-alldev
- آزمایش فراخوانیهای ioctl روی تمامی دستگاهها؛ حالت پیشفرض تنها اولین رخداد از یک دستگاه را آزمایش میکند (برای نمونه /dev/i2c-0)، اما این گزینه همهٔ دستگاهها را آزمایش خواهد کرد (برای نمونه /dev/i2c-*) و بنابراین برای پیمایش تمامی دستگاهها زمان بسیار بیشتری صرف خواهد شد.
- --bad-ioctl-method [ inc | random | random-inc | stride ]
- انتخاب روش
تغییر
چندتایی
(شماره،
نوع) دستور ioctl
در هر
تکرار؛
حالت
پیشفرض random-inc
است.
روشهای
موجود برای
bad-ioctl به شرح
زیر است:
روش توضیحات inc افزایش شمارهٔ دستور ioctl به اندازهٔ ۱ random استفاده از یک دستور ioctl تصادفی random-inc افزایش مقدار دستور ioctl به یک مقدار تصادفی random-stride افزایش شمارهٔ دستور ioctl به اندازهٔ ۱ و کاهش نوع دستور به اندازهٔ ۳ - --bad-ioctl-ops N
- متوقف کردن آزمونگرهای فشار ioctl نامعتبر پس از N عملیات ساختگی ioctl.
- توابع بسل (Bessel functions)
- --besselmath N
- شروع N پردازهٔ کارگر که توابع مختلف بسل را به کار میگیرند. نتایج بهمنظور اطمینان از عدم وقوع هرگونه تغییر و ناهماهنگی پس از هر دور شامل ۱۰۰۰۰ محاسبه، اعتبارسنجی میشوند.
- --besselmath-ops N
- متوقف کردن پس از N حلقه از عملیات ساختگی بسل.
- --besselmath-method method
- مشخص کردن
یک تابع بسل
جهت آزمایش.
روشهای در
دسترس سنجش
فشار بسل به
شرح زیر
بیان
شدهاند:
عامل فشار Big heapروش توضیحات all پیمایش روی تمامی روشهای توابع بسل زیر j0 تابع بسل نوع اول از مرتبهٔ ۰ با دقت مضاعف (double precision) j1 تابع بسل نوع اول از مرتبهٔ ۱ با دقت مضاعف (double precision) jn تابع بسل نوع اول از مرتبهٔ n (که در این آزمون n = 5 است) با دقت مضاعف (double precision) j0f تابع بسل نوع اول از مرتبهٔ ۰ با دقت اعشاری (float precision) j1f تابع بسل نوع اول از مرتبهٔ ۱ با دقت اعشاری (float precision) jnf تابع بسل نوع اول از مرتبهٔ n (که در این آزمون n = 5 است) با دقت اعشاری (float precision) j0l تابع بسل نوع اول از مرتبهٔ ۰ با دقت مضاعف طولانی (long double precision) j1l تابع بسل نوع اول از مرتبهٔ ۱ با دقت مضاعف طولانی (long double precision) jnl تابع بسل نوع اول از مرتبهٔ n (که در این آزمون n = 5 است) با دقت مضاعف طولانی (long double precision) y0 تابع بسل نوع دوم از مرتبهٔ ۰ با دقت مضاعف (double precision) y1 تابع بسل نوع دوم از مرتبهٔ ۱ با دقت مضاعف (double precision) yn تابع بسل نوع دوم از مرتبهٔ n (که در این آزمون n = 5 است) با دقت مضاعف (double precision) y0f تابع بسل نوع دوم از مرتبهٔ ۰ با دقت اعشاری (float precision) y1f تابع بسل نوع دوم از مرتبهٔ ۱ با دقت اعشاری (float precision) ynf تابع بسل نوع دوم از مرتبهٔ n (که در این آزمون n = 5 است) با دقت اعشاری (float precision) y0l تابع بسل نوع دوم از مرتبهٔ ۰ با دقت مضاعف طولانی (long double precision) y1l تابع بسل نوع دوم از مرتبهٔ ۱ با دقت مضاعف طولانی (long double precision) ynl تابع بسل نوع دوم از مرتبهٔ n (که در این آزمون n = 5 است) با دقت مضاعف طولانی (long double precision)
- -B N, --bigheap N
- شروع N پردازه کارگر که heap خود را با تخصیص مجدد حافظه رشد میدهند. اگر قاتل کمبود حافظه (OOM killer) در لینوکس کارگر را از بین ببرد یا تخصیص با شکست مواجه شود، فرایند تخصیصدهنده همهچیز را مجدداً از سر میگیرد. توجه داشته باشید که تنظیمات OOM برای این کارگر طوری تنظیم شده است که OOM killer این کارگرها را بهعنوان نخستین پردازههای نامزد برای کشتن در نظر میگیرد.
- --bigheap-bytes N
- حداکثر رشد heap به میزان N بایت به ازای هر کارگر bigheap. میتوان اندازه را به صورت درصدی (%) از کل حافظه در دسترس یا در واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با استفاده از پسوندهای b، k، m یا g مشخص کرد.
- --bigheap-growth N
- مشخص کردن مقدار حافظهای که heap در هر تکرار به اندازه آن رشد میکند. اندازه میتواند از 4 K تا 64 MB باشد. مقدار پیشفرض 64 K است.
- --bigheap-mlock
- تلاش برای mlock(2) کردن صفحات تخصیصیافته آتی در حافظه که باعث فشار بیشتر بر حافظه میشود. اگر mlock(MCL_FUTURE) پیادهسازی شده باشد، این کار مانع از swap شدن صفحات تازهتخصیصیافته میشود.
- --bigheap-ops N
- توقف کارگرهای big heap پس از تکمیل N عملیات تخصیص bogo.
- عامل فشار Binderfs
- --binderfs N
- شروع N کارگر که binderfs را mount، آزمایش و unmount میکنند. دستگاه کنترلی binder با 256 فراخوانی متوالی ioctl(2) از نوع BINDER_CTL_ADD در هر حلقه تحت فشار قرار میگیرد.
- --binderfs-ops N
- توقف پس از N چرخه binderfs.
- عامل فشار Bind mount
- --bind-mount N
- شروع N کارگر که بهطور مکرر /bin را به یک مسیر موقت bind mount میکنند. این کار میتواند منابع را بهسرعت مصرف کند. از این عامل فشار استفاده نکنید مگر آنکه ریسک قفل شدن سیستم خود را به جان بخرید. نیازمند قابلیت CAP_SYS_ADMIN است.
- --bind-mount-ops N
- توقف پس از N عملیات bogo از نوع bind mount.
- عامل فشار Bitonic sort
- --bitonicsort N
- شروع N کارگر که اعداد صحیح ۳۲ بیتی را با مرتبسازی بیتونیک (bitonic sort) مرتب میکنند.
- --bitonicsort-ops N
- توقف کارگرهای فشار مرتبسازی بیتونیک پس از N مرتبسازی بیتونیک bogo.
- --bitonicsort-size N
- مشخص کردن تعداد اعداد صحیح ۳۲ بیتی برای مرتبسازی؛ مقدار پیشفرض 262144 (256 × 1024) است.
- عملیات دستکاری بیتی
- --bitops N
- شروع N کارگر که محاسبات مختلفی را با استفاده از عملیات دستکاری اعداد صحیح ۳۲ بیتی انجام میدهند. بسیاری از این روشها از «Bit Twiddling Hacks» دانشگاه استنفورد (Sean Eron Anderson) و Hacker's Delight اثر (Henry S. Warren, Jr.) برگرفته شدهاند.
- --bitops-ops N
- توقف پس از N عملیات bitop.
- --bitops-method method
- مشخص کردن
روش فشار bitops.
بهطور
پیشفرض،
تمام
روشهای
فشار bitops به
صورت
متوالی
اجرا
میشوند،
با این حال
در صورت
نیاز
میتوان
تنها یک روش
را برای
استفاده
تعیین کرد.
روشهای
موجود برای
فشار bitops به
شرح زیر
توضیح داده
شدهاند:
روش توضیحات all پیمایش روی تمامی روشهای فشار bitops زیر. abs محاسبه مقدار قدر مطلق یک عدد صحیح ۳۲ بیتی علامتدار. محاسبه به دو روش متفاوت: یکی با ماسکگذاری و جمع، دیگری با ماسکگذاری و تفریق. bswap جابهجایی بایتها در یک عدد صحیح ۳۲ بیتی بدون علامت. محاسبه به ۳ روش: دو روش با شیفت بایت و دیگری با استفاده از تابع درونی (intrinsic) داخلی. ممکن است برخی بهینهسازها این موارد را به یک عملیات واحد bswap تبدیل کنند. countbits شمارش تعداد بیتهای ۱ شده در یک عدد صحیح ۳۲ بیتی بدون علامت. محاسبه به شش روش مختلف: دو روش با شمارش بیت، یکی با ضرب ۶۴ بیتی، یکی با ماسکگذاری و شیفت موازیسازیشده، یکی با استفاده از ماسکگذاری سهگانه و شیفتها، یکی با استفاده از تابع داخلی popcount. clz شمارش تعداد بیتهای صفر ابتدایی در یک عدد صحیح ۳۲ بیتی بدون علامت. محاسبه به چهار روش مختلف: یکی با شمارش بیت، یکی با شیفت log2، یکی با استفاده از تابع داخلی popcount، یکی با استفاده از تابع داخلی clz. ctz شمارش تعداد بیتهای صفر انتهایی در یک عدد صحیح ۳۲ بیتی بدون علامت. محاسبه به پنج روش مختلف: یکی با شمارش بیت، یکی با استفاده از ماسکگذاری و شیفت، یکی با استفاده از روش Gaudet با ماسکگذاری و عملگر سهتایی، یکی با تابع داخلی clz، یکی با تابع داخلی popcount. cmp مقایسه دو عدد صحیح ۳۲ بیتی بدون علامت با نتایج مقایسه −1، 0، 1 برای کوچکتر، مساوی یا بزرگتر. محاسبه به ۳ روش: یکی با مقایسههای ساده، دو روش با استفاده از مقایسهها و تفریق. log2 محاسبه لگاریتم بر مبنای ۲ یک عدد صحیح ۳۲ بیتی بدون علامت. محاسبه به چهار روش: یکی با شمارش بیت، یکی با ماسکگذاری، شیفت و انشعاب (branching)، یکی با ماسکگذاری و شیفت بدون انشعاب، یکی با شیفت و OR بیتی. max یافتن بیشینه دو عدد صحیح ۳۲ بیتی بدون علامت بدون متغیر موقت. محاسبه به دو روش: یکی با استفاده از xor و ماسکگذاری، دیگری با عملگر سهتایی. min یافتن کمینه دو عدد صحیح ۳۲ بیتی بدون علامت بدون متغیر موقت. محاسبه به دو روش: یکی با استفاده از xor و ماسکگذاری، دیگری با عملگر سهتایی. parity محاسبه زوجیت (parity) یک عدد صحیح ۳۲ بیتی بدون علامت. محاسبه به پنج روش: دو روش با شمارش بیت، یکی با استفاده از ضرب، شیفت و xor، یکی با استفاده از شیفت و xor، یکی با استفاده از تابع داخلی parity. pwr2 تعیین اینکه آیا یک عدد صحیح ۳۲ بیتی بدون علامت توانی از ۲ است یا خیر. محاسبه با استفاده از شمارش بیت و با ماسکی از مقدار − 1. rnddnpwr2 یافتن نزدیکترین توان ۲ به یک عدد صحیح ۳۲ بیتی بدون علامت، گرد شده به پایین. محاسبه به سه روش: یکی با استفاده از شمارش بیت و شیفت، یکی با شیفت و or، یکی با استفاده از شیفت و تابع داخلی ctz. rnduppwr2 یافتن نزدیکترین توان ۲ به یک عدد صحیح ۳۲ بیتی بدون علامت، گرد شده به بالا. محاسبه به سه روش: یکی با استفاده از شمارش بیت و شیفت، یکی با شیفت و or، یکی با استفاده از شیفت و تابع داخلی ctz. reverse معکوس کردن بیتهای یک عدد صحیح ۳۲ بیتی بدون علامت. محاسبه به شش روش: یکی با حلقه شیفت بیت، یکی با حلقه شیفت بیت و ماسک، یکی با ماسکگذاری و شیفت موازیسازیشده، یکی با ضرب ۶۴ بیتی، یکی با ضرب ۳۲ بیتی، یکی با استفاده از تابع داخلی bitreverse32. sign محاسبه علامت یک عدد صحیح ۳۲ بیتی علامتدار. محاسبه به دو روش: یکی با عملگر کوچکتر از صفر بدون انشعاب (branchless)، دیگری با شیفت دادن بیت علامت و نقیض کردن (negation). swap جابهجایی دو عدد صحیح ۳۲ بیتی علامتدار بدون متغیر موقت. محاسبه به دو روش: یکی با استفاده از تفریق و جمع، دیگری با استفاده از xor. zerobyte تعیین اینکه آیا یک عدد صحیح ۳۲ بیتی بدون علامت شامل یک یا چند بایت صفر است یا خیر. محاسبه به دو روش: یکی با بررسی صفر بودن هر بایت، دیگری با استفاده از ماسکگذاری بیت.
- عامل فشار Branch
- --branch N
- شروع N کارگر که بهطور تصادفی به 1024 موقعیت انتخابشده انشعاب میزنند و در نتیجه منطق پیشبینی انشعاب (branch prediction) پردازنده را به چالش میکشند.
- --branch-jumps [ 64 | 128 | 256 | 512 | 1024 | 2048 ]
- مشخص کردن حداکثر تعداد مقصدهای پرش برای استفاده. مقادیر بزرگتر احتمال افزایش نرخ خطای انشعاب (branch miss rate) را بالا میبرند.
- --branch-ops N
- توقف عوامل فشار انشعاب پس از N × 1024 انشعاب.
- عامل فشار Brk
- --brk N
- شروع N کارگر که قطعه داده (data segment) را هر بار به میزان یک صفحه با استفاده از فراخوانیهای متعدد brk(2) گسترش میدهند. هر صفحه جدید که با موفقیت تخصیص یافته لمس (touch) میشود تا از مقیم بودن آن در حافظه اطمینان حاصل گردد. در صورت وقوع وضعیت کمبود حافظه، آزمون اندازه قطعه داده را به نقطه پیش از شروع بازنشانی کرده و تغییر اندازه قطعه داده را مجدداً تکرار میکند. پردازه تنظیمات مربوط به کمبود حافظه را بهگونهای تنظیم میکند که ممکن است پیش از سایر پردازهها توسط قاتل کمبود حافظه (OOM killer) کشته شود. در صورت کشته شدن توسط OOM killer، بهطور خودکار توسط یک پردازه والد ناظر بازراهاندازی خواهد شد.
- --brk-bytes N
- حداکثر رشد brk به میزان N بایت به ازای هر کارگر brk. میتوان اندازه را به صورت درصدی (%) از کل حافظه در دسترس یا در واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با استفاده از پسوندهای b، k، m یا g مشخص کرد.
- --brk-mlock
- تلاش برای mlock(2) کردن صفحات آتی brk در حافظه که باعث فشار بیشتر بر حافظه میشود. اگر mlock(MCL_FUTURE) پیادهسازی شده باشد، این کار مانع از swap شدن صفحات جدید brk خواهد شد.
- --brk-notouch
- عدم لمس (touch) هر صفحه تازهتخصیصیافته در قطعه داده. این گزینه رفتار پیشفرض لمس هر صفحه تازهتخصیصیافته را غیرفعال کرده و بنابراین از اختصاص الزامی حافظه فیزیکی توسط هسته به آن صفحه جلوگیری میکند. --brk-ops N متوقف کردن کارگرهای brk پس از N عملیات bogo brk.
- تنشزای جستجوی دودویی (Binary search stressor)
- --bsearch N
- شروع N کارگر که یک آرایه مرتبشده از اعداد صحیح ۳۲ بیتی را با استفاده از bsearch(3) به صورت دودویی جستجو میکنند. به طور پیشفرض، ۶۵۵۳۶ عنصر در آرایه وجود دارد. این روشی مفید برای به کار کشیدن دسترسی تصادفی به حافظه و حافظه نهان پردازنده است.
- --bsearch-method [ bsearch-libc | bsearch-nonlibc | ternary ]
- انتخاب پیادهسازی libc از bsearch، یا یک پیادهسازی اندکی بهینهشده non-libc از bsearch، یا یک جستجوی سهتایی ۳روزه (3-day ternary search). در صورت وجود، حالت پیشفرض پیادهسازی libc است، در غیر این صورت نسخه non-libc استفاده میشود.
- --bsearch-ops N
- متوقف کردن کارگر bsearch پس از تکمیل N عملیات bogo bsearch.
- --bsearch-size N
- تعیین اندازه (تعداد اعداد صحیح ۳۲ بیتی) در آرایه برای bsearch. اندازه میتواند از 1 K تا 64 M باشد.
- تنشزای مرتبسازی حبابی (bubblesort stressor)
- --bubblesort N
- شروع N کارگر که اعداد صحیح ۳۲ بیتی را با استفاده از bubblesort مرتب میکنند.
- --bubblesort-method [ bubblesort-fast | bubblesort-naive ]
- انتخاب یک پیادهسازی بهینهشده استاندارد از bubblesort یا یک پیادهسازی ساده و بهینهنشده (naïve) از bubblesort. حالت پیشفرض نسخه بهینهشده استاندارد است.
- --bubblesort-ops N
- متوقف کردن کارگرهای تنش bubblesort پس از N عملیات bogo bubblesort.
- --bubblesort-size N
- تعیین تعداد اعداد صحیح ۳۲ بیتی برای مرتبسازی، پیشفرض ۱۶۳۸۴ است.
- تنشزای حافظه نهان (Cache stressor)
- -C N, --cache N
- شروع N کارگر که خواندن و نوشتنهای تصادفی و گسترده حافظه را برای درگیر کردن شدید (thrash) حافظه نهان پردازنده انجام میدهند. این کد پیکربندی حافظه نهان CPU را به صورت هوشمندانه تعیین نمیکند و از این رو ممکن است در ایجاد فعالیت اصابت/عدماصابت (hit-miss) خواندن/نوشتن برای برخی پردازندهها در سطح بهینه نباشد. نکته: برای به کار کشیدن عدماصابتهای حافظه نهان (cache misses)، توصیه میشود به جای این گزینه از تنشزای matrix-3d با گزینه --matrix-3d-zyx استفاده شود.
- --cache-badpage
- تخلیه دورهای حافظه نهان (cache flush) روی یک صفحه نگاشتنشده (خراب).
- --cache-cldemote
- تنزل خط حافظه نهان (cache line demote) (فقط x86). این عملیات برای معماریهای غیر x86 و پردازندههای قدیمیتر x86 که از این ویژگی پشتیبانی نمیکنند، بیاثر (no-op) است.
- --cache-clflushopt
- استفاده از تخلیه بهینهشده خط حافظه نهان (فقط x86). این عملیات برای معماریهای غیر x86 و پردازندههای قدیمیتر x86 که از این ویژگی پشتیبانی نمیکنند، بیاثر (no-op) است.
- --cache-clwb
- بازنویسی خط حافظه نهان (cache line writeback) (فقط x86). این عملیات برای معماریهای غیر x86 و پردازندههای قدیمیتر x86 که از این ویژگی پشتیبانی نمیکنند، بیاثر (no-op) است.
- --cache-enable-all
- در صورت مناسب بودن، به کار کشیدن حافظه نهان با استفاده از cldemote، clflushopt، fence، flush، sfence و prefetch.
- --cache-fence
- اجبار به ترتیبیسازی نوشتن (write serialization) در هر عملیات ذخیرهسازی (فقط x86). این عملیات برای معماریهای غیر x86 بیاثر (no-op) است.
- --cache-flush
- اجبار به تخلیه حافظه نهان در هر عملیات ذخیرهسازی (فقط x86). این عملیات برای معماریهای غیر x86 بیاثر (no-op) است.
- --cache-level N
- مشخص کردن سطح حافظه نهان برای به کار کشیدن (1 = کش L1، 2 = کش L2، 3 = کش L3/LLC (پیشفرض)). اگر سلسلهمراتب حافظه نهان قابل تشخیص نباشد، مقادیر پیشفرض توکار اعمال خواهند شد.
- --cache-no-affinity
- عدم تغییر وابستگی پردازنده (processor affinity) هنگامی که --cache در حال اجرا است.
- --cache-ops N
- متوقف کردن کارگرهای thrash حافظه نهان پس از N عملیات bogo cache thrash.
- --cache-permute
- جایگشت دادن پرچمهای انتخابی حافظه نهان هنگام به کار کشیدن حافظه نهان برای ایجاد ترکیب بهتری از عملیاتهای کش. توصیه میشود گزینه --cache-enable-all نیز با این گزینه به کار رود.
- --cache-prefetch
- اجبار به پیشواکشی خواندن (read prefetch) در نشانیهای خواندن روی معماریهایی که از پیشواکشی پشتیبانی میکنند.
- --cache-prefetchw
- اجبار به یک پیشواکشی نوشتن مازاد (redundant write prefetch) روی معماریهایی که از پیشواکشی نوشتن پشتیبانی میکنند.
- --cache-sfence
- اجبار به ترتیبیسازی نوشتن در هر عملیات ذخیرهسازی با استفاده از دستورالعمل sfence (فقط x86). این عملیات برای معماریهای غیر x86 بیاثر (no-op) است.
- --cache-size N
- لغو مقدار پیشفرض اندازه حافظه نهان و تنظیم آن روی N بایت. میتوان مقدار را با استفاده از پسوندهای b، k، m یا g بر حسب واحدهای بایت، کیلوبایت، مگابایت و گیگابایت مشخص کرد.
- --cache-ways N
- مشخص کردن تعداد راههای حافظه نهان (cache ways) برای به کار کشیدن. این گزینه اجازه میدهد زیرمجموعهای از کل اندازه حافظه نهان به کار کشیده شود.
- تنشزای چکشکاری حافظه نهان (Cache hammering stressor)
- --cachehammer N
- شروع N کارگر که حافظه نهان را با ترکیبی تصادفی از خواندن/نوشتنهای حافظه و در صورت امکان پیشواکشیها و تخلیههای حافظه نهان روی نشانیهای تصادفی در سه ناحیه نگاشتشده در حافظه به کار میکشند؛ یکی از این نواحی میان تمام تنشزاهای حافظه نهان مشترک بوده و به اندازه حافظه نهان L3 است، دیگری برای هر نمونه تنشزا محلی بوده و ۴ برابر اندازه حافظه نهان L3 است، و یکی نیز نگاشت یک تکصفحه است که نمیتوان روی آن خواند یا نوشت.
- --cachehammer-method [ permute | random ]
- مشخص کردن روش عملیاتهای حافظه و حافظه نهان؛ حالت پیشفرض ترتیب تصادفی (random) است؛ permute ترکیبی کاملاً جایگشتیافته از عملیاتهای حافظه و حافظه نهان را برای پوشش کامل انجام میدهد.
- --cachehammer-numa
- اختصاص دورهای صفحههای به کار گرفتهشده به گرههای NUMA انتخابشده به صورت تصادفی. این ویژگی برای سیستمهایی که از NUMA پشتیبانی نمیکنند غیرفعال است.
- --cachehammer-ops N
- متوقف کردن پس از N عملیات cache hammer.
- تنشزای خط حافظه نهان (Cache line stressor)
- --cacheline N
- شروع N کارگر که خواندن و نوشتن تکبایتها را در یک بافر مشترک با اندازه یک خط حافظه نهان (cache line) به کار میکشند. هر تنشزا ۱ یا چند فرایند را برای به کار کشیدن بایتهای مجاور یکدیگر اجرا خواهد کرد. تعداد فرایندهای اجراشده به ازای هر تنشزا به گونهای مقیاسبندی میشود که دستکم تمام N بایت یک خط حافظه نهان N بایتی آزموده شوند. هدف، تلاش برای ایجاد خرابی در خط حافظه نهان، توقفها (stalls) و خطاهای عدماصابت (misses) با دسترسیهای حافظه اشتراکی است.
- --cacheline-affinity
- تغییر مکرر وابستگی پردازنده (CPU affinity)، پخش یکنواخت فرایندهای cacheline روی تمام CPUهای برخط به منظور تلاش برای بیشینهسازی فعالیت حافظه نهان سطوح پایینتر. تلاش برای اینکه خطوط حافظه نهان مجاور توسط پردازندههای مجاور به کار کشیده شوند.
- --cacheline-method method
- تعیین یک
روش تنش خط
حافظه نهان.
به طور
پیشفرض،
تمام
روشهای
تنش به صورت
متوالی
اجرا
میشوند،
با این حال
در صورت
نیاز
میتوان
تنها یک روش
را برای
استفاده
تعیین کرد.
روشهای
موجود برای
تنش خط
حافظه نهان
به شرح زیر
هستند:
روش شرح all پیمایش روی تمام روشهای تنش CPU در زیر. adjacent افزایش یک بایت مشخص در یک خط حافظه نهان و خواندن بایت مجاور، و بررسی خرابی داده در هر ۷ بار افزایش. atomicinc افزایش اتمی یک بایت مشخص در یک خط حافظه نهان و بررسی خرابی داده در هر ۷ بار افزایش. bits نوشتن و بازخوانی الگوهای بیتی شیفتیافته در یک بایت مشخص در یک خط حافظه نهان و بررسی خرابی داده. copy رونوشت از یک بایت مجاور در یک بایت مشخص در یک خط حافظه نهان. inc افزایش و بازخوانی یک بایت مشخص در یک خط حافظه نهان و بررسی خرابی داده در هر ۷ بار افزایش. mix انجام ترکیبی از افزایش، و چرخش به چپ و راست روی یک بایت مشخص در یک خط حافظه نهان و بررسی خرابی داده. rdfwd64 افزایش یک بایت مشخص در یک خط حافظه نهان و سپس خواندن روبهجلوی کل خط حافظه نهان با استفاده از خواندنهای ۶۴ بیتی. rdints افزایش یک بایت مشخص در یک خط حافظه نهان و سپس خواندن دادهها در آن موقعیت بایتی در مکانهای با تراز طبیعی از مقادیر صحیح با اندازه ۸، ۱۶، ۳۲، ۶۴ و ۱۲۸ بیت. rdrev64 افزایش یک بایت مشخص در یک خط حافظه نهان و سپس خواندن معکوس کل خط حافظه نهان با استفاده از خواندنهای ۶۴ بیتی. rdwr خواندن و نوشتن مقدار ۸ بیتی یکسان در یک بایت مشخص در یک خط حافظه نهان و بررسی خرابی داده. --cacheline-ops N متوقف کردن کارگران cacheline پس از N دور آزمودن بایتها در یک cacheline. آزمونگر قابلیتهای فرایند (Process capabilities stressor) 5 --cap N آغاز N کارگر که قابلیتهای هر فرایند را از طریق فراخوانیهای capget(2) میخوانند (فقط لینوکس). --cap-ops N توقف پس از N عملیات صوری (bogo) برای cap. آزمونگر Cgroup (Cgroup stressor) 5 --cgroup N آغاز N کارگر که در هر تکرار عملیات bogo، یک cgroup را سوار (mount) کرده، فرزندی را به آن cgroup منتقل میکنند، میخوانند، مینویسند و فرزند را از آن cgroup حذف کرده و در نهایت cgroup را پیاده (umount) میکنند. این گزینه از cgroup v2 استفاده میکند و فقط برای سیستمهای لینوکس در دسترس است. --cgroup-ops N توقف پس از N عملیات صوری (bogo) برای cgroup. آزمونگر Chattr (Chattr stressor) 5 --chattr N آغاز N کارگر که تلاش میکنند ویژگیهای فایل را از طریق فراخوانی ioctl(2) با EXT2_IOC_SETFLAGS به چالش بکشند. این فرایند عمداً با شرایط رقابتی (racy) طراحی شده است تا با فعال و غیرفعال کردن دامنهای از ویژگیهای chattr روی یک فایل مشترک میان N فرایند آزمونگر chattr، آنها را بیازماید (فقط لینوکس). --chattr-ops N توقف پس از N عملیات صوری (bogo) برای chattr. آزمونگر Chdir (Chdir stressor) 5 --chdir N آغاز N کارگر که با استفاده از chdir(2) دایرکتوری را بین دایرکتوریهای گوناگون تغییر میدهند. --chdir-dirs N آزمودن chdir روی N دایرکتوری. مقدار پیشفرض 8192 دایرکتوری است؛ این گزینه امکان استفاده از 64 تا 65536 دایرکتوری را فراهم میکند. --chdir-ops N توقف پس از N عملیات صوری (bogo) برای chdir. آزمونگر Chmod (Chmod stressor) 5 --chmod N آغاز N کارگر که بیتهای حالت فایل (mode bits) را از طریق chmod(2) و fchmod(2) روی همان فایل تغییر میدهند. هر چه مقدار N بزرگتر باشد، رقابت و نزاع (contention) بر سر فایل واحد بیشتر میشود. این آزمونگر تمام حالتهای ترکیبی بیتهای حالت را آزمایش خواهد کرد. --chmod-ops N توقف پس از N عملیات صوری (bogo) برای chmod. آزمونگر Chown (Chown stressor) 5 --chown N آغاز N کارگر که chown(2) را روی همان فایل به کار میگیرند. هر چه مقدار N بزرگتر باشد، رقابت بر سر فایل واحد بیشتر خواهد بود. --chown-ops N متوقف کردن کارگران chown پس از N عملیات صوری (bogo) فراخوانی chown(2). آزمونگر Chroot (Chroot stressor) 5 --chroot N آغاز N کارگر که chroot(2) را روی مسیرهای معتبر و نامعتبر گوناگون chroot میآزمایند. این آزمونگر فقط روی سیستمهای لینوکس در دسترس است و به قابلیت CAP_SYS_ADMIN نیاز دارد. --chroot-ops N متوقف کردن کارگران chroot پس از N عملیات صوری (bogo) فراخوانی chroot(2). آزمونگر توابع هذلولوی مختلط (Complex hyperbolic functions stressor) 5 --chyperbolic N آغاز N کارگر که توابع هذلولوی مختلط libm یعنی sinh ،cosh و tanh را با استفاده از انواع ممیز شناور complex float ،complex double و complex long double میآزمایند. هر تابع به ازای هر عملیات صوری (bogo-operation) تعداد 10000 بار اجرا میشود. --chyperbolic-method function مشخص کردن یک تابع آزمون هذلولوی مختلط. بهطور پیشفرض، همهٔ توابع بهصورت ترتیبی آزموده میشوند، با این حال در صورت نیاز میتوان فقط یک تابع خاص را برای استفاده مشخص کرد. گزینههای موجود به شرح زیر است: lB2 lB l lx. روش شرح all پیمایش در تمامی توابع هذلولوی مختلط زیر ccosh کسینوس هذلولوی مختلط (دقت complex double) ccoshf کسینوس هذلولوی مختلط (دقت complex float) ccoshl کسینوس هذلولوی مختلط (دقت complex long double) csinh سینوس هذلولوی مختلط (دقت complex double) csinhf سینوس هذلولوی مختلط (دقت complex float) csinhl سینوس هذلولوی مختلط (دقت complex long double) ctanh تانژانت هذلولوی مختلط (دقت complex double) ctanhf تانژانت هذلولوی مختلط (دقت complex float) ctanhl تانژانت هذلولوی مختلط (دقت complex long double) - --chyperbolic-ops N
- توقف پس از N عملیات صوری (bogo-operation).
- آزمونگر ساعت (Clock stressor)
- --clock N
- آغاز N کارگر برای آزمودن ساعتها و تایمرهای POSIX. برای تمامی انواع شناختهشدهٔ ساعت، این گزینه clock_getres(2) ،clock_gettime(2) و clock_nanosleep(2) را به کار میگیرد. برای تمامی تایمرهای شناختهشده، یک تایمر با مدتزمان تصادفی ایجاد کرده و تا زمان سرآمدن آن، نظرسنجی مکرر پردازنده (busy poll) انجام میدهد. این آزمونگر موجب تعویض مکرر زمینه (context switching) میشود.
- --clock-ops N
- متوقف کردن کارگران آزمون ساعت پس از N عملیات صوری (bogo).
- آزمونگر Clone (Clone stressor)
- --clone N
- آغاز N کارگر که کلونها را (از طریق فراخوانیهای سیستمی clone(2) و clone3(2)) ایجاد میکنند. این آزمونگر بهسرعت تلاش میکند تا بهطور پیشفرض 8192 کلون ایجاد کند که بلافاصله خاتمه مییابند و در وضعیت زامبی (zombie) منتظر جمعآوری (reaped) میمانند. هنگامی که بیشینهٔ تعداد کلونها حاصل شود (یا clone به دلیل رسیدن به حداکثر مجاز با شکست مواجه شود)، قدیمیترین نخ کلون جمعآوری شده و سپس یک کلون جدید به شیوهٔ خروج به ترتیب ورود (FIFO) ایجاد میشود و این روند تکرار میگردد. برای هر کلون یک پرچم clone تصادفی انتخاب میشود تا عملیات مختلف clone به بوتهٔ آزمایش گذاشته شوند. آزمونگر clone گزینهای ویژهٔ لینوکس است.
- --clone-max N
- تلاش برای ایجاد حداکثر N نخ کلون. در صورتی که محدودیت سیستم کمتر از N باشد، ممکن است به این تعداد نرسد.
- --clone-ops N
- متوقف کردن کارگران آزمون clone پس از N عملیات صوری (bogo) کلون.
- آزمونگر Close (Close stressor)
- --close N
- آغاز N کارگر که تلاش میکنند با بستن توصیفکنندههای فایل باز شده، وضعیتهای رقابتی (race conditions) تحمیل کنند. این توصیفکنندههای فایل به روشهای مختلفی باز شدهاند تا گردانندههای بستن گوناگون در هسته به کار گرفته شوند..TP --close-fds N تعداد fdها (توصیفکنندههای فایل) را برای بستن مشخص میکند؛ بازه مجاز از ۲ تا ۶۵۵۳۵ با مقدار پیشفرض ۸ است.
- --close-ops N
- متوقف کردن کارگران close پس از N عملیات bogo close.
- تنشزای Swapcontext
- --context N
- راهاندازی N کارگر که سه ریسه (thread) را اجرا میکنند و از swapcontext(3) برای پیادهسازی تعویض زمینه (context switching) ریسهبهریسه بهره میبرند. این عمل ذخیره و بازیابی سریع زمینه فرایند را به کار میگیرد و پهنای باند آن توسط نرخ ذخیره و بازیابی ثباتها و حافظه محدود میشود.
- --context-ops N
- متوقف کردن کارگران context پس از N تعویض زمینه bogo. در این تنشزا، ۱ عملیات bogo معادل ۱۰۰۰ فراخوانی swapcontext است.
- تنشزای کپی فایل (Copy file)
- --copy-file N
- راهاندازی N تنشزا که فایلی را با استفاده از فراخوانی سیستمی copy_file_range(2) در لینوکس کپی میکنند. تکههای دادهای ۱۲۸ کیلوبایتی از مکانهای تصادفی یک فایل به مکانهای تصادفی در فایل مقصد کپی میشوند. بهطور پیشفرض اندازه فایلها ۲۵۶ مگابایت است. دادهها پس از هر فراخوانی copy_file_range(2) با سامانه فایل همگامسازی (sync) میشوند.
- --copy-file-bytes N
- اندازه فایل کپی؛ مقدار پیشفرض ۲۵۶ مگابایت است. میتوان اندازه را بهصورت درصدی از فضای خالی سامانه فایل یا با واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با پسوندهای b، k، m یا g مشخص کرد.
- --copy-file-io-bytes N
- اندازه I/O کپی در copy_file_range(2)؛ مقدار پیشفرض ۱۲۸ کیلوبایت است و بازه آن از ۴ کیلوبایت تا ۱ مگابایت میباشد.
- --copy-file-ops N
- توقف پس از N فراخوانی copy_file_range().
- تنشزای پردازنده (CPU)
- -c N, --cpu N
- راهاندازی N کارگر برای تحت فشار قرار دادن پردازنده با پیمایش متوالی تمام روشهای مختلف تنش CPU. به جای اجرای تمام روشهای تنش پردازنده، میتوان یک روش مشخص را با گزینه --cpu-method تعیین کرد.
- -l P, --cpu-load P
- بارگذاری
پردازنده
با P درصد
بار برای
کارگران
تنش
پردازنده.
مقدار ۰
عملاً خواب
(بدون بار) و
۱۰۰
بارگذاری
کامل است.
حلقه
بارگذاری
به زمان
محاسبات (%load) و
زمان خواب (100% -
load%) تقسیم
میشود. دقت
به بار کلی
پردازنده و
پاسخدهی
زمانبند
بستگی
دارد،
بنابراین
بار واقعی
ممکن است با
بار مورد
نظر تفاوت
داشته باشد.
توجه داشته
باشید که
تعداد
عملیات bogo
پردازنده
ممکن است
بهصورت
خطی با بار
مقیاس
نشود، زیرا
برخی
سامانهها
از
مقیاسبندی
فرکانس
پردازنده
استفاده
میکنند و
بنابراین
بارهای
سنگینتر
فرکانس
پردازنده
را افزایش
داده و منجر
به عملیات bogo
پردازنده
بیشتری
میشوند.
نکته: این گزینه فقط برای گزینه تنشزای --cpu اعمال میشود و شامل تمام کلاسهای تنشزای پردازنده نیست.
- --cpu-load-slice S
- نکته: این
گزینه تنها
زمانی
کاربرد
دارد که --cpu-load
کمتر از
۱۰۰٪ باشد.
بار
پردازنده
به چندین
چرخه مشغول
(busy) و بیکار (idle)
تقسیم
میشود. از
این گزینه
برای مشخص
کردن طول
برش زمانی
مشغول بودن
استفاده
کنید. یک
مقدار منفی
برای S،
تعداد
تکرارها
پیش از
بیکار کردن
پردازنده
را مشخص
میکند
(برای مثال 30-
موجب ۳۰ بار
تکرار حلقه
تنش
پردازنده
میشود).
مقدار صفر
یک زمان
مشغول بودن
تصادفی بین
۰ تا ۰٫۵
ثانیه
انتخاب
میکند.
مقدار مثبت
برای S،
تعداد
میلیثانیهها
پیش از
بیکار کردن
پردازنده
را مشخص
میکند
(برای مثال
۱۰۰
پردازنده
را به مدت
۰٫۱ ثانیه
مشغول نگه
میدارد).
تعیین
مقادیر
کوچک برای S
منجر به
برشهای
زمانی
کوچکتر و
زمانبندی
روانتر
میشود.
تنظیم --cpu-load
روی مقداری
نسبتاً کم و
--cpu-load-slice روی
مقداری
بزرگ باعث
چرخش
پردازنده
بین
چرخههای
طولانی
بیکاری و
مشغولی شده
و
فرکانسهای
مختلف
پردازنده
را به کار
میگیرد.
بازه
حرارتی
پردازنده
نیز دستخوش
تغییر
میشود،
بنابراین
این
سازوکار
مناسبی
برای سنجش
زمانبند،
مقیاسبندی
فرکانس و
سازوکارهای
خنککننده
حرارتی
فعال/غیرفعال
است.
نکته: این گزینه فقط برای گزینه تنشزای --cpu اعمال میشود و شامل تمام کلاسهای تنشزای پردازنده نیست.
- --cpu-method method
- مشخص کردن
یک روش تنش
پردازنده.
بهطور
پیشفرض،
همه
روشهای
تنش
بهصورت
متوالی
اجرا
میشوند،
با این حال
در صورت
نیاز
میتوان
تنها یک روش
را برای
استفاده
تعیین کرد.
روشهای
موجود تنش
پردازنده
به شرح زیر
توصیف
شدهاند:
Method Description all تکرار بر روی تمام روشهای تنش پردازنده زیر ackermann تابع آکرمن: محاسبه A(3, 7)، جایی که: A(m, n) = n + 1 if m = 0; A(m − 1, 1) if m > 0 and n = 0; A(m − 1, A(m, n − 1)) if m > 0 and n > 0 برای سایر روشهای بازگشتی، به روش تنش پردازنده hanoi مراجعه کنید. apery محاسبه ثابت آپری ζ(3)؛ مجموع 1/(n ↑ 3) با دقت 1.0x10↑14 bitops عملیات بیتی مختلف برگرفته از bithack، شامل: معکوس کردن بیتها، بررسی بیت توازن (parity)، شمارش بیتها، گرد کردن به نزدیکترین توان ۲ callfunc فراخوانی بازگشتی تابع ۸ آرگومانی زبان C تا عمق ۱۰۲۴ فراخوانی و بازکردن پشته (unwind) cfloat ۱۰۰۰ بار تکرار ترکیبی از عملیات اعداد مختلط ممیز شناور cdouble ۱۰۰۰ بار تکرار ترکیبی از عملیات اعداد مختلط ممیز شناور با دقت مضاعف (double) clongdouble ۱۰۰۰ بار تکرار ترکیبی از عملیات اعداد مختلط ممیز شناور با دقت مضاعف گسترده (long double) collatz محاسبه ۱۳۴۸ گام در دنباله کولاتز با شروع از عدد ۹۸۹۳۴۵۲۷۵۶۴۷؛ جایی که f(n) = n / 2 (برای n زوج) و f(n) = 3n + 1 (برای n فرد). correlate انجام یک همبستگی ۸۱۹۲ × ۵۱۲ از اعداد ممیز شناور مضاعف تصادفی crc16 محاسبه ۱۰۲۴ دور از CCITT CRC16 بر روی دادههای تصادفی decimal32 ۱۰۰۰ بار تکرار ترکیبی از عملیات ممیز شناور اعشاری ۳۲ بیتی (فقط GCC) decimal64 ۱۰۰۰ بار تکرار ترکیبی از عملیات ممیز شناور اعشاری ۶۴ بیتی (فقط GCC) decimal128 ۱۰۰۰ بار تکرار ترکیبی از عملیات ممیز شناور اعشاری ۱۲۸ بیتی (فقط GCC) dither دیترینگ فلوید-اشتاینبرگ بر روی یک تصویر تصادفی ۱۰۲۴ × ۷۶۸ از عمق ۸ بیت تا ۱ بیت div8 ۵۰۰۰۰ عمل تقسیم عدد صحیح بدون علامت ۸ بیتی div16 ۵۰۰۰۰ عمل تقسیم عدد صحیح بدون علامت ۱۶ بیتی div32 ۵۰۰۰۰ عمل تقسیم عدد صحیح بدون علامت ۳۲ بیتی div64 ۵۰۰۰۰ عمل تقسیم عدد صحیح بدون علامت ۶۴ بیتی div128 ۵۰۰۰۰ عمل تقسیم عدد صحیح بدون علامت ۱۲۸ بیتی double ۱۰۰۰ بار تکرار ترکیبی از عملیات ممیز شناور با دقت مضاعف euler محاسبه e با استفاده از رابطه n = (1 + (1 ÷ n)) ↑ n explog تکرار بر روی رابطه n = exp(log(n) ÷ 1.00002) factorial یافتن فاکتوریل اعداد ۱ تا ۱۵۰ با استفاده از تقریبهای استرلینگ و رامانوجان fibonacci محاسبه دنباله فیبوناچی ۰، ۱، ۱، ۲، ۵، ۸... fft تبدیل سریع فوریه با ۴۰۹۶ نمونه fletcher16 ۱۰۲۴ دور پیادهسازی ساده (naïve) از چکسام ۱۶ بیتی فلچر float ۱۰۰۰ بار تکرار ترکیبی از عملیات ممیز شناور float16 ۱۰۰۰ بار تکرار ترکیبی از عملیات ممیز شناور ۱۶ بیتی float32 ۱۰۰۰ بار تکرار ترکیبی از عملیات ممیز شناور ۳۲ بیتی float64 ۱۰۰۰ بار تکرار ترکیبی از عملیات ممیز شناور ۶۴ بیتی float80 ۱۰۰۰ بار تکرار ترکیبی از عملیات ممیز شناور ۸۰ بیتی float128 ۱۰۰۰ بار تکرار ترکیبی از عملیات ممیز شناور ۱۲۸ بیتی floatconversion انجام ۶۵۵۳۶ بار تکرار تبدیل ممیز شناور بین متغیرهای ممیز شناور float، double و long double. gamma محاسبه ثابت اویلر-ماسکرونی γ با استفاده از حد اختلاف بین سری هارمونیک (1 + 1/2 + 1/3 + 1/4 + 1/5 ... + 1/n) و لگاریتم طبیعی ln(n)، برای n = 80000. gcd محاسبه ب.م.م (GCD) اعداد صحیح gray محاسبه تبدیل باینری به کد گری و بازگشت از کد گری به باینری برای اعداد صحیح از ۰ تا ۶۵۵۳۵ hamming محاسبه کدهای همینگ H(8,4) بر روی ۲۶۲۱۴۴ بسته داده ۴ بیتی. این عمل دادههای ۴ بیتی را به کد همینگ ۸ بیتی شامل ۴ بیت توازن تبدیل میکند. برای بیتهای داده d1..d4، بیتهای توازن به صورت زیر محاسبه میشوند: p1 = d2 + d3 + d4 p2 = d1 + d3 + d4 p3 = d1 + d2 + d4 p4 = d1 + d2 + d3 hanoi حل برجهای هانوی ۲۱ دیسکی با استفاده از روش بازگشتی. برای سایر روشهای بازگشتی، به روش تنش پردازنده ackermann مراجعه کنید. hyperbolic محاسبه sinh(θ) × cosh(θ) + sinh(2θ) + cosh(3θ) برای توابع سینوس و کسینوس هذلولوی float، double و long double که در آن θ = 0 تا 2π در ۱۵۰۰ گام تغییر میکند idct تبدیل کسینوسی گسسته معکوس (IDCT) در ابعاد 8 × 8. int8 ۱۰۰۰ بار تکرار ترکیبی از عملیات اعداد صحیح ۸ بیتی. int16 ۱۰۰۰ بار تکرار ترکیبی از عملیات اعداد صحیح ۱۶ بیتی. int32 ۱۰۰۰ بار تکرار ترکیبی از عملیات اعداد صحیح ۳۲ بیتی. int64 ۱۰۰۰ بار تکرار ترکیبی از عملیات اعداد صحیح ۶۴ بیتی. int128 ۱۰۰۰ بار تکرار ترکیبی از عملیات اعداد صحیح ۱۲۸ بیتی (فقط GCC). int32float ۱۰۰۰ بار تکرار ترکیبی از عملیات ممیز شناور و عدد صحیح ۳۲ بیتی. int32double ۱۰۰۰ بار تکرار ترکیبی از عملیات عدد صحیح ۳۲ بیتی و ممیز شناور با دقت مضاعف. int32longdouble ۱۰۰۰ بار تکرار ترکیبی از عملیات عدد صحیح ۳۲ بیتی و ممیز شناور با دقت مضاعف گسترده. int64float ۱۰۰۰ بار تکرار ترکیبی از عملیات ممیز شناور و عدد صحیح ۶۴ بیتی. int64double ۱۰۰۰ بار تکرار ترکیبی از عملیات عدد صحیح ۶۴ بیتی و ممیز شناور با دقت مضاعف. int64longdouble ۱۰۰۰ بار تکرار ترکیبی از عملیات عدد صحیح ۶۴ بیتی و ممیز شناور با دقت مضاعف گسترده. int128float ۱۰۰۰ بار تکرار ترکیبی از عملیات ممیز شناور و عدد صحیح ۱۲۸ بیتی (فقط GCC). int128double ۱۰۰۰ بار تکرار ترکیبی از عملیات عدد صحیح ۱۲۸ بیتی و ممیز شناور با دقت مضاعف (فقط GCC). int128longdouble ۱۰۰۰ بار تکرار ترکیبی از عملیات عدد صحیح ۱۲۸ بیتی و ممیز شناور با دقت مضاعف گسترده (فقط GCC). int128decimal32 ۱۰۰۰ بار تکرار ترکیبی از عملیات عدد صحیح ۱۲۸ بیتی و ممیز شناور اعشاری ۳۲ بیتی (فقط GCC). int128decimal64 ۱۰۰۰ بار تکرار ترکیبی از عملیات عدد صحیح ۱۲۸ بیتی و ممیز شناور اعشاری ۶۴ بیتی (فقط GCC). int128decimal128 ۱۰۰۰ بار تکرار ترکیبی از عملیات عدد صحیح ۱۲۸ بیتی و ممیز شناور اعشاری ۱۲۸ بیتی (فقط GCC). intconversion انجام ۶۵۵۳۶ بار تکرار تبدیل عدد صحیح بین متغیرهای int16، int32 و int64. ipv4checksum محاسبه ۱۰۲۴ دور از چکسام ۱۶ بیتی مکمل یک IPv4. jmp انشعابهای مقایسهای ساده و غیربهینهشده >، <، == و jmp. lfsr32 ۱۶۳۸۴ بار تکرار ثبات تغییر بازخورد خطی گالوا ۳۲ بیتی با استفاده از چندجملهای x↑32 + x↑31 + x↑29 + x + 1. این مقدار یک حلقه با 2↑32 − 1 مقدار یکتا تولید میکند (تمام مقادیر ۳۲ بیتی به جز ۰). ln2 محاسبه ln(2) بر پایه سری: 1 − 1/2 + 1/3 − 1/4 + 1/5 − 1/6 ... logmap ۱۶۳۸۴ بار تکرار محاسبه مقادیر آشوبناک با دقت مضاعف با استفاده از نگاشت لجستیک Χn+1 = r × Χn × (1 − Χn) که در آن r > ∼ 3.56994567 است longdouble ۱۰۰۰ بار تکرار ترکیبی از عملیات ممیز شناور با دقت مضاعف گسترده. loop حلقه خالی ساده. matrixprod حاصلضرب ماتریسی دو ماتریس ۱۲۸ × ۱۲۸ از مقادیر اعشاری مضاعف (double). آزمایش روی سختافزار ۶۴ بیتی x86 نشان میدهد که این روش ترکیب مناسبی از عملیات حافظه، حافظه نهان (cache) و ممیز شناور را ارائه میدهد و احتمالاً بهترین روش تنش پردازنده برای بالا بردن دمای پردازنده است. nsqrt محاسبه sqrt() برای مقادیر long double با استفاده از روش نیوتن-رافسون. omega محاسبه ثابت امگا تعریفشده با Ωe↑Ω = 1 با تکرار بهینه Ωn+1 = (1 + Ωn) / (1 + e↑Ωn). parity محاسبه بیت توازن با استفاده از روشهای گوناگون Stanford Bit Twiddling Hacks. روشهای بهکارگرفتهشده عبارتند از: روش ساده (naïve)، روش ساده همراه با بهینهسازی شمارش بیت برایان کرنیگان، روش ضرب، روش موازی، روشهای جدول جستجو (۲ حالت) و استفاده از تابع __builtin_parity(3). phi محاسبه نسبت طلایی ϕ با استفاده از سریها. pi محاسبه π با استفاده از الگوریتم همگرایی سریع سرینیواسا رامانوجان. prime یافتن ۱۰۰۰۰ عدد اول نخست با استفاده از جستجوی تقسیم آزمایشی ساده و کمی بهینهشده به روش آزمون و خطا (brute force). psi محاسبه ψ (ثابت معکوس فیبوناچی) با استفاده از مجموع معکوس اعداد فیبوناچی. queens محاسبه تمام راهحلهای مسئله کلاسیک ۸ وزیر برای اندازههای صفحه از ۱ تا ۱۱. rand ۱۶۳۸۴ بار تکرار rand()، که در آن rand تولیدکننده شبهتصادفی MWC است. تابع تصادفی MWC دو تولیدکننده ۱۶ بیتی multiply-with-carry را به هم متصل میکند: x(n) = 36969 × x(n − 1) + carry, y(n) = 18000 × y(n − 1) + carry mod 2 ↑ 16 و دارای دورهای حدود 2 ↑ 60 است. rand48 ۱۶۳۸۴ بار تکرار drand48(3) و lrand48(3). rgb تبدیل RGB به YUV و بازگشت مجدد به RGB (CCIR 601). sieve یافتن ۱۰۰۰۰ عدد اول نخست با استفاده از غربال اراتستن. stats محاسبه کمینه، بیشینه، میانگین حسابی، میانگین هندسی، میانگین هارمونیک و انحراف معیار روی ۲۵۰ مقدار تصادفی تولیدشده با دقت مضاعف و مثبت. sqrt محاسبه sqrt(rand())، که در آن rand تولیدکننده اعداد شبهتصادفی MWC است. trig محاسبه sin(θ) × cos(θ) + sin(2θ) + cos(3θ) برای توابع سینوس و کسینوس float، double و long double که در آن θ = 0 تا 2π در ۱۵۰۰ گام تغییر میکند. union انجام محاسبات عدد صحیح بر روی ترکیبی از میدانهای بیتی در یک union زبان C. این عمل نحوه عملکرد کامپایلر و پردازنده را در بارگذاری و ذخیره میدانهای بیتی عدد صحیح ارزیابی میکند. zeta محاسبه تابع زتای ریمان ζ(s) برای s = 2.0..10.0
توجه داشته باشید که برخی از این روشها سعی میکنند با محاسباتی که در برخی موارد استفادهٔ واقعی یافت میشوند، CPU را به چالش بکشند. با این حال، کد بر اساس هر معماری بهینهسازی نشده است، بنابراین ممکن است در مقایسه با کدهای بهینهسازیشدهٔ دستی که در برخی برنامهها استفاده میشوند، عملکردی غیربهینه داشته باشد. با این وجود، این روشها تلاش میکنند ترکیب معمول دستورالعملهای موجود در این سناریوهای کاربردی را بازنمایی کنند.
- --cpu-old-metrics
- از نسخهٔ V0.14.02، تستکنندهٔ فشار CPU اکنون شمارندههای bogo-op هر یک از روشهای تست CPU را نرمالسازی میکند تا سعی کند نرخ bogo-op مشابهی را برای همهٔ روشها تضمین نماید و از انحراف نرخهای bogo-op توسط روشهای کوتاهتر (و سریعتر) هنگام استفاده از روش پیشفرض "all" جلوگیری کند. این مورد بر اساس یک پردازندهٔ مرجع Intel i5-8350U است و بنابراین فاکتورهای نرمالسازی bogo-ops روی پردازندههای مختلف تا حدی دچار انحراف خواهند شد، اما نه به شدت نرخهای شمارندهٔ bogo-op اولیه. برای غیرفعال کردن نرمالسازی و بازگشت به معیارهای اولیه، از این گزینه استفاده کنید.
- --cpu-ops N
- متوقف کردن ورکرهای تست فشار CPU پس از N عملیات bogo.
- تستکنندهٔ فشار برخط کردن پردازنده (CPU onlining stressor)
- --cpu-online N
- راهاندازی N ورکر که پردازندههای انتخابشده به صورت تصادفی را آفلاین و آنلاین میکنند. این تستکنندهٔ فشار که مختص لینوکس است، برای انجام این عمل به دسترسی ریشه (root) نیاز دارد. بهطور پیشفرض، نخستین پردازنده (CPU 0) هرگز آفلاین نمیشود، زیرا مشخص شده است که این عمل در برخی سیستمها مشکلساز است و میتواند منجر به خاموش شدن سیستم (shutdown) شود.
- --cpu-online-affinity
- انتقال ورکر تستکنندهٔ فشار به پردازندهای که قرار است در نوبت بعدی آفلاین شود.
- --cpu-online-all
- حالت پیشفرض این است که نخستین پردازنده هرگز آفلاین نشود. این گزینه تمام پردازندهها از جمله CPU 0 را آفلاین و آنلاین میکند. این کار ممکن است باعث خاموش شدن برخی سیستمها شود.
- --cpu-online-ops N
- متوقف شدن پس از N عملیات آفلاین/آنلاین کردن.
- تستکنندهٔ فشار زمانبند وابستگی پردازنده (CPU affinity scheduler stressor)
- --cpu-sched N
- راهاندازی N ورکر که با انتقال پردازهها به CPUهای مختلف، زمانبند (scheduler) را به کار میکشند. هر ورکر 16 پردازهٔ فرزند را راهاندازی میکند و بهطور مکرر پردازهها را به CPUهای مختلف انتقال داده و تلاش میکند سیاست زمانبندی آنها را با استفاده از سیاستهای SCHED_OTHER، SCHED_BATCH، SCHED_IDLE، SCHED_EXT، SCHED_DEADLINE، SCHED_RR و SCHED_FIFO تغییر دهد. انتخاب جایگذاری CPU بر اساس 8 سازوکار مختلف صورت میگیرد و هر ثانیه تغییر میکند تا جایگذاری پردازهها روی تمام CPUهای موجود ترکیب شود. پردازههای فرزند با تنظیمات تصادفی nice اجرا میشوند تا اولویتبندی زمانبند به چالش کشیده شود.
- --cpu-sched-ops N
- متوقف شدن پس از N تلاش برای انتقال پردازهٔ فرزند.
- --cpu-sched-procs N
- مشخص کردن تعداد پردازههای فرزندی که هر ورکر کنترل میکند. این محدوده از 2 تا 1024 با مقدار پیشفرض 16 است.
- تستکنندهٔ فشار بررسی افزونگی چرخهای (Cyclic Redundancy Check stressor)
- --crc N
- راهاندازی
N ورکر که
طیفی از
محاسبات CRC
را روی 1024 بیت
داده انجام
میدهند. در
صورت موجود
بودن، از
توابع __builtin_crc در
gcc برای
محاسبهٔ
CRCها
استفاده
میشود.
CRCهای
مستقیم و
معکوس زیر
به کار
گرفته
میشوند:
روش توضیحات crc8_data8 CRC هشت بیتی با 128 × دادهٔ 8 بیتی crc16_data8 CRC شانزده بیتی با 128 × دادهٔ 8 بیتی crc16_data16 CRC شانزده بیتی با 64 × دادهٔ 16 بیتی crc32_data8 CRC سی و دو بیتی با 128 × دادهٔ 8 بیتی crc32_data16 CRC سی و دو بیتی با 64 × دادهٔ 16 بیتی crc32_data32 CRC سی و دو بیتی با 32 × دادهٔ 32 بیتی crc64_data8 CRC شصت و چهار بیتی با 128 × دادهٔ 8 بیتی crc64_data16 CRC شصت و چهار بیتی با 64 × دادهٔ 16 بیتی crc64_data32 CRC شصت و چهار بیتی با 32 × دادهٔ 32 بیتی crc64_data64 CRC شصت و چهار بیتی با 16 × دادهٔ 64 بیتی - --crc-ops N
- متوقف شدن پس از N × 64 دور از محاسبات CRC.
- تستکنندهٔ فشار رمزنگاری (Crypt stressor)
- --crypt N
- راهاندازی N ورکر که یک گذرواژهٔ تصادفی 16 نویسهای را با استفاده از crypt(3) رمزگذاری میکنند. گذرواژه با استفاده از روشهای رمزگذاری bcrypt، bsdicrypt، descrypt، gost-yescrypt، MD5، NT، scrypt، SHA-1، SHA-256، SHA-512، SunMD5 و yescrypt رمزگذاری میشود.
- --crypt-method method
- انتخاب روش رمزگذاری؛ میتواند یکی از این موارد باشد: bcrypt، bsdicrypt، descrypt، gost-yescrypt، MD5، NT، scrypt، SHA-1، SHA-256، SHA-512، SunMD5 و yescrypt. روش `all' تمام روشها را انتخاب میکند و حالت پیشفرض است.
- --crypt-ops N
- متوقف شدن پس از N عملیات رمزگذاری bogo.
- تستکنندهٔ فشار توابع مثلثاتی مختلط (Complex trigonometric functions stressor)
- --ctrig N
- راهاندازی N ورکر که توابع مثلثاتی sin مختلط، cos مختلط و tan مختلط libm را با استفاده از گونههای ممیز شناور complex float، complex double و complex long double اجرا میکنند. هر تابع 10000 بار در هر bogo-operation اجرا میشود.
- --ctrig-method function
- مشخص کردن
یک تابع تست
فشار
مثلثاتی.
بهطور
پیشفرض،
تمام توابع
به صورت
متوالی
اجرا
میشوند،
با این حال
در صورت
نیاز
میتوان
تنها یک
تابع را
برای
استفاده
مشخص کرد.
گزینههای
موجود به
شرح زیر
هستند:
روش توضیحات all پیمایش در تمامی توابع مثلثاتی مختلط زیر ccos کسینوس مختلط (دقت complex double) ccosf کسینوس مختلط (دقت complex float) ccosl کسینوس مختلط (دقت complex long double) csin سینوس مختلط (دقت complex double) csinf سینوس مختلط (دقت complex float) csinl سینوس مختلط (دقت complex long double) ctan تانژانت مختلط (دقت complex double) ctanf تانژانت مختلط (دقت complex float) ctanl تانژانت مختلط (دقت complex long double) --ctrig-ops N پس از N عملیات ساختگی (bogo-operations) متوقف شود. تستکننده Cyclic 5 --cyclic N آغاز N پردازه کارگر که زمانبندها را با خوابهای دورهای نانوثانیهای میسنجند. معمولاً برای دریافت آمار قابل اعتماد، تنها از ۱ پردازه کارگر برای این تستکننده استفاده میشود. بهطور پیشفرض این تستکننده ۱۰ هزار تأخیر نخست را اندازهگیری کرده و میانگین، مُد، کمینه، بیشینه و صدکهای مختلف تأخیر را تنها برای نخستین نمونه تستکننده cyclic محاسبه میکند. برای فعالسازی سیاستهای زمانبندی بلادرنگ (real time)، باید این تستکننده با قابلیت CAP_SYS_NICE اجرا شود. سیاست زمانبندی پیشفرض FIFO است. --cyclic-dist N محاسبه و چاپ توزیع تأخیر با بازه N نانوثانیه. این گزینه برای مشاهده نحوه خوشهبندی تأخیرها مفید است. --cyclic-method [ clock_ns | itimer | poll | posix_ns | pselect | usleep ] مشخص کردن روش دورهای (cyclic) مورد استفاده؛ پیشفرض clock_ns است. روشهای دورهای موجود عبارتند از: lB2 lB l lx. روش توضیحات clock_ns خواب به مدت زمان مشخصشده با استفاده از nanosleep با دقت بالای clock_nanosleep(2) و ساعت بلادرنگ CLOCK_REALTIME. itimer بیدار کردن یک پردازه متوقفشده با سیگنال itimer مربوط به CLOCK_REALTIME. poll تأخیر به مدت زمان مشخصشده با استفاده از یک حلقه تأخیر poll که تغییرات زمان را با استفاده از clock_gettime(2) روی ساعت CLOCK_REALTIME بررسی میکند. posix_ns خواب به مدت زمان مشخصشده با استفاده از nanosleep(2) استاندارد POSIX با دقت بالا. pselect خواب به مدت زمان مشخصشده با استفاده از pselect(2) همراه با توصیفکنندههای فایل تهی (null). usleep خواب با دقت نزدیکترین میکروثانیه با استفاده از usleep(2). - --cyclic-ops N
- پس از N بار خواب متوقف شود.
- --cyclic-policy [ batch | deadline | ext | fifo | idle| other | rr ]
- مشخص کردن سیاست زمانبندی مورد نظر؛ batch، deadline، ext، fifo (ورودی اول، خروجی اول)، idle، other یا rr (نوبتگردشی یا round-robin).
- --cyclic-prio P
- مشخص کردن اولویت زمانبندی P. بازه از ۱ (کمترین) تا ۱۰۰ (بیشترین).
- --cyclic-samples N
- اندازهگیری N نمونه. بازه از ۱ تا ۱۰۰۰۰۰۰۰۰ نمونه.
- --cyclic-sleep N
- به ازای هر چرخه آزمایش، خواب به مدت N نانوثانیه با استفاده از clock_nanosleep(2) با تایمر CLOCK_REALTIME. بازه از ۱ تا ۱۰۰۰۰۰۰۰۰۰ نانوثانیه.
- تستکننده Daemon
- --daemon N
- آغاز N پردازه کارگر که هر کدام دیمنی (daemon) ایجاد میکنند که بلافاصله پس از ایجاد دیمن دیگر خاتمه مییابد و این روند ادامه پیدا میکند. این کار عملاً جدول پردازهها را با پردازههای کمعمری که فاقد والد هستند و init منتظر آنها میماند به کار میگیرد. این امر به init فشار وارد میکند تا پردازههای فرزند مرده (child reaping) را به سرعت جمعآوری کند. پردازههای دیمن فراخوانیهای معمول برای تبدیل شدن به دیمنهای استاندارد UNIX را انجام میدهند، بنابراین این گزینه فشار سیستمی دیمن بسیار سنگینی را به صورت مصنوعی شبیهسازی میکند.
- --daemon-bloat N
- مشخص کردن اندازه تورم نگاشت حافظه دیمن به بایت. این گزینه مصرف حافظه توسط یک پردازه دیمن را شبیهسازی میکند؛ مقدار پیشفرض صفر (بدون نگاشت حافظه) و بازه آن از 4K تا 64MB است.
- --daemon-ops N
- توقف کارگران دیمن پس از ایجاد N دیمن.
- --daemon-wait
- منتظر ماندن برای پردازههای فرزند دیمن به جای واگذاری مدیریت انتظار به init. فعال کردن این گزینه به دلیل تأخیرهای انتظار همگام، نرخ انشعاب (fork) دیمن را کاهش میدهد.
- تستکننده پروتکل کنترل ازدحام دیتاگرام (DCCP)
- --dccp N
- آغاز N پردازه کارگر که دادهها را با استفاده از پروتکل کنترل ازدحام دیتاگرام (DCCP) (RFC4340) ارسال و دریافت میکنند. این کار شامل یک جفت پردازه کلاینت/سرور است که اتصالها، ارسالها، دریافتها و قطع اتصالهای سریعی را روی میزبان محلی انجام میدهند.
- --dccp-domain D
- مشخص کردن دامنه (domain) مورد استفاده؛ پیشفرض ipv4 است. در حال حاضر ipv4 و ipv6 پشتیبانی میشوند.
- --dccp-if NAME
- استفاده از رابط شبکه NAME. اگر رابط NAME وجود نداشته باشد، فعال (up) نباشد یا از دامنه پشتیبانی نکند، از رابط loopback (lo) به عنوان پیشفرض استفاده میشود.
- --dccp-msgs N
- ارسال N پیام به ازای هر تکرارِ اتصال، ارسال/دریافت و قطع اتصال. مقدار پیشفرض ۱۰۰۰۰ پیام است. اگر N بیش از حد کوچک باشد، نرخ به دلیل بار اضافی اتصال و قطع اتصال سوکتهای dccp کاهش مییابد.
- --dccp-port P
- آغاز DCCP روی درگاه P. برای N پردازه کارگر dccp، درگاههای P تا P + (N−1) استفاده میشوند (به منظور ماندن در بازه ۱۰۲۴ تا ۶۵۵۳۵ چرخش انجام میشود). درگاه پیشفرض ۴۹۱۵۲ است.
- --dccp-ops N
- توقف پردازههای کارگر dccp پس از N عملیات ساختگی (bogo operations).
- --dccp-opts [ send | sendmsg | sendmmsg ]
- بهطور پیشفرض، پیامها با استفاده از send(2) ارسال میشوند. این گزینه امکان مشخص کردن روش ارسال با استفاده از send(2)، sendmsg(2) یا sendmmsg(2) را فراهم میکند. توجه داشته باشید که sendmmsg تنها برای سیستمهای لینوکسی که از این فراخوانی سیستمی پشتیبانی میکنند در دسترس است.
- تستکننده Mutex با الگوریتم Dekker
- --dekker N
- آغاز N پردازه کارگر که انحصار متقابل (mutex exclusion) بین دو پردازه را با استفاده از حافظه اشتراکی و الگوریتم دکر (Dekker Algorithm) میسنجند. در صورت امکان، این تستکننده از سدهای حافظه (memory fencing) استفاده میکند و در صورت عدم دسترسی، به GCC __sync_synchronize متوسل میشود. این تستکنندهها شامل بررسیهای صحت ابتدایی برای mutex و انسجام حافظه (memory coherency) هستند.
- --dekker-ops N
- توقف کارگران dekker پس از N عملیات mutex.
- تستکننده Dentry
- -D N, --dentry N
- آغاز N پردازه کارگر که مدخلهای دایرکتوری (dentry) را ایجاد و حذف میکنند. این کار باید فعالیت فشردهای روی متادیتای سیستمفایل ایجاد کند. نامهای مدخل دایرکتوری با یک عدد با کدگذاری gray-code پسوندگذاری میشوند تا تلاش شود درهمسازی (hashing) فضای نام درهمآمیخته شود.
- --dentry-negative
- دسترسی به فایلهایی که وجود ندارند برای ایجاد dentryهای منفی در حافظه پنهان dentry cache.
- --dentry-ops N
- توقف کارگران کوبش dentry پس از N عملیات ساختگی dentry.
- --dentry-order [ forward | reverse | stride | random ]
- مشخص کردن ترتیب حذف پیوند (unlink) مدخلهای dentry؛ میتواند یکی از مقادیر forward، reverse، stride یا random باشد. بهطور پیشفرض، dentryها با ترتیبی تصادفی (random) حذف میشوند. ترتیب مستقیم (forward) آنها را از نخستین به آخرین، ترتیب معکوس (reverse) از آخرین به نخستین، ترتیب گامی (stride) با گام برداشتن در ترتیبی با الگوی شبهتصادفی و ترتیب تصادفی (random) به صورت تصادفی یکی از حالتهای forward، reverse یا stride را انتخاب میکند.
- --dentries N
- ایجاد N مدخل dentry به ازای هر حلقه کوبش dentry؛ پیشفرض ۲۰۴۸ است.
- تستکننده حافظه نهان dentry منفی
- --dentrycache N
- آغاز N پردازه کارگر که به فایلهای ناموجود دسترسی پیدا میکنند تا حافظه پنهان dentry cache را با dentryهای منفی پر کنند. با داشتن زمان کافی، حداکثر 2^64 نام dentry یکتا به ازای هر نمونه تستکننده میتواند ایجاد شود. برای مشاهده حافظه مصرفشده توسط dentry cache از گزینههای --buddystat یا --vmstat استفاده کنید.
- --dentrycache-method [ all | access | getxattr | lstat | open | readlink | stat | utime ]
- انتخاب روش فراخوانی سیستمی برای ایجاد dentryهای منفی؛ بهطور پیشفرض 'all' در میان همه روشها دور میزند..TP --dentrycache-ops N توقف پس از دسترسی به N فایل ناموجود.
- استرسور /dev
- --dev N
- شروع N کارگر که دستگاههای /dev را به کار گرفته و میآزمایند. هر کارگر ۵ رشتهٔ همروند را اجرا میکند که فراخوانهای open(2)، fstat(2)، lseek(2)، poll(2)، fcntl(2)، mmap(2)، munmap(2)، fsync(2) و close(2) را بر روی نخستین نمونه از هر دستگاه اجرا میکنند. توجه داشته باشید که دستگاههای نگهبان (watchdog) مورد آزمون قرار نمیگیرند.
- --dev-alldev
- آزمودن تمام دستگاهها؛ حالت پیشفرض تنها آزمودن نخستین نمونه از یک دستگاه است (برای مثال /dev/i2c-0)، این گزینه تمام دستگاهها را میآزماید (برای مثال /dev/i2c-*) و بنابراین برای پردازش تمام دستگاهها زمان بسیار بیشتری صرف خواهد شد.
- --dev-file filename
- مشخص کردن فایل دستگاه برای آزمودن، برای مثال /dev/null. بهطور پیشفرض این استرسور تمام فایلهای دستگاهی را که بتواند پیدا کند میآزماید، با این حال این گزینه امکان آزمودن یک فایل دستگاه منفرد را فراهم میکند.
- --dev-ops N
- توقف کارگرهای dev پس از N عملیات ساختگی (bogo op) آزمون دستگاه.
- استرسور /dev/shm
- --dev-shm N
- شروع N کارگر که فایلهای بزرگی را با fallocate در /dev/shm تخصیص داده و سپس آنها را با mmap به حافظه نگاشت میکنند و به تمام صفحات سرکشی میکنند (touch میکنند). این کار جابهجایی صفحات به/از حافظهٔ نهان میانگیر (buffer cache) را میآزماید. فقط در لینوکس.
- --dev-shm-ops N
- توقف پس از N عملیات ساختگی (bogo op) تخصیص و نگاشت mmap در /dev/shm.
- استرسور عملیات ممیز شناور اعشاری
- --dfp N
- شروع N کارگر که عملیات جمع، ضرب و تقسیم را روی طیفی از انواع ممیز شناور اعشاری اجرا میکنند. برای هر نوع، ۸ مقدار ممیز شناور در یک حلقه ۶۵۵۳۶ بار بهازای هر bogo op مورد پردازش قرار میگیرند.
- --dfp-method method
- انتخاب روش
ممیز شناور
اعشاری
مورد
استفاده؛
روشهای
موجود
عبارتند از:
روش توضیحات all تکرار روی تمام روشهای ممیز شناور زیر: df32add جمع ممیز شناور اعشاری ۳۲ بیتی (_Decimal32) df64add جمع ممیز شناور اعشاری ۶۴ بیتی (_Decimal64) df128add جمع ممیز شناور اعشاری ۱۲۸ بیتی (_Decimal128) df32sub تفریق ممیز شناور اعشاری ۳۲ بیتی (_Decimal32) df64sub تفریق ممیز شناور اعشاری ۶۴ بیتی (_Decimal64) df128sub تفریق ممیز شناور اعشاری ۱۲۸ بیتی (_Decimal128) df32mul ضرب ممیز شناور اعشاری ۳۲ بیتی (_Decimal32) df64mul ضرب ممیز شناور اعشاری ۶۴ بیتی (_Decimal64) df128mul ضرب ممیز شناور اعشاری ۱۲۸ بیتی (_Decimal128) df32div تقسیم ممیز شناور اعشاری ۳۲ بیتی (_Decimal32) df64div تقسیم ممیز شناور اعشاری ۶۴ بیتی (_Decimal64) df128div تقسیم ممیز شناور اعشاری ۱۲۸ بیتی (_Decimal128)
توجه داشته باشید که برخی از این روشهای ممیز شناور اعشاری ممکن است در برخی سیستمها در دسترس نباشند.
- --dfp-ops N
- توقف پس از N عملیات ساختگی (bogo op) ممیز شناور اعشاری.
- استرسور دایرکتوریها
- --dir N
- شروع N کارگر که با استفاده از mkdir(2)، rename(2) و rmdir(2) دایرکتوریها را ایجاد کرده، نام آنها را تغییر داده و حذف میکنند.
- --dir-dirs N
- اجرای آزمون دایرکتوری بر روی N دایرکتوری. مقدار پیشفرض ۸۱۹۲ دایرکتوری است؛ این گزینه امکان استفاده از ۶۴ تا ۶۵۵۳۶ دایرکتوری را به جای آن فراهم میکند.
- --dir-ops N
- توقف کارگرهای کوبش دایرکتوری (directory thrash) پس از N عملیات ساختگی (bogo op) دایرکتوری.
- استرسور دایرکتوریهای عمیق
- --dirdeep N
- شروع N کارگر که یک درخت اول-عمق (depth-first) از دایرکتوریها را تا حداکثر عمق محدودشده توسط PATH_MAX یا ENAMETOOLONG (هر کدام زودتر رخ دهد) ایجاد میکنند. بهطور پیشفرض، هر سطح از درخت شامل یک دایرکتوری است، اما این مقدار را میتوان با استفاده از گزینهٔ --dirdeep-dir به حداکثر ۱۰ زیردرخت افزایش داد. برای اعمال فشار بر ایجاد اینود (inode)، در هر سطح یک پیوند نمادین (symlink) و یک پیوند سخت (hardlink) به فایلی در ریشهٔ درخت ایجاد میشود.
- --dirdeep-bytes N
- اندازهٔ فایل تخصیصیافته، پیشفرض 0 است. میتوان اندازه را بهصورت درصدی از فضای آزاد سیستمفایل یا در واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با استفاده از پسوندهای b، k، m یا g مشخص کرد. در ترکیب با گزینهٔ --dirdeep-files استفاده میشود.
- --dirdeep-dirs N
- ایجاد N دایرکتوری در هر سطح از درخت. مقدار پیشفرض تنها ۱ است اما میتواند تا حداکثر ۳۶ در هر سطح افزایش یابد.
- --dirdeep-files N
- ایجاد N فایل در هر سطح از درخت. مقدار پیشفرض 0 است با اندازهٔ فایلی که با گزینهٔ --dirdeep-bytes مشخص میشود.
- --dirdeep-inodes N
- مصرف حداکثر N اینود بهازای هر استرسور dirdeep در هنگام ایجاد دایرکتوریها و پیوندها. مقدار N میتواند تعداد اینودها یا درصدی از کل اینودهای آزاد موجود در سیستمفایل مورد استفاده باشد.
- --dirdeep-ops N
- توقف کارگرهای عمق دایرکتوری پس از N عملیات ساختگی (bogo op) دایرکتوری.
- استرسور ایجاد حداکثر فایل در دایرکتوری
- --dirmany N
- شروع N استرسور که تا جای ممکن فایلهای زیادی را در یک دایرکتوری ایجاد کرده و سپس آنها را حذف میکنند. مرحلهٔ ایجاد فایل زمانی متوقف میشود که خطایی رخ دهد (برای مثال، اتمام اینودها، تعداد بیش از حد فایلها، رسیدن به سهمیه یا quota و غیره) و سپس فایلها حذف میشوند. این چرخه تا زمانی که زمان اجرا به پایان برسد یا معیار bogo-ops شمارش ایجاد فایل برآورده شود ادامه مییابد. این استرسور در مقایسه با استرسور dentry، آزمونی بسیار سریعتر و سبکتر برای دایرکتوری است.
- --dirmany-bytes N
- اندازهٔ فایل تخصیصیافته، پیشفرض 0 است. میتوان اندازه را بهصورت درصدی از فضای آزاد سیستمفایل یا در واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با استفاده از پسوندهای b، k، m یا g مشخص کرد.
- --dirmany-ops N
- توقف استرسورهای dirmany پس از ایجاد N فایل خالی.
- استرسور dnotify
- --dnotify N
- شروع N کارگر که فعالیتهای سیستمفایل مانند ایجاد/حذف فایلها/دایرکتوریها، تغییر نام فایلها و غیره را برای اعمال فشار و آزمودن رویدادهای گوناگون dnotify انجام میدهند (فقط در لینوکس)..TP --dnotify-ops N متوقف کردن کارگران سنجش فشار dnotify پس از N عملیات bogo dnotify.
- عامل فشار Dup
- --dup N
- آغاز N کارگر که عملیات dup(2) و سپس close(2) را روی /dev/zero انجام میدهند. بیشینه باز کردن همزمان توسط سیستم تعریف میشود، بنابراین آزمایش تا رسیدن به این بیشینه یا 65536 توصیفگر فایل باز، هر کدام که زودتر رخ دهد، اجرا خواهد شد.
- --dup-ops N
- متوقف کردن کارگران سنجش فشار dup پس از N عملیات باز کردن bogo.
- عامل فشار بارگذاری کتابخانههای پویا
- --dynlib N
- آغاز N کارگر که کتابخانههای اشتراکی گوناگون را بهصورت پویا بارگذاری و تخلیه میکنند. این کار نگاشت حافظه، بارگذاری پویای کد و جستجوی نمادها را به کار میگیرد. برای جزئیات بیشتر درباره این سازوکار dlopen(3) را ببینید.
- --dynlib-ops N
- متوقف کردن کارگران پس از N چرخه bogo بارگذاری/تخلیه.
- عامل فشار کدهای عملیاتی ساده پردازنده
- --easy-opcode N
- آغاز N کارگر که 64 صفحه پیوسته از کدهای عملیاتی (opcode) ساده و تصادفی پردازنده را به کار میگیرند. برای نمونه، در پردازندههای x86 این کار صرفاً کدهای عملیاتی تکبایتی نظیر nop و کدهای عملیاتی تنظیمکننده/پاککننده پرچمهای پردازنده را به کار میگیرد تا روی رمزگشای فرانتاند و حافظه نهان دستورالعمل فشار وارد کند. برای پردازندههای RISC کدهای عملیاتی نظیر nop و جابهجاییهای ساده ثبات به/از همان ثباتها استفاده میشوند. شبیهسازهای هوشمند ممکن است برخی از این کدهای عملیاتی را حذف کنند (مانند move r0,r0) و از این رو ممکن است نرخ کدهای عملیاتی بهطور کاذب بالا باشد.
- --easy-opcode-ops N
- متوقف کردن پس از N بار اجرای 64 صفحه پیوسته از کدهای عملیاتی.
- عامل فشار کتابخانه ماتریسی Eigen در ++C
- --eigen N
- آغاز N کارگر که کتابخانه ماتریسی Eigen در ++C را برای عملیات جمع، ضرب، دترمینان، معکوس و ترانهاده ماتریس دوبعدی روی ماتریسهای long double، double و float به کار میگیرند. این گزینه در حال حاضر تنها برای ساختهای gcc/g++ در دسترس است.
- --eigen-method method
- انتخاب روش
ممیز شناور
جهت
استفاده؛
روشهای در
دسترس
عبارتند از:
روش توضیحات all تکرار روی تمامی عملیات ماتریس دوبعدی Eigen add-longdouble جمع دو ماتریس از مقادیر ممیز شناور long double add-double جمع دو ماتریس از مقادیر ممیز شناور double add-float جمع دو ماتریس از مقادیر ممیز شناور float determinant-longdouble دترمینان ماتریس با مقادیر ممیز شناور long double determinant-double دترمینان ماتریس با مقادیر ممیز شناور double determinant-float دترمینان ماتریس با مقادیر ممیز شناور float inverse-longdouble معکوس ماتریس با مقادیر ممیز شناور long double inverse-double معکوس ماتریس با مقادیر ممیز شناور double inverse-float معکوس ماتریس با مقادیر ممیز شناور float multiply-longdouble ضرب دو ماتریس از مقادیر ممیز شناور long double multiply-double ضرب دو ماتریس از مقادیر ممیز شناور double multiply-float ضرب دو ماتریس از مقادیر ممیز شناور float transpose-longdouble ترانهاده ماتریس با مقادیر ممیز شناور long double transpose-double ترانهاده ماتریس با مقادیر ممیز شناور double transpose-float ترانهاده ماتریس با مقادیر ممیز شناور float - --eigen-ops N
- متوقف کردن پس از N محاسبه ماتریسی Eigen.
- --eigen-size N
- مشخص کردن اندازه ماتریس دوبعدی N × N. مقدار پیشفرض ماتریس 32 × 32 است.
- عامل فشار متغیرهای EFI
- --efivar N
- آغاز N کارگر که با خواندن متغیرهای EFI، رابطهای /sys/firmware/efi/efivars و /sys/firmware/efi/vars لینوکس را به کار میگیرند. این یک آزمایش فشار مختص لینوکس برای پلتفرمهایی است که از رابط متغیرهای EFI پشتیبانی میکنند و ممکن است به قابلیت CAP_SYS_ADMIN نیاز داشته باشد.
- --efivar-ops N
- متوقف کردن عوامل فشار efivar پس از N عملیات خواندن متغیر EFI.
- عامل فشار فراخوانهای سیستمی ناموجود (ENOSYS)
- --enosys N
- آغاز N کارگر که شماره فراخوانهای سیستمی غیرفعال را به کار میگیرند. این گزینه طیف گستردهای از شماره فراخوانهای سیستمی را فراخوانی میکند تا ببیند آیا میتواند سیستمی را که در آن این فراخوانها به درستی متصل نشدهاند مختل کند یا خیر. همچنین فراخوانهای سیستمی موجود (آنهایی که ENOSYS را برنمیگردانند) را ردیابی میکند تا بتواند صرفاً بر یافتن و به کار گرفتن فراخوانهای سیستمی غیرفعال تمرکز کند. این عامل فشار، فراخوانهای سیستمی از 0 تا __NR_syscalls + 1024، فراخوانهای سیستمی تصادفی محدودشده در بازههای 0 تا 2↑8، 2↑16، 2↑24، 2↑32، 2↑40، 2↑48، 2↑56 و 2↑64 بیتی، شمارههای بالای فراخوان سیستمی و الگوهای بیتی گوناگون دیگر را برای دستیابی به پوشش گسترده به کار میگیرد. برای تمیز نگه داشتن محیط، هر فراخوان سیستمیِ تحت آزمایش در یک فرایند فرزند با قابلیتهای کاهشیافته اجرا میشود.
- --enosys-ops N
- متوقف کردن پس از N تلاش فراخوان سیستمی bogo enosys.
- عامل فشار متغیرهای محیطی
- --env N
- آغاز N کارگر که متغیرهای محیطی پرتعداد و بزرگی ایجاد میکنند تا تلاش کنند با استفاده از setenv(3) شرایط کمبود حافظه را برانگیزند. اگر ENOMEM رخ دهد، محیط تخلیه شده و تلاش مجدد دیگری برای پر کردن حافظه صورت میگیرد. فرایند در صورتی که توسط کشنده کمبود حافظه (OOM killer) متوقف شود، مجدداً راهاندازی میگردد.
- --env-ops N
- متوقف کردن پس از N تلاش bogo برای setenv/unsetenv.
- عامل فشار Epoll
- --epoll N
- آغاز N کارگر که فعالیتهای گوناگون سنجش فشار مربوط به سوکت را با استفاده از epoll_wait(2) برای نظارت و مدیریت اتصالات جدید انجام میدهند. این شامل فرایندهای کارخواه/کارگزار است که اتصال سریع، ارسال/دریافت و قطع اتصال را روی میزبان محلی انجام میدهند. استفاده از epoll امکان مدیریت کارآمد شمار بالایی از اتصالات را فراهم میسازد، با این حال ممکن است به پر شدن جدول اتصالات و مسدود شدن اتصالات بیشتر سوکت بینجامد و در نتیجه بر آمار bogo op در epoll تأثیر بگذارد. برای دامنههای ipv4 و ipv6، چندین سرور روی چندین درگاه ایجاد میشوند. عامل فشار epoll تنها مختص لینوکس است.
- --epoll-domain D
- مشخص کردن دامنه مورد استفاده؛ پیشفرض unix (معروف به local) است. در حال حاضر از ipv4، ipv6 و unix پشتیبانی میشود..TP --epoll-ops N متوقف کردن کارگران epoll پس از N عملیات bogo.
- --epoll-port P
- شروع از درگاه سوکت P. برای N فرایند کارگر epoll، درگاههای P تا (P × 4) − 1 برای دامنههای ipv4 و ipv6 و درگاههای P تا P − 1 برای دامنهٔ unix استفاده میشوند. درگاهها طوری چرخش مییابند (wrap میشوند) که در محدودهٔ ۱۰۲۴ تا ۶۵۵۳۵ باقی بمانند. درگاه پیشفرض، درگاه ۴۹۴۰۸ است.
- --epoll-sockets N
- تعیین حداکثر تعداد سوکتهای باز همروند مجاز در سرور. تنظیم یک مقدار بالا بر مصرف حافظه تأثیر میگذارد و ممکن است شرایط کمبود حافظه (out of memory) را ایجاد کند.
- عامل فشار توصیفکنندههای فایل متعدد epoll
- --epollmany N
- شروع N کارگر که توصیفکنندههای فایل متعددی را با استفاده از epoll_create1(2) و epoll_ctl(2) تحت فشار قرار میدهند. به هر توصیفکننده فایل epoll جدید، حداکثر ۱۶ توصیفکننده فایل pipe و توصیفکنندههای فایل epoll که از قبل ایجاد شدهاند اضافه میشود، که رویدادهای epoll تودرتو ایجاد میکند. این کار رقابت قفل درونی هسته برای epoll را به چالش میکشد.
- --epollmany-delete
- بهطور پیشفرض، توصیفکنندههای فایل اضافهشده به یک توصیفکننده فایل epoll، هنگام بسته شدن توصیفکننده فایل بهصورت خودکار حذف میشوند. این گزینه یک فراخوانی صریح epoll_ctl(2) با EPOLL_CTL_DEL را روی هر توصیفکننده فایل انجام میدهد.
- --epollmany-fds
- تعیین تعداد توصیفکنندههای فایلی که از طریق epoll_create1(2) ایجاد میشوند. مقدار پیشفرض ۵۱۲ است، با محدودهای از ۱ تا ۱۰۰۰۰۰۰.
- --epollmany-ops N
- توقف پس از N عملیات epoll_create1(2).
- شنودگر بستههای اترنت
- --eth-sniff N
- شروع N عامل فشار که بستههای ethernet را شنود (sniff) میکنند. گزینهٔ --metrics حجم دادهها را بر حسب کیلوبایت برای پروتکلهای پرکاربرد IPv4 و IPv6 نشان خواهد داد. مختص لینوکس بوده و به قابلیت CAP_NET_RAW نیاز دارد.
- --eth-sniff-ops N
- توقف پس از N بار شنود bogo بستههای ethernet.
- عامل فشار توصیفکننده فایل رویداد (eventfd)
- --eventfd N
- شروع N فرایند کارگر والد و فرزند که پیامهای رویداد ۸ بایتی را از طریق سازوکار eventfd میان یکدیگر میخوانند و مینویسند (فقط لینوکس).
- --eventfd-nonblock
- فعال کردن EFD_NONBLOCK برای ممکن ساختن حالت غیرمسدودکننده روی توصیفکننده فایل رویداد. این امر باعث میشود خواندنها و نوشتنها بهجای مسدود شدن، با خطای EAGAIN بازگردند و در نتیجه نرخ بالایی از I/O مبتنی بر سنجش (polling) ایجاد شود.
- --eventfd-ops N
- متوقف کردن کارگران eventfd پس از N عملیات bogo.
- عامل فشار فرایندهای Exec
- --exec N
- شروع N کارگر که بهطور مداوم فرزندانی را fork میکنند که stress-ng را exec کرده و سپس تقریباً بلافاصله خارج میشوند. اگر سیستمی از pthread پشتیبانی کند، ۱ مورد از هر ۴ مورد exec از داخل یک pthread خواهد بود تا اجرای exec از درون بافتار (context) یک pthread را بیازماید.
- --exec-fork-method [ clone | fork | rfork | spawn | vfork ]
- انتخاب روش ایجاد فرایند با استفاده از clone(2)، fork(2)، BSD rfork(2)، posix_spawn(3) یا vfork(2). توجه داشته باشید که به دلیل محدودیتهای پشتهٔ مشترک میان فرایند والد و فرزند، vfork برنامهها را تنها با استفاده از execve اجرا (exec) میکند.
- --exec-max P
- ایجاد P فرایند فرزند در هر تکرار که stress-ng را exec کرده و سپس در انتظار خروج آنها میمانند. مقدار پیشفرض ۴۰۹۶ است؛ مقادیر بالاتر ممکن است فرایندهای زامبی (zombie) موقت زیادی ایجاد کنند که در انتظار درو شدن (reaped) هستند. با مقادیر بالا برای --exec-max و --exec میتوان بهطور بالقوه جدول فرایندها را پر کرد.
- --exec-method [ all | execve | execveat | fexecve ]
- انتخاب فراخوانی سیستمی exec مورد استفاده؛ مقدار all انتخابی تصادفی میان execve(2)، execveat(2) و fexecve(3) انجام میدهد، مقدار execve از execve(2) استفاده میکند، مقدار execveat از execveat(2) (در صورت موجود بودن) استفاده خواهد کرد و مقدار fexecve از fexecve(3) (در صورت موجود بودن) بهره میبرد.
- --exec-no-pthread
- عدم استفاده از pthread_create(3).
- --exec-ops N
- متوقف کردن کارگران فشار exec پس از N عملیات bogo.
- عامل فشار خروج گروههای pthread
- --exit-group N
- شروع N کارگر که ۱۶ تردِ pthread ایجاد کرده و pthreadها و فرایند فرزند کنترلکننده را با استفاده از exit_group(2) خاتمه میدهند (عامل فشار فقط برای لینوکس).
- --exit-group-ops N
- توقف پس از N تکرار از حلقههای ایجاد و حذف pthread.
- توابع نمایی
- --expmath N
- شروع N کارگر که توابع نمایی گوناگون را با مقادیر ورودی ۰ تا ۱ در گامهای ۰٫۰۰۱ میآزمایند؛ نتایج پس از هر دور از ۱۰۰۰۰ محاسبه بررسی صحت (sanity check) میشوند تا اطمینان حاصل شود هیچ تغییری رخ نمیدهد.
- --expmath-ops N
- توقف پس از N حلقه از عملیات bogo نمایی.
- --expmath-method method
- مشخص کردن
یک تابع
نمایی برای
آزمودن.
روشهای
فشار نمایی
موجود
بهصورت
زیر توصیف
شدهاند:
روش توضیحات all پیمایش روی تمام روشهای توابع نمایی زیر cexp نمایی طبیعی مختلط double cexpf نمایی طبیعی مختلط float cexpl نمایی طبیعی مختلط long double exp نمایی طبیعی double expf نمایی طبیعی float expl نمایی طبیعی long double exp10 نمایی در مبنای ۱۰ با دقت double exp10f نمایی در مبنای ۱۰ با دقت float exp10l نمایی در مبنای ۱۰ با دقت long double exp2 نمایی در مبنای ۲ با دقت double exp2f نمایی در مبنای ۲ با دقت float exp2l نمایی در مبنای ۲ با دقت long double
- عامل فشار فاکتورگیری اعداد صحیح بزرگ
- --factor N
- شروع N کارگر که اعداد صحیح بزرگ را با استفاده از کتابخانه محاسبات چنددقتی گنو (GNU Multiple Precision Arithmetic Library) تجزیه (فاکتورگیری) میکنند. مقادیر تصادفی برای فاکتورگیری طوری محاسبه میشوند که برای N > 100، یک مقدار با N رقم، از حدود 0.4 × N عامل تصادفی تشکیل شده باشد. تعداد ارقام پیشفرض در مقداری که باید تجزیه شود ۱۰ است.
- --factor-digits N
- انتخاب تعداد ارقام در مقادیر فاکتورگیری. محدوده از ۸ تا ۱۰۰۰۰۰۰۰۰ رقم، مقدار پیشفرض ۱۰ است..TP --factor-ops N پس از N تجزیه به عوامل متوقف میشود.
- تنشزای تخصیص فضای فایل (fallocate)
- -F N, --fallocate N
- شروع N کارگر که بهطور مداوم با استفاده از fallocate (پیشتخصیص فضای فایل) و ftruncate (کوتاهسازی فایل) روی فایلهای موقت کار میکنند. اگر اندازه فایل بزرگتر از فضای آزاد باشد، fallocate خطای ENOSPC تولید خواهد کرد که توسط این تنشزا نادیده گرفته میشود.
- --fallocate-bytes N
- اندازه فایل تخصیصیافته؛ مقدار پیشفرض 1 GB است. میتوان اندازه را به صورت درصدی از فضای آزاد سیستمفایل یا در واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با استفاده از پسوندهای b، k، m یا g مشخص کرد.
- --fallocate-ops N
- توقف کارگران تنشزای fallocate پس از N عملیات ساختگی (bogo) fallocate.
- تنشزای اعلانهای سیستمفایل (fanotify)
- --fanotify N
- شروع N کارگر برای انجام فعالیتهای سیستمفایل مانند ایجاد، باز کردن، نوشتن، خواندن و حذف پیوند (unlink) فایلها به منظور آزمودن رابط پایش رویداد fanotify (فقط لینوکس). هر تنشزا یک فرآیند فرزند برای تولید رویدادهای فایل و یک فرآیند والد برای خواندن رویدادهای فایل با استفاده از fanotify اجرا میکند. این دستور باید با قابلیت CAP_SYS_ADMIN اجرا شود.
- --fanotify-ops N
- توقف کارگران تنشزای fanotify پس از N رویداد ساختگی fanotify.
- تنشزای حافظه نهان دستورالعملهای انشعاب پردازنده
- --far-branch N
- شروع N کارگر که فراخوانی دهها هزار تابع را که نسبتاً از فراخواننده دور هستند میآزمایند. همه توابع دستورالعملهای تکعملیاتی (1 op) هستند که به فراخواننده بازمیگردند. توابع در صفحاتی قرار میگیرند که با گستره وسیعی از آدرسهای مجازی ثابت در حافظه نگاشت (memory-mapped) شدهاند. فراخوانیهای توابع از قبل بر زده میشوند تا ترکیبی تصادفی از آدرسها برای فراخوانی ایجاد شود. این کار حافظه نهان دستورالعمل (instruction cache) و هرگونه TLB دستورالعمل را تحت تنش قرار میدهد.
- --far-branch-flush
- تلاش برای پاکسازی (flush) دورهای حافظه نهان دستورالعمل به منظور ایجاد خطاهای حافظه نهان (cache misses).
- --far-branch-ops N
- پس از N عملیات ساختگی (bogo-op) انشعاب دور متوقف میشود. یک چرخه کامل از فراخوانی تمام دهها هزار تابع، معادل یک عملیات ساختگی است.
- --far-branch-pageout
- در صورت امکان، صفحاتی که حاوی توابع انشعاب دور هستند و بهطور تصادفی انتخاب شدهاند را به بیرون حافظه منتقل (pageout) کرده و به حالت soft-offline درمیآورد. این کار با استفاده از MADV_PAGEOUT و MADV_SOFT_OFFLINE در madvise(2) انجام میشود.
- --far-branch-pages N
- مشخص کردن تعداد صفحات تخصیصیافته برای توابع انشعاب دور. تعداد توابع در هر صفحه به معماری پردازنده بستگی دارد؛ به عنوان مثال، معماری x86 دارای ۴۰۹۶ دستورالعمل بازگشت ۱ بایتی به ازای هر صفحه ۴ کیلوبایتی خواهد بود، در حالی که SPARC64 تنها ۵۱۲ دستورالعمل بازگشت ۸ بایتی به ازای هر صفحه ۴ کیلوبایتی دارد.
- تنشزای خطای صفحه (Page fault)
- --fault N
- شروع N کارگر که خطاهای جزئی (minor) و عمده (major) صفحه تولید میکنند.
- --fault-ops N
- توقف کارگران خطای صفحه پس از N عملیات ساختگی خطای صفحه.
- تنشزای fcntl
- --fcntl N
- شروع N کارگر که فراخوانیهای fcntl(2) را با دستورات مختلف اجرا میکنند. دستورات آزمودهشده (در صورت در دسترس بودن) عبارتند از: F_CREATED_QUERY، F_DUPFD، F_DUPFD_CLOEXEC، F_GETFD، F_SETFD، F_GETFL، F_SETFL، F_GETOWN، F_SETOWN، F_GETOWN_EX، F_SETOWN_EX، F_GETSIG، F_SETSIG، F_GETOWNER_UIDS، F_GETLEASE، F_GETLK، F_SETLK، F_SETLKW، F_UNLCK، F_OFD_GETLK، F_OFD_SETLK، F_OFD_SETLKW، F_GET_FILE_RW_HINT، F_SET_FILE_RW_HINT، F_GET_RW_HINT و F_SET_RW_HINT.
- --fcntl-ops N
- توقف کارگران fcntl پس از N عملیات ساختگی fcntl.
- تنشزای سوءاستفاده از توصیفگر فایل
- --fd-abuse N
- شروع N کارگر که توصیفگرهای فایل را با روشهای گوناگون (file، dup، socket، pipe، timerfd، pidfd، userfaultfd و غیره) باز کرده و عملیات معتبر و نامعتبر فایل را روی این توصیفگرها انجام میدهند. این کار ترکیبی از عملیات موفق و ناموفق فایل را روی طیف گستردهای از انواع توصیفگرهای فایل میآزماید.
- --fd-abuse-ops N
- پس از N عملیات ساختگی سوءاستفاده از عملیات فایل متوقف میشود.
- تنشزای تکثیر و بستن توصیفگر فایل
- --fd-fork N
- شروع N کارگر که فایلها را با استفاده از dup(2) روی یک فایل (بهطور پیشفرض /dev/zero) باز میکنند و سپس آنها را با استفاده از چندین فرآیند فرزند منشعبشده (fork) کپی کرده و با دستورات سریع clone_range(2) یا close(2) یا با خاتمه مستقیم فرآیندها با استفاده از _exit(2) میبندند. به ازای هر عملیات ساختگی، این تنشزا تلاش میکند تا سقف مجاز، ۱۰,۰۰۰ توصیفگر فایل دیگر را dup(2) کند، ۸ فرآیند فرزند منشعب سازد و سپس کپیهای توصیفگرهای فایل مربوط به خود را ببندند.
- --fd-fork-fds N
- مشخص کردن حداکثر تعداد توصیفگرهای فایلی که باید باز شوند. مقدار پیشفرض ۲ میلیون است، با محدودهای از ۱۰۰۰ تا ۱۶ میلیون. تعداد واقعی استفادهشده ممکن است بسته به محدودیتهای تعیینشده در سیستم برای تعداد فایلهای باز به ازای هر فرآیند کمتر باشد.
- --fd-fork-file [ null | random | stdin | stdout | zero ]
- مشخص کردن فایل برای اعمال dup: مقدار null برای /dev/null، مقدار random برای /dev/random، مقدار stdin برای ورودی استاندارد، مقدار stdout برای خروجی استاندارد، zero برای /dev/zero. مقدار پیشفرض /dev/zero است.
- --fd-fork-ops N
- پس از N دور از ۱۰۰۰۰ بار تکرار dup، انشعاب فرآیند/بستن/خروج و انتظار برای فرآیندهای فرزند متوقف میشود. توجه داشته باشید که نرخ متریک bogo-ops به مرور زمان کاهش خواهد یافت، زیرا این تنشزا تعداد فایلهای باز را در هر حلقه ساختگی افزایش میدهد و این امر زمان اجرای fork و close را بالا میبرد.
- تنشزای رقابت در توصیفگر فایل (fd-race)
- --fd-race N
- شروع N کارگر که تلاش میکنند شرایط رقابتی (race conditions) را روی توصیفگرهای فایل باز تحمیل کنند. توصیفگرهای فایل باز از طریق یک سوکت از سرور به کلاینت منتقل میشوند. در فواصل زمانی دورهای، دستههایی از توصیفگرهای فایل با ایجاد چندین pthread تکثیر شده و سپس بهطور دستهجمعی با خاتمه همگامشده pthread بسته میشوند. همچنین pthreadهای همروند دیگر، فراخوانیهای سیستمی مختلف مبتنی بر فایل را روی توصیفگرهای فایلی که در حال ایجاد هستند اجرا میکنند. بهطور پیشفرض از یک فایل منفرد برای فراخوانیهای open استفاده میشود، با این حال با گزینههای مناسب fd-race میتوان فایلهای /dev و /proc را نیز آزمود.
- --fd-race-dev
- آزمودن فایلهای /dev برای بررسی شرایط رقابتی.
- --fd-race-race-ops N
- پس از آزمودن N توصیفگر فایل متوقف میشود.
- --fd-race-proc
- آزمودن فایلهای /proc برای بررسی شرایط رقابتی.
- تنشزای جستجوی فیبوناچی
- --fibsearch N
- شروع N کارگر که یک آرایه مرتبشده از اعداد صحیح ۳۲ بیتی را با استفاده از جستجوی فیبوناچی جستجو میکنند. جستجوی فیبوناچی مشابه bsearch است، با این تفاوت که از دنباله فیبوناچی برای تقسیم محدوده جستجو به فضاهایی با اندازههای نابرابر استفاده میکند. این روش از عملگر پرهزینه تقسیم موجود در bsearch اجتناب میکند و در هر مرحله جستجو عناصر نزدیکتر را بررسی میکند، در نتیجه برتری محاسباتی و عملکردی اندکی در حافظه نهان نسبت به bsearch دارد. بهطور پیشفرض، ۶۵۵۳۶ عنصر در آرایه وجود دارد. این روش برای آزمودن دسترسی تصادفی به حافظه و حافظه نهان پردازنده سودمند است.
- --fibsearch-ops N
- توقف کارگر fibsearch پس از تکمیل N عملیات ساختگی جستجوی فیبوناچی.
- --fibsearch-size N
- مشخص کردن اندازه (تعداد اعداد صحیح ۳۲ بیتی) در آرایه برای جستجوی fibsearch. این اندازه میتواند از 1 K تا 4 M باشد. فشارآور گستره فایل (fiemap)
- --fiemap N
- اجرای N کارگر که هرکدام فایلی با چندین گستره (extent) با تغییرات تصادفی ایجاد میکنند و به ازای هر کارگر ۴ فرایند فرزند دارند که اطلاعات گستره را با استفاده از ioctl(2) نوع FS_IOC_FIEMAP جمعآوری میکنند.
- --fiemap-bytes N
- مشخص کردن اندازه فایل تحت پوشش fiemap برحسب بایت. میتوان اندازه را به صورت درصدی از فضای آزاد سیستمفایل یا در واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با پسوندهای b، k، m یا g تعیین کرد. فایلهای بزرگتر حاوی گسترههای بیشتری خواهند بود و هنگام جمعآوری اطلاعات گستره فشار بیشتری وارد میکنند.
- --fiemap-ops N
- توقف پس از N عملیات صوری (bogo operations) fiemap.
- فشارآور لوله نامگذاریشده FIFO
- --fifo N
- اجرای N کارگر که یک لوله نامگذاریشده (named pipe) را با انتقال اعداد صحیح ۶۴ بیتی به کار میگیرند.
- --fifo-data-size N
- تنظیم اندازه بایتی خواندن/نوشتنهای fifo؛ پیشفرض ۸ و محدوده آن ۸..۴۰۹۶ است.
- --fifo-ops N
- توقف کارگران fifo پس از N عملیات صوری نوشتن در لوله.
- --fifo-readers N
- به ازای هر کارگر، N کارگر خواننده fifo ایجاد میکند که لوله نامگذاریشده را با استفاده از خواندنهای مسدودکننده ساده میخوانند. پیشفرض ۴ و محدوده آن ۱..۶۴ است.
- فشارآور کنترل ورودی/خروجی فایل (ioctl)
- --file-ioctl N
- اجرای N کارگر که فراخوانهای مختلف ioctl(2) ویژه فایل را به کار میگیرند. در صورت تعریف شدن، این گزینه تلاش میکند از ioctlهای FIONBIO، FIOQSIZE، FIGETBSZ، FIOCLEX، FIONCLEX، FIONBIO، FIOASYNC، FIOQSIZE، FIFREEZE، FITHAW، FICLONE، FICLONERANGE، FIONREAD، FIONWRITE و FS_IOC_RESVSP استفاده کند.
- --file-ioctl-ops N
- توقف کارگران file-ioctl پس از N عملیات صوری ioctl فایل.
- فشارآور حفره و گسترههای فایل
- --filehole N
- اجرای N کارگر که داده مینویسند، حفرههای فایل ایجاد میکنند و فایلی ۱۶ مگابایتی را با صفر پر میکنند. در صورت در دسترس بودن، از FALLOC_FL_PUNCH_HOLE و FALLOC_FL_ZERO_RANGE در fallocate(2) به همراه نوشتن داده برای ایجاد حفرهها و همچنین نوشتن صفر و نوشتن دادههای تصادفی در فایل استفاده میشود. دادهها و حفرهها ابتدا به ترتیب معکوس، سپس تصادفی و پس از آن مستقیم در فایل قرار میگیرند تا چندین گستره فایل ایجاد شود. پس از هر ۱۰۲۴ نوشتن، دادهها با fsync به صورت دورهای و اجباری تخلیه میشوند. اندازههای حفرهها و دادهها بر اساس اندازه صفحه (page size) است.
- --filehole-bytes N
- تنظیم حداکثر اندازه هر فایل برای هر فرایند کارگر filehole؛ پیشفرض ۱۶ مگابایت است. میتوان اندازه را به صورت درصدی از فضای آزاد سیستمفایل یا در واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با پسوندهای b، k، m یا g مشخص کرد.
- --filehole-defrag
- انجام یکپارچهسازی سادهلوحانه (naïve) فایل با رونوشت گرفتن از نسخهای جدید از فایل برای حذف چندین گستره و استفاده از نسخه رونوشت.
- --filehole-ops N
- توقف کارگران filehole پس از N دور عملیات صوری write/fallocate.
- فشارآور نام فایل
- --filename N
- اجرای N کارگر که ایجاد فایل را با استفاده از نامهای فایلی با طولهای گوناگون شامل طیفی از نویسههای مجاز نام فایل به کار میگیرند. این گزینه بررسی میکند که آیا میتواند از طول مجاز نام فایل در سیستمفایل فراتر رود یا خیر، و همچنین طولهای مختلف نام فایل را میان ۱ تا حداکثر مقدار مجاز سیستمفایل میآزماید.
- --filename-ops N
- توقف کارگران filename پس از N آزمایش صوری نام فایل.
- --filename-opts opt
- استفاده از
نویسهها
در نام فایل
بر اساس
گزینه `opt'.
گزینههای
معتبر
عبارتند از:
گزینه توضیحات probe گزینه پیشفرض؛ کاوش در سیستمفایل برای یافتن نویسههای مجاز معتبر در نام فایل و استفاده از آنها posix استفاده از نویسهها مطابق مشخصات The Open Group Base Specifications Issue 7، استاندارد POSIX.1-2008، بخش 3.278 Portable Filename Character Set ext استفاده از نویسههای مجاز در سیستمفایلهای ext2، ext3 و ext4، یعنی هر نویسه ۸ بیتی به جز NUL و / utf8 استفاده از نویسههای دقیق utf8 در نام فایل urf8-like استفاده از نویسههای شبه utf8 با کدگذاریهای نامعتبر utf8 هنگام تولید تصادفی نامهای فایل
- فشارآور شرایط رقابتی فایل (filerace)
- --filerace N
- اجرای N کارگر که هرکدام ۸ فرایند همروند را اجرا میکنند که مجموعهای تصادفی از فراخوانهای سیستمی مرتبط با فایل را روی ۶۴ فایل تصادفی به کار میگیرند. این کار تلاش میکند تا در حین عملیات روی فایلها، هرگونه شرایط رقابتی (race conditions) در سیستمفایل را فعال کند. عملیات تصادفی باعث شکست برخی از عملیات نامعتبر روی فایل میشود؛ این شکستها بیصدا نادیده گرفته میشوند.
- --filerace-procs N
- مشخص کردن تعداد فرایندهای فرزند به ازای هر کارگر برای ایجاد جهت آزمایش شرایط رقابتی فایل. توجه داشته باشید که فرایند اصلی فشارآور به اضافه فرایندهای فرزند، تعداد کل فرایندهای همروند در حال اجرا به ازای هر نمونه فشارآور را تشکیل میدهند. محدوده ۱ تا ۶۴ و مقدار پیشفرض ۷ است.
- --filerace-ops N
- توقف پس از N عملیات صوری تصادفی روی فایل؛ این معیار به دلیل ماهیت بسیار تصادفی اقدامات روی فایلهای تصادفیِ انتخابشده، معیار قابل اعتمادی برای سنجش عملکرد نیست.
- فشارآور مقیاسپذیری همدوسی تکسطر حافظه نهان
- --flipflop N
- اجرای N کارگر که در آن هر کارگر دو گروه از رشتهها (threads) با اندازه یکسان ایجاد میکند به طوری که هر گروه به مجموعهای از CPUها وابسته (affine) میشوند. یک بیتمپ پیوسته که بیتهای کافی برای هر جفترشته دارد به کار گرفته میشود؛ هر جفترشته تلاش میکند با استفاده از cmpxchg (مقایسه/تبادل یا compare/exchange) بیت ویژه خود را flip/flop کند؛ یک رشته تلاش میکند بیت را از 0 به 1 تغییر دهد (flip) و رشته دیگر تلاش میکند آن را از 1 به 0 برگرداند (flop). این فشارآور باعث رقابت رشتهها بر سر یک سطر حافظه نهان (cacheline) یکسان میشود و تعداد کل عملیاتهای flip/flop و نحوه توزیع موارد موفق را میان رشتهها میسنجد (تا بررسی کند آیا جفترشتهها به نفع دیگران دچار گرسنگی یا starvation میشوند یا خیر).
- --flipflop-bits N
- تعداد بیتها در بیتمپ (و در نتیجه تعداد جفترشتههای flip/flop) را مشخص میکند.
- --flipflop-taskset1 list
- فهرست CPUهایی که رشتههای flip باید به آنها وابسته (affine) شوند. برای ساختار نحوی آرگومان list به توضیحات گزینه --taskset مراجعه کنید.
- --flipflop-taskset2 list
- فهرست CPUهایی که رشتههای flop باید به آنها وابسته (affine) شوند. برای ساختار نحوی آرگومان list به توضیحات گزینه --taskset مراجعه کنید.
- --flipflop-ops N
- توقف پس از N عملیات صوری (bogo-ops)؛ در این مورد، هر bogo-op برابر با ۱۰۰۰۰۰ عملیات flip-flop است.
- فشارآور قفلگذاری فایل بیاسدی (flock)
- --flock N
- اجرای N کارگر که روی یک فایل واحد قفلگذاری میکنند.
- --flock-ops N
- توقف کارگران فشار flock پس از N عملیات صوری flock.
- فشارآور تخلیه حافظه نهان
- --flushcache N
- اجرای N کارگر که حافظه نهان داده و دستورالعمل را (در صورت امکان) تخلیه (flush) میکنند. برخی معماریها ممکن است از تخلیه حافظه نهان در هر یک از این دو نوع حافظه نهان پشتیبانی نکنند، که در این صورت این عملیات به no-op (بدون اثر) تبدیل میشوند..TP --flushcache-d-bytes N اندازه ناحیه داده برای تخلیه داده (data flush) را مشخص میکند، در بازه 1K تا 4GB با مقدار پیشفرض اندازه حافظه نهان داده در سطح پایینتر. اندازه را میتوان به صورت درصدی از کل حافظه در دسترس یا در واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با پسوندهای b، k، m یا g مشخص کرد.
- --flushcache-i-bytes N
- اندازه ناحیه دستورالعمل برای تخلیه دستورالعمل (instruction flush) را مشخص میکند، در بازه 1K تا 4GB با مقدار پیشفرض اندازه حافظه نهان دستورالعمل سطح ۱ (level 1 instruction cache). اندازه را میتوان به صورت درصدی از کل حافظه در دسترس یا در واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با پسوندهای b، k، m یا g مشخص کرد.
- --flushcache-ops N
- پس از N تکرار تخلیه حافظه نهان متوقف میشود.
- آزمونگر عملیات ممیز شناور ضرب/جمع ادغامشده (fma)
- --fma N
- تعداد N
کارگر را
آغاز
میکند که
عملیات ضرب
و جمع ممیز
شناور با
دقت یگانه و
مضاعف را
روی
آرایههایی
از ۵۱۲
مقدار ممیز
شناور اجرا
میکنند.
برای
پردازندههای
مدرنتر (Intel
Haswell، AMD Bulldozer و Piledriver) و
کامپایلرهای
مدرن C این
عملیات با
کدهای
دستورالعمل
(opcodes) ضرب/جمع
ادغامشده
(fma3) انجام
خواهند شد.
عملیات
مورد
استفاده
عبارتند از:
a = (a × b) + c a = (b × a) + c a = (b × c) + a a = (a × b) − c a = (b × a) − c a = (b × c) − a - --fma-libc
- در صورت در دسترس بودن، از توابع ریاضی fma در libc استفاده میکند. اینها یا از ماکروهای FMA در libc (در صورت تعریف شدن)، یا توابع __builtin در libc، یا توابع fma در libc استفاده میکنند. به طور کلی این موارد کندتر از کد مستقیم ضرب/جمع ادغامشده تولیدشده توسط کامپایلر هستند.
- --fma-ops N
- پس از N دور چرخه bogo از ۳ عملیات بالا روی ۵۱۲ عدد ممیز شناور با دقت یگانه و مضاعف متوقف میشود.
- آزمونگر انشعاب فرایند (fork)
- -f N, --fork N
- تعداد N کارگر را آغاز میکند که به طور مداوم فرزندانی را منشعب (fork) کرده و بلافاصله خارج میشوند.
- --fork-max P
- در هر تکرار P فرایند فرزند ایجاد کرده و سپس منتظر خروج آنها میماند. مقدار پیشفرض فقط ۱ است؛ مقادیر بالاتر باعث ایجاد فرایندهای زامبی موقت زیادی میشوند که در انتظار بازیافت (reap) هستند. با استفاده از مقادیر بالای --fork-max و --fork، امکان پر شدن جدول فرایندها وجود دارد.
- --fork-ops N
- کارگران آزمون fork را پس از N عملیات bogo متوقف میکند.
- --fork-pageout
- انتقال اجباری صفحههای مقیم در حافظه به فضای ذخیرهسازی (page-out) را در نمونههای آزمونگر fork فعال میکند.
- --fork-unmap
- تلاش میکند نگاشت صفحههای استفادهنشده کتابخانه مشترک که در حافظه مقیم نیستند را لغو کند (unmap) تا کپیشدن vma ناشناس (anonymous vma) کاهش یابد. این یک ترفند نامناسب (ugly hack) برای محک زدن کاهش کپی vma است و تضمینی برای کارکرد آن وجود ندارد. فقط لینوکس.
- --fork-vm
- توصیه مضر برای کارایی حافظه مجازی را با استفاده از madvise(2) روی تمام صفحههای فرایند منشعبشده فعال میکند. در صورت امکان، این گزینه تلاش خواهد کرد تا هر صفحه در فرایند جدید را با استفاده از پرچمهای MADV_MERGEABLE، MADV_WILLNEED، MADV_HUGEPAGE و MADV_RANDOM در madvise(2) تنظیم کند. فقط لینوکس.
- آزمونگر انشعاب سنگین فرایند (heavy fork)
- --forkheavy N
- تعداد N کارگر را آغاز میکند که از والدینی با هزاران منبع سیستم تخصیصیافته، فرایندهای فرزند منشعب میکنند. عملیات fork به یک عملیات سنگین تبدیل میشود زیرا باید ارجاعات منابع والد را تکثیر کند. هر نمونه آزمونگر تا ۴۰۹۶ فرایند فرزند ایجاد کرده و بازیافت میکند (reap) که به روش خروج به ترتیب ورود (FIFO) ایجاد و بازیافت میشوند.
- --forkheavy-allocs N
- در هر نمونه آزمونگر، N حلقه تخصیص منابع را امتحان میکند. منابع شامل pipes، توصیفکنندههای فایل، نگاشتهای حافظه، pthreads، تایمرها، ptys، سمافورها، صفهای پیام و فایلهای موقت هستند. این موارد فرایندهای سنگینی ایجاد میکنند که انشعاب گرفتن (fork) از آنها هزینهبرتر و زمانبرتر است. مقدار پیشفرض 16384 است.
- --forkheavy-mlock
- تلاش میکند با استفاده از mlock(2) صفحههای تخصیصیافته بعدی را در حافظه قفل کند که باعث فشار حافظه بیشتر میشود. اگر mlock(MCL_FUTURE) پیادهسازی شده باشد، این کار مانع از انتقال صفحههای جدید brk به حافظه مبادله (swap out) میشود.
- --forkheavy-ops N
- پس از N فراخوانی fork متوقف میشود.
- --forkheavy-procs N
- تلاش میکند N فرایند در هر آزمونگر ایجاد کند. مقدار پیشفرض ۴۰۹۶ فرایند است.
- آزمونگر عملیات ممیز شناور (floating point)
- --fp N
- تعداد N کارگر را آغاز میکند که عملیات جمع، ضرب و تقسیم را روی طیف وسیعی از انواع ممیز شناور اجرا میکنند. برای هر نوع، روی ۸ مقدار ممیز شناور ۶۵۵۳۶ بار در یک حلقه به ازای هر عملیات bogo پردازش انجام میشود.
- --fp-method method
- روش ممیز
شناور مورد
استفاده را
انتخاب
میکند،
روشهای
موجود
عبارتند از:
توجه داشته باشید که برخی از این روشهای ممیز شناور ممکن است در بعضی از سیستمها در دسترس نباشند.روش توضیحات all پیمایش روی تمام روشهای ممیز شناور زیر: float128add جمع ممیز شناور ۱۲۸ بیتی ibm128add جمع ممیز شناور ۱۲۸ بیتی IBM (powerpc) float80add جمع ممیز شناور ۸۰ بیتی float64add جمع ممیز شناور ۶۴ بیتی float32add جمع ممیز شناور ۳۲ بیتی binary32 floatadd جمع ممیز شناور bf16add جمع ممیز شناور bf16 doubleadd جمع ممیز شناور با دقت مضاعف (double precision) ldoubleadd جمع ممیز شناور با دقت مضاعف بلند (long double precision) float128sub تفریق ممیز شناور ۱۲۸ بیتی ibm128sub تفریق ممیز شناور ۱۲۸ بیتی IBM (powerpc) float80sub تفریق ممیز شناور ۸۰ بیتی float64sub تفریق ممیز شناور ۶۴ بیتی float32sub تفریق ممیز شناور ۳۲ بیتی binary32 floatsub تفریق ممیز شناور bf16sub تفریق ممیز شناور bf16 doublesub تفریق ممیز شناور با دقت مضاعف (double precision) ldoublesub تفریق ممیز شناور با دقت مضاعف بلند (long double precision) float128mul ضرب ممیز شناور ۱۲۸ بیتی ibm128mul ضرب ممیز شناور ۱۲۸ بیتی IBM (powerpc) float80mul ضرب ممیز شناور ۸۰ بیتی float64mul ضرب ممیز شناور ۶۴ بیتی float32mul ضرب ممیز شناور ۳۲ بیتی binary32 floatmul ضرب ممیز شناور bf16mul ضرب ممیز شناور bf16 doublemul ضرب ممیز شناور با دقت مضاعف (double precision) ldoublemul ضرب ممیز شناور با دقت مضاعف بلند (long double precision) float128div تقسیم ممیز شناور ۱۲۸ بیتی ibm128div تقسیم ممیز شناور ۱۲۸ بیتی IBM (powerpc) float80div تقسیم ممیز شناور ۸۰ بیتی float64div تقسیم ممیز شناور ۶۴ بیتی float32div تقسیم ممیز شناور ۳۲ بیتی binary32 floatdiv تقسیم ممیز شناور bf16div تقسیم ممیز شناور bf16 doublediv تقسیم ممیز شناور با دقت مضاعف (double precision) ldoublediv تقسیم ممیز شناور با دقت مضاعف بلند (long double precision)
- --fp-ops N
- توقف پس از N عملیات ساختگی (bogo ops) ممیز شناور. توجه داشته باشید که bogo-ops تنها برای انواع استاندارد ممیز شناور float، double و long double شمارش میشوند.
- استرسآور استثناهای ممیز شناور
- --fp-error N
- آغاز N کارگر که استثناهای ممیز شناور تولید میکنند. محاسبات برای تحریک و بررسی استثناهای FE_DIVBYZERO، FE_INEXACT، FE_INVALID، FE_OVERFLOW و FE_UNDERFLOW انجام میشوند. خطاهای EDOM و ERANGE نیز بررسی میشوند.
- --fp-error-ops N
- توقف پس از N استثنای ممیز شناور bogo.
- عملیات متفرقهٔ ماکروهای ریاضیاتی ممیز شناور
- --fp-misc N
- آغاز N کارگر که ماکروهای ممیز شناور libm زیر را به کار میگیرند: fpclassify(3)، isgreater(3)، isgreaterequal(3)، isless(3)، islessequal(3)، islessgreater(3)، isunordered(3)، isfinite(3)، isnormal(3)، isnan(3)، isinf(3) و signbit(3). مقادیر ممیز شناور float، double و long double با استفاده از مقادیر عادی (normal)، بینهایت (infinite) و غیرعدد (nan) پردازش میشوند.
- --fp-misc-ops N
- توقف پس از N عملیات bogo ماکروهای ریاضیاتی ممیز شناور.
- استرسآور عملیات ممیز شناور زیرعادی (subnormal)
- --fp-subnormal N
- آغاز N کارگر که عملیات جمع، ضرب و تقسیم را روی طیفی از انواع ممیز شناور با استفاده از مقادیر ممیز شناور زیرعادی (subnormal) به کار میگیرند. به ازای هر نوع، مقادیر ممیز شناور ۶۵۵۳۶ بار در یک حلقه به ازای هر bogo op مورد پردازش قرار میگیرند. مقادیر ممیز شناور زیرعادی مقادیری هستند که مانتیس آنها فاقد رقم باینری پیشرو ۱ است و مدیریت آنها ممکن است نیازمند کمک نرمافزاری بوده و اثر منفی بر کارایی بگذارد. همچنین کارایی ممکن است بین پیادهسازیهای مختلف C به دلیل راهبردهایی نظیر گرد کردن مقادیر زیرعادی به صفر متفاوت باشد.
- --fp-subnormal-method method
- انتخاب روش
ممیز شناور
برای
استفاده،
روشهای
موجود
عبارتند از:
روش توضیحات all پیمایش روی تمام روشهای ممیز شناور زیر: floatadd جمع ممیز شناور doubleadd جمع ممیز شناور با دقت مضاعف (double) ldoubleadd جمع ممیز شناور با دقت مضاعف طویل (long double) floatsub تفریق ممیز شناور doublesub تفریق ممیز شناور با دقت مضاعف (double) ldoublesub تفریق ممیز شناور با دقت مضاعف طویل (long double) floatmul ضرب ممیز شناور doublemul ضرب ممیز شناور با دقت مضاعف (double) ldoublemul ضرب ممیز شناور با دقت مضاعف طویل (long double) floatdiv تقسیم ممیز شناور doublediv تقسیم ممیز شناور با دقت مضاعف (double) ldoublediv تقسیم ممیز شناور با دقت مضاعف طویل (long double) - --fp-subnormal-ops N
- توقف پس از N عملیات bogo ممیز شناور زیرعادی.
- استرسآور ایجاد و پر کردن حفره در فایل (punch and hole fill)
- --fpunch N
- آغاز N کارگر که با استفاده از پنج فرایند همروند به ازای هر استرسآور روی یک فایل مشترک، در یک فایل ۱۶ مگابایتی حفره ایجاد و پر میکنند. در صورت پشتیبانی، این بخش از FALLOC_FL_KEEP_SIZE، FALLOC_FL_PUNCH_HOLE، FALLOC_FL_ZERO_RANGE، FALLOC_FL_COLLAPSE_RANGE و FALLOC_FL_INSERT_RANGE در fallocate(2) برای ایجاد و پر کردن حفرهها در سرتاسر فایل و شکستن آن به چندین extent استفاده میکند.
- --fpunch-bytes N
- تنظیم بیشینهٔ اندازهٔ هر فایل برای هر فرایند کارگر fpunch؛ مقدار پیشفرض 16 MB است. میتوان اندازه را به صورت درصدی (%) از فضای خالی سیستمفایل یا در واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با استفاده از پسوندهای b، k، m یا g مشخص کرد.
- --fpunch-ops N
- متوقف کردن کارگران fpunch پس از N عملیات ساختگی (bogo) ایجاد و پر کردن حفره.
- استرسآور فراکتال
- --fractal N
- آغاز N کارگر که فراکتالهای دو بعدی تولید میکنند. به طور پیشفرض، یک مجموعهٔ مندلبرو (Mandelbrot) با ابعاد ۱۰۲۴ در ۱۰۲۴ نقطه با حداکثر ۲۵۶ تکرار به ازای هر نقطه در حلقهٔ محاسباتی تکرارشونده محاسبه میشود. فراکتال سطر به سطر محاسبه شده و چندین سطر میان N نمونه از استرسآور fractal به اشتراک گذاشته میشود. از مقادیر ممیز شناور با دقت مضاعف برای نقاط در مجموعهٔ مقادیر مختلط استفاده میشود. محاسبات به صورت ساده (Naïve) و بدون میانبرهای الگوریتمی خاص یا درونیابی انجام میشود.
- --fractal-iterations N
- مشخص کردن حداکثر تعداد تکرارها برای محاسبهٔ نگاشت درجه دو (quadratic map) هر نقطه؛ مقدار پیشفرض ۲۵۶ تکرار است.
- --fractal-method [ julia | mandelbrot ]
- انتخاب روش تولید فراکتال، مجموعهٔ ژولیا (Julia set) یا مجموعهٔ مندلبرو (Mandelbrot set)؛ مقدار پیشفرض مجموعهٔ مندلبرو است.
- --fractal-ops N
- توقف پس از ایجاد N فراکتال.
- --fractal-sizex N
- تنظیم بیشینهٔ پهنای فراکتال؛ مقدار پیشفرض ۱۰۲۴ نقطه است.
- --fractal-sizey N
- تنظیم بیشینهٔ ارتفاع فراکتال؛ مقدار پیشفرض ۱۰۲۴ نقطه است.
- استرسآور محدودیت اندازهٔ فایل
- --fsize N
- آغاز N کارگر که محدودیتهای اندازهٔ فایل را (از طریق RLIMIT_FSIZE در setrlimit(2)) با اندازههای فایلی که ثابت، تصادفی و توانهایی از ۲ هستند میآزمایند. فایلها کوتاهسازی (truncate) و تخصیص داده میشوند تا سیگنالهای SIGXFSZ برانگیخته شوند.
- --fsize-ops N
- توقف پس از N تکرار آزمون اندازهٔ فایل bogo.
- استرسآور وضعیت فایل (fstat)
- --fstat N
- آغاز N کارگر که فراخوانی fstat را روی فایلهای یک دایرکتوری اجرا میکنند (پیشفرض /dev است).
- --fstat-dir directory
- مشخص کردن دایرکتوری جهت اجرای fstat برای بازنویسی مقدار پیشفرض /dev. تمام فایلهای درون دایرکتوری به طور مکرر مورد fstat قرار خواهند گرفت.
- --fstat-ops N
- متوقف کردن کارگران استرس fstat پس از N عملیات fstat ساختگی (bogo).
- استرسآور /dev/full
- --full N
- آغاز N کارگر که /dev/full را به کار میگیرند. این گزینه تلاش میکند روی دستگاه بنویسد (که همیشه باید خطای ENOSPC را بازگرداند)، از دستگاه بخواند (که همیشه باید یک بافر از صفرها را برگرداند) و به صورت تصادفی روی دستگاه عمل پرش (seek) انجام دهد (که همیشه باید با موفقیت روبهرو شود). (فقط در لینوکس)..TP --full-ops N متوقف کردن ورکرهای تنش full پس از N عملیات bogo I/O.
- استرسور انتقال آرگومان تابع (Function argument passing)
- --funccall N
- آغاز N ورکر که توابعی با ۱ تا ۹ آرگومان را فراخوانی میکنند. به طور پیشفرض همه توابع با طیفی از انواع آرگومانها فراخوانی میشوند، با این حال میتوان این رفتار را با استفاده از گزینه --funccall-method تغییر داد. این کار انتقال آرگومان تابع روی پشته و بازآرایی روی پشته و در ثباتها (registers) را مورد تنش قرار میدهد.
- --funccall-ops N
- متوقف کردن ورکرهای funccall پس از N عملیات bogo فراخوانی تابع. هر عملیات bogo معادل ۱۰۰۰ بار فراخوانی توابع دارای ۱ تا ۹ آرگومان از نوع آرگومان انتخابشده است.
- --funccall-method method
- تعیین روش نوع آرگومان funccall برای استفاده. حالت پیشفرض همه انواع است اما میتواند یکی از bool، uint8، uint16، uint32، uint64، uint128، float، double، longdouble، cfloat (شناور مختلط)، cdouble (مختلط مضاعف)، clongdouble (مختلط با دقت مضاعف طولانی)، float16، float32، float64، float80، float128، decimal32، decimal64 و decimal128 باشد. توجه داشته باشید که برخی از این انواع تنها در معماریها و نگارشهای خاصی از کامپایلر در دسترس هستند.
- استرسور بازگرداندن مقدار تابع (Function return)
- --funcret N
- آغاز N ورکر که انواع دادههای گوناگون کوچک تا بزرگ را با مقدار (by value) ارسال نموده و بازمیگردانند.
- --funcret-ops N
- متوقف کردن ورکرهای funcret پس از N عملیات bogo فراخوانی تابع.
- --funcret-method method
- تعیین روش نوع آرگومان funcret برای استفاده. مقدار پیشفرض 'all' است اما میتواند یکی از موارد uint8 uint16 uint32 uint64 uint128 float double longdouble float80 float128 decimal32 decimal64 decimal128 uint8x32 uint8x128 uint64x128 cfloat cdouble clongdouble باشد.
- استرسور موتکس سریع (futex)
- --futex N
- آغاز N ورکر که فراخوانی سیستمی futex را به سرعت تحت تنش قرار میدهند. هر ورکر دارای دو پردازه است: یک منتظرِ futex و یک بیدارکننده futex. پردازه منتظر با یک مهلت زمانی بسیار کوتاه به انتظار مینشیند تا مهلت زمانی و انتظار مکرر نظرسنجیشده futex را تحت تنش قرار دهد. این یک گزینه تنش مختص لینوکس است.
- --futex-ops N
- متوقف کردن ورکرهای futex پس از N عملیات bogo موفق انتظار futex.
- استرسور توابع گاما (Gamma functions)
- --gamma N
- آغاز N ورکر که توابع گامای tgamma و lgamma در libm را با استفاده از انواع ممیز شناور float، double و long double ارزیابی و تحت تنش قرار میدهند. هر تابع ۱۰۰۰۰ بار در هر عملیات bogo اجرا میشود. تابع گاما انتگرال از 0 تا ∞ برای t↑(x − 1) e↑-t dt است.
- --gamma-method function
- تعیین یک
تابع تنش
گاما. به
طور
پیشفرض
تمام توابع
به صورت
ترتیبی
ارزیابی
میشوند،
با این حال
در صورت
نیاز
میتوان
تنها یک
تابع را
برای
استفاده
مشخص کرد.
گزینههای
موجود به
شرح زیر
است:
روش توضیحات all پیمایش در تمامی توابع گامای زیر lgamma لگاریتم طبیعی مقدار قدر مطلق تابع گاما (double) lgammaf لگاریتم طبیعی مقدار قدر مطلق تابع گاما (float) lgammal لگاریتم طبیعی مقدار قدر مطلق تابع گاما (long double) tgamma تابع گاما (double) tgammaf تابع گاما (float) tgammal تابع گاما (long double) - --gamma-ops N
- متوقف شدن پس از N عملیات bogo.
- استرسور واکشی داده از هسته (Fetching data from kernel)
- --get N
- آغاز N ورکر که فراخوانیهای سیستمیِ واکشیکننده داده از هسته را فراخوانی میکنند، در حال حاضر این فراخوانیها عبارتند از: getpid(2)، getppid(2)، getcwd(3)، getgid(2)، getegid(2)، getuid(2)، getgroups(2)، getpgrp(2)، getpgid(2)، getpriority(2)، getresgid(2)، getresuid(2)، getrlimit(2)، prlimit(2)، getrusage(2)، getsid(2)، gettid(2)، getcpu(2)، gettimeofday(2)، uname(2)، adjtimex(2)، sysfs(2). برخی از این فراخوانیهای سیستمی مختص سیستمعاملهای خاصی هستند.
- --get-ops N
- متوقف کردن ورکرهای get پس از N عملیات bogo get.
- --get-slow-sync
- تلاش برای همگامسازی فراخوانیهای سیستمی در میان N ورکر get برای تحمیل انواع رقابت در قفلگذاری (locking contention) در هسته در حالتهای پیچیدهتر. هر فراخوانی سیستمی به صورت همروند با N ورکر به مدت ۰٫۱ ثانیه در هر نوبت اجرا میشود، بنابراین گذر از تمامی فراخوانیهای سیستمی ۳ تا ۴ ثانیه زمان میبرد.
- استرسور دریافت مدخلهای دایرکتوری (Linux)
- --getdent N
- آغاز N ورکر که به صورت بازگشتی دایرکتوریهای /proc، /dev/، /tmp، /sys و /run را با استفاده از getdents(2) و getdents64(2) میخوانند (فقط لینوکس).
- --getdent-ops N
- متوقف کردن ورکرهای getdent پس از N عملیات bogo getdent.
- استرسور دادههای تصادفی (getrandom)
- --getrandom N
- آغاز N ورکر که ۸۱۹۲ بایت تصادفی را با استفاده از فراخوانی سیستمی getrandom(2) (لینوکس) یا getentropy(2) (اوپنبیاسدی) از مخزن /dev/urandom دریافت میکنند.
- --getrandom-ops N
- متوقف کردن ورکرهای getrandom پس از N عملیات bogo get.
- استرسور خطلوله پردازنده و پیشبینی انشعاب (CPU pipeline and branch prediction)
- --goto N
- آغاز N ورکر که به ازای هر حلقه عملیات bogo، تعداد ۲۰۴۸ انشعاب روبهجلو (به دستور بعدی) یا انشعاب روبهعقب (به دستور قبلی) انجام میدهند. به طور پیشفرض، در هر ۲۰۴۸ انشعاب، جهت انشعاب به صورت تصادفی روبهجلو یا روبهعقب انتخاب میشود. این استرسور اجرای زیربهینه خطلوله (pipelined) و منطق پیشبینی انشعاب را مورد ارزیابی و تنش قرار میدهد.
- --goto-direction [ forward | backward | random ]
- انتخاب جهت انشعاب در حلقه استرسور؛ forward تنها برای انشعاب روبهجلو، backward تنها برای انشعاب روبهعقب، random برای انتخاب تصادفی بین انشعاب روبهجلو یا تصادفی در هر ۲۰۴۸ انشعاب.
- --goto-ops N
- متوقف کردن ورکرهای goto پس از N حلقه bogo از ۲۰۴۸ دستور انشعاب.
- استرسور OpenGL پردازنده گرافیکی (GPU)
- --gpu N
- آغاز N ورکر که پردازنده گرافیکی (GPU) را تحت تنش قرار میدهند. این گزینه یک تصویر بافت دوبعدی (2-D texture) را مشخص میکند که امکان خوانده شدن عناصر یک آرایه تصویر توسط سایهزنها (shaders) و رندر کردن اشکال اولیه را با استفاده از یک بافتار opengl فراهم میسازد.
- --gpu-devnode DEVNAME
- تعیین نام گره دستگاه مربوط به دستگاه GPU؛ مقدار پیشفرض /dev/dri/renderD128 است.
- --gpu-frag N
- تعیین میزان استفاده از هسته سایهزن به ازای هر پیکسل؛ این گزینه N حلقه را در سایهزن قطعه (fragment shader) تنظیم میکند..TP --gpu-ops N متوقف کردن پردازههای کارگر gpu پس از N عملیات حلقه رندر (render loop).
- --gpu-tex-size N
- مشخص کردن بافت (texture) بارگذاری به اندازه N × N، این مقدار بهطور پیشفرض 4096 × 4096 است.
- --gpu-xsize X
- استفاده از اندازه بافر فریم (framebuffer) معادل X پیکسل. مقدار پیشفرض 256 پیکسل است.
- --gpu-ysize Y
- استفاده از اندازه بافر فریم (framebuffer) معادل Y پیکسل. مقدار پیشفرض 256 پیکسل است.
- --gpu-upload N
- مشخص کردن بارگذاری بافت به تعداد N بار در هر فریم؛ مقدار پیشفرض 1 است.
- تنشزای Handle
- --handle N
- راهاندازی N پردازه کارگر که فراخوانهای سیستمی name_to_handle_at(2) و open_by_handle_at(2) را به کار میگیرند (تنها در لینوکس).
- --handle-ops N
- توقف پس از N عملیات ساختگی (bogo) روی handle.
- تنشزای درهمسازی رشته (String hashing)
- --hash N
- راهاندازی N پردازه کارگر که توابع گوناگون درهمسازی (hashing) را میآزمایند. رشتههای تصادفی از ۱ تا ۱۲۸ بایت درهمسازی میشوند و نرخ درهمسازی و مقدار کایاسکوئر (chi squared) بر اساس تعداد درهمسازیهای انجامشده در یک بازه زمانی محاسبه میگردد. مقدار کایاسکوئر معیار برازش (goodness-of-fit) است؛ یعنی توزیع واقعی اقلام در سطلهای درهمسازی (hash buckets) در برابر توزیع مورد انتظار اقلام. معمولاً مقدار کایاسکوئر نزدیک به 1.0 نشاندهنده یک توزیع درهمسازی مناسب است.
- --hash-method method
- مشخص کردن
روش
درهمسازی
مورد
استفاده؛
بهطور
پیشفرض در
تمام
روشهای
درهمسازی
چرخش انجام
میشود.
روشهای
موجود
عبارتند از:
روش توضیحات all چرخش در تمام روشهای درهمسازی adler32 چکسام Mark Adler، نوعی تغییریافته از چکسام Fletcher coffin درهمسازی xor و ۵ بیت چرخش به چپ coffin32 درهمسازی xor و ۵ بیت چرخش به چپ همراه با بهینهسازی واکشی ۳۲ بیتی crc32c محاسبه درهمسازی عدد صحیح CRC32C (Castagnoli CRC32) djb2a درهمسازی Dan Bernstein با استفاده از نوع xor fnv1a درهمسازی FNV-1a Fowler-Noll-Vo با استفاده از نوع xor و سپس ضرب jenkin درهمسازی عدد صحیح Jenkin kandr درهمسازی ضرب در ۳۱ و جمع Kernighan و Richie برگرفته از کتاب "The C Programming Language"، ویرایش دوم knuth درهمسازی Donald E. Knuth از کتاب "The Art Of Computer Programming"، جلد ۳، فصل ۶.۴ loselose درهمسازی ساده Kernighan و Richie از کتاب "The C Programming Language"، ویرایش اول mid5 درهمسازی xor shift از ۵ نویسه میانی رشته. طراحی شده توسط Colin Ian King muladd32 درهمسازی ساده ضرب و جمع با استفاده از محاسبات ۳۲ بیتی و تا کردن xor سرریز muladd64 درهمسازی ساده ضرب و جمع با استفاده از محاسبات ۶۴ بیتی و تا کردن xor سرریز mulxror32 ضرب، xor و چرخش به راست ۳۲ بیتی. تا جای ممکن ۳۲ بیت را درهم میریزد. طراحی شده توسط Colin Ian King mulxror64 ضرب، xor و چرخش به راست ۶۴ بیتی. نسخه ۶۴ بیتی mulxror32 murmur3_32 درهمسازی Murmur3 متعلق به Austin Appleby، نوع ۳۲ بیتی nhash الگوریتم nhash مربوط به exim. pjw یک تابع درهمسازی غیررمزنگاری ایجاد شده توسط Peter J. Weinberger از AT&T Bell Labs، مورد استفاده در فایلهای شیء UNIX ELF sdbm درهمسازی sdbm همانطور که در پایگاهداده SDBM و GNU awk استفاده شده است sedgwick درهمسازی ساده از کتاب برنامهنویسی C اثر Robert Sedgwick sobel درهمسازی شیفت بیتی Justin Sobel x17 ضرب در ۱۷ و جمع. این ضرب میتواند در برخی معماریها به شیفت سریع به راست به اندازه ۴ بیت و جمع بهینهسازی شود xor چرخش، شیفت و xor ساده مقادیر xorror32 درهمسازی سریع رشته با ۳۲ بیت xor اختصاصی و چرخش به راست، طراحی شده توسط Colin Ian King xorror64 نسخه ۶۴ بیتی xorror32 xxhash درهمسازی «بسیار سریع» (Extremely fast) در حالت غیرجریانی (non-streaming) - --hash-ops N
- توقف پس از N دور درهمسازی
- تنشزای سامانه فایل (File-system)
- -d N, --hdd N
- راهاندازی N پردازه کارگر که بهطور مداوم فایلهای موقت را مینویسند، میخوانند و حذف میکنند. حالت پیشفرض، آزمون تنش خواندنها و نوشتنهای ترتیبی است. با فعال بودن گزینه --aggressive بدون مشخص کردن گزینههای --hdd-opts، تنشزای hdd تمامی گزینههای --hdd-opt را تکبهتک اجرا میکند تا طیفی از گزینههای I/O را پوشش دهد.
- --hdd-bytes N
- نوشتن N بایت برای هر پردازه hdd؛ مقدار پیشفرض 1 GB است. میتوان اندازه را به صورت درصدی (%) از فضای خالی سامانه فایل یا در واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با استفاده از پسوندهای b، k، m یا g مشخص کرد.
- --hdd-opts list
- مشخص کردن
گزینههای
مختلف
آزمون تنش
به صورت
فهرستی
جداشده با
کاما.
گزینهها
به شرح زیر
هستند:
گزینه توضیحات direct تلاش برای به حداقل رساندن اثرات حافظه پنهان (cache) در I/O. عملیات نوشتن I/O فایل مستقیماً از بافرهای فضای کاربری انجام شده و انتقال همگام نیز تلاش میشود. برای تضمین I/O همگام، از گزینه sync نیز استفاده کنید. dsync اطمینان از انتقال خروجی به سختافزار زیرین و بهروزرسانی فرادادههای فایل (با استفاده از پرچم باز کردن O_DSYNC). این معادل آن است که پس از هر فراخوانی write(2)، یک فراخوانی به fdatasync(2) انجام شود. همچنین گزینه fdatasync را ببینید. fadv-dontneed توصیه به هسته مبنی بر اینکه دادهها در آینده نزدیک مورد دسترسی قرار نخواهند گرفت. fadv-noreuse توصیه به هسته مبنی بر اینکه دادهها تنها یک بار مورد دسترسی قرار خواهند گرفت. fadv-normal توصیه به هسته مبنی بر اینکه الگوی دسترسی مشخصی برای دادهها وجود ندارد. این فرض و توصیه پیشفرض است. fadv-rnd توصیه به هسته برای انتظار الگوهای دسترسی تصادفی به دادهها. fadv-seq توصیه به هسته برای انتظار الگوهای دسترسی ترتیبی به دادهها. fadv-willneed توصیه به هسته مبنی بر اینکه دادهها در آینده نزدیک مورد دسترسی قرار خواهند گرفت. fsync تخلیه تمام دادههای اصلاحشده درون حافظه (in-core) پس از هر نوشتن به دستگاه خروجی، با استفاده از یک فراخوانی صریح fsync(2). fdatasync مشابه با fsync، اما فرادادههای تغییریافته تخلیه نمیشوند مگر اینکه فراداده برای خواندن صحیح دادهها در آینده مورد نیاز باشد. این عمل از یک فراخوانی صریح fdatasync(2) استفاده میکند. iovec استفاده از I/O چندبافری readv/writev به جای read/write. به جای ۱ عملیات read/write، بافر به یک iovec متشکل از ۱۶ بافر تقسیم میشود. noatime عدم بهروزرسانی برچسب زمان آخرین دسترسی فایل؛ این کار میتواند نوشتن فراداده را کاهش دهد. sync اطمینان از انتقال خروجی به سختافزار زیرین (با استفاده از پرچم باز کردن O_SYNC). این معادل آن است که پس از هر فراخوانی write(2)، یک فراخوانی به fsync(2) انجام شود. همچنین گزینه fsync را ببینید. rd-rnd خواندن تصادفی دادهها. rd-seq خواندن ترتیبی دادهها. syncfs نوشتن تمام تغییرات بافرشده فراداده و دادههای فایل در سامانه فایلی که شامل فایلهای پردازه کارگر hdd است. utimes اجبار به بهروزرسانی برچسب زمان فایل که ممکن است نوشتن فراداده را افزایش دهد. wr-rnd نوشتن تصادفی دادهها. گزینه wr-seq نمیتواند بهطور همزمان استفاده شود. wr-seq نوشتن ترتیبی دادهها. اگر هیچ حالت نوشتنی مشخص نشده باشد، این حالت پیشفرض است. توجه داشته باشید که برخی از این گزینهها مانعةالجمع (ناسازگار با یکدیگر) هستند؛ برای نمونه، تنها یک روش نوشتن یا خواندن میتواند وجود داشته باشد. همچنین، پرچمهای fadvise نیز ممکن است مانعةالجمع باشند؛ به عنوان مثال fadv-willneed نمیتواند همراه با fadv-dontneed استفاده شود. --hdd-ops N متوقف کردن ورکرهای تنش hdd پس از N عملیات bogo. --hdd-sleep N خوابیدن (توقف موقت) به مدت N ثانیه پس از هر دور از عملیاتهای I/O دیسک سخت (hdd). مقدار صفر باعث خواب همیشگی خواهد شد. دامنه 0..3600. --hdd-write-size N مشخص کردن اندازه هر نوشتن بر حسب بایت. اندازه میتواند از 1 بایت تا 4 مگابایت باشد. عامل تنش BSD heapsort 5 --heapsort N راهاندازی N ورکر که اعداد صحیح ۳۲ بیتی را با استفاده از heapsort متعلق به BSD مرتب میکنند. --heapsort-method [ heapsort-libc | heapsort-nonlibc ] انتخاب پیادهسازی libc از heapsort یا یک پیادهسازی بهینهسازیشده از heapsort. در صورت در دسترس بودن، پیشفرض پیادهسازی libc است. --heapsort-ops N متوقف کردن ورکرهای تنش heapsort پس از N عملیات bogo heapsort. --heapsort-size N مشخص کردن تعداد اعداد صحیح ۳۲ بیتی برای مرتبسازی؛ پیشفرض 262144 (256 × 1024) است. عامل تنش تایمر با دقت بالا (High resolution timer) 5 --hrtimers N راهاندازی N ورکر که تایمرهای با دقت بالا (hrtimer) را با بسامد بالا به کار میگیرند. هر عامل تنش ۳۲ فرآیند را آغاز میکند که با بازههای زمانی تصادفی بین 0..499999 نانوثانیه اجرا میشوند. اجرای این عامل تنش با مجوزهای مناسب، این فرآیندها را با سیاست SCHED_RR اجرا خواهد کرد. --hrtimers-adjust فعالسازی تنظیم خودکار نرخ تایمر جهت تلاش برای بیشینهسازی بسامد hrtimer. نرخ سیگنال هر 0.1 ثانیه اندازهگیری شده و تاخیر hrtimer برای تنظیم بهینهترین تاخیر و دستیابی به بالاترین نرخ ممکن تنظیم میشود. --hrtimers-ops N متوقف کردن عوامل تنش hrtimers پس از N عملیات bogo مربوط به رخدادهای تایمر. عامل تنش جستجوی جدول درهمسازی (hsearch) 5 --hsearch N راهاندازی N ورکر که یک جدول درهمسازی (hash table) با ۸۰٪ پرشدگی را با استفاده از hsearch(3) جستجو میکنند. به طور پیشفرض، ۸۱۹۲ عنصر در جدول درهمسازی درج میشود. این روش برای درگیر کردن دسترسی به حافظه و حافظه نهان (کش) پردازنده بسیار مفید است. --hsearch-method [ hsearch-libc | hsearch-nonlibc ] انتخاب پیادهسازی libc از hsearch یا پیادهسازی کمی بهینهسازیشدهٔ non-libc از hsearch. پیشفرض در صورت موجود بودن پیادهسازی libc است، وگرنه نسخه non-libc. --hsearch-ops N متوقف کردن ورکرهای hsearch پس از تکمیل N عملیات bogo hsearch. --hsearch-size N مشخص کردن تعداد مدخلهای درج شده در جدول درهمسازی. اندازه میتواند از 1 K تا 4 M باشد. عامل تنش ادغام و تقسیم Huge page 5 --hugepage N راهاندازی N ورکر که ادغام (collapsing) و تقسیم صفحهها را روی huge pageها با دو ریسهٔ همروند (یکی برای ادغام و دیگری برای تقسیم) به کار میگیرند. این کار رقابت بر سر مسیرهای تخصیص huge page، قفلگذاری جدول صفحه (page table locking) و عملیاتهای TLB shootdown را به چالش میکشد. این عامل تنش در صورت امکان کوچکترین اندازهٔ معقول huge page را برمیگزیند که در صورت پشتیبانی، اولویت با huge pageهای ۲ مگابایتی است. --hugepage-dontneed استفاده از MADV_DONTNEED در صورت امکان برای تلاش جهت تقسیم huge pageها. در هنگام ادغام صفحهها، صفر کردن (zeroing) صفحات جدید سربار اضافی به همراه دارد. --hugepage-method [ forward | random | reverse ] انتخاب روش گزینش صفحهٔ غیر hugepage بعدی برای تقسیم؛ گزینهٔ forward با پیشروی رو به جلو در حافظه صفحهها را انتخاب میکند، random صفحهها را تصادفی برمیگزیند و reverse با حرکت معکوس در حافظه صفحهها را انتخاب میکند. پیشفرض random است. --hugepage-num N استفاده از N صفحهٔ بزرگ (huge page) برای تخصیص. مقدار پیشفرض تنها ۲ صفحه به ازای هر نمونه از عامل تنش است. --hugepage-ops متوقف شدن پس از N دور ادغام صفحه. --hugepage-remove استفاده از MADV_REMOVE در صورت امکان برای تلاش جهت تقسیم huge pageها. در هنگام ادغام صفحهها، صفر کردن (zeroing) صفحات جدید سربار اضافی به همراه دارد. عامل تنش توابع هذلولوی (Hyperbolic functions) 5 --hyperbolic N راهاندازی N ورکر که توابع هذلولوی libm شامل sinh، cosh و tanh را با استفاده از انواع ممیز شناور float، double و long double ارزیابی و درگیر میکنند. هر تابع ۱۰,۰۰۰ بار در هر bogo-operation اجرا میشود. --hyperbolic-method function مشخص کردن یک تابع هذلولوی برای تنش. به طور پیشفرض تمام توابع به صورت متوالی اجرا میشوند، با این حال در صورت نیاز میتوان تنها یک تابع خاص را مشخص کرد. گزینههای موجود عبارتند از: lB2 lB l lx. روش توضیحات all پیمایش در تمامی توابع هذلولوی زیر cosh کسینوس هذلولوی (با دقت double) coshf کسینوس هذلولوی (با دقت float) coshl کسینوس هذلولوی (با دقت long double) sinh سینوس هذلولوی (با دقت double) sinhf سینوس هذلولوی (با دقت float) sinhl سینوس هذلولوی (با دقت long double) tanh تانژانت هذلولوی (با دقت double) tanhf تانژانت هذلولوی (با دقت float) tanhl تانژانت هذلولوی (با دقت long double) - --hyperbolic-ops N
- متوقف شدن پس از N عملیات bogo.
- عامل تنش بار حافظه نهان دستورات پردازنده (CPU instruction cache)
- --icache N
- راهاندازی N ورکر که با اجبار به بارگذاری مجدد حافظه نهان دستورات، instruction cache را تحت تنش قرار میدهند.
- --icache-ops N
- متوقف کردن ورکرهای icache پس از تکمیل N عملیات bogo icache.
- --icache-pages N
- مشخص کردن تعداد صفحات مورد استفاده برای وارد کردن تنش به حافظه نهان دستورات به ازای هر نمونه عامل تنش. مقدار پیشفرض ۱ صفحه است، دامنه ۱ تا ۱۰۲۴.
- عامل تنش غرقهسازی ICMP (ICMP flood)
- --icmp-flood N
- راهاندازی N ورکر که میزبان محلی (localhost) را با بستههای پینگ ICMP با اندازه تصادفی غرقهسازی (flood) میکنند. این عامل تنش به قابلیت CAP_NET_RAW نیاز دارد.
- --icmp-flood-max-size
- استفاده از حداکثر اندازه بسته ۶۵۵۳۵ بایت به جای مقدار پیشفرض ۱۰۰۰ بایت..TP --icmp-flood-ops N متوقف کردن کارگران سیلاب icmp پس از ارسال N بسته پینگ ICMP.
- آزمونگر پویش صفحههای غیرفعال (لینوکس)
- --idle-page N
- شروع N کارگر که تمام صفحهها را پیمایش کرده و رابط /sys/kernel/mm/page_idle/bitmap در لینوکس را به کار میگیرند. نیازمند قابلیت CAP_SYS_RESOURCE است.
- --idle-page-ops N
- توقف پس از N عملیات ساختگی (bogo) روی صفحههای غیرفعال.
- آزمونگر پرچمهای ioctl اینود
- --inode-flags N
- شروع N کارگر که پرچمهای inode را با استفاده از فراخوانهای ioctl(2) نوع FS_IOC_GETFLAGS و FS_IOC_SETFLAGS، و ویژگیهای inode را با استفاده از file_getattr(2) و file_getatt(2) به کار میگیرند. این گزینه تلاش میکند تمام پرچمهای دردسترس inode را روی یک دایرکتوری و فایل اعمال کند، حتی اگر سیستمفایل زیرین از این پرچمها پشتیبانی نکند (خطاها نادیده گرفته میشوند). هر کارگر ۴ ریسه (thread) را اجرا میکند که پرچمها را روی همان دایرکتوری و فایل به کار میگیرند تا شرایط رقابت (race) را شبیهسازی کنند. این آزمونگر فقط مخصوص لینوکس است؛ برای جزئیات بیشتر به ioctl_iflags(2) مراجعه کنید.
- --inode-flags-ops N
- متوقف کردن کارگران inode-flags پس از N تلاش برای تنظیم پرچمهای ioctl.
- آزمونگر Inotify
- --inotify N
- شروع N کارگر که فعالیتهای سیستمفایل مانند ایجاد/حذف فایلها و دایرکتوریها، انتقال فایلها و غیره را برای آزمودن و تحت فشار قرار دادن رویدادهای گوناگون inotify انجام میدهند (فقط لینوکس).
- --inotify-ops N
- متوقف کردن کارگران آزمون inotify پس از N عملیات ساختگی (bogo) برای inotify.
- آزمونگر مرتبسازی درجی
- --insertionsort N
- شروع N کارگر که اعداد صحیح ۳۲ بیتی را با استفاده از مرتبسازی درجی مرتب میکنند.
- --insertionsort-ops N
- متوقف کردن کارگران آزمون insertionsort پس از N مرتبسازی درجی ساختگی (bogo).
- --insertionsort-size N
- مشخص کردن تعداد اعداد صحیح ۳۲ بیتی برای مرتبسازی؛ مقدار پیشفرض ۱۶۳۸۴ (16 × 1024) است.
- عملیاتهای ریاضی اعداد صحیح
- --intmath N
- شروع N کارگر که عملیاتهای ریاضی جمع، تفریق، ضرب، تقسیم و باقیمانده تقسیم (modulo) را روی اعداد صحیح علامتدار ۱۲۸، ۶۴، ۳۲، ۱۶ و ۸ بیتی انجام میدهند.
- --intmath-fast
- در صورت دردسترس بودن، استفاده از نوعهای int_fast64_t ،int_fast32_t ،int_fast16_t و int_fast8_t بهجای نوعهای int64_t ،int32_t ،int16_t و int8_t. توجه داشته باشید که این نوعها بسته به کامپایلر ممکن است سریعتر از عملیاتهای معمولی اعداد صحیح باشند یا نباشند.
- --intmath-method method
- انتخاب روش
ریاضی عدد
صحیح برای
استفاده؛
روشهای
دردسترس
عبارتند از:
روش شرح all پیمایش روی تمام روشهای عدد صحیح زیر: add128 جمع عدد صحیح علامتدار ۱۲۸ بیتی add64 جمع عدد صحیح علامتدار ۶۴ بیتی add32 جمع عدد صحیح علامتدار ۳۲ بیتی add16 جمع عدد صحیح علامتدار ۱۶ بیتی add8 جمع عدد صحیح علامتدار ۸ بیتی sub128 تفریق عدد صحیح علامتدار ۱۲۸ بیتی sub64 تفریق عدد صحیح علامتدار ۶۴ بیتی sub32 تفریق عدد صحیح علامتدار ۳۲ بیتی sub16 تفریق عدد صحیح علامتدار ۱۶ بیتی sub8 تفریق عدد صحیح علامتدار ۸ بیتی mul128 ضرب عدد صحیح علامتدار ۱۲۸ بیتی mul64 ضرب عدد صحیح علامتدار ۶۴ بیتی mul32 ضرب عدد صحیح علامتدار ۳۲ بیتی mul16 ضرب عدد صحیح علامتدار ۱۶ بیتی mul8 ضرب عدد صحیح علامتدار ۸ بیتی div128 تقسیم عدد صحیح علامتدار ۱۲۸ بیتی div64 تقسیم عدد صحیح علامتدار ۶۴ بیتی div32 تقسیم عدد صحیح علامتدار ۳۲ بیتی div16 تقسیم عدد صحیح علامتدار ۱۶ بیتی div8 تقسیم عدد صحیح علامتدار ۸ بیتی mod128 باقیمانده تقسیم (modulo) عدد صحیح علامتدار ۱۲۸ بیتی mod64 باقیمانده تقسیم (modulo) عدد صحیح علامتدار ۶۴ بیتی mod32 باقیمانده تقسیم (modulo) عدد صحیح علامتدار ۳۲ بیتی mod16 باقیمانده تقسیم (modulo) عدد صحیح علامتدار ۱۶ بیتی mod8 باقیمانده تقسیم (modulo) عدد صحیح علامتدار ۸ بیتی برای گزینه --intmath-fast، روشهای زیر در دسترس هستند:
روش شرح all پیمایش روی تمام روشهای عدد صحیح زیر: addfast64 جمع سریع عدد صحیح علامتدار ۶۴ بیتی addfast32 جمع سریع عدد صحیح علامتدار ۳۲ بیتی addfast16 جمع سریع عدد صحیح علامتدار ۱۶ بیتی addfast8 جمع سریع عدد صحیح علامتدار ۸ بیتی subfast64 تفریق سریع عدد صحیح علامتدار ۶۴ بیتی subfast32 تفریق سریع عدد صحیح علامتدار ۳۲ بیتی subfast16 تفریق سریع عدد صحیح علامتدار ۱۶ بیتی subfast8 تفریق سریع عدد صحیح علامتدار ۸ بیتی mulfast64 ضرب سریع عدد صحیح علامتدار ۶۴ بیتی mulfast32 ضرب سریع عدد صحیح علامتدار ۳۲ بیتی mulfast16 ضرب سریع عدد صحیح علامتدار ۱۶ بیتی mulfast8 ضرب سریع عدد صحیح علامتدار ۸ بیتی divfast64 تقسیم سریع عدد صحیح علامتدار ۶۴ بیتی divfast32 تقسیم سریع عدد صحیح علامتدار ۳۲ بیتی divfast16 تقسیم سریع عدد صحیح علامتدار ۱۶ بیتی divfast8 تقسیم سریع عدد صحیح علامتدار ۸ بیتی modfast64 باقیمانده تقسیم (modulo) سریع عدد صحیح علامتدار ۶۴ بیتی modfast32 باقیمانده تقسیم (modulo) سریع عدد صحیح علامتدار ۳۲ بیتی modfast16 باقیمانده تقسیم (modulo) سریع عدد صحیح علامتدار ۱۶ بیتی modfast8 باقیمانده تقسیم (modulo) سریع عدد صحیح علامتدار ۸ بیتی --intmath-ops N متوقف کردن کارگرهای intmath پس از N عملیات صوری (bogo) ریاضی اعداد صحیح. استرسآور همگامسازی داده (sync) 5 -i N, --io N شروع N کارگر که بهطور مداوم sync(2) را برای ثبت حافظه موقت (buffer cache) روی دیسک فراخوانی میکنند. این گزینه میتواند همراه با استرسآور --hdd استفاده شود. این یک استرسآور قدیمی (legacy) است که با ابزار اصلی stress سازگار میباشد. --io-ops N متوقف کردن کارگرهای استرس io پس از N عملیات صوری (bogo). استرسآور ترکیب I/O 5 --iomix N شروع N کارگر که ترکیبی از عملیات خواندن/نوشتن ترتیبی، تصادفی و نگاشتشده در حافظه (memory-mapped)، و همچنین خواندن/نوشتن کپی تصادفی فایل، همگامسازی اجباری و (در صورت اجرا با دسترسی ریشه/root) تخلیه حافظه پنهان (cache dropping) را انجام میدهند. چندین فرایند فرزند ایجاد میشوند که همگی در یک فایل واحد مشترک شده و عملیات I/O متفاوتی را روی همان فایل انجام میدهند. --iomix-bytes N نوشتن N بایت برای هر فرایند کارگر iomix؛ مقدار پیشفرض 1 GB است. میتوان اندازه را به صورت درصدی (%) از فضای خالی سیستم فایل یا در واحدهای Bytes ،KBytes ،MBytes و GBytes با استفاده از پسوندهای b ،k ،m یا g مشخص کرد. --iomix-ops N متوقف کردن کارگرهای استرس iomix پس از N عملیات صوری (bogo) I/O در iomix. استرسآور درگاههای I/O (لینوکس x86) 5 --ioport N شروع N کارگر که دستههای ۱۶تایی خواندن و ۱۶تایی نوشتن را روی ioport 0x80 انجام میدهند (فقط سیستمهای لینوکس x86). عملیات I/O انجامشده در پلتفرمهای x86 روی درگاه 0x80 باعث ایجاد تأخیر در CPU پردازشکننده آن I/O میشود. --ioport-ops N متوقف کردن استرسآورهای ioport پس از N عملیات صوری (bogo) I/O. --ioport-opts [ in | out | inout ] مشخص کردن عملیات io برای اجرا. مقدار پیشفرض هر دو حالت in و out است. مشخص میکند که خواندن درگاه (in)، نوشتن درگاه (out) یا هر دو خواندن و نوشتن انجام شود. --ioport-port [ post | vga-dac-r | bochs-debug ] انتخاب درگاه I/O در x86 برای استفاده: post (درگاه خودآزمایی روشن شدن/Power-On-Self-Test با نشانی 0x80)، vga-dac-r (درگاه قرمز VGA DAC با نشانی 0x3c8) یا bochs-debug (درگاه اشکالزدایی Bochs با نشانی 0xe9). استرسآور کلاس و اولویت زمانبندی I/O 5 --ioprio N شروع N کارگر که فراخوانیهای سیستمی ioprio_get(2) و ioprio_set(2) را به چالش میکشند (فقط در لینوکس). --ioprio-ops N متوقف کردن پس از N عملیات صوری (bogo) اولویت io. استرسآور Io-uring 5 --io-uring N شروع N کارگر که عملیات مختلف فایلی io-uring را با استفاده از رابط io-uring لینوکس انجام میدهند. --io-uring-entries N مشخص کردن تعداد درایههای حلقه io-uring. --io-uring-ops N متوقف کردن پس از N دور از عملیات io-uring. --io-uring-rand تصادفیسازی ترتیب عملیات io-uring و مکانهای جستجوی فایل (file seek). استرسآور رمزنگاری چندبافری IPsec 5 --ipsec-mb N شروع N کارگر که پردازشهای رمزنگاری را با استفاده از کتابخانه بسیار بهینهشده Intel Multi-Buffer Crypto for IPsec انجام میدهند. بسته به قابلیتهای در دسترس، قابلیتهای پردازنده شامل SSE ،AVX ،AVX و AVX512 روی دادههای رمزگذاریشده با روالهای رمزنگاری SHA ،DES ،CMAC ،CTR ،HMAC MD5 ،HMAC SHA1 و HMAC SHA512 اعمال خواهند شد. این گزینه تنها برای پردازندههای مدرن اینتل x86-64 در دسترس است. --ipsec-mb-feature [ sse | avx2 | avx512 | noaesni ] تنها استفاده از قابلیت مشخصشده پردازنده. بهطور پیشفرض، تمام قابلیتهای موجود برای CPU آزمایش میشوند. --ipsec-mb-jobs N پردازش N دور چندبلوکی (multi-block) از پردازشهای رمزنگاری در هر تکرار. مقدار پیشفرض ۲۵۶ است. --ipsec-mb-method [ all | cmac | ctr | des | hmac-md5 | hmac-sha1 | hmac-sha512 | sha ] انتخاب روش رمزنگاری/یکپارچگی ipsec-mb. --ipsec-mb-ops N متوقف کردن پس از N دور پردازش دادهها با استفاده از روالهای رمزنگاری. استرسآور تایمر بازهای سیستم (System interval timer) 5 --itimer N شروع N کارگر که تایمرهای بازهای سیستم را به چالش میکشند. این گزینه یک itimer از نوع ITIMER_PROF تنظیم میکند که سیگنال SIGPROF تولید میکند. بسامد پیشفرض itimer برابر با 1 MHz است؛ با این حال، هسته لینوکس آن را طوری تنظیم میکند که بیشتر از مقدار jiffy نباشد، از این رو سیگنالهای SIGPROF با بسامد بالا معمولاً امکانپذیر نیستند. یک حلقه مشغول (busy loop) روی فراخوانیهای getitimer(2) میچرخد تا CPU مصرف کند و بدین ترتیب مقدار itimer بر اساس زمان صرفشده در زمان CPU و سیستم کاهش مییابد. --itimer-freq F اجرای itimer در بسامد F هرتز؛ بازه بین 1 تا 1000000 هرتز. معمولاً بالاترین بسامد توسط تعداد تیکهای jiffy در ثانیه محدود میشود، بنابراین اجرای آن بالاتر از 1000 هرتز در عمل دشوار است. --itimer-ops N متوقف کردن کارگرهای استرس itimer پس از N سیگنال صوری (bogo) SIGPROF از سوی itimer. --itimer-rand انتخاب بسامد تایمر بازهای بر اساس بسامد تایمر بازهای به همراه ±12.5% لغزش (jitter) تصادفی. این گزینه سعی میکند تغییرپذیری بیشتری در بازه تایمر اعمال کند تا زمانبندی کمتر قابل پیشبینی باشد. استرسآور فشردهسازی Jpeg 5 --jpeg N شروع N کارگر که فشردهسازی jpeg را روی یک تصویر میدان پلاسما (plasma field) تولیدشده توسط ماشین اجرا میکنند. تصویر پیشفرض یک میدان پلاسما است، با این حال انواع دیگری از تصویر نیز قابل انتخاب هستند. خط رستری آغازین در هر تکرار فشردهسازی تغییر میکند تا پیمایش چرخشی روی دادهها انجام شود. --jpeg-height H استفاده از ارتفاع H پیکسل برای تصویر نمونه RGB. مقدار پیشفرض 512 پیکسل است. --jpeg-image [ brown | flat | gradient | noise | plasma | xstripes ] انتخاب نوع تصویر مبدأ برای فشردهسازی. انواع تصویر در دسترس عبارتند از: lB2 lB l lx. نوع توضیحات brown نویز قهوهای، مقادیر قرمز و سبز با یک مقدار ۳ بیتی و مقادیر آبی با یک مقدار ۲ بیتی تغییر میکنند. flat یک رنگ تصادفی منفرد برای تمام تصویر. gradient گرادیان خطی مؤلفههای قرمز، سبز و آبی در سراسر پهنا و ارتفاع تصویر. noise نویز سفید تصادفی برای مقادیر قرمز، سبز و آبی. plasma میدان پلاسما با گذارهای نرم رنگی و لبههای مرزی تیز. xstripes یک رنگ تصادفی برای هر خط افقی. - --jpeg-ops N
- متوقف کردن پس از N عملیات فشردهسازی jpeg.
- --jpeg-quality Q
- استفاده از کیفیت فشردهسازی Q. محدوده آن ۱..۱۰۰ است (۱ کمترین، ۱۰۰ بیشترین)، با مقدار پیشفرض ۹۵..TP --jpeg-width H استفاده از پهنای تصویر نمونه RGB برابر با H پیکسل. مقدار پیشفرض ۵۱۲ پیکسل است.
- استرسور آرایه Judy
- --judy N
- راهاندازی N کارگر که با استفاده از اندیس آرایه قابل پیشبینی اما تنک (sparse)، اعداد صحیح ۳۲ بیتی را در یک آرایه Judy درج، جستجو و حذف میکنند. بهطور پیشفرض، ۱۳۱۰۷۲ عدد صحیح در آرایه Judy استفاده میشود. این روش برای آزمودن دسترسی تصادفی به حافظه و حافظه نهان پردازنده سودمند است.
- --judy-ops N
- متوقف کردن کارگرهای judy پس از تکمیل N عملیات ساختگی (bogo) مربوط به judy.
- --judy-size N
- مشخص کردن اندازه (تعداد اعداد صحیح ۳۲ بیتی) در آرایه Judy جهت آزمودن. اندازه میتواند از 1 K تا 4 M عدد صحیح ۳۲ بیتی باشد.
- استرسور Kcmp (لینوکس)
- --kcmp N
- راهاندازی N کارگر که از kcmp(2) برای مقایسه فرایندهای والد و فرزند به منظور تعیین اشتراک منابع هسته میان آنها استفاده میکنند. فقط در لینوکس پشتیبانی میشود و نیازمند قابلیت CAP_SYS_PTRACE است.
- --kcmp-ops N
- متوقف کردن کارگرهای kcmp پس از N عملیات ساختگی (bogo) مربوط به kcmp.
- استرسور مدیریت کلید هسته
- --key N
- راهاندازی N کارگر که کلیدهایی را با استفاده از add_key(2) و ketctl(2) ایجاد و دستکاری میکنند. به اندازهای که محدودیت به ازای هر کاربر اجازه میدهد کلید ایجاد شده و سپس دستورهای keyctl زیر روی هر کلید اعمال میشوند: KEYCTL_SET_TIMEOUT، KEYCTL_DESCRIBE، KEYCTL_UPDATE، KEYCTL_READ، KEYCTL_CLEAR و KEYCTL_INVALIDATE.
- --key-ops N
- متوقف کردن کارگرهای key پس از N عملیات ساختگی (bogo) مربوط به کلید.
- استرسور سیگنالهای فرایند
- --kill N
- راهاندازی N کارگر که سیگنالهای SIGUSR1 kill(2) را به یک پردازنده سیگنال SIG_IGN در استرسور، و سیگنال کشتن SIGUSR1 را به یک استرسور فرزند با پردازنده SIGUSR1 ارسال میکنند. بیشتر زمان فرایند در فضای هسته صرف خواهد شد.
- --kill-ops N
- متوقف کردن کارگرهای kill پس از N عملیات ساختگی (bogo) مربوط به kill.
- استرسور Syslog (لینوکس)
- --klog N
- راهاندازی N کارگر برای به کار انداختن فراخوان سیستمی syslog(2) در هسته. این گزینه تلاش میکند تا گزارشهای ثبت هسته را با بافرهای خواندن با اندازههای گوناگون بخواند. تنها در لینوکس.
- --klog-ops N
- متوقف کردن کارگرهای klog پس از N عملیات syslog.
- استرسور KVM
- --kvm N
- راهاندازی N کارگر که یک ماشین مجازی کمینه را ایجاد، اجرا و نابود میکنند؛ فقط لینوکس 64 bit ARM، RISC-V و x86 ARM. برای x86 ماشین مجازی در یک حلقه چرخشی (spin loop) از درگاه 0x80 خوانده، مقدار آن را افزایش داده و در آن مینویسد و استرسور تراکنشهای I/O را مدیریت میکند. برای ARM64 و RISC-V ماشین مجازی روی یک ناحیه MMIO مینویسد و استرسور خروجهای MMIO را مدیریت میکند.
- --kvm-ops N
- متوقف کردن استرسورهای kvm پس از آنکه N ماشین مجازی ایجاد، اجرا و نابود شدند.
- استرسور حافظه نهان سطح ۱ (L1) پردازنده
- --l1cache N
- راهاندازی N کارگر که حافظه نهان سطح ۱ پردازنده را با خواندن و نوشتن میآزمایند. یک بافر همتراز با کش (cache aligned) با اندازهای دو برابر حافظه نهان سطح ۱ خوانده شده و سپس در گامهایی به اندازه مجموعه حافظه نهان سطح ۱ روی هر مجموعه حافظه نهان سطح ۱ نوشته میشود. این کار برای آزمودن بیروناندازی بلوکهای حافظه نهان (cache block evictions) طراحی شده است. شمارشگر bogo-op تعداد میلیون خطوط حافظه نهان لمس شده را میسنجد. در صورت امکان، ساختار هندسی حافظه نهان سطح ۱ از هسته تعیین میشود؛ هرچند این امر در برخی معماریها یا هستهها ممکن نیست، بنابراین شاید نیاز باشد این مقادیر دستی مشخص شوند. میتوان ۳ مورد از ۴ پارامتر هندسی حافظه نهان را مشخص کرد که به شرح زیر هستند:
- --l1cache-line-size N
- مشخص کردن اندازه خط حافظه نهان سطح ۱ (به بایت)
- --l1cache-method [ forward | random | reverse ]
- انتخاب روش آزمودن بافری با اندازه l1cache. گزینهها عبارتند از forward scan (پیمایش رو به جلو)، random pick (انتخاب تصادفی بایتهای تصادفی برای آزمودن)، و reverse (پیمایش معکوس). پیشفرض forward scan است.
- --l1cache-mlock
- تلاش برای قفل کردن بافر با اندازه l1cache در حافظه با mlock(2) جهت جلوگیری از سوآپ شدن (swap out) آن.
- --l1cache-ops N
- مشخص کردن تعداد دورهای bogo-op خواندن/نوشتن حافظه نهان برای اجرا
- --l1cache-sets N
- مشخص کردن تعداد مجموعههای حافظه نهان سطح ۱
- --l1cache-size N
- مشخص کردن اندازه حافظه نهان سطح ۱ (به بایت)
- --l1cache-ways N
- مشخص کردن تعداد راههای (ways) حافظه نهان سطح ۱
- استرسور Landlock (لینوکس ≥ 5.13)
- --landlock N
- راهاندازی N کارگر که ویژگی لندلاکینگ (landlocking) لینوکس 5.13 را میآزمایند. طیف وسیعی از پرچمهای landlock_create_ruleset(2) با یک قاعده فایل فقط-خواندنی به کار گرفته میشوند تا بررسی شود آیا میتوان به یک دایرکتوری دسترسی داشت و آیا ایجاد فایل خواندنی-نوشتنی مسدود میشود یا خیر. هر تلاش مجموعهقواعد در یک زمینه فرزند جدید اجرا میشود و این امر عامل محدودکننده سرعت این استرسور است.
- --landlock-ops N
- متوقف کردن استرسورهای landlock پس از N عملیات ساختگی (bogo) مجموعه قواعد landlock.
- استرسور اجاره فایل
- --lease N
- راهاندازی N کارگر که اجارهها را از طریق عملیات F_SETLEASE در fcntl(2) قفل، باز و فسخ (break) میکنند. فرایندهای والد بهطور مداوم اجارهای را روی یک فایل قفل و باز میکنند، در حالی که تعداد مشخصی از فرایندهای فرزند (قابل تعیین توسط کاربر) فایل را به شکل غیرمسدودکننده (non-blocking) باز میکنند تا اعلانهای فسخ اجاره SIGIO به والد ارسال شوند. این استرسور تنها زمانی در دسترس است که پشتیبانی از F_SETLEASE، F_WRLCK و F_UNLCK توسط fcntl(2) فراهم باشد.
- --lease-breakers N
- راهاندازی N فرایند فرزند فسخکننده اجاره به ازای هر کارگر lease. بهطور معمول یک فرزند برای تولید شمار زیادی از سیگنالهای اعلان فسخ اجاره SIGIO به والد کافی است، با این حال این گزینه امکان تعیین فرایندهای فرزند بیشتری را در صورت نیاز فراهم میکند.
- --lease-ops N
- متوقف کردن کارگرهای lease پس از N عملیات ساختگی (bogo).
- استرسور LED (لینوکس)
- --led N
- راهاندازی N کارگر که رابطهای /sys/class/leds را برای تنظیم سطوح روشنایی LED و تنظیمات مختلف راهانداز (trigger) به کار میگیرند. این گزینه باید با دسترسی ریشه (root) اجرا شود تا بتوان این تنظیمات را با موفقیت نوشت. در صورت عدم دسترسی ریشه، از نوشتنهای ناموفق صرفنظر میشود.
- --led-ops N
- توقف پس از آزموده شدن N رابط.
- استرسور پیوند سخت
- --link N
- راهاندازی N کارگر برای ایجاد و حذف پیوندهای سخت (hardlinks).
- --link-ops N
- متوقف کردن کارگرهای تنش link پس از N عملیات ساختگی (bogo).
- --link-sync
- همگامسازی دادههای تغییریافته (dirty) و فرادادهها با دیسک. آزمونگر ساختار دادههای لیست (List data structures stressor)
- --list N
- شروع N کارگر که ساختارهای داده لیست را به کار میگیرند. حالت پیشفرض شامل افزودن، یافتن و حذف ۵۰۰۰ عدد صحیح ۶۴ بیتی در لیستهای circleq (صف حلقوی پیوندی دوطرفه)، list (لیست پیوندی دوطرفه)، slist (لیست پیوندی یکطرفه)، slistt (لیست پیوندی یکطرفه با استفاده از دنباله)، stailq (صف دنبالهدار پیوندی یکطرفه) و tailq (صف دنبالهدار پیوندی دوطرفه) است. هدف این آزمونگر، سنجش حافظه و کَش با عملیاتهای گوناگون لیست است.
- --list-method [ all | circleq | list | slist | stailq | tailq ]
- مشخص کردن نوع لیستی که باید استفاده شود. به طور پیشفرض، همه روشهای لیست استفاده میشوند (گزینه “all”).
- --list-ops N
- متوقف کردن آزمونگرهای لیست پس از N عملیات bogo. یک عملیات bogo شامل افزودن، یافتن و حذف همه موارد در لیست(ها) است.
- --list-size N
- مشخص کردن اندازه لیست، که در آن N تعداد اعداد صحیح ۶۴ بیتی است که باید به لیست افزوده شوند.
- آزمونگر آخرین لایه حافظه نهان (Last level of cache stressor)
- --llc-affinity N
- شروع N کارگر که آخرین لایه حافظه نهان (LLC) را با فعالیت خواندن/نوشتن در یک بافر هماندازه LLC و سپس تغییر وابستگی پردازنده (CPU affinity) پس از هر دور خواندن/نوشتن به چالش میکشند. این کار میتواند موجب وقفههای حافظه غیرمحلی و خطاهای خواندن/نوشتن (misses) در LLC شود.
- --llc-affinity-clflush
- در صورت امکان، تخلیه خطوط کَش (cachelines) پس از هر بار نوشتن خط کَش، فقط در x86 و ppc64.
- --llc-affinity-mlock
- تلاش برای قفل کردن بافر هماندازه LLC در حافظه با استفاده از mlock(2) جهت جلوگیری از انتقال آن به فضای مبادله (swap).
- --llc-affinity-numa
- اختصاص صفحات نگاشتشده حافظه به گرههای NUMA که به صورت تصادفی انتخاب شدهاند. این گزینه در سیستمهایی که از NUMA پشتیبانی نمیکنند غیرفعال است.
- --llc-affinity-ops N
- توقف پس از N دور خواندن/نوشتن LLC.
- --llc-affinity-size N
- بازنویسی مقدار پیشفرض اندازه کَش LLC به N بایت. میتوان اندازه را در واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با پسوندهای b، k، m یا g مشخص کرد.
- آزمونگر میانگین بار (Load average stressor)
- --loadavg N
- شروع N کارگر که تلاش میکنند هزاران pthread با پایینترین اولویت nice ایجاد کنند تا میانگین بار (load average) بسیار بالایی تحمیل شود. سیستمهای لینوکس همچنین مقداری نوشتن I/O انجام میدهند، چرا که I/Oهای معلق نیز در محاسبه بار سیستم لحاظ میشوند.
- --loadavg-max N
- تنظیم حداکثر تعداد pthreads ایجادشده به N. در صورتی که محدودیتی از سوی سیستم بر تعداد pthreads قابل ایجاد اعمال شده باشد، ممکن است N کاهش یابد.
- --loadavg-ops N
- متوقف کردن کارگرهای loadavg پس از دستیابی به N واگذاری زمانبندی ساختگی (bogo scheduling yields) توسط pthreads.
- آزمونگر قفل و افزایش حافظه در x86 و ARM
- --lockbus N
- شروع N کارگر که به سرعت ۶۴ بایت از حافظه تصادفی انتخابشده از یک ناحیه ۱۶ مگابایتی mmap شده را قفل کرده و افزایش میدهند (فقط پردازندههای Intel x86 و ARM). ۵۰٪ از ناحیه mmap شده بین تمام نمونههای آزمونگر lockbus به اشتراک گذاشته میشود و ۵۰٪ دیگر برای هر آزمونگر lockbus محلی است. این آزمونگر موجب خطاهای خط کَش (cacheline misses) و توقف پردازندهها میشود. در سیستمهای NUMA، صفحات به صورت تصادفی در بین گرههای NUMA توزیع میشوند تا قفل گذرگاه NUMA سنجیده شود.
- --lockbus-bytes N
- سنجش قفل گذرگاه روی N بایت؛ پیشفرض ۱۶ مگابایت است. میتوان اندازه را بر حسب درصدی از کل حافظه در دسترس یا در واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با پسوندهای b، k، m یا g مشخص کرد.
- --lockbus-nosplit
- غیرفعال کردن قفلهای دوتکه (split locks) که مرزهای خط کَش را در بر میگیرند.
- --lockbus-ops N
- متوقف کردن کارگرهای lockbus پس از N عملیات bogo.
- آزمونگر قفل POSIX با F_SETLK/F_GETLK
- --locka N
- شروع N کارگر که بخشهایی از یک فایل را به صورت تصادفی با سازوکار قفلگذاری توصیهای POSIX (نگاه کنید به fcntl(2)، F_SETLK، F_GETLK) قفل کرده و باز میکنند. هر کارگر فایلی به حجم ۱۰۲۴ کیلوبایت ایجاد کرده و تلاش میکند حداکثر ۱۰۲۴ قفل همزمان را همراه با یک فرایند فرزند که آن هم سعی در نگهداشتن ۱۰۲۴ قفل همزمان دارد، حفظ کند. قفلهای قدیمی بر مبنای خروج به ترتیب ورود (FIFO) آزاد میشوند.
- --locka-ops N
- متوقف کردن کارگرهای locka پس از N عملیات bogo locka.
- آزمونگر قفل POSIX با lockf
- --lockf N
- شروع N کارگر که بخشهایی از یک فایل را به صورت تصادفی با سازوکار قفلگذاری POSIX lockf(3) قفل کرده و باز میکنند. هر کارگر فایلی به حجم ۶۴ کیلوبایت ایجاد کرده و تلاش میکند حداکثر ۱۰۲۴ قفل همزمان را همراه با یک فرایند فرزند که آن هم سعی در نگهداشتن ۱۰۲۴ قفل همزمان دارد، حفظ کند. قفلهای قدیمی بر مبنای خروج به ترتیب ورود (FIFO) آزاد میشوند.
- --lockf-nonblock
- به جای استفاده از دستورهای مسدودکننده F_LOCK در lockf(3)، از دستورهای غیرمسدودکننده F_TLOCK استفاده کرده و در صورت ناموفق بودن قفل، دوباره تلاش میکند. این کار بار اضافی فراخوانیهای سیستمی و مصرف پردازنده را با افزایش تعداد کارگرهای lockf بالا برده و باید رقابت بر سر قفلگذاری را تشدید کند.
- --lockf-ops N
- متوقف کردن کارگرهای lockf پس از N عملیات bogo lockf.
- آزمونگر قفل ترکیبی فایل (locka، lockf، lockofd)
- --lockmix N
- شروع N کارگر که بخشهایی از یک فایل را با سازوکارهای قفلگذاری BSD flock(2)، locka (توصیهای)، POSIX lockf(3) و قفل فایل باز لینوکس (lockofd) به صورت تصادفی قفل کرده و باز میکنند. هر کارگر فایلی به حجم ۱۰۲۴ کیلوبایت ایجاد کرده و تلاش میکند حداکثر ۱۰۲۴ قفل همزمان را همراه با یک فرایند فرزند که آن هم برای نگهداشتن ۱۰۲۴ قفل همزمان تلاش میکند، حفظ کند. قفلهای قدیمی بر مبنای خروج به ترتیب ورود (FIFO) آزاد میشوند.
- --lockmix-ops N
- متوقف کردن کارگرهای lockmix پس از N عملیات bogo lockmix.
- آزمونگر قفل فایل باز لینوکس (ofd F_OFD_SETLK/F_OFD_GETLK)
- --lockofd N
- شروع N کارگر که بخشهایی از یک فایل را با استفاده از قفلهای شرح فایل باز لینوکس (نگاه کنید به fcntl(2)، F_OFD_SETLK، F_OFD_GETLK) به صورت تصادفی قفل کرده و باز میکنند. هر کارگر فایلی به حجم ۱۰۲۴ کیلوبایت ایجاد کرده و تلاش میکند حداکثر ۱۰۲۴ قفل همزمان را همراه با یک فرایند فرزند که آن هم سعی در نگهداشتن ۱۰۲۴ قفل همزمان دارد، حفظ کند. قفلهای قدیمی بر مبنای خروج به ترتیب ورود (FIFO) آزاد میشوند.
- --lockofd-ops N
- متوقف کردن کارگرهای lockofd پس از N عملیات bogo lockofd.
- آزمونگر توابع لگاریتمی
- --logmath N
- شروع N کارگر که توابع لگاریتمی گوناگون libm را با مقادیر ورودی ۱ تا ۱۰۰۰۰ به کار میگیرند. نتایج پس از هر دور محاسبه ۱۰۰۰۰ تایی بررسی صحتسنجی (sanity check) میشوند تا از عدم وقوع هرگونه مغایرت اطمینان حاصل شود.
- --logmath-ops N
- توقف پس از N حلقه عملیات ساختگی لگاریتمی (logarithmic bogo-operation loops).
- --logmath-method method
- مشخص کردن
یک تابع
لگاریتمی
برای
آزمایش.
روشهای در
دسترس برای
آزمودن
لگاریتم به
شرح زیر
هستند:
آزمونگر پرش طولانی (longjmp)روش توضیحات all پیمایش روی تمام روشهای توابع لگاریتمی زیر clog لگاریتم طبیعی مختلط double clogf لگاریتم طبیعی مختلط float clogl لگاریتم طبیعی مختلط long double log لگاریتم طبیعی double logf لگاریتم طبیعی float logl لگاریتم طبیعی long double logb دریافت نمای یک مقدار double logbf دریافت نمای یک مقدار float logbl دریافت نمای یک مقدار long double log10 لگاریتم در مبنای ۱۰ برای double log10f لگاریتم در مبنای ۱۰ برای float log10l لگاریتم در مبنای ۱۰ برای long double log2 لگاریتم در مبنای ۲ برای double log2f لگاریتم در مبنای ۲ برای float log2l لگاریتم در مبنای ۲ برای long double
- --longjmp N
- شروع N پردازهٔ کارگر که با حلقهزدن سریع روی فراخوانیهای longjmp، توابع setjmp(3)/longjmp(3) را تحت فشار قرار میدهند.
- --longjmp-ops N
- متوقف کردن پردازههای کارگر آزمون longjmp پس از N عملیات bogo مربوط به longjmp (هر عملیات bogo معادل ۱۰۰۰ فراخوانی longjmp است).
- آزمونگر لوپبک (Loopback) (لینوکس)
- --loop N
- شروع N پردازهٔ کارگر که دستگاه کنترلی loopback را به کار میگیرند. این گزینه دستگاههای loopback به اندازهٔ 2 MB میسازد، اندازهٔ آنها را به دو برابر افزایش میدهد، برخی عملیاتهای دریافت و تنظیم وضعیت loopback را انجام داده و سپس آنها را نابود میکند. فقط ویژهٔ لینوکس است و به قابلیت CAP_SYS_ADMIN نیاز دارد.
- --loop-bytes N
- مشخص کردن اندازهٔ دستگاه loop بر حسب بایت، در بازهٔ 1MB تا 1GB؛ پیشفرض 2MB است.
- --loop-ops N
- توقف پس از N عملیات bogo ساخت/حذف loopback.
- آزمونگر جستجوی خطی (Linear search)
- --lsearch N
- شروع N پردازهٔ کارگر که یک آرایهٔ نامرتب از اعداد صحیح ۳۲ بیتی را با استفاده از lsearch(3) به صورت خطی جستجو میکنند. به طور پیشفرض، ۸۱۹۲ عنصر در آرایه وجود دارد. این روشی مفید برای به کار کشیدن دسترسی ترتیبی به حافظه و کَش پردازنده است.
- --lsearch-method [ lsearch-libc | lsearch-nonlibc | lsearch-sentinel ]
- انتخاب پیادهسازی libc از lsearch، پیادهسازی اندکی بهینهشدهٔ غیر libc از lsearch، یا پیادهسازی lsearch که از کلید جستجو به عنوان نگهبان (sentinel) انتهای آرایه برای حذف یک مقایسهٔ اندیس در هر دور حلقه استفاده میکند. در صورت وجود، پیشفرض پیادهسازی libc است، در غیر این صورت نسخهٔ non-libc خواهد بود.
- --lsearch-ops N
- متوقف کردن کارگرهای lsearch پس از تکمیل N عملیات bogo جستجوی خطی.
- --lsearch-size N
- مشخص کردن اندازه (تعداد اعداد صحیح ۳۲ بیتی) در آرایه برای lsearch. اندازه میتواند از 1 K تا 4 M باشد.
- آزمونگر فراخوانیهای سیستمی ماژولهای امنیتی لینوکس (LSM)
- --lsm N
- شروع N پردازهٔ کارگر که فراخوانیهای سیستمی LSM شامل lsm_list_modules(2) و lsm_get_self_attr(2) را به بوتهٔ آزمایش میگذارند (فقط در لینوکس). هر دور bogo-op فهرستی از ماژولهای امنیتی در دسترس و ویژگیهای LSM را دریافت کرده و همچنین برخی فراخوانیهای سیستمی نامعتبر LSM را برای آزمایش مدیریت خطا اجرا میکند.
- --lsm-ops N
- توقف پس از N دور دریافت فهرست ماژولهای امنیتی و دریافت ویژگیهای LSM.
- آزمونگر Madvise
- --madvise N
- شروع N پردازهٔ کارگر که تنظیمات تصادفی توصیهٔ madvise(2) را روی صفحات یک نگاشت حافظهٔ مشترک مبتنی بر فایل به اندازهٔ 4 MB اعمال میکنند.
- --madvise-bytes N
- نگاشت حافظه (mmap) به میزان N بایت به ازای هر کارگر madvise برای نگاشت حافظهٔ مشترک مبتنی بر فایل. بازهٔ مجاز از 4K تا 64M بوده و مقدار پیشفرض 4 MB است. میتوان اندازه را به صورت درصدی از کل حافظهٔ در دسترس یا با واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با پسوندهای b، k، m یا g مشخص کرد.
- --madvise-hwpoison
- فعالسازی مسمومسازی صفحهٔ MADV_HWPOISON (در صورت در دسترس بودن، فقط هنگام اجرا به عنوان کاربر ریشه). این کار چند صفحه را دچار خطای سختافزاری عمدی کرده و باعث گزارش پیامهای خطای کرنل خواهد شد.
- --madvise-ops N
- متوقف کردن آزمونگرهای madvise پس از N عملیات bogo مربوط به madvise.
- آزمونگر تخصیص حافظه (Memory allocation)
- --malloc N
- شروع N پردازهٔ کارگر که به طور مداوم malloc(3)، calloc(3)، realloc(3)، posix_memalign(3)، aligned_alloc(3)، memalign(3) و free(3) را فراخوانی میکنند. به طور پیشفرض، حداکثر ۶۵۵۳۶ تخصیص میتواند در هر لحظه فعال باشد، اما این مقدار با گزینهٔ --malloc-max قابل تغییر است. تخصیص، تخصیص مجدد و آزادسازی به صورت تصادفی انتخاب میشوند؛ ۵۰٪ مواقع حافظه تخصیص مییابد (از طریق یکی از malloc، calloc، realloc، posix_memalign، aligned_alloc یا memalign) و ۵۰٪ مواقع تخصیصها آزاد میشوند. اندازههای تخصیص نیز تصادفی هستند و بیشینهٔ اندازه با گزینهٔ --malloc-bytes کنترل میشود که مقدار پیشفرض آن 64 K است. در صورتی که پردازهٔ کارگر توسط کشندهٔ کمبود حافظه (OOM killer) کشته شود، مجدداً راهاندازی میشود.
- --malloc-bytes N
- بیشینهٔ اندازهٔ هر تخصیص یا تخصیص مجدد. اندازهها به صورت تصادفی بین ۱ تا N بایت انتخاب میشوند. میتوان اندازه را به صورت درصدی از کل حافظهٔ در دسترس یا با واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با پسوندهای b، k، m یا g مشخص کرد. اندازههای تخصیص بزرگ باعث میشوند تخصیصدهندهٔ حافظه به جای گسترش هیپ (heap) با استفاده از brk(2)، از mmap(2) استفاده کند.
- --malloc-max N
- حداکثر تعداد مجاز تخصیصهای فعال. تخصیصها به صورت تصادفی انتخاب شده و در یک جایگاه تخصیص قرار میگیرند. به دلیل تقسیم تقریباً ۵۰/۵۰ بین تخصیص و آزادسازی، معمولاً نیمی از جایگاههای تخصیص در هر لحظه مورد استفاده هستند.
- --malloc-mlock
- تلاش برای قفل کردن تخصیصها در حافظه با استفاده از mlock(2) جهت جلوگیری از انتقال آنها به فضای مبادله (swap).
- --malloc-ops N
- توقف پس از N عملیات bogo مربوط به malloc. یک عملیات bogo معادل یک فراخوانی موفق malloc(3)، calloc(3)، realloc(3)، posix_memalign(3)، aligned_alloc(3) یا memalign(3) است.
- --malloc-pthreads N
- مشخص کردن تعداد pthreadهای همروند برای اعمال فشار بر malloc. پیشفرض 0 است (تنها یک پردازهٔ اصلی، بدون pthread). اگر از pthread پشتیبانی نشود، این گزینه کاری انجام نخواهد داد.
- --malloc-thresh N
- مشخص کردن آستانهای که در آن malloc به جای sbrk(2) از mmap(2) برای تخصیص حافظهٔ بیشتر استفاده میکند. این گزینه فقط در سیستمهایی موجود است که تابع تنظیمی mallopt(3) متعلق به GNU C را فراهم میکنند.
- --malloc-touch
- لمس کردن (نوشتن روی) هر صفحهٔ تخصیصیافته برای اجبار به قرارگیری صفحات در حافظهٔ فیزیکی. این کار فشار بر حافظه را افزایش داده و حافظهٔ مجازی را سختتر به کار میگیرد. به طور پیشفرض آزمونگر malloc صفحات را با madvise به داخل حافظه میآورد یا از mincore برای بررسی صفحات حافظهٔ غیر مقیم استفاده میکند تا آنها را به زور در حافظه بارگذاری کند؛ این گزینه با تهاجم بیشتری صفحات را وادار به ماندن در حافظه میکند.
- --malloc-trim
- کاهش دورهای حافظهٔ تخصیصیافته با تلاش برای آزادسازی حافظهٔ آزاد از heap در هر ۶۵۵۳۶ تکرار تخصیص. این میتواند یک عملیات زمانبر باشد. این ویژگی تنها در پیادهسازیهای libc malloc که از malloc_trim(3) پشتیبانی میکنند در دسترس است.
- --malloc-zerofree
- صفر کردن بایتهای حافظهٔ تخصیصیافته قبل از آزادسازی (free). این کار میتواند برای بررسی تخصیصهای خراب و تحریک بروز خطاها مفید باشد. همچنین برای تحمیل نوشتنهای بیشتر در کَش و حافظه کاربرد دارد.
- آزمونگر ماتریس دو بعدی (2D Matrix)
- --matrix N
- شروع N
پردازهٔ
کارگر که
عملیاتهای
مختلف
ماتریسی را
روی مقادیر
ممیز شناور
انجام
میدهند.
آزمایش روی
سختافزار
۶۴ بیتی x86
نشان
میدهد که
این آزمون
ترکیب
مناسبی از
عملیات
حافظه، کَش
و ممیز
شناور
ایجاد
میکند و
روشی عالی
برای بالا
بردن دمای
پردازنده (CPU)
است.
به طور پیشفرض، این گزینه تمام روشهای آزمون ماتریس را یکی پس از دیگری روی یک ماتریس ۱۲۸ × ۱۲۸ عنصری اجرا میکند. میتوان با گزینهٔ --matrix-method یک روش خاص آزمون ماتریس را مشخص کرد.
- --matrix-method method
- مشخص کردن
روش آزمون
ماتریس.
روشهای
موجود به
شرح زیر
هستند:
--matrix-ops N متوقف کردن کارگران تنش ماتریس پس از N عملیات bogo.روش توضیحات all تکرار روی تمام روشهای آزمون ماتریس زیر add جمع دو ماتریس N × N copy رونوشت از یک ماتریس N × N به ماتریسی دیگر div تقسیم یک ماتریس N × N بر یک عدد اسکالر frobenius ضرب فروبنیوس دو ماتریس N × N hadamard ضرب هادامار دو ماتریس N × N identity ایجاد یک ماتریس همانی N × N mean میانگین حسابی دو ماتریس N × N mult ضرب یک ماتریس N × N در یک عدد اسکالر negate قرینه (منفی) کردن یک ماتریس N × N prod ضرب دو ماتریس N × N sub تفریق یک ماتریس N × N از ماتریس N × N دیگر square ضرب یک ماتریس N × N در خودش trans ترانهاده کردن یک ماتریس N × N zero صفر کردن یک ماتریس N × N - --matrix-size N
- مشخص کردن اندازهٔ N × N ماتریسها. مقادیر کوچکتر منجر به تنشزایی محدود به توان محاسباتی ممیز شناور (floating point) شده، در حالی که مقادیر بزرگتر به تنشزایی محدود به پهنای باند حافظه نهان (cache) و/یا حافظه اصلی میانجامند.
- --matrix-yx
- انجام عملیات ماتریسی به ترتیب y در x به جای حالت پیشفرض x در y. این ترتیب نسبت به حالت پیشفرض غیربهینه بوده و توقفهای حافظه نهان دادهها (data cache stalls) بیشتری ایجاد خواهد کرد.
- تنشزای ماتریس سهبعدی (3D Matrix stressor)
- --matrix-3d N
- آغاز N
کارگر که
عملیات
گوناگون
ماتریس
سهبعدی را
روی مقادیر
ممیز شناور
اجرا
میکنند.
آزمایشها
روی
سختافزار
۶۴ بیتی x86
نشان
میدهد که
این گزینه
ترکیب
مناسبی از
عملیات
حافظه،
حافظهٔ
نهان و ممیز
شناور را
فراهم
ساخته و
روشی عالی
برای داغ
کردن
پردازنده (CPU)
است.
بهطور پیشفرض، این تنشزا تمام روشهای تنش ماتریس سهبعدی را یکییکی روی یک ماتریس با ابعاد ۱۲۸ × ۱۲۸ × ۱۲۸ عنصر اجرا میکند. میتوان یک روش مشخص تنش ماتریس سهبعدی را با گزینهٔ --matrix-3d-method تعیین کرد.
- --matrix-3d-method method
- مشخص کردن
یک روش تنش
ماتریس
سهبعدی.
روشهای
موجود برای
تنش ماتریس
سهبعدی به
شرح زیر
هستند:
روش توضیحات all پیمایش روی تمام روشهای تنش ماتریسِ زیر add جمع دو ماتریس N × N × N copy کپی کردن یک ماتریس N × N × N در ماتریسی دیگر div تقسیم یک ماتریس N × N × N بر یک عدد اسکالر (نردهای) frobenius ضرب فروبنیوس (Frobenius) دو ماتریس N × N × N hadamard ضرب هادامارد (Hadamard) دو ماتریس N × N × N identity ایجاد یک ماتریس همانی N × N × N mean میانگین حسابی دو ماتریس N × N × N mult ضرب یک ماتریس N × N × N در یک عدد اسکالر (نردهای) negate منفی کردن یک ماتریس N × N × N sub تفریق یک ماتریس N × N × N از ماتریس N × N × N دیگر trans ترانهاده کردن یک ماتریس N × N × N zero صفر کردن یک ماتریس N × N × N - --matrix-3d-ops N
- متوقف کردن کارگران تنش ماتریس سهبعدی پس از N عملیات bogo.
- --matrix-3d-size N
- مشخص کردن اندازهٔ N × N × N ماتریسها. مقادیر کوچکتر منجر به تنشزایی محدود به توان محاسباتی ممیز شناور شده، در حالی که مقادیر بزرگتر به تنشزایی محدود به حافظه نهان و/یا پهنای باند حافظه منجر میشوند.
- --matrix-3d-zyx
- اجرای عملیات ماتریس به ترتیب z در y در x به جای حالت پیشفرض x در y در z. این ترتیب نسبت به حالت پیشفرض غیربهینه بوده و توقفهای حافظه نهان دادهها (data cache stalls) بیشتری ایجاد خواهد کرد.
- تنشزای رقابت حافظه (Memory contention stressor)
- --mcontend N
- آغاز N کارگر که الگوهای خواندن/نوشتن ناشی از رقابت حافظه (memory contention) تولید میکنند. هر تنشزا با ۵ رشته (thread) اجرا میشود که در دو نگاشت مختلف از یک صفحهٔ فیزیکیِ مبناییِ یکسان، میخوانند و مینویسند. همچنین عملیاتهای کشینگ گوناگونی اجرا میشوند تا الگوهای دسترسی به حافظه به صورت غیربهینه درآیند. این رشتهها همچنین وابستگی پردازنده (CPU affinity) را بهطور تصادفی تغییر میدهند تا تنش مهاجرت حافظه و پردازنده را اعمال نمایند.
- --mcontend-numa
- تخصیص صفحههای نگاشتشده در حافظه به گرههای NUMA که بهطور تصادفی انتخاب شدهاند. این گزینه در سیستمهایی که از NUMA پشتیبانی نمیکنند غیرفعال است.
- --mcontend-ops N
- متوقف کردن تنشزاهای mcontend پس از N عملیات خواندن/نوشتن bogo.
- تنشزای سد حافظه (Memory barrier stressor - لینوکس)
- --membarrier N
- آغاز N کارگر که فراخوان سیستمی membarrier(2) را به کار میگیرند (فقط در لینوکس).
- --membarrier-ops N
- متوقف کردن کارگران تنش membarrier پس از N عملیات bogo membarrier.
- تنشزای کپی حافظه (memcpy)
- --memcpy N
- آغاز N کارگر که دادهها را با استفاده از memcpy(3) به درون یک بافر و از آن کپی کرده و سپس دادههای درون بافر را با استفاده از memmove(3) با ۳ همترازی (alignment) گوناگون جابهجا میکنند. این عمل حافظهٔ نهان دادهها و کپی حافظه را به چالش میکشد.
- --memcpy-method [ all | libc | builtin | naive | naive_o0 .. naive_o3 ]
- مشخص کردن
یک روش کپی memcpy.
روشهای
موجود memcpy به
شرح زیر
هستند:
روش توضیحات all استفاده از روشهای libc، builtin و naïve libc استفاده از توابع memcpy و memmove مربوط به libc؛ این مقدار پیشفرض است builtin استفاده از توابع بهینهسازیشدهٔ درونی کامپایلر (built-in) برای memcpy و memmove naive استفاده از کپی و جابهجایی بایتبهبایت ساده (naïve) ساختهشده با پرچمهای بهینهسازی پیشفرض کامپایلر naive_o0 استفاده از کپی و جابهجایی بایتبهبایت ساده و بهینهنشده naive_o1 استفاده از کپی و جابهجایی بایتبهبایت ساده با سطح بهینهسازی -O1 naive_o2 استفاده از کپی و جابهجایی بایتبهبایت ساده ساختهشده با بهینهسازی -O2 و در صورت امکان استفاده از بهینهسازیهای خاص CPU naive_o3 استفاده از کپی و جابهجایی بایتبهبایت ساده ساختهشده با بهینهسازی -O3 و در صورت امکان استفاده از بهینهسازیهای خاص CPU - --memcpy-ops N
- متوقف کردن کارگران تنش memcpy پس از N عملیات bogo memcpy.
- تنشزای پروندهٔ ناشناس (memfd stressor)
- --memfd N
- آغاز N کارگر که با استفاده از memfd_create(2) و ftruncate(2) برای تخصیص، و mmap(2) برای نگاشت تخصیص به فضای آدرس فرایند، تخصیصهایی با اندازهٔ ۱۰۲۴ صفحه ایجاد میکنند (فقط در لینوکس).
- --memfd-bytes N
- تخصیص N بایت به ازای هر کارگر تنش memfd؛ مقدار پیشفرض ۲۵۶ مگابایت است. میتوان اندازه را به صورت درصدی از کل حافظهٔ در دسترس یا در واحدهای Bytes، KBytes، MBytes و GBytes با استفاده از پسوندهای b، k، m یا g مشخص کرد..TP --memfd-fds N ایجاد N توصیفگر فایل memfd؛ پیشفرض 256 است. با این گزینه میتوان بین 8 تا 4096 توصیفگر فایل memfd را انتخاب کرد.
- --memfd-madvise
- فعالسازی توصیههای تصادفی صفحه با madvise بر روی نواحی نگاشتشده در حافظه memfd برای آزمودن بیشتر مدیریت حافظه مجازی (VM).
- --memfd-mlock
- تلاش برای نگهداشتن صفحات نگاشتشده با mmap در حافظه با استفاده از mlock(2)، که با جلوگیری از برونرفت صفحات به فضای Swap موجب فشار حافظه بیشتری میشود.
- --memfd-numa
- اختصاص صفحات نگاشتشده در حافظه به گرههای NUMA که بهصورت تصادفی انتخاب شدهاند. این قابلیت در سیستمهایی که از NUMA پشتیبانی نمیکنند غیرفعال است.
- --memfd-ops N
- توقف پس از N عملیات ساختگی (bogo ops) مربوط به memfd-create(2).
- --memfd-zap-pte
- آزمودن پاکسازی درایههای جدول صفحه (PTE) برای بازتولید یک باگ هسته لینوکس که با کامیت 5abfd71d936a8aefd9f9ccd299dea7a164a5d455 با عنوان “mm: don't skip swap entry even if zap_details specified” برطرف شده بود. این کار سرعت استرسور را به میزان چشمگیری کاهش میدهد و بنابراین گزینهای اختیاری (opt-in) در استرسور memfd است.
- استرسور اتصال گرم حافظه (Memory hotplug) (ویژه لینوکس)
- --memhotplug N
- راهاندازی N ورکر که نواحی اتصال گرم حافظه (memory hotplug) را آفلاین و آنلاین میکنند. فقط ویژه لینوکس است و به قابلیتهای CAP_SYS_ADMIN نیاز دارد.
- --memhotplug-mmap
- فعالسازی نگاشت و لغو نگاشتهای تصادفی حافظه از 1 K تا 1 MB پیش از هر رویداد آفلاین شدن.
- --memhotplug-ops N
- توقف استرسورهای memhotplug پس از N عملیات ساختگی آفلاین و آنلاین کردن حافظه.
- استرسور خواندن/نوشتن حافظه (Memory read/write)
- --memrate N
- راهاندازی N ورکر که یک بافر را با خواندنها و نوشتنهای 1024، 512، 256، 128، 64، 32، 16 و 8 بیتی میآزمایند. خواندنها و نوشتنهای 1024، 512 و 256 بیتی با کامپایلرهایی که از بردارهای عدد صحیح پشتیبانی میکنند در دسترس هستند. پردازندههای x86-64 که از نوشتنهای بدون کَش (غیرزمانی یا “nt”) پشتیبانی میکنند، نوشتنهای 128، 64 و 32 بیتی را نیز میآزمایند که نرخ نوشتن بالاتری را نسبت به نوشتنهای معمول در کَش ارائه میدهد. همچنین x86-64 ذخیرهسازیهای مکرر رشته را با استفاده از نوشتنهای 64، 32، 16 و 8 بیتی میآزماید. پردازندههایی که از خواندنهای پیشواکشی (prefetching) پشتیبانی میکنند، خواندنهای 64 بیتی پیشواکشیشده (“pf”) را نیز میآزمایند. این استرسور حافظه همچنین به کاربر اجازه میدهد حداکثر نرخ خواندن و نوشتن را تعیین کند. اگر هیچ نرخ خواندن یا نوشتنی مشخص نشود، استرسورها با حداکثر سرعت اجرا خواهند شد.
- --memrate-bytes N
- تعیین اندازه بافر حافظه تحت آزمایش. اندازه پیشفرض 256 MB است. اندازه را میتوان در واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با پسوندهای b، k، m یا g، یا بر اساس اندازههای کَش با L1، L2، L3 یا LLC (اندازه کَش سطح پایینتر) تعیین کرد.
- --memrate-discontiguous
- تلاش برای ناپیوسته ساختن صفحات فیزیکی نگاشتشده با mmap از طریق واداشتن صفحات به قرارگیری در مکانهای فیزیکی بهطور “تصادفی” درهمآمیخته.
- --memrate-flush
- تخلیه کَش (flush) بین هر آزمون ارزیابی حافظه برای حذف مزایای کَش در معیارهای نرخ حافظه.
- --memrate-method
- تعیین روش
تنش memrate؛ برخی
از روشها
فقط برای
معماریها
یا
زنجیرهابزارهای
خاصی که از
آنها
پشتیبانی
میکنند در
دسترس
هستند.
روشهای
تنش memrate موجود
به شرح زیر
توصیف
شدهاند:
روش توضیحات all پیمایش بر روی همه روشهای memrate زیر read128nt خواندن 128 بیت در هر خواندن با استفاده از بارگذاری غیرزمانی (non-temporal load) read128pf خواندن 128 بیت در هر خواندن با استفاده از پیشواکشی (prefetching) read64pf خواندن 64 بیت در هر خواندن با استفاده از پیشواکشی (prefetching) read1024 خواندن یک بردار 1024 بیتی در هر خواندن read512 خواندن یک بردار 512 بیتی در هر خواندن read256 خواندن یک بردار 256 بیتی در هر خواندن read128 خواندن 128 بیت در هر خواندن read64 خواندن 64 بیت در هر خواندن read32 خواندن 32 بیت در هر خواندن read16 خواندن 16 بیت در هر خواندن read8 خواندن 8 بیت در هر خواندن write64stoq نوشتن 64 بیت در هر نوشتن با دستور x86 rep stoq write32stow نوشتن 32 بیت در هر نوشتن با دستور x86 rep stow write16stod نوشتن 16 بیت در هر نوشتن با دستور x86 rep stod write8stob نوشتن 8 بیت در هر نوشتن با دستور x86 rep stob write64ds نوشتن 64 بیت در هر نوشتن با دستور x86 movdiri write128nt نوشتن 128 بیت در هر نوشتن با استفاده از ذخیرهسازی غیرزمانی (non-temporal store) write64nt نوشتن 64 بیت در هر نوشتن با استفاده از ذخیرهسازی غیرزمانی (non-temporal store) write32nt نوشتن 32 بیت در هر نوشتن با استفاده از ذخیرهسازی غیرزمانی (non-temporal store) write1024 نوشتن یک بردار 1024 بیتی در هر نوشتن write512 نوشتن یک بردار 512 بیتی در هر نوشتن write256 نوشتن یک بردار 256 بیتی در هر نوشتن write128 نوشتن 128 بیت در هر نوشتن write64 نوشتن 64 بیت در هر نوشتن write32 نوشتن 32 بیت در هر نوشتن write16 نوشتن 16 بیت در هر نوشتن write8 نوشتن 8 بیت در هر نوشتن memset نوشتن با استفاده از memset در libc - --memrate-ops N
- توقف پس از N عملیات ساختگی (bogo ops) تنش memrate.
- --memrate-rd-mbs N
- تعیین حداکثر نرخ مجاز خواندن بر حسب MB/sec. نرخ واقعی خواندن به نوسانات زمانبندی (scheduling jitter) و دسترسیهای حافظه از سوی سایر فرآیندهای در حال اجرا بستگی دارد. تنظیم این مقدار بر روی صفر، عملیات خواندن را غیرفعال میکند.
- --memrate-wr-mbs N
- تعیین حداکثر نرخ مجاز نوشتن بر حسب MB/sec. نرخ واقعی نوشتن به نوسانات زمانبندی (scheduling jitter) و دسترسیهای حافظه از سوی سایر فرآیندهای در حال اجرا بستگی دارد. تنظیم این مقدار بر روی صفر، عملیات نوشتن را غیرفعال میکند. استرسزای کوبش حافظه (Memory thrash stressor)
- --memthrash N
- آغاز N کارگر که به روشهای گوناگون یک بافر ۱۶ مگابایتی را میکوبند و تحت فشار قرار میدهند تا برای تحریک حد حرارتی (thermal overrun) تلاش کنند. هر استرسزا ۱ یا چند ریسه (thread) را آغاز خواهد کرد. شمار ریسهها به گونهای برگزیده میشود که دستکم ۱ ریسه به ازای هر CPU وجود داشته باشد. توجه داشته باشید که انتخاب بهینه برای N، مقداری است که بر شمار پردازندهها (CPUs) بخشپذیر باشد.
- --memthrash-method method
- مشخص کردن
یک روش
استرس memthrash.
روشهای
استرس memthrash در
دسترس به
شرح زیر
توصیف
شدهاند:
روش شرح all پیمایش روی تمام روشهای memthrash زیر chunk1 مقداردهی با memset به تکههای ۱ بایتی از دادههای تصادفی در مکانهای تصادفی chunk8 مقداردهی با memset به تکههای ۸ بایتی از دادههای تصادفی در مکانهای تصادفی chunk64 مقداردهی با memset به تکههای ۶۴ بایتی از دادههای تصادفی در مکانهای تصادفی chunk256 مقداردهی با memset به تکههای ۲۵۶ بایتی از دادههای تصادفی در مکانهای تصادفی chunkpage مقداردهی با memset به تکههایی به اندازه صفحه (page size) از دادههای تصادفی در مکانهای تصادفی copy128 رونویسی تکههای ۱۲۸ بایتی از تکه N + 1 به تکه N با دسترسیهای حافظه ۱۲۸ بیتی در صورت امکان. copy128nt رونویسی تکههای ۱۲۸ بایتی از تکه N + 1 به تکه N با خواندنها و نوشتنهای غیرزمانی (non-temporal) با دسترسیهای حافظه ۱۲۸ بیتی در صورت امکان. flip معکوس کردن (واژگونسازی) تمام بیتها در مکانهای تصادفی flush تخلیه خط حافظه پنهان (cache line flush) در مکانهای تصادفی lock قفل کردن مکانهایی که به صورت تصادفی انتخاب شدهاند (تنها پردازندههای Intel x86 و ARM) matrix در نظر گرفتن حافظه به عنوان یک ماتریس 2 × 2 و جابهجایی عناصر تصادفی memmove رونویسی تمام دادههای بافر به مکان بعدی حافظه memset مقداردهی حافظه با دادههای تصادفی با استفاده از memset memset64 مقداردهی حافظه با یک مقدار تصادفی ۶۴ بیتی در تکههای ۶۴ بایتی با استفاده از ذخیرهسازیهای غیرزمانی (non-temporal) در صورت امکان یا ذخیرهسازیهای عادی به عنوان جایگزین memsetstosd مقداردهی حافظه با استفاده از دستور ۳۲ بیتی rep stosd در x86 (تنها در x86) mfence ذخیرهسازیها همراه با ترتیببندی نوشتن (write serialization) numa پیوند حافظه (memory bind) صفحات در میان گرههای numa prefetch پیشواکشی دادهها در مکانهای تصادفی حافظه random اجرای تصادفی هر یک از روشهای memthrash به جز `random` و `all` reverse جابهجایی مقادیر ۸ بیتی از ابتدا به انتها و پیشروی به سمت میانه spinread حلقه چرخش (spin loop) برای خواندن مکرر از همان مکان تصادفی به تعداد 2↑19 بار spinwrite حلقه چرخش (spin loop) برای نوشتن مکرر در همان مکان تصادفی به تعداد 2↑19 بار swap پیمایش گامبهگام حافظه با جابهجا کردن بایتها در گامهای ۶۵ و ۱۲۹ بایتی swap64 پیمایش حافظه با جابهجا کردن تکههای ۶۴ بایتی مجاور swapfwdrev جابهجایی مقادیر ۶۴ بیتی از ابتدا به انتها و پیشروی به سمت میانه، و سپس از انتها به ابتدا و حرکت به سمت میانه. tlb پیمایش حافظه با گامهای غیربهینه از مضارب اول اندازه خط حافظه پنهان (cache line) همراه با خواندنها و سپس نوشتنها برای ایجاد خطاهای بافر ترجمه نشانی (TLB). - --memthrash-ops N
- توقف پس از N عملیات صوری (bogo operations) در memthrash.
- استرسزای مرتبسازی ادغامی BSD (BSD mergesort stressor)
- --mergesort N
- آغاز N کارگر که اعداد صحیح ۳۲ بیتی را با استفاده از mergesort(3) بیاسدی مرتب میکنند.
- --mergesort-method [ mergesort-libc | mergesort-nonlibc ]
- انتخاب پیادهسازی libc از mergesort یا یک پیادهسازی بهینهنشده از mergesort. در صورت در دسترس بودن، پیشفرض پیادهسازی libc است.
- --mergesort-ops N
- توقف کارگران استرس mergesort پس از N مرتبسازی صوری (bogo mergesorts).
- --mergesort-size N
- مشخص کردن شمار اعداد صحیح ۳۲ بیتی برای مرتبسازی؛ پیشفرض 262144 (256 × 1024) است.
- ترکیب فراداده فایل (File metadata mix)
- --metamix N
- آغاز N کارگر که ترکیبی از عملیات فراداده فایل را تولید میکنند. هر استرسزا ۱۶ فرایند همروند را اجرا میکند که هر یک فراداده یک فایل را با توالیهایی از open، ۲۵۶ بار lseek و write، سپس fdatasync، close، fsync و سپس stat، open، ۲۵۶ بار lseek، خواندنها (reads)، نگاشت گاهبهگاه فایل در حافظه، close، unlink و lstat میآزمایند.
- --metamix-bytes N
- تنظیم اندازه فایلهای metamix؛ پیشفرض ۱ مگابایت است. میتوان اندازه را به صورت درصدی (%) از فضای خالی سیستم فایل یا در واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با استفاده از پسوندهای b، k، m یا g مشخص کرد.
- --metamix-ops N
- توقف استرسزای metamix پس از N عملیات صوری metafile.
- استرسزای حافظه مقیم (Resident memory - mincore)
- --mincore N
- آغاز N کارگر که در تمام حافظه به صورت یک صفحه در هر نوبت پیمایش کرده و با استفاده از mincore(2) بررسی میکنند که آیا صفحه نگاشت شده و در حافظه مقیم است یا خیر. همچنین صفحهای را نگاشت و لغو نگاشت (unmap) میکند تا بررسی کند که آیا صفحه با استفاده از mincore(2) نگاشت شده است یا خیر.
- --mincore-ops N
- توقف پس از N عملیات صوری mincore. یک عملیات صوری mincore معادل ۳۰۰ فراخوانی mincore(2) است.
- --mincore-random
- به جای پیمایش ترتیبی صفحات، صفحات به صورت تصادفی انتخاب میشوند. روی نشانی برگزیدهشده با یک واحد شیفت به راست تکرار انجام میشود و توسط mincore بررسی میگردد تا زمانی که نشانی کمتر یا مساوی اندازه صفحه شود.
- استرسزای کمینه زمان خواب در nanosleep (Minimum sleep time in nanosleep stressor)
- --min-nanosleep N
- آغاز M کارگر که خوابهای نانوثانیهای را با استفاده از تأخیرهای خواب نانوثانیهای از توانهای دو به چالش میکشند. هنگامی که تمام نمونهها کامل شدند، کمینه، بیشینه و میانگین زمانهای خواب برای تأخیرهای خواب در تمامی نمونههای استرسزای min-nanosleep گزارش میشوند.
- --min-nanosleep-ops N
- توقف پس از اینکه N دور از اندازهگیریها در تمامی خوابها تکمیل شد.
- --min-nanosleep-max N
- تنظیم بیشینه تأخیر nanosleep مورد استفاده. اگر این مقدار توانی از دو نباشد، زمان تأخیر نانوثانیهای از توان دو قبلی استفاده میشود؛ برای نمونه، مشخص کردن 10000 مقدار 8192 نانوثانیه را برمیگزیند. --min-nanosleep-sched [ batch | deadline | ext | fifo | idle | other | rr ] انتخاب سیاست زمانبندی. توجه داشته باشید که deadline، fifo و rr نیازمند امتیازات کاربر ریشه (root) هستند.
- تنشزای خواندن/نوشتن ناتراز (Misaligned read/write stressor)
- --misaligned N
- آغاز N کارگر که عملیات خواندن و نوشتن ناتراز (misaligned) را انجام میدهند. بهطور پیشفرض، این گزینه خواندن و نوشتنهای ناتراز 128 بیتی را در قالب 8 × 16 بیت، 4 × 32 بیت، 2 × 64 بیت و 1 × 128 بیت در ابتدای مرز صفحه، در انتهای مرز صفحه و در سراسر مرز کَش (cache boundary) اعمال میکند. خواندن و نوشتنهای ناتراز در آفست 1 بایتی نسبت به تراز طبیعی نوع داده عمل میکنند. در برخی معماریها این امر میتواند موجب بروز SIGBUS، SIGILL یا SIGSEGV شود؛ این موارد مدیریت شده و روش تنشزای ناترازِ مسبب خطا غیرفعال میشود.
- --misaligned-method method
- روشهای
تنش ناتراز
در دسترس به
شرح زیر
توضیح داده
شدهاند:
روش توضیحات all پیمایش روی تمام روشهای ناتراز زیر int16rd خواندنهای عدد صحیح 8 × 16 بیتی int16wr نوشتنهای عدد صحیح 8 × 16 بیتی int16inc افزایشهای عدد صحیح 8 × 16 بیتی int16atomic افزایشهای اتمیک عدد صحیح 8 × 16 بیتی int32rd خواندنهای عدد صحیح 4 × 32 بیتی int32wr نوشتنهای عدد صحیح 4 × 32 بیتی int32wtnt ذخیرههای غیرزمانی (non-temporal) 4 × 32 بیتی (فقط x86) int32inc افزایشهای عدد صحیح 4 × 32 بیتی int32atomic افزایشهای اتمیک عدد صحیح 4 × 32 بیتی int64rd خواندنهای عدد صحیح 2 × 64 بیتی int64wr نوشتنهای عدد صحیح 2 × 64 بیتی int64wrds ذخیرههای مستقیم (direct stores) 4 × 64 بیتی (فقط x86) int64wtnt ذخیرههای غیرزمانی (non-temporal) 4 × 64 بیتی (فقط x86) int64inc افزایشهای عدد صحیح 2 × 64 بیتی int64atomic افزایشهای اتمیک عدد صحیح 2 × 64 بیتی int128rd خواندنهای عدد صحیح 1 × 128 بیتی int128wr نوشتنهای عدد صحیح 1 × 128 بیتی int128inc افزایشهای عدد صحیح 1 × 128 بیتی int128atomic افزایشهای اتمیک عدد صحیح 1 × 128 بیتی
توجه داشته باشید که برخی از این گزینهها (عملیات اتمیک و/یا عدد صحیح 128 بیتی) ممکن است در برخی سیستمها در دسترس نباشند.
- --misaligned-ops N
- توقف پس از N عملیات ساختگی (bogo op) ناتراز. یک عملیات ساختگی ناتراز معادل 65536 × 128 بیت خواندن یا نوشتن است.
- تنشزای Mknod/unlink (Mknod/unlink stressor)
- --mknod N
- آغاز N کارگر که با استفاده از mknod(2) و unlink(2) اقدام به ایجاد و حذف fifoها، فایلهای خالی و سوکتهای نامگذاریشده (named sockets) میکنند.
- --mknod-ops N
- توقف کارگران کوبش دایرکتوری (directory thrash) پس از N عملیات ساختگی mknod.
- تنشزای قفل/آزادسازی صفحات نگاشتشده در حافظه (Memory mapped pages lock/unlock stressor)
- --mlock N
- آغاز N کارگر که صفحات نگاشتشده در حافظه را با استفاده از mlock(2)، munlock(2)، mlockall(2) و munlockall(2) قفل و باز میکنند. این فرآیند با نگاشت سه صفحهٔ متوالی و سپس قفل کردن صفحهٔ دوم انجام میشود، بنابراین تضمین میکند که صفحات غیرمتوالی قفل شدهاند. سپس این عمل تا رسیدن به حداکثر mlockهای مجاز یا حداکثر 262144 نگاشت تکرار میشود. در ادامه، تمام نگاشتهای بعدی قفل (mlock) میشوند و کارگر تلاش میکند 262144 صفحه را نگاشت کند، سپس تمام صفحات باز (munlock) شده و نگاشت صفحات لغو میشود.
- --mlock-ops N
- توقف پس از N عملیات ساختگی mlock.
- تنشزای فرآیندهای فرزند متعدد برای قفل/آزادسازی صفحات نگاشتشده در حافظه (Many child memory mapped page lock/unlock process stressor)
- --mlockmany N
- آغاز N کارگر که در مجموع بهطور پیشفرض 1024 فرآیند فرزند (child process) منشعب (fork) میکنند؛ هر فرزند تلاش میکند بهصورت ناشناس mmap(2) کرده و حداکثر حافظهٔ مجاز برای قفل شدن را mlock(2) نماید. این آزمون تنش با ردیابی حافظهٔ کم و تخصیصهای swap تلاش میکند از سوآپینگ (تبادل با دیسک) جلوگیری کند (اما ممکن است مقداری تبادل رخ دهد). هنگامی که تعداد فرآیندهای فرزند به حداکثر برسد یا تمام حافظهٔ اصلی (in-core) قابل قفلشدن قفل شود، فرآیندهای فرزند متوقف (kill) شده و آزمون تنش تکرار میشود.
- --mlockmany-ops N
- توقف پس از N عملیات mlockmany (ترکیب mmap و mlock).
- --mlockmany-procs N
- تنظیم تعداد فرآیندهای فرزندی که باید به ازای هر تنشزا ایجاد شوند. مقدار پیشفرض، آغاز حداکثر 1024 فرآیند فرزند در مجموع در تمام تنشزاها است. این گزینه امکان تنظیم N فرآیند فرزند به ازای هر تنشزا را فراهم میکند.
- تنشزای نگاشت حافظه (mmap/munmap stressor)
- --mmap N
- آغاز N کارگر که بهطور پیوسته mmap(2)/munmap(2) را فراخوانی میکنند. نگاشت اولیه یک قطعهٔ بزرگ است (اندازه با --mmap-bytes مشخص میشود) و پس از آن لغو نگاشتهای شبهتصادفی 4 کیلوبایتی، سپس نگاشتهای شبهتصادفی 4 کیلوبایتی و بعد لغو نگاشتهای خطی 4 کیلوبایتی انجام میگیرد. توجه داشته باشید در صورتی که حافظهٔ فیزیکی و swap کافی در دسترس نباشد، این امر میتواند در سیستمهای لینوکس موجب فعالسازی OOM killer هسته شود. گزینهٔ MAP_POPULATE برای پر کردن صفحات در حافظه در سیستمهایی که از آن پشتیبانی میکنند استفاده میشود. بهطور پیشفرض از نگاشتهای ناشناس استفاده میشود، با این حال گزینههای --mmap-file و --mmap-async امکان انجام نگاشتهای مبتنی بر فایل را در صورت تمایل فراهم میکنند.
توجه داشته باشید که از نسخهٔ 0.17.05 در stress-ng، گزینههای --mmap-madvise، --mmap-mergeable، --mmap-mprotect، --mmap-slow-munmap و --mmap-write-check باید برای فعالسازی رفتار تنشزای mmap پیش از نسخهٔ 0.17.05 استفاده شوند.
- --mmap-async
- فعالسازی نگاشت حافظهٔ مبتنی بر فایل و استفاده از msync ناهمگام روی هر صفحه، --mmap-file را ببینید.
- --mmap-bytes N
- تخصیص مجموعاً N بایت برای تمام نمونههای تنشزای mmap؛ مقدار پیشفرض 256 مگابایت (256 MB) است. میتوان اندازه را بهصورت درصدی (%) از کل حافظهٔ در دسترس یا در واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با استفاده از پسوندهای b، k، m یا g مشخص کرد.
- --mmap-file
- فعالسازی نگاشت حافظهٔ مبتنی بر فایل و استفاده از msync همگام بهطور پیشفرض روی هر صفحه.
- --mmap-madvise
- فعالسازی تنظیمات تصادفی madvise(2) روی صفحات.
- --mmap-mergeable
- علامتگذاری صفحات بهعنوان ادغامپذیر (mergeable) از طریق madvise(2) در صورت امکان..TP --mmap-mlock تلاش میکند تا صفحههای نگاشتشده توسط mmap را با استفاده از mlock(2) در حافظه قفل کند که با جلوگیری از خروج صفحهها به فضای swap، فشار حافظهٔ بیشتری ایجاد میکند.
- --mmap-mmap2
- در صورت در دسترس بودن mmap2، برای آفستهای همتراز با صفحهٔ 4 K از mmap2(2) استفاده میکند؛ در غیر این صورت به mmap بازمیگردد.
- --mmap-mprotect
- تنظیمات حفاظت (protection) را روی هر صفحه از حافظه تغییر میدهد. هر بار که یک صفحه یا گروهی از صفحهها نگاشت یا بازنگاشت (remap) میشوند، این گزینه صفحهها را به حالتهای فقط-خواندنی، فقط-نوشتنی، فقط-اجرایی و خواندنی-نوشتنی درمیآورد.
- --mmap-numa
- صفحههای نگاشتشده در حافظه را به گرههای NUMA که بهطور تصادفی انتخاب شدهاند تخصیص میدهد. این گزینه برای سیستمهایی که از NUMA پشتیبانی نمیکنند غیرفعال است.
- --mmap-odirect
- نگاشت حافظه بر پایهٔ فایل را فعال کرده و از I/O مستقیم O_DIRECT استفاده میکند.
- --mmap-ops N
- متوقف کردن پردازههای کارگر سنجشگر mmap پس از N عملیات bogo.
- --mmap-osync
- نگاشت حافظه بر پایهٔ فایل را فعال کرده و از تکمیل جامعیت I/O همگام O_SYNC استفاده میکند.
- --mmap-slow-munmap
- لغو نگاشت (unmap) حافظه را صفحه به صفحه انجام میدهد، به جای آنکه صفحههای پیوسته را در یک لغو نگاشت بزرگ آزادسازی کند. این امر میتواند هنگام اجرا با سنجشگرهای همروند متعدد mmap باعث رقابت بر سر قفل (lock contention) شده و سرعت سنجشگر را کاهش دهد.
- --mmap-stressful
- گزینههای --mmap-file، --mmap-madvise، --mmap-mergeable، --mmap-mlock، --mmap-mprotect، --mmap-odirect و --mmap-slow-munmap را فعال میکند.
- --mmap-write-check
- نوشتن یک مقدار بررسی ۶۴ بیتی یکتا در هر صفحه برای تمام صفحهها و سپس خواندن آن مقدار جهت بررسی صحت (sanity check). این کار صفحههای تازه نگاشتشده در حافظه را وادار به ایجاد خطای صفحه (fault-in) میکند که سرعت عملیاتهای bogo-op در نگاشت mmap را کاهش میدهد. این گزینه همچنین میتواند در سیستمهایی با رشتههای پردازنده بسیار و با حسابرسی حافظه در cgroup، موجب رقابت بر سر قفل در تخصیص و لغو نگاشت صفحه شود.
- سنجشگر نگاشت/لغو نگاشت تصادفی حافظه (Random memory map/unmap stressor)
- --mmapaddr N
- آغاز N پردازهٔ کارگر که صفحهها را در یک مکان تصادفی از حافظه که هنوز نگاشت نشده است، نگاشت میکنند. در ماشینهای ۶۴ بیتی، آدرس تصادفی یک آدرس ۳۲ بیتی یا ۶۴ بیتی است که بهطور تصادفی انتخاب میشود. اگر نگاشت موفقیتآمیز باشد، صفحهٔ دومی از نخستین آدرس نگاشتشده در حافظه نگاشت میشود. این سنجشگر mmap/munmap، mincore و مدیریت segfault را محک میزند.
- --mmapaddr-mlock
- تلاش میکند تا صفحههای نگاشتشده با mmap را با mlock(2) در حافظه قفل کند که با جلوگیری از خروج صفحهها به فضای swap، موجب فشار حافظهٔ بیشتری میشود.
- --mmapaddr-ops N
- توقف پس از N عملیات bogo در نگاشت mmap با آدرس تصادفی.
- سنجشگر نگاشت حافظه با کپی-هنگام-نوشتن و لغو نگاشت (Memory map Copy-on-Write and unmap stressor)
- --mmapcow N
- آغاز N
پردازهٔ
کارگر که
تخصیص
صفحه،
تغییر
(اجبار به Copy-on-Write)
و لغو نگاشت
صفحه را
میآزمایند.
نواحی
حافظه از ۱
صفحه تا
حداکثر
اندازهٔ
قابلنگاشت
تخصیص داده
میشوند.
سپس هر صفحه
در این
نواحی
تغییر
یافته، در
صورت امکان
حافظهٔ
نهان (cache)
تخلیه (flush) شده
و لغو نگاشت
میشود. این
سنجشگر نرخ
خطای صفحه (page
fault) بالایی
تولید
میکند.
برای هر
ناحیهٔ
نگاشتشده،
۶ راهبرد
تصادفی
مختلف برای
محک زدن هر
صفحه اتخاذ
میشود:
تغییر و لغو نگاشت ترتیبی صفحهها تغییر و لغو نگاشت ترتیبی صفحهها (ابتدا صفحههای زوج، سپس صفحههای فرد) گامهای اندازهٔ اول (prime) صفحهها، تغییر و لغو نگاشت صفحه تغییر و لغو نگاشت ترتیبی معکوس صفحهها تغییر و لغو نگاشت ترتیبی معکوس صفحهها (ابتدا صفحههای زوج، سپس صفحههای فرد) تغییر یک صفحهٔ تصادفی منفرد و لغو نگاشت تمام صفحهها تغییر و دستکاری مجدد صفحههای تصادفی انتخابشده - --mmapcow-fork
- ایجاد پردازهٔ فرزند با fork جهت محک زدن صفحهها بهطور همروند با والد به منظور اِعمال فشار بیشتر بر مدیریت صفحهها.
- --mmapcow-free
- پس از تغییر هر صفحه و پیش از لغو نگاشت هر صفحه، از madvise(2) با MADV_FREE (در صورت در دسترس بودن) برای اعلام آزاد بودن صفحه استفاده میکند.
- --mmapcow-mlock
- تلاش برای قفل کردن هر صفحهٔ تغییریافته با mlock(2)؛ این کار میتواند تعداد خطاهای صفحه (page faults) را افزایش دهد. این گزینه تنها با فراخوان سیستمی mlock2 در دسترس است.
- --mmapcow-numa
- صفحههای نگاشتشده در حافظه را به گرههای NUMA که بهطور تصادفی انتخاب شدهاند تخصیص میدهد. این گزینه برای سیستمهایی که از NUMA پشتیبانی نمیکنند غیرفعال است.
- --mmapcow-ops N
- توقف پس از تغییر و لغو نگاشت N صفحه.
- سنجشگر نگاشت حافظه با انشعاب پردازه (Forked memory map stressor)
- --mmapfork N
- آغاز N پردازهٔ کارگر که هر کدام ۳۲ پردازهٔ فرزند ایجاد (fork) میکنند؛ هر یک از فرزندان تلاش میکند مقداری از حافظهٔ آزاد باقیمانده در سیستم را تخصیص دهد (در حالی که سعی دارد از هرگونه سوآپینگ پرهیز کند). پردازههای فرزند سپس با استفاده از madvise(2) راهنمایی (hint) میدهند که این تخصیص مورد نیاز خواهد بود، سپس با memset آن را صفر میکنند، و پیش از خروج با madvise اعلام میکنند که دیگر نیازی به آن نیست. این امر فعالیت چشمگیری در حافظهٔ مجازی (VM)، خطاهای حافظه نهان (cache misses) بسیار و حداقل سوآپ را ایجاد میکند.
- --mmapfork-bytes N
- اندازهٔ ناحیهٔ نگاشتشده حافظه برای fork را تعیین میکند. میتوان اندازه را در واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با پسوندهای b، k، m یا g مشخص کرد.
- --mmapfork-ops N
- توقف پس از N عملیات bogo در mmapfork.
- --mmapfork-procs N
- تعداد پردازههای فرزند جهت انشعاب (fork) به ازای هر کارگر را مشخص میکند. دامنهٔ مجاز از ۱ تا ۲۵۶ با مقدار پیشفرض ۳۲ است.
- سنجشگر نگاشت فایلی حافظه (Memory map files stressor)
- --mmapfiles N
- آغاز N پردازهٔ کارگر که تلاش میکنند تا ۵۱۲ × ۱۰۲۴ فایل را در حافظه نگاشت و سپس لغو نگاشت کنند. این سنجشگر پوشههای /lib، /lib32، /lib64، /boot، /bin، /etc، /sbin، /usr، /var، /sys و /proc را پیمایش کرده و تلاش میکند فایلهای موجود در این شاخهها را در حافظه نگاشت کند. توجه داشته باشید که نرخ bogo-ops نگاشت به سرعت دسترسی به فایلها روی این سیستمهای فایل بستگی خواهد داشت.
- --mmapfiles-numa
- صفحههای نگاشتشده در حافظه را به گرههای NUMA که بهطور تصادفی انتخاب شدهاند تخصیص میدهد. این گزینه برای سیستمهایی که از NUMA پشتیبانی نمیکنند غیرفعال است.
- --mmapfiles-ops N
- توقف پس از N عملیات نگاشت/لغو نگاشت حافظه.
- --mmapfiles-populate
- رفتار پیشفرض، انجام نگاشت حافظه بدون ایجاد خطای صفحه (fault) در حافظهٔ فیزیکی است. این گزینه در صورت در دسترس بودن از MAP_POPULATE استفاده میکند و همچنین نخستین بایت هر صفحه را میخواند تا مطمئن شود صفحهها در حافظه بارگذاری (fault-in) شدهاند و پر کردن حافظه از فایل اجبار شود.
- --mmapfiles-shared
- رفتار پیشفرض استفاده از نگاشت فایلهای خصوصی در حافظه است؛ با این حال، با این گزینه از نگاشتهای حافظهٔ اشتراکی (shared memory mappings) استفاده خواهد شد.
- سنجشگر نگاشت حافظه با آدرس ثابت (Fixed address memory map stressor)
- --mmapfixed N
- آغاز N پردازهٔ کارگر که تخصیصهای آدرس ثابت را از بالاترین آدرس مجازی تا پایین به سمت 128 K انجام میدهند. اندازههای تخصیصیافته از ۱ صفحه تا ۸ صفحه بوده و فلگهای تصادفی گوناگون mmap شامل MAP_SHARED/MAP_PRIVATE، MAP_LOCKED، MAP_NORESERVE و MAP_POPULATE استفاده میشوند. در صورت موفقیتآمیز بودن نگاشت، تخصیص ابتدا بر اساس یک نقطه شروع تصادفی به محدودهٔ بزرگی از آدرسها بازنگاشت (remap) میشود و در نهایت به آدرسی که چندین صفحه در حافظه بالاتر است بازنگاشت میگردد. روی نگاشتها و بازنگاشتها از گزینههای تصادفی madvise استفاده میشود تا آزمون عمیقتری بر نگاشتها صورت گیرد.
- --mmapfixed-mlock
- تلاش میکند تا صفحههای نگاشتشده با mmap را با mlock(2) در حافظه قفل کند که با جلوگیری از خروج صفحهها به فضای swap، موجب فشار حافظهٔ بیشتری میشود.
- --mmapfixed-numa
- صفحههای نگاشتشده در حافظه را به گرههای NUMA که بهطور تصادفی انتخاب شدهاند تخصیص میدهد. این گزینه برای سیستمهایی که از NUMA پشتیبانی نمیکنند غیرفعال است.
- --mmapfixed-ops N
- توقف پس از N عملیات bogo در نگاشت حافظه mmapfixed. فشارآور نگاشت حافظه با صفحههای بزرگ (Huge page)
- --mmaphuge N
- شروع N کارگر که تلاش میکنند مجموعهای از صفحههای بزرگ (huge pages) و نگاشتهایی با اندازهٔ صفحهٔ بزرگ را mmap کنند. نگاشتهای موفق با تنظیمات MADV_NOHUGEPAGE و MADV_HUGEPAGE از طریق madvise پیکربندی میشوند و سپس ۱/۶۴ام از صفحههای با اندازهٔ صفحهٔ کوچک معمولی لمس (touch) میشوند. در نهایت، پیش از آنکه مجموعه صفحهها unmap شوند، تلاشی برای unmap کردن صفحهای با اندازهٔ صفحهٔ کوچک در انتهای نگاشت انجام میگیرد (این مورد ممکن است روی صفحههای بزرگ با خطا مواجه شود). بهطور پیشفرض در هر دور نگاشت ۸۱۹۲ تلاش انجام میشود یا تا زمانی که swap شدن شناسایی شود ادامه مییابد.
- --mmaphuge-file
- تلاش برای mmap روی یک فایل موقت ۱۶ مگابایتی و آفستهای تصادفی ۴ کیلوبایتی. در صورت شکست، در عوض از نگاشتهای ناشناس (anonymous) استفاده میشود.
- --mmaphuge-mlock
- تلاش برای قفل کردن صفحههای بزرگ نگاشتشده با mmap در حافظه با استفاده از mlock(2) که با جلوگیری از swap شدن صفحهها، فشار حافظهٔ بیشتری ایجاد میکند.
- --mmaphuge-mmaps N
- تنظیم تعداد نگاشتهای صفحه بزرگی که باید در هر دور نگاشت برای آنها تلاش شود. مقدار پیشفرض ۸۱۹۲ نگاشت است.
- --mmaphuge-numa
- تخصیص صفحههای نگاشتشدهٔ حافظه به گرههای تصادفی NUMA. این گزینه برای سیستمهایی که از NUMA پشتیبانی نمیکنند غیرفعال است.
- --mmaphuge-ops N
- توقف پس از N عملیات ساختگی (bogo operations) در mmaphuge.
- فشارآور حداکثر نگاشت حافظه به ازای هر فرایند
- --mmapmany N
- شروع N کارگر که تلاش میکنند حداکثر نگاشتهای حافظهٔ مجاز به ازای هر فرایند را ایجاد کنند. این کار با نگاشت ۳ صفحهٔ متوالی و سپس unmap کردن صفحهٔ میانی و در نتیجه تقسیم نگاشت به دو بخش محقق میشود. این عمل تا زمان رسیدن به حداکثر نگاشتهای مجاز یا ایجاد حداکثر ۲۶۲۱۴۴ نگاشت تکرار میشود.
- --mmapmany-mlock
- تلاش برای قفل کردن صفحههای بزرگ نگاشتشده با mmap در حافظه با استفاده از mlock(2) که با جلوگیری از swap شدن صفحهها، فشار حافظهٔ بیشتری ایجاد میکند.
- --mmapmany-numa
- تخصیص صفحههای نگاشتشدهٔ حافظه به گرههای تصادفی NUMA. این گزینه برای سیستمهایی که از NUMA پشتیبانی نمیکنند غیرفعال است.
- --mmapmany-ops N
- توقف پس از N عملیات ساختگی (bogo operations) در mmapmany.
- عملیات نگاشت تصادفی در نگاشت حافظه
- --mmaprandom N
- شروع N کارگر که ترکیبی تصادفی از فراخوانیهای سیستمی مرتبط با نگاشت حافظه را روی نگاشتهایی با اندازههای تصادفی به کار میگیرند. نگاشتها یا به صورت نگاشت ناشناس (anonymous) و یا نگاشت فایل (روی یک فایل کوچک یا در صورت امکان روی یک فایل memfd) هستند. این فرایند mmap(2) (با گزینهها و پرچمهای تصادفی)، munmap(2)، mlock(2)، munlock(2)، madvise(2)، posix_madvise(3)، mincore(2)، mremap(2)، msync(2)، mprotect(2)، remap_file_pages(2)، خواندن حافظه، نوشتن در حافظه و پاکسازی حافظهٔ پنهان (cache flushing) را به کار میبندد. در صورت امکان، از گزینههای تصادفی برای تولید ترکیبی از عملیاتهای نگاشت حافظه که عمدتاً معتبر (و برخی نامعتبر) هستند استفاده میشود. برای تمام فراخوانیهای سیستمی و عملیاتهای حافظهٔ موفق، سنجهها گزارش میشوند.
- --mmaprandom-ops N
- توقف پس از N عملیات ساختگی (bogo operations) نگاشت تصادفی حافظه. بهطور کلی، هر bogo-op معادل یک فراخوانی سیستمی مرتبط با حافظه است (بهجز عملیاتهای خواندن/نوشتن/حافظهٔ پنهان).
- --mmaprandom-mappings N
- انتخاب حداکثر تعداد نگاشتهای حافظه؛ مقدار پیشفرض ۱۰۲۴ و بازهٔ مجاز از ۱ تا ۶۵۵۳۶ است.
- --mmaprandom-maxpages N
- انتخاب حداکثر تعداد صفحاتی که باید در حافظه نگاشت شوند؛ مقدار پیشفرض ۸ و بازهٔ مجاز ۲ تا ۱۰۲۴ است. صفحههای نگاشتشده بهطور تصادفی از ۱ تا maxpages انتخاب میشوند.
- --mmaprandom-numa
- تخصیص تصادفی صفحههای نگاشتشدهٔ حافظه به گرههای تصادفی NUMA. این گزینه برای سیستمهایی که از NUMA پشتیبانی نمیکنند غیرفعال است.
- فشارآور آزمون دشوار نگاشت حافظه (Memory map torture)
- --mmaptorture N
- شروع N کارگر که عملیاتهای نگاشت حافظه را روی یک فایل مشترک اجرا میکنند. نگاشتهایی با اندازههای مختلف تصادفی با فراخوانیهای madvise(2)، mremap(2)، mprotect(2)، msync(2)، mlock(2)، munlock(2)، mseal(2) و mincore(2) تحت فشار سنگین قرار میگیرند، در حالی که فایل زیرین از طریق نوشتن، کوتاهسازی (truncation) و ایجاد حفره (hole punching) تغییر مییابد. دادههای نگاشتشده خوانده، نوشته و دوباره با فایل همگامسازی (sync) میشوند. در سیستمهای NUMA، صفحهها بهطور تصادفی در بین گرههای NUMA توزیع میشوند. تمام این فعالیتها باعث خطای حافظهٔ پنهان (cache misses)، درگیر شدن TLB و ایجاد وقفههای IPI بین پردازندهها میشود.
- --mmaptorture-bytes N
- تخصیص مجموعاً N بایت برای تمام نمونههای فشارآور mmaptorture؛ مقدار پیشفرض ۲۵۶ مگابایت است. میتوان اندازه را به صورت درصدی از کل حافظهٔ در دسترس یا با واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با پسوندهای b، k، m یا g مشخص کرد.
- --mmaptorture-msync N
- صفحههای نگاشتشدهٔ حافظه چندین بار در هر عملیات ساختگی msync میشوند؛ این گزینه درصد صفحاتی را که در هر عملیات msync همگامسازی میشوند تعیین میکند. مقدار پیشفرض ۱۰٪ است. مشخص کردن مقدار صفر، عملیات msync را غیرفعال میکند.
- --mmaptorture-ops N
- توقف پس از N تکرار از عملیاتهای آزمون دشوار نگاشت حافظه.
- فشارآور بارگذاری ماژول هسته (لینوکس)
- --module N
- شروع N کارگر که از finit_module() برای بارگذاری ماژول مشخصشده یا ماژول آزمایشی hello (در صورت وجود) استفاده میکنند. روشهای گوناگونی برای آزمایش بارگذاری ماژولها وجود دارد: استفاده از فراخوانیهای modprobe در یک حلقه، استفاده از بارگذار خودکار ماژول هسته، و این فشارآور module در stress-ng. برای آزمون فشار modprobe میتوان بهسادگی برنامهٔ modprobe فضای کاربری را در یک حلقه اجرا کرد. برای آزمون فشار بارگذار خودکار ماژول هسته، میتوان با استفاده از اسکریپت tools/testing/selftests/kmod/kmod.sh هستهٔ بالادستی آزمون فشار را اجرا نمود. این فرایند در نهایت modprobe را فراخوانی میکند و محدودیتهای داخلی خاص خود را دارد تا از هسته در برابر درخواستهای همزمان بیش از حد محافظت نماید. فراخوانی modprobe در فضای کاربری همچنین در صورت وجود همان ماژول، از فراخوانیها جلوگیری میکند. فشارآور module در stress-ng طراحی شده است تا به آزمون فشار فراخوانی سیستمی finit_module() حتی در صورت بارگذاری قبلی ماژول کمک کند و شرایط رقابتی (race conditions) را که در غیر این صورت بازتولید آنها دشوار است بیازماید.
- --module-name NAME
- نام (NAME) ماژول مورد استفاده، به عنوان مثال: test_module، xfs، ext4. بهطور پیشفرض از test_module استفاده میشود، بنابراین CONFIG_TEST_LKM باید در هسته فعال باشد. وابستگیهای ماژول باید پیش از اجرای این آزمونهای فشارآور بارگذاری شوند، زیرا این گزینه اجرای finit_module() را تحت فشار قرار میدهد و از modprobe استفاده نمیکند.
- --module-no-modver
- نادیده گرفتن modversions ماژول هنگام استفاده از finit_module().
- --module-no-vermag
- نادیده گرفتن نسخههای ماژول هنگام استفاده از finit_module().
- --module-no-unload
- تخلیه نکردن ماژول بلافاصله پس از بارگذاری آن با finit_module().
- --module-ops N
- توقف پس از N چرخهٔ بارگذاری/تخلیهٔ ماژول.
- فشارآور محاسبات مونتکارلو برای π، e و انتگرالهای گوناگون
- --monte-carlo N
- شروع N فشارآور که π و e (عدد اویلر) را با استفاده از آزمایشهای محاسباتی مونتکارلو با مولدهای گوناگون اعداد تصادفی محاسبه میکنند.
- --monte-carlo-method [ all | e | exp | pi | sin | sqrt | squircle ]
- تعیین
محاسباتی
که باید
انجام شود؛
گزینهها
به شرح زیر
است:
روش توضیحات all استفاده از تمام روشهای محاسباتی مونتکارلو e محاسبهٔ ثابت اویلر e exp انتگرالگیری از exp(x ↑ 2) برای بازهٔ x = 0..1 pi محاسبهٔ π از روی مساحت دایره sin انتگرالگیری از sin(x) برای بازهٔ x = 0..π sqrt انتگرالگیری از sqrt(1 + x ↑ 4) برای بازهٔ x = 0..1 squircle مساحت یک مربعدایرهٔ (squircle) یکه x ↑ 4 + y ↑ 4 = 1 --monte-carlo-ops N توقف پس از N آزمایش محاسباتی مونت کارلو (Monte Carlo). --monte-carlo-rand [ all | drand48 | getrandom | lcg | pcg32 | mwc64 | random | xorshift ] تعیین مولد اعداد تصادفی جهت استفاده؛ گزینهها به شرح زیر هستند: lB2 lB l lx. روش توضیحات all استفاده از تمام مولدهای اعداد تصادفی. arc4 استفاده از مولد شبهتصادفی با امنیت رمزنگاری arc4random(3) در libc. drand48 استفاده از الگوریتم همنهشتی خطی drand48(3) در libc با استفاده از محاسبات عدد صحیح ۴۸ بیتی. getrandom استفاده از فراخوان سیستمی getrandom(2) برای مقادیر تصادفی. lcg استفاده از یک مولد همنهشتی خطی ۳۲ بیتی پارکر-میلر (Park-Miller)، همراه با بهینهسازی تقسیم. pcg32 استفاده از یک مولد همنهشتی جایگشتی ۳۲ بیتی اونیل (O'Neill). mwc64 استفاده از مولد اعداد تصادفی ۶۴ بیتی ضرب با رقم نقلی (Multiply With Carry) در stress-ng. random استفاده از مولد اعداد تصادفی با بازخورد جمعی غیرخطی random(3) در libc. xorshift استفاده از مولد اعداد تصادفی ثبات تغییر شیفت ۳۲ بیتی مارسالیا (Marsaglia). - --monte-carlo-samples N
- تعیین تعداد نمونههای عدد تصادفی مورد استفاده برای محاسبهٔ π یا e؛ پیشفرض 100000 است.
- استرسزای محاسبات ممیز شناور با دقت چندگانه (mpfr)
- --mpfr N
- اجرای N
کارگر که
عملیات
ممیز شناور
با دقت
چندگانه را
با استفاده
از
کتابخانهٔ
GNU Multi-Precision Floating Point Reliable (mpfr) به
کار
میکشند.
محاسبات
انجامشده
به شرح زیر
است:
روش توضیحات apery محاسبهٔ ثابت آپری (Apery) ζ(3)؛ یعنی مجموع 1/(n ↑ 3). cosine محاسبهٔ cos(θ) به ازای θ = 0 تا 2π در ۱۰۰ گام. euler محاسبهٔ e با استفاده از رابطهٔ n = (1 + (1 ÷ n)) ↑ n. exp محاسبهٔ ۱۰۰۰ تابع نمایی. log محاسبهٔ ۱۰۰۰ لگاریتم طبیعی. omega محاسبهٔ ثابت امگا با تعریف Ωe↑Ω = 1 با بهرهگیری از تکرار بهینهٔ Ωn+1 = (1 + Ωn) / (1 + e↑Ωn). phi محاسبهٔ نسبت طلایی ϕ با استفاده از سریها. sine محاسبهٔ sin(θ) به ازای θ = 0 تا 2π در ۱۰۰ گام. nsqrt محاسبهٔ ریشهٔ دوم با استفاده از روش نیوتن-رافسون (Newton-Raphson). - --mpfr-ops N
- توقف کارگرها پس از N تکرار از انواع عملیات ممیز شناور با دقت چندگانه.
- --mpfr-precision N
- مشخص کردن میزان دقت بر حسب ارقام دودویی (بیت) برای عملیات ممیز شناور. مقدار پیشفرض 1000 بیت است و بازهٔ مجاز بین 32 تا 1000000 میباشد (بسیار کند).
- استرسزای محافظت حافظه (Memory protection)
- --mprotect N
- اجرای N کارگر که تغییر تنظیمات محافظت از صفحه و دسترسی به حافظه را پس از هر تغییر به کار میکشند. به ازای هر کارگر، ۸ پردازه روی یک ناحیهٔ حافظهٔ مشترک تنها با چند صفحه بر سر تغییر تنظیمات محافظت از صفحه رقابت میکنند تا موجب تخلیهٔ TLB (TLB flushes) شوند. خواندن و نوشتن روی این صفحات میتواند موجب بروز خطای دسترسی غیرمجاز حافظه (segmentation fault) شود که توسط استرسزا مهار میشوند. تمام ترکیبهای ممکن تنظیمات محافظت صفحه، از جمله حالتهای نامعتبر، آزموده میشوند.
- --mprotect-ops N
- توقف پس از N بار فراخوانی mprotect.
- استرسزای صف پیام POSIX (لینوکس)
- --mq N
- اجرای N پردازهٔ فرستنده و گیرنده که پیوسته اقدام به ارسال و دریافت پیام با استفاده از صفهای پیام POSIX میکنند. (تنها در لینوکس).
- --mq-ops N
- توقف پس از تکمیل N عملیات صوری (bogo) ارسال پیام POSIX.
- --mq-size N
- تعیین اندازهٔ صف پیام POSIX. اندازهٔ پیشفرض 10 پیام است که در بیشتر سیستمهای لینوکسی حداکثر اندازهٔ مجاز برای کاربران عادی محسوب میشود. چنانچه اندازهٔ مشخصشده بزرگتر از حد مجاز صف پیام باشد، یک پیام هشدار صادر شده و حداکثر اندازهٔ مجاز به جای آن اعمال میشود.
- استرسزای بازنگاشت حافظه (لینوکس)
- --mremap N
- اجرای N کارگر که به طور مداوم mmap(2)، mremap(2) و munmap(2) را فراخوانی میکنند. نگاشت بینام اولیه یک بخش بزرگ است (اندازه توسط --mremap-bytes مشخص میشود) و سپس به صورت مکرر با بازنگاشت به اندازهٔ نصف کاهش مییابد تا به اندازهٔ یک صفحه برسد و مجدداً به اندازهٔ اولیه بازگردد. این کارگر تنها برای لینوکس در دسترس است.
- --mremap-bytes N
- تخصیص حافظهٔ اولیه به میزان N بایت به ازای هر کارگر استرس بازنگاشت؛ مقدار پیشفرض 256 MB است. میتوان اندازه را در واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با پسوندهای b، k، m یا g مشخص کرد.
- --mremap-mlock
- تلاش برای مقید کردن (mlock(2)) صفحههای بازنگاشتشده در حافظه که با جلوگیری از خروج صفحات به فضای مبادله (swap)، موجب ایجاد فشار بیشتر بر روی حافظه میشود.
- --mremap-numa
- تخصیص صفحات نگاشتشدهٔ حافظه به گرههای NUMA به صورت تصادفی. این گزینه در سیستمهایی که از NUMA پشتیبانی نمیکنند غیرفعال است.
- --mremap-ops N
- توقف کارگرهای استرس mremap پس از N عملیات صوری (bogo).
- پلمب حافظه (Memory Sealing)
- --mseal N
- اجرای N استرسزای پلمب حافظه که عملیات madvise(2)، mremap(2)، mprotect(2) و mseal(2) را بر روی دو صفحه از حافظهٔ خصوصی نگاشتشده به صورت ناشناس آزمایش میکنند. تنها مخصوص هستههای لینوکس 6.10 به بالا.
- --mseal-ops N
- توقف پس از N عملیات روی حافظهٔ پلمبشده با mseal.
- استرسزای IPC صف پیام System V
- --msg N
- اجرای N پردازهٔ فرستنده و گیرنده که پیوسته اقدام به ارسال و دریافت پیام با استفاده از روش IPC پیام System V میکنند.
- --msg-bytes N
- مشخص کردن اندازهٔ پیام ارسالی و دریافتی. محدوده بین 4 تا 8192 بایت بوده و مقدار پیشفرض 4 بایت است.
- --msg-ops N
- توقف پس از تکمیل N عملیات صوری (bogo) ارسال پیام.
- --msg-types N
- انتخاب تعداد انواع نوع پیام (mtype) برای استفاده. به صورت پیشفرض، فراخوان msgsnd پیامها را با mtype برابر 1 ارسال میکند؛ این گزینه امکان ارسال انواع پیام در بازهٔ 1..N را جهت به چالش کشیدن ترتیب دریافت در صف پیام فراهم میسازد. این امر بر کارایی توان عملیاتی (throughput) نیز تأثیر خواهد گذاشت. تنشزای همگامسازی فایل با نگاشت حافظه (msync)
- --msync N
- آغاز N تنشزا که دادهها را از یک نگاشت حافظهٔ مبتنی بر فایل، از حافظه به فایل msync کرده و دادههای تغییریافته را از فایل به حافظهٔ نگاشتشده msync میکنند. این آزمون، عملیاتهای همگامسازی MS_SYNC و MS_INVALIDATE در msync(2) را به چالش میکشد.
- --msync-bytes N
- تخصیص N بایت برای فایل نگاشتشده در حافظه؛ مقدار پیشفرض ۲۵۶ مگابایت (256 MB) است. میتوان اندازه را به صورت درصدی (%) از کل حافظهٔ در دسترس یا در واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با استفاده از پسوندهای b، k، m یا g مشخص کرد.
- --msync-ops N
- توقف پس از تکمیل N عملیات ساختگی (bogo ops) مربوط به msync.
- تنشزای یکپارچگی همگامسازی فایل با نگاشت حافظه (msync)
- --msyncmany N
- آغاز N تنشزا که تا ۳۲۷۶۸ صفحه را روی همان صفحه از یک فایل موقت در حافظه نگاشت میکنند، ۳۲ بیت نخست یک صفحه را تغییر داده و دادهها را به فایل msync میکنند. سپس ۳۲۷۶۷ صفحهٔ دیگر بررسی میشوند تا مشخص شود آیا مقدار کنترلی ۳۲ بیتی به این صفحهها msync شده است یا خیر.
- --msyncmany-ops N
- توقف پس از تکمیل N فراخوانی msync در تنشزاهای msyncmany.
- تنشزای mtx (mutex) در استاندارد ISO C
- --mtx N
- آغاز N تنشزا که قفل کردن و آزادسازی mutex در استاندارد ISO C را میآزمایند.
- --mtx-ops N
- توقف پس از N عملیات ساختگی (bogo) قفل/آزادسازی mutex.
- --mtx-procs N
- به طور پیشفرض ۲ ریسه (thread) برای قفل کردن/آزادسازی روی یک mutex واحد استفاده میشوند. این گزینه امکان تغییر این مقدار پیشفرض را به ۲ تا ۶۴ ریسهٔ همروند فراهم میکند.
- تنشزای لغو نگاشت حافظهٔ اشتراکی غیرقابلاجرا (لینوکس)
- --munmap N
- آغاز N تنشزا که لغو نگاشت (unmapping) نواحی نگاشتشدهٔ اشتراکی و غیرقابلاجرای فرایندهای فرزند را میآزمایند (تنها در لینوکس). لغو نگاشتها نواحی حافظهٔ اشتراکی را صفحه به صفحه با گامهایی با اندازهٔ عدد اول انجام میدهند که باعث ایجاد حفرههای نگاشت موقت متعددی میشود. هنگامی که لغو نگاشتها کامل شد، فرایند فرزند خارج شده و یک فرزند جدید آغاز میشود. توجه داشته باشید که این کار ممکن است خطای قطعهبندی (segmentation fault) در فرایند فرزند ایجاد کند؛ این موارد در صورت امکان با وادار کردن فرایند فرزند به فراخوانی _exit(2) مدیریت میشوند.
- --munmap-ops N
- توقف پس از N لغو نگاشت صفحه.
- تنشزای Pthread mutex
- --mutex N
- آغاز N تنشزا که قفل کردن و آزادسازی pthread mutex را میآزمایند. در صورت اجرا با اختیارات و دسترسیهای کافی، زمانبند FIFO استفاده میشود و یک اولویت تصادفی بین ۰ تا ۸۰٪ از حداکثر سطح اولویت FIFO برای عملیات قفل کردن انتخاب میشود. حداقل سطح اولویت FIFO برای بخش بحرانی mutex و عملیات آزادسازی قفل برگزیده میشود تا زمانبندی معکوسسازی تصادفی اولویت (random inverted priority scheduling) به چالش کشیده شود.
- --mutex-affinity
- فعالسازی تغییر تصادفی وابستگی پردازنده (CPU affinity) بین قفل کردن و آزادسازی mutex.
- --mutex-ops N
- توقف پس از N عملیات ساختگی (bogo) قفل/آزادسازی mutex.
- --mutex-procs N
- به طور پیشفرض ۲ ریسه برای قفل کردن/آزادسازی روی یک mutex واحد به کار میروند. این گزینه امکان تغییر پیشفرض را به ۲ تا ۶۴ ریسهٔ همروند فراهم میسازد.
- تنشزای زمانبند و زمانسنج با دقت بالا از طریق فراخوانیهای nanosleep
- --nanosleep N
- آغاز N کارگر (worker) که هر یک ریسههای pthreads را اجرا کرده و nanosleep(2) را با تأخیرهای تصادفی از ۱ تا 2↑18 نانوثانیه فراخوانی میکنند. این کار زمانسنجهای با دقت بالا و زمانبند را به چالش میکشد.
- --nanosleep-method [ all | cstate | random | ns | us | ms ]
- انتخاب روش
مدتزمان
خواب nanosleep. به
طور
پیشفرض،
مدتزمانهای
ماندگاری cstate
(در صورت
وجود) و
مدتزمانهای
تصادفی به
کار گرفته
میشوند.
این گزینه
امکان
انتخاب یکی
از روشها
را فراهم
میکند:
روش توضیحات all استفاده از مدتزمانهای نانوثانیهای cstate و تصادفی. cstate استفاده از مدتزمانهای نانوثانیهای cstate. توصیه میشود از --nanosleep-threads 1 نیز استفاده شود تا nanosleepهای همروند کمتری اجرا شوند و پردازندهها بتوانند وارد حالتهای عمیق C (C-states) شوند. random استفاده از مدتزمانهای تصادفی نانوثانیهای بین ۱ تا 2↑18 نانوثانیه. ns استفاده از خوابهای nanosleep به مدت ۱ نانوثانیه (1ns) us استفاده از خوابهای nanosleep به مدت ۱ میکروثانیه (1μs) ms استفاده از خوابهای nanosleep به مدت ۱ میلیثانیه (1ms) - --nanosleep-ops N
- توقف تنشزای nanosleep پس از N عملیات ساختگی (bogo) nanosleep.
- --nanosleep-threads N
- مشخص کردن تعداد ریسههای pthread همروند برای اجرا به ازای هر تنشزا. مقدار پیشفرض ۸ و بازهٔ مجاز ۱ تا ۱۰۲۴ است.
- تنشزای ioctl دستگاه شبکه
- --netdev N
- آغاز N کارگر که دستورات گوناگون ioctl(2) مربوط به netdevice را روی تمام دستگاههای شبکهٔ موجود میآزمایند. دستورات ioctl بررسیشده توسط این تنشزا به شرح زیر هستند: SIOCGIFCONF، SIOCGIFINDEX، SIOCGIFNAME، SIOCGIFFLAGS، SIOCGIFADDR، SIOCGIFNETMASK، SIOCGIFMETRIC، SIOCGIFMTU، SIOCGIFHWADDR، SIOCGIFMAP و SIOCGIFTXQLEN. برای جزئیات بیشتر دربارهٔ این دستورات ioctl به netdevice(7) مراجعه کنید.
- --netdev-ops N
- توقف پس از تکمیل N عملیات ساختگی (bogo) در netdev.
- تنشزای proc در Netlink (لینوکس)
- --netlink-proc N
- آغاز N کارگر که فرایندهای فرزند ایجاد کرده و رویدادهای فرایند اعم از fork/exec/exit را از طریق رابط proc netlink connector پایش میکنند. هر رویداد دریافتشده به عنوان یک عملیات ساختگی (bogo op) شمرده میشود. این تنشزا تنها روی لینوکس قابل اجراست و به قابلیت CAP_NET_ADMIN نیاز دارد.
- --netlink-proc-ops N
- توقف تنشزاهای رابط proc netlink connector پس از N عملیات ساختگی.
- تنشزای task در Netlink (لینوکس)
- --netlink-task N
- آغاز N کارگر که آمار وظایف را از طریق رابط taskstats در netlink جمعآوری میکنند. این تنشزا تنها روی لینوکس قابل اجرا است و به قابلیت CAP_NET_ADMIN نیاز دارد.
- --netlink-task-ops N
- توقف تنشزاهای رابط taskstats netlink connector پس از N عملیات ساختگی.
- تنشزای Nice
- --nice N
- آغاز N کارگر مصرفکنندهٔ پردازنده که سطوح مختلف nice موجود را به چالش میکشند. هر تکرار، یک فرایند فرزند مشتق (fork) میکند که تمامی سطوح nice را با اجرای یک حلقهٔ مشغول (busy loop) به مدت ۰٫۱ ثانیه به ازای هر سطح پیمایش کرده و سپس خارج میشود.
- --nice-ops N
- توقف پس از N حلقهٔ ساختگی nice.
- تنشزای دستورالعمل بیاثر (NO-OP) پردازنده
- --nop N
- آغاز N کارگر که با اجرای دستورالعملهای no-op چرخههای پردازنده را مصرف میکنند. این تنشزا در صورتی در دسترس است که اسمبلر از دستورالعمل “nop” پشتیبانی کند..TP --nop-instr INSTR استفاده از دستورالعمل nop جایگزین با نام INSTR. برای پردازندههای x86، مقدار INSTR میتواند یکی از دستورالعملهای nop، pause، nop2 (دستور nop دو بایتی) تا nop15 (دستور nop پانزده بایتی) و fnop باشد. برای پردازندههای ARM، مقدار INSTR میتواند یکی از nop یا yield باشد. برای پردازندههای PPC64، مقدار INSTR میتواند یکی از nop، mdoio، mdoom یا yield باشد. برای پردازندههای S390، مقدار INSTR میتواند یکی از nop یا nopr باشد. برای سایر پردازندهها، INSTR تنها میتواند nop باشد. گزینه random برای INSTR، ترکیبی تصادفی از دستورالعملهای nop موجود را انتخاب میکند. اگر INSTR انتخابشده یک سیگنال SIGILL ایجاد کند، تنشزا به دستورالعمل ساده (vanilla) nop بازمیگردد.
- --nop-ops N
- توقف کارگرهای nop پس از N عملیات bogo بدونعملیات (no-op). هر عملیات bogo معادل ۲۵۶ حلقه از ۲۵۶ دستورالعمل no-op است.
- تنشزای /dev/null
- --null N
- شروع N کارگر که /dev/null را با فراخوانیهای write(2)، lseek(2)، ioctl(2)، fcntl(2)، fallocate(2) و fdatasync(2) به کار میگیرند. برای بنچمارکِ صرف نوشتن در /dev/null، از گزینه --null-write استفاده کنید.
- --null-ops N
- توقف کارگرهای تنش null پس از N عملیات bogo بر روی /dev/null.
- --null-write
- صرفاً نوشتن در /dev/null با نوشتنهای ۴ کیلوبایتی (4 K) بدون اعمال بار اضافی روی /dev/null.
- تنشزای مهاجرت صفحات حافظه میان گرههای NUMA
- --numa N
- شروع N کارگر که تنشزاها و یک بافر مپشده در حافظه ۴ مگابایتی را بین تمام گرههای NUMA موجود جابهجا (migrate) میکنند. این کار از migrate_pages(2) برای جابهجایی تنشزاها و از mbind(2) و move_pages(2) برای جابهجایی صفحات بافر نگاشتشده استفاده میکند. پس از هر جابهجایی، روی بافر نوشته میشود تا فعالیت روی گذرگاه تحمیل گردد که منجر به خطاهای حافظه نهان (cache miss) میشود. این آزمون فقط روی سختافزارهایی که NUMA روی آنها فعال است اجرا خواهد شد.
- --numa-bytes N
- مشخص کردن مجموع بایتهایی که باید توسط همه کارگرها تحت بار قرار گیرند؛ اندازه دادهشده بر تعداد کارگرها تقسیم شده و به نزدیکترین اندازه صفحه گرد میشود. مقدار پیشفرض ۴ مگابایت به ازای هر کارگر است. میتوان اندازه را به صورت درصدی از کل حافظه در دسترس یا در واحدهای Bytes ،KBytes ،MBytes و GBytes با استفاده از پسوندهای b ،k ،m یا g مشخص کرد.
- --numa-ops N
- توقف کارگرهای تنش NUMA پس از N عملیات bogo در NUMA.
- --numa-shuffle-addr
- درهم ریختن (shuffle) ترتیب صفحات برای فهرست آدرسها هنگام فراخوانی move_pages(2).
- --numa-shuffle-node
- درهم ریختن (shuffle) ترتیب گرهها برای فهرست آدرسها هنگام فراخوانی move_pages(2).
- تنشزای رونوشتبرداری از صفحات NUMA
- --numacopy N
- شروع N کارگر که روی هر گره NUMA پیمایش کرده و یک صفحه محلی از دادهها را به و از تمام گرههای دیگر NUMA رونوشت میکنند. تعداد صفحات رونوشتشده برای هر ترکیب رونوشت گرهبهگره در پایان اجرا در خروجی نمایش داده میشود. رونوشتهای گره محلی باید سریعتر از رونوشتهای گرههای دوردست باشند. این تنشزا اتصال گذرگاه حافظه گرههای NUMA را تحت بار قرار میدهد.
- --numacopy-affinity [ next | none | node | prev | random ]
- انتخاب
وابستگی
پردازنده (CPU
affinity) پردازه
رونوشتبرداری
نسبت به NODE که
دادهها از
آن رونوشت
میشوند.
این عمل ۲۰
بار در
ثانیه رخ
میدهد.
گزینهها
در زیر شرح
داده
شدهاند:
گزینه توضیحات next انتقال پردازه به یک CPU مرتبط با گره NUMA بعدی. اگر گره بعدی وجود نداشته باشد، از انتخاب تصادفی CPU استفاده میشود. none عدم جابهجایی پردازه (گزینه پیشفرض) node انتقال پردازه به یک CPU مرتبط با NODE مبدأ. prev انتقال پردازه به یک CPU مرتبط با گره NUMA قبلی. اگر گره قبلی وجود نداشته باشد، از انتخاب تصادفی CPU استفاده میشود. random انتقال پردازه به هر CPU تصادفی. - --numacopy-mode [ bind | interleave | preferred | weighted-interleave ]
- انتخاب گزینههای حالت mbind؛ برای توضیح این حالتها mbind(2) را ببینید.
- --numacopy-ops N
- توقف پس از N عملیات bogo رونوشت NUMA. یک عملیات bogo برابر با ۱۰۰ بار رونوشت صفحات از/به هر گره به هر گره دیگر است.
- تنشزای لولههای بزرگ
- --oom-pipe N
- شروع N کارگر که تا حد مجاز لوله (pipe) ایجاد میکنند و انبساط و انقباض اندازه لولهها را از بزرگترین اندازه لوله تا اندازه یک صفحه آزمایش میکنند. دادهها در لولهها نوشته شده و دوباره خوانده میشوند تا بافرهای لوله پر شوند. با فعال بودن حالت --aggressive، هنگام منقبض شدن لولهها دادهها خوانده نمیشوند که باعث میشود هسته با شدت پردازهها را به دلیل کمبود حافظه (OOM) از بین ببرد. اجرای نمونههای زیادی از این تنشزا به دلیل تخصیصهای فراوان بافرهای بزرگ لوله، هسته را وادار به اعمال OOM روی پردازهها میکند.
- --oom-pipe-ops N
- توقف پس از N عملیات bogo در انبساط/انقباض لوله.
- تنشزای دستورالعملهای غیرمجاز
- --opcode N
- شروع N کارگر که فرزندانی را fork میکنند تا کدهای اجرایی تصادفیِ تولیدشده را اجرا نمایند. این امر مسائلی مانند دستورالعملهای غیرمجاز (illegal instructions)، خطاهای گذرگاه (bus errors)، خطاهای بخشبندی (segmentation faults)، تلهها (traps) و خطاهای ممیز شناور (floating point errors) تولید میکند که تنشزا به آرامی آنها را مدیریت میکند.
- --opcode-method [ inc | mixed | random | text ]
- انتخاب روش
تولید opcode. به
طور
پیشفرض،
از
بایتهای
تصادفی
برای تولید
کد اجرایی
استفاده
میشود. این
گزینه
امکان
انتخاب یکی
از روشها
را فراهم
میکند:
روش توضیحات inc استفاده از الگوهای افزایشی ۳۲ بیتی opcode از 0x00000000 تا 0xfffffff به صورت فراگیر. mixed استفاده از ترکیبی از الگوهای افزایشی ۳۲ بیتی opcode و الگوهای تصادفی ۳۲ بیتی opcode که همچنین معکوس شده، با کدگذاری gray کدگذاری شده و بیتهای آنها وارون شدهاند. random تولید opcodeها با استفاده از بایتهای تصادفی از یک مولد تصادفی mwc. text رونوشت بخشهای تصادفی از کد از سگمنت text متعلق به stress-ng و معکوس کردن تصادفی تکبیتها در یک انتخاب تصادفی از ۱/۸ کد. - --opcode-ops N
- توقف پس از N تلاش برای اجرای کد غیرمجاز.
- تنشزای باز کردن فایل (open)
- -o N, --open N
- شروع N کارگر که عملیاتهای open(2) و سپس close(2) را روی /dev/zero انجام میدهند. حداکثر تعداد فایلهای باز به طور همزمان توسط سیستم تعریف میشود، بنابراین آزمون تا رسیدن به این بیشینه یا ۶۵۵۳۶ توصیفگر فایل باز (هرکدام زودتر رخ دهد) اجرا خواهد شد.
- --open-fd
- اجرای یک پردازه فرزند که /proc/$PID/fd را پویش کرده و سعی میکند فایلهایی را که تنشزا باز کرده است باز کند. این کار عملیات رقابتی (racing) بین open/close را روی رابط proc آزمایش میکند.
- --open-max N
- تلاش برای باز کردن حداکثر N فایل (یا تا سقف حد مجاز سیستم برای فایلهای باز به ازای هر پردازه). این مقدار میتواند تعداد فایلها یا درصدی از حداکثر حد مجاز فایلهای باز سیستم به ازای هر پردازه باشد.
- --open-ops N
- توقف کارگرهای تنش open پس از N عملیات bogo در باز کردن فایل. آزمونگر درایور هستهٔ OpenVPN DCO (لینوکس)
- --ovpn N
- آغاز N پردازهٔ کارگر که راهانداز درونهستهای باراندازی کانال دادهٔ اوپنویپیان (ovpn) را از طریق رابط عمومی netlink آن میآزمایند. هر کارگر یک رابط شبکهٔ ovpn ایجاد کرده و بهطور مکرر ترکیبی تصادفی از دستورات netlink را بر روی آن اجرا میکند: new peer، set peer، get peer، delete peer، new key، delete key، get key، swap keys و connect. کلیدها در زمان اجرا با استفاده از getrandom(2) تولید میشوند. هر حلقهٔ دستور که با موفقیت کامل شود، به عنوان یک bogo op شمرده میشود. این آزمونگر نیازمند بارگذاری ماژول هستهٔ ovpn ، حضور libnl-3 در زمان ساخت، و مجوز CAP_NET_ADMIN است.
- --ovpn-ops N
- متوقف کردن آزمونگرهای ovpn پس از N عملیات bogo op.
- --ovpn-tunnel
- بهجای آزمون تصادفی (fuzzing) لایهٔ کنترل، یک تونل دوطرفهٔ واقعی DCO میسازد. هر پردازهٔ کارگر یک فضای نام شبکهٔ (network namespace) خصوصی در اختیار میگیرد و درون آن، دو فضای نام شبکهٔ دیگر متصل با یک جفت veth (زیرساخت انتقال، UDP یا TCP و IPv4 یا IPv6 که در هر چرخه بهطور تصادفی انتخاب میشوند) ایجاد کرده و یک رابط ovpn با یک کلید مشترک ثابت در هر سر آن راهاندازی میکند؛ هیچ رابطی هرگز به فضای نام شبکهٔ میزبان افزوده نمیشود. سپس تونل را برای مدتی تصادفی زنده نگه میدارد، بهطوری که ترافیک مسیر داده (کلاینت بستهها را تزریق میکند تا هسته آنها را رمزنگاری و رمزگشایی کند) با تغییرات مداوم لایهٔ کنترل (سرور همتایان [peers] و کلیدها را ایجاد، تعویض و حذف میکند) ترکیب میشود، و در نهایت تونل را تخریب کرده و از نو بازسازی میکند؛ در نتیجه مسیر داده، لایهٔ کنترل و شرایط رقابتی در تخریب همگی آزموده میشوند. ترافیک در هر سه محوری که یک چرخه در آن تغییر میکند گزارش میشود، به صورت "MB per sec encrypted, UDP transport, IPv4" و هفت ترکیب دیگر، که برگرفته از شمارندههای بایت اختصاصی هسته برای هر peer است (بهجای تخمین در فضای کاربری) و در قالب نرخ ارائه میشود تا اجراها با تعداد کارگرها و زمانهای انقضای متفاوت، قابل مقایسه باقی بمانند. نیازمند ماژول هستهٔ ovpn بههمراه مجوزهای CAP_SYS_ADMIN و CAP_NET_ADMIN است؛ در صورت عدم امکان ساخت تونل، این آزمونگر نادیده گرفته میشود.
- آزمونگر جدول صفحه و TLB
- --pagemove N
- آغاز N پردازهٔ کارگر که یک ناحیهٔ حافظه (پیشفرض ۴ مگابایت) را mmap کرده و سپس صفحهها را به نشانی مجازی صفحهٔ قبلی جابهجا (shuffle) میکنند. هر جابهجایی صفحه برای انتقال یک صفحه از ۳ عملیات mremap استفاده میکند. این کار جدولهای صفحه و پاکسازی حافظهٔ نهان ترجمه (TLB) را میآزماید.
- --pagemove-bytes N
- مشخص کردن اندازهٔ ناحیهٔ نگاشتشده در حافظه برای آزمودن. میتوان اندازه را به صورت درصدی از کل حافظهٔ در دسترس یا در واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با استفاده از پسوندهای b، k، m یا g مشخص کرد.
- --pagemove-mlock
- تلاش برای قفل کردن صفحههای mmap شده و mremap شده در حافظه با استفاده از mlock(2)، که با جلوگیری از خروج صفحهها به فضای swap، فشار حافظهٔ بیشتری ایجاد میکند.
- --pagemove-numa
- تخصیص صفحههای نگاشتشده در حافظه به گرههای NUMA که بهطور تصادفی انتخاب شدهاند. این گزینه برای سیستمهایی که از NUMA پشتیبانی نمیکنند غیرفعال است.
- --pagemove-ops N
- توقف پس از N عملیات جابهجایی pagemove، که در آن جابهجا کردن تمام صفحهها در ناحیهٔ mmap شده معادل ۱ عملیات ساختگی (bogo-operation) است.
- نگاشتهای پراکندهٔ صفحه
- --pagescatter N
- آغاز N پردازهٔ کارگر که نگاشت حافظه را برای دستههایی از تکصفحهها در نشانیهای تصادفی انتخابی میآزمایند. در صورت امکان، از پرچمهای MAP_FIXED_NOREPLACE یا MAP_FIXED در mmap(2) برای تلاش جهت نگاشت صفحهها در نشانیهای ثابت در سراسر فضای آدرس استفاده میشود؛ در صورت شکست، از یک نشانی پیشنهادی (hinted) بدون این پرچمها استفاده خواهد شد. سپس بر روی صفحهها نوشته شده، خوانده میشوند، با mprotect(2) روی PROT_NONE تنظیم شده و در نهایت از نگاشت خارج (unmap) میشوند. این کار پیمایش جدول صفحه، حافظهٔ نهان ترجمه (TLB) و مدیریت عمومی صفحهها را میآزماید. نرخ این عملیات همچنین برای اولین نمونه از آزمونگر در سرتاسر بازهٔ دستههای نگاشتهای تکی گزارش میشود.
- --pagescatter-numa
- تخصیص صفحههای نگاشتشده به گرههای NUMA با استفاده از روش گزینش نوبتی (round-robin). این گزینه برای سیستمهایی که از NUMA پشتیبانی نمیکنند غیرفعال است.
- --pagescatter-ops N
- توقف پس از N عملیات ساختگی (bogo ops) نگاشت صفحه با mmap.
- --pagescatter-order N
- تلاش برای نگاشت و استفاده از حداکثر 2↑N صفحه. اگر صفحههای آزاد کافی برای همهٔ نمونههای pagescatter وجود نداشته باشد، این مقدار میتواند توسط آزمونگر به مقداری کمتر کاهش یابد.
- --pagescatter-populate
- پر کردن و تخصیص اولیهٔ صفحهها در هنگام صفحهبندی آنها در حافظه، بهجای استفاده از تخصیص صفحهٔ رونوشت-هنگام-نوشتن (copy-on-write) در زمان نوشتن درون آنها.
- آزمونگر تعویض صفحهٔ حافظه (Swap)
- --pageswap N
- آغاز N پردازهٔ کارگر که ورود و خروج صفحهها به فضای مبادلهگر (swap in و swap out) را میآزمایند. صفحهها تخصیص یافته و با استفاده از MADV_PAGEOUT در madvise(2) به swap فرستاده میشوند. هنگامی که حداکثر تعداد mmap به ازای هر پردازه حاصل شود یا ۶۵۵۳۶ صفحه تخصیص یابد، صفحهها خوانده میشوند تا مجدداً به حافظه بازگردند (page in) و با ترتیب معکوس نگاشت، از نگاشت خارج (unmap) میشوند.
- --pageswap-ops N
- توقف پس از N عملیات ساختگی (bogo ops) تخصیص صفحه.
- --pageswap-pages N
- مشخص کردن حداکثر تعداد صفحاتی که باید بهازای هر نمونه mmap شوند؛ بازه از ۱ تا ۱۰۴۸۵۷۶. مقدار پیشفرض ۶۵۵۳۶ صفحه است.
- آزمونگر PCI sysfs (لینوکس)
- --pci N
- آزمودن PCI sysfs با اجرای N پردازهٔ کارگر که دادهها را میخوانند (و فایلهای پیکربندی PCI یا منابع PCI را mmap/unmap میکنند). فقط لینوکس. اجرا به عنوان کاربر ریشه (root) امکان خواندن نگاشتهای mmap پیکربندی و منابع را فراهم کرده و نگاشت ورودی/خروجی (I/O) در PCI را میآزماید.
- --pci-dev xxxx:xx:xx.x
- مشخص کردن یک دستگاه PCI برای آزمودن بهجای آزمودن همهٔ دستگاههای PCI. دستگاه با استفاده از نام دستگاه PCI به قالب xxxx:xx:xx.x مشخص میشود که در آن x یک رقم هگزادسیمال است.
- --pci-ops N
- متوقف کردن کارگرهای آزمون pci پس از N عملیات آزمودن زیرپوشههای PCI.
- --pci-ops-rate N
- مشخص کردن نرخ bogo-ops در ثانیه برای PCI. این گزینه برای محدود کردن پهنای باند PCI مفید است و در سیستمهای x86 ممکن است تراکنشهای uncore را کاهش دهد.
- آزمونگر شخصیت پردازه (Personality)
- --personality N
- آغاز N پردازهٔ کارگر که تلاش میکنند شخصیت پردازه را تنظیم کرده و تمام انواع شخصیتهای در دسترس (انواع دامنههای اجرای پردازه) را از طریق فراخوانی سیستمی personality(2) دریافت کنند. (فقط لینوکس).
- --personality-ops N
- متوقف کردن کارگرهای آزمون personality پس از N عملیات ساختگی personality.
- آزمونگر انحصار متقابل با الگوریتم پیترسون
- --peterson N
- آغاز N پردازهٔ کارگر که انحصار متقابل (mutex) بین دو پردازه را با استفاده از حافظهٔ اشتراکی و الگوریتم پیترسون میآزمایند. در صورت امکان، از سدهای حافظه (memory fencing) استفاده میشود و در صورت عدم دسترسی به آنها، به __sync_synchronize در GCC رجوع میشود. این آزمونگرها شامل بررسیهای صحت ساده برای mutex و انسجام حافظه (memory coherency) هستند.
- --peterson-ops N
- متوقف کردن کارگرهای peterson پس از N عملیات mutex.
- آزمونگر mmap صفحه فیزیکی (Physpage)
- --physpage N
- آغاز N پردازهٔ کارگر که از /proc/self/pagemap و /proc/kpagecount برای تعیین صفحهٔ فیزیکی و شمارندهٔ صفحه (page count) برای یک صفحهٔ نگاشتشدهٔ مجازی و صفحهای که بین همهٔ آزمونگرها مشترک است استفاده میکنند. فقط لینوکس و نیازمند اختیارات CAP_SYS_ADMIN است.
- --physpage-mtrr
- فعالسازی تنظیم انواع مختلف ثباتهای محدودهٔ نوع حافظه (MTRR) روی صفحههای فیزیکی (فقط لینوکس و x86).
- --physpage-ops N
- متوقف کردن کارگرهای آزمون physpage پس از N جستجوی ساختگی نشانی فیزیکی (bogo physical address lookups). آزمونگر mmap صفحههای فیزیکی (با استفاده از /dev/mem)
- --physmmap N
- آغاز N کارگر که تلاش میکنند با استفاده از /dev/mem و صفحههای تصادفی خصوصی یا اشتراکی، حافظه System RAM در دسترس را (همانطور که توسط /proc/iomem مشخص شده است) mmap کنند. این کار به قابلیتهای CAP_SYS_ADMIN برای خواندن کامل /proc/iomem و mmap روی /dev/mem نیاز دارد. توجه داشته باشید که ممکن است سیستمها کاملاً قفل (locked down) شده باشند و mmap کردن روی /dev/mem غیرممکن باشد.
- --physmmap-ops N
- متوقف کردن کارگرهای آزمونگر physmmap پس از N تلاش bogo mmap.
- --physmmap-read
- انجام خواندنهای ۶۴ بیتی از تمام دادهها در هر صفحه mmap شده.
- آزمونگر سیگنالهای فرآیند (pidfd_send_signal)
- --pidfd N
- آغاز N کارگر که ارسال سیگنال را از طریق فراخوان سیستمی pidfd_send_signal(2) میآزمایند. این آزمونگر فرآیندهای فرزند ایجاد کرده و بررسی میکند که آیا آنها وجود دارند و میتوان با فراخوان سیستمی pidfd_send_signal(2) آنها را متوقف کرد، از نو راه انداخت و کشت یا خیر.
- --pidfd-ops N
- متوقف کردن کارگرهای آزمونگر pidfd پس از اینکه N فرآیند فرزند با pidfd_send_signal ایجاد، آزمایش و نابود (kill) شدند.
- آزمونگر ICMP میزبان محلی (ping)
- --ping-sock N
- آغاز N کارگر که پیامهای کوچک و تصادفی ICMP را با استفاده از یک سوکت «ping» با دامنه AF_INET، نوع سوکت SOCK_DGRAM و پروتکل IPPROTO_ICMP به localhost در بازهای از درگاهها (1024..65535) ارسال میکنند.
- --ping-sock-ops N
- متوقف کردن کارگرهای آزمونگر ping-sock پس از ارسال N پیام ICMP.
- --ping-sock-max-size N
- مشخص کردن حداکثر اندازه داده به بایت، با بازه ۹ تا ۶۵۵۱۵ و مقدار پیشفرض ۱۲.
- آزمونگر پایپ بزرگ (Large pipe)
- -p N, --pipe N
- آغاز N کارگر که برای آزمودن ورودی/خروجی (I/O) پایپ، نوشتنها و خواندنهای بزرگ پایپ را انجام میدهند. این کار، نوشتن و خواندن حافظه و همچنین تعویض زمینه (context switching) را میآزماید. هر کارگر دو فرآیند دارد، یک خواننده و یک نویسنده.
- --pipe-data-size N
- اندازه هر نوشتن در پایپ را به بایت مشخص میکند (بازه از ۴ بایت تا ۴۰۹۶ بایت). تعیین یک اندازه داده کوچک باعث بافر شدن تعداد بیشتری نوشتن در پایپ میشود و در نتیجه نرخ تعویض زمینه میان فرآیندهای نویسنده و خواننده پایپ را کاهش میدهد. اندازه پیشفرض، اندازه صفحه است.
- --pipe-ops N
- متوقف کردن کارگرهای آزمونگر pipe پس از N عملیات bogo نوشتن در پایپ.
- --pipe-readers N
- مشخص کردن تعداد فرآیندهای فرزند خواننده که از پایپ میخوانند، پیشفرض ۱ است.
- --pipe-size N
- اندازه پایپ را به بایت مشخص میکند (برای سیستمهایی که از دستور F_SETPIPE_SZ در fcntl() پشتیبانی میکنند). تعیین اندازه کوچک برای پایپ باعث میشود پایپ با بسامد بیشتری پر و مسدود شود، و بنابراین نرخ تعویض زمینه میان فرآیندهای نویسنده و خواننده پایپ افزایش یابد. از نسخه 0.15.11، اندازه پیشفرض ۴۰۹۶ بایت است.
- --pipe-writers N
- مشخص کردن تعداد فرآیندهای فرزند نویسنده که در پایپ مینویسند، پیشفرض ۱ است.
- --pipe-vmsplice
- استفاده از vmsplice(2) برای اتصال (splice) صفحههای داده به/از پایپ. به حالت بستهای پایپ با استفاده از O_DIRECT و بافری با اندازه دو برابر اندازه پایپ جهت تضمین درستی توالیهای داده اعتبارسنجی نیاز دارد.
- آزمونگر پایپ مشترک (Shared pipe)
- --pipeherd N
- آغاز N کارگر که یک شمارنده توکن ۶۴ بیتی را از طریق یک پایپ مشترک به/از ۱۰۰ فرآیند فرزند ردوبدل میکنند. این کار نرخ تعویض زمینه بالایی را تحمیل میکند و میتواند رخداد «ازدحام صاعقهوار» (thundering herd) را در بیدار شدن فرآیندهایی که در انتظار پایپ مسدود شدهاند برانگیزد.
- --pipeherd-ops N
- متوقف کردن کارگرهای آزمونگر pipe پس از N عملیات bogo نوشتن در پایپ.
- --pipeherd-procs N
- مشخص کردن تعداد فرآیندهای فرزند برای هر نمونه آزمونگر که در یک پایپ مشترک هستند، در بازه ۸ تا ۱۰۲۴. مقدار پیشفرض ۱۰۰ است.
- --pipeherd-yield
- اجبار به واگذاری زمانبندی (yield) پس از هر نوشتن؛ این کار نرخ تعویض زمینه را افزایش میدهد.
- آزمونگر سازوکار کلید محافظت از حافظه (لینوکس)
- --pkey N
- آغاز N کارگر که محافظت از حافظه را با استفاده از یک کلید محافظت pkey(2) و فراخوان pkey_mprotect(2) تغییر میدهند (تنها در لینوکس). این کار تلاش میکند یک pkey تخصیص داده و از آن برای محافظت صفحه استفاده کند، با این حال در صورت شکست، از کلید ویژه pkey -1 استفاده خواهد شد (و هسته به جای آن از سازوکار معمول mprotect استفاده میکند). ترکیبهای مختلفی از محافظتهای صفحه شامل read/write/exec/none بهطور چرخشی روی صفحههای از پیش تخصیصیافتهای که بهطور تصادفی برگزیده شدهاند اعمال میشود.
- --pkey-ops N
- توقف پس از N چرخه محافظت صفحه pkey_mprotect.
- آزمونگر افزونه (plugin) در stress-ng
- --plugin N
- آغاز N کارگر که توابع آزمونگر ارائهشده توسط کاربر را که از یک کتابخانه مشترک بارگذاری شدهاند، اجرا میکنند. کتابخانه مشترک میتواند شامل یک یا چند تابع آزمونگر باشد که پیشوند stress_ در نام آنها قرار دارد. بهطور پیشفرض، آزمونگر افزونه همه توابعی را که نامشان با پیشوند stress_ آغاز میشود پیدا کرده و آنها را یکبهیک در یک حلقه نوبتگردشی (round-robin) میآزماید، اما میتوان یک آزمونگر مشخص را با استفاده از گزینه --plugin-method برگزید. تابع آزمونگر هیچ پارامتری نمیپذیرد و برای موفقیت 0 و برای شکست مقداری غیرصفر بازمیگرداند (و باعث خاتمه آزمونگر plugin میشود). هر بار که یک تابع آزمونگر اجرا میشود، شمارنده bogo-op یک واحد افزایش مییابد. مثال زیر ۱۰۰۰۰ دستور nop را در هر bogo-op اجرا میکند:
int stress_example(void)
{
int i;
for (i = 0; i < 10000; i++) {
__asm__ __volatile__("nop");
}
return 0; /* Success */
}
و کامپایل کد منبع به یک کتابخانه مشترک، برای نمونه به این شکل:
gcc -fpic -shared -o example.so example.c
و اجرا با استفاده از:
stress-ng --plugin 1 --plugin-so ./example.so
- --plugin-method function
- اجرای یک تابع آزمونگر مشخص؛ نام را بدون پیشوند آغازین stress_ تعیین کنید.
- --plugin-ops N
- توقف پس از N تکرار از تابع یا توابع آزمونگر ارائهشده توسط کاربر.
- --plugin-so name
- تعیین کتابخانه مشترک حاوی تابع یا توابع آزمونگر ارائهشده توسط کاربر.
- آزمونگر نظرسنجی (Polling)
- -P N, --poll N
- آغاز N کارگر که نظرسنجی با مهلت زمانی صفر را از طریق فراخوانهای poll(2)، ppoll(2)، select(2)، pselect(2) و sleep(3) انجام میدهند. این کار زمان سیستم و کاربر را بدون انجام کاری هدر میدهد..TP --poll-fds N تعداد توصیفکنندههای فایل (file descriptors) را برای فراخوانیهای poll/ppoll/select/pselect مشخص میکند. بیشینهٔ تعداد برای select/pselect توسط FD_SETSIZE محدود شده است و حد بالای آن نیز با بیشینهٔ تعداد مجاز توصیفکنندههای باز pipe محدود میشود.
- --poll-ops N
- متوقف کردن کارگران (workers) تنش poll پس از N شبهعملیات bogo poll.
- --poll-random-us N
- استفاده از یک مهلت زمانی تصادفی به میزان N میکروثانیه برای فراخوانیهای ppoll(2) و pselect(2) به جای مقدار پیشفرض ۲۰۰۰۰ میکروثانیه.
- توابع ریاضی توان (Power maths functions)
- --powmath N
- راهاندازی N کارگر که توابع مختلف توان libm را با مقادیر ورودی ۰ تا ۱ در گامهای ۰٫۰۰۱ میآزمایند؛ نتایج برای اطمینان از عدم وقوع تغییر پس از هر دور شامل ۱۰۰۰۰ محاسبه، اعتبارسنجی (sanity check) میشوند.
- --powmath-ops N
- توقف پس از N حلقه از شبهعملیاتهای (bogo-operation) تابع توان.
- --powmath-method method
- مشخص کردن
یک تابع
توان برای
آزمودن.
روشهای
موجود تنش
تابع توان
به شرح زیر
توضیح داده
شدهاند:
روش توضیحات all پیمایش روی تمام روشهای توابع توان زیر cpow تابع توان اعداد مختلط با دقت مضاعف (complex double) cpowf تابع توان اعداد مختلط با ممیز شناور (complex float) cpowl تابع توان اعداد مختلط با دقت مضاعف گسترده (complex long double) csqrt تابع ریشهٔ دوم اعداد مختلط با دقت مضاعف (توان ۱/۲) csqrtf تابع ریشهٔ دوم اعداد مختلط با ممیز شناور (توان ۱/۲) csqrtl تابع ریشهٔ دوم اعداد مختلط با دقت مضاعف گسترده (توان ۱/۲) cbrt تابع ریشهٔ سوم با دقت مضاعف (توان ۱/۳) cbrtf تابع ریشهٔ سوم با ممیز شناور (توان ۱/۳) cbrtl تابع ریشهٔ سوم با دقت مضاعف گسترده (توان ۱/۳) hypot تابع فاصلهٔ اقلیدسی با دقت مضاعف (وتر) hypotf تابع فاصلهٔ اقلیدسی با ممیز شناور (وتر) hypotl تابع فاصلهٔ اقلیدسی با دقت مضاعف گسترده (وتر) pow تابع توان با دقت مضاعف (double) powf تابع توان با ممیز شناور (float) powl تابع توان با دقت مضاعف گسترده (long double) sqrt تابع ریشهٔ دوم با دقت مضاعف (توان ۱/۲) sqrtf تابع ریشهٔ دوم با ممیز شناور (توان ۱/۲) sqrtl تابع ریشهٔ دوم با دقت مضاعف گسترده (توان ۱/۲)
- تنشزای prctl (Prctl stressor)
- --prctl N
- راهاندازی N کارگر که اکثر گزینههای فراخوانی سیستمی prctl(2) را میآزمایند. هر دسته از فراخوانیهای prctl درون یک فرایند فرزند (child process) جدید انجام میشود تا اطمینان حاصل شود محدودیتهای prctl هر بار درون یک فرایند جدید مهار میگردند. برخی از گزینههای prctl مختص معماری خاصی هستند، با این حال، این تنشزا این گزینهها را حتی در صورت پیادهسازی نشدن نیز میآزماید.
- --prctl-ops N
- متوقف کردن کارگران prctl پس از N دسته از فراخوانیهای prctl
- تنشزای پیشواکشی کَش L3 (L3 cache prefetching stressor)
- --prefetch N
- راهاندازی N کارگر که خواندنهای با پیشواکشی (prefetch) و بدون پیشواکشی از بافری به اندازهٔ کَش L3 را محک (benchmark) میزنند. بافر با حلقههایی شامل ۸ × ۶۴ بیت خواندن در هر تکرار خوانده میشود. در حالتهای پیشواکشی، دادهها جلوتر از موقعیت خواندن فعلی با آفستهایی با اندازههای مختلف، از ۶۴ بایت تا 8 K پیشواکشی میشوند تا بهترین توان عملیاتی خواندن حافظه به دست آید. تنشزا نرخ خواندن بدون پیشواکشی و بهترین نرخ خواندن با پیشواکشی را گزارش میدهد. همچنین آفست پیشواکشی و تخمینی از مدت زمان بین صدور دستور پیشواکشی تا عملیات خواندن واقعی حافظه را گزارش میکند. این آمارها به دلیل نوفهٔ سیستم و تغییر بسامد کاری پردازنده از یک اجرا به اجرای دیگر متفاوت خواهند بود.
- --prefetch-l3-size N
- مشخص کردن اندازهٔ کَش l3
- --prefetch-method N
- انتخاب روش
پیشواکشی.
روشهای
موجود
عبارتند از:
روش توضیحات builtin استفاده از تابع __builtin_prefetch(3) برای پیشواکشی. این مقدار پیشفرض است. builtinl0 استفاده از تابع __builtin_prefetch(3) برای پیشواکشی، به همراه راهنمای محلیسازی 0 (locality 0 hint). builtinl3 استفاده از تابع __builtin_prefetch(3) برای پیشواکشی، به همراه راهنمای محلیسازی 3 (locality 3 hint). dcbt استفاده از دستورالعمل dcbt در ppc64 برای واکشی دادهها به درون کَش L1 (فقط ppc64). dcbtst استفاده از دستورالعمل dcbtst در ppc64 برای واکشی دادهها به درون کَش L1 (فقط ppc64). prefetcht0 استفاده از دستورالعمل prefetcht0 در x86 برای پیشواکشی دادهها به تمام سطوح سلسلهمراتب کَش (فقط x86). prefetcht1 استفاده از دستورالعمل prefetcht1 در x86 (دادههای زمانی نسبت به کَش سطح اول) برای پیشواکشی دادهها به کَش سطح ۲ و بالاتر (فقط x86). prefetcht2 استفاده از دستورالعمل prefetcht2 در x86 (دادههای زمانی نسبت به کَش سطح دوم) برای پیشواکشی دادهها به کَش سطح ۲ و بالاتر (فقط x86). prefetchnta استفاده از دستورالعمل prefetchnta در x86 (دادههای غیرزمانی نسبت به تمام سطوح کَش) به مکانی نزدیک پردازنده، برای به حداقل رساندن آلودگی کَش (فقط x86). prfm_pldl1keep استفاده از دستورالعمل prfm در aarch64 با عملیات pld1keep (پیشواکشی نگهداشتهشده یا زمانی، تخصیصیافته در کَش به صورت عادی) برای پیشواکشی دادهها به سطح ۱ سلسلهمراتب کَش (فقط aarch64). prfm_pldl2keep استفاده از دستورالعمل prfm در aarch64 با عملیات pld1keep (پیشواکشی نگهداشتهشده یا زمانی، تخصیصیافته در کَش به صورت عادی) برای پیشواکشی دادهها به سطح ۲ سلسلهمراتب کَش (فقط aarch64). prfm_pldl3keep استفاده از دستورالعمل prfm در aarch64 با عملیات pld1keep (پیشواکشی نگهداشتهشده یا زمانی، تخصیصیافته در کَش به صورت عادی) برای پیشواکشی دادهها به سطح ۳ سلسلهمراتب کَش (فقط aarch64). prfm_pldl1strm استفاده از دستورالعمل prfm در aarch64 با عملیات pld1strm (پیشواکشی جریانی یا غیرزمانی، برای دادههایی که تنها یکبار استفاده میشوند) برای پیشواکشی دادهها به سطح ۱ سلسلهمراتب کَش (فقط aarch64). prfm_pldl2strm استفاده از دستورالعمل prfm در aarch64 با عملیات pld1strm (پیشواکشی جریانی یا غیرزمانی، برای دادههایی که تنها یکبار استفاده میشوند) برای پیشواکشی دادهها به سطح ۲ سلسلهمراتب کَش (فقط aarch64). prfm_pldl3strm استفاده از دستورالعمل prfm در aarch64 با عملیات pld1strm (پیشواکشی جریانی یا غیرزمانی، برای دادههایی که تنها یکبار استفاده میشوند) برای پیشواکشی دادهها به سطح ۳ سلسلهمراتب کَش (فقط aarch64). --prefetch-ops N متوقف کردن تنشزاهای prefetch پس از N عملیات محکزنی. تنشزای جستجوی اعداد اول (با استفاده از اعداد صحیح بزرگ) 5 --prime N شروع N کارگر که با استفاده از کتابخانه GNU Multiple Precision Arithmetic Library برای اعداد صحیح بزرگ، اعداد اول را پیدا میکنند. تابع mpz_nextprime از GMP برای یافتن اعداد اول استفاده میشود و از یک الگوریتم احتمالاتی برای شناسایی /bin/bash: line 1: :w: command not found یافتن اعداد اول بزرگتر و بزرگتر بهره میبرد، بنابراین نرخ bogo-op در طول زمان کاهش خواهد یافت. --prime-method [ factorial | inc | pwr2 | pwr10 ] انتخاب روش محاسبه مقدار بعدی که جستجوی اعداد اول از آنجا آغاز میشود و در نتیجه میزان بزرگی اعداد اول حاصل. مقدار پیشفرض inc است؛ روشهای شروع جستجو برای اعداد اول به شرح زیر هستند. lB2 lB l lx. روش توضیحات factorial شروع جستجو بر پایه بسط فاکتوریل. این روش بسیار سریع رشد میکند. inc شروع جستجو بر پایه افزایشهای ۲تایی. این روش بسیار کند رشد میکند. pwr2 شروع جستجو بر پایه توانهای ۲. با سرعت نسبتاً بالایی رشد میکند. pwr10 شروع جستجو بر پایه توانهای ۱۰. در هر تکرار ۱ رقم افزایش یافته و به سرعت رشد میکند. - --prime-ops N
- متوقف شدن پس از یافتن N عدد اول.
- --prime-progress
- نمایش تعداد اعداد اول یافتشده و طول بزرگترین عدد اول پیدا شده. این اطلاعات هر ۶۰ ثانیه یک بار، یا در صورتی که یافتن عدد اول بعدی بیشتر طول بکشد، پس از زمانی بیش از ۶۰ ثانیه نمایش داده میشود.
- --prime-start N
- شروع جستجوی اعداد اول از مقدار N. این مقدار میتواند به صورت یک عدد صحیح یا یک مقدار ممیز شناور (مانند 1e200 برای مشخص کردن یک مقدار شروع بسیار بزرگ) بیان شود.
- تنشزای معکوسسازی اولویت (Priority inversion)
- --prio-inv N
- شروع N کارگر که زمانبندی معکوسسازی اولویت قفل mutex را به چالش میکشند. سه فرآیند فرزند با اولویتهای زمانبندی FIFO کم، متوسط و زیاد اجرا میشوند. فرآیندهای با اولویت کم و زیاد در یک قفل mutex مشترک هستند که هر دو برای قفل کردن و باز کردن آن تلاش میکنند، با این هدف که فرآیند کماولویت، فرآیند با اولویت بالا را مسدود (block) کند. در همین حال، فرآیند با اولویت متوسط با اولویتی بالاتر از فرآیند کماولویت اجرا خواهد شد و باعث میشود فرآیند با اولویت بالا غیرقابلاجرا (unrunnable) شود.
- --prio-inv-ops N
- متوقف شدن پس از N عملیات ساختگی (bogo) قفل/باز کردن.
- --prio-inv-type [ inherit | none | protect ]
- انتخاب نوع
معکوسسازی
اولویت قفل
mutex، که به شرح
زیر است:
نوع توضیحات inherit اولویت فرآیندی که مالک قفل mutex است با بالاترین اولویت هر فرآیند دیگری که در انتظار قفل است اجرا میشود تا از بنبست معکوسسازی اولویت جلوگیری شود. none اولویت فرآیندی که مالک قفل mutex است، تحت تأثیر مالکیت mutex قرار نمیگیرد. این امر ممکن است منجر به غیرقابلاجرا شدن فرآیند با اولویت بالا در سامانههای تکرشتهای شود. protect در طول مدت مالکیت قفل، به اولویت فرآیند مالک قفل mutex، اولویت خود mutex (در مورد این آزمون تنش، حداکثر اولویت) اختصاص مییابد. - --prio-inv-policy [ batch | ext | idle | fifo | other | rr ]
- انتخاب سیاست زمانبندی. سیاستهای «عادی» (batch، ext، idle و other) را میتوان به عنوان یک کاربر بدون امتیاز ویژه انتخاب کرد، اما سیاستهای «بلادرنگ» (fifo و rr) تنها با دسترسیهای مناسب قابل انتخاب هستند. به صورت پیشفرض «fifo» انتخاب شده است اما برای کاربران بدون امتیاز به «other» تنزل مییابد.
- تنشزای دستورالعملهای ممتاز پردازنده (Privileged CPU instructions)
- --priv-instr N
- شروع N کارگر که دستورالعملهای ممتاز گوناگون مختص معماری را که توسط برنامههای فضای کاربری قابل اجرا نیستند، به کار میگیرند. این دستورالعملها به دام افتاده (trap شده) و توسط گردانندههای سیگنال SIGSEGV یا SIGILL پردازش خواهند شد.
- --priv-instr-ops N
- متوقف کردن تنشزاهای priv-instr پس از N دور اجرای دستورالعملهای ممتاز.
- تنشزای /proc
- --procfs N
- شروع N کارگر که فایلها را از /proc و به صورت بازگشتی از /proc/self میخوانند (فقط لینوکس).
- --procfs-ops N
- متوقف کردن خواندن procfs پس از N عملیات خواندن ساختگی (bogo). توجه داشته باشید، از آنجا که تعداد مدخلها ممکن است بین هستهها متفاوت باشد، این معیار عملیات bogo احتمالاً بسیار گمراهکننده است.
- تنشزای ورودی/خروجی pwrite/pread lseek
- --pseek N
- شروع N کارگر که آزمونهای موقعیتیابی pwrite(2) و pread(2) با lseek(2) را به چالش میکشند. هر کارگر دارای ۴ زیرفرآیند است که عملیات مکرر pwrite و pread را با استفاده از همان توصیفگر فایل مشترک انجام میدهند. دو فرآیند با استفاده از pthreads (در صورت موجود بودن) راهاندازی میشوند، و دو فرآیند دیگر با fork(2) شروع به کار میکنند. استفاده از pwrite و pread باید بدون دستکاری آفست فایل در توصیفگر فایل مشترک، I/O را انجام دهد. فرآیند کارگر اصلی I/O را با استفاده از فراخوانیهای lseek(2)/write(2) و lseek(2)/read(2) که آفست فایل را تغییر میدهند انجام میدهد؛ فراخوانیهای lseek اعتبارسنجی میشوند تا بررسی شود که آیا توسط فراخوانیهای pwrite و pread تغییر یافتهاند یا خیر.
- --pseek-io-size N
- اندازه هر عملیات ورودی/خروجی (I/O) نوشتن/خواندن را بر حسب بایت مشخص میکند. اندازه میتواند از ۱ بایت تا ۱ مگابایت باشد.
- --pseek-ops N
- متوقف شدن پس از N عملیات نوشتن توسط فرآیند کارگر اصلی.
- --pseek-rand
- به طور معمول هر زیرفرآیند در یک آفست ثابت از فایل مینویسد؛ استفاده از این گزینه، آفست را در هر چرخه نوشتن/خواندن تصادفی میکند.
- تنشزای Pthread
- --pthread N
- شروع N کارگر که به طور مکرر چندین pthread ایجاد کرده و خاتمه میدهند (پیشفرض ۱۰۲۴ pthread به ازای هر کارگر است). در هر تکرار، هر pthread تازه ایجاد شده تا زمانی که کارگر همه pthreadها را ایجاد کند منتظر میماند و سپس همگی با هم خاتمه مییابند.
- --pthread-max N
- ایجاد N رشته pthread به ازای هر کارگر. اگر حاصلضرب تعداد pthreadها در تعداد کارگران از حد مجاز نرم (soft limit) رشتههای مجاز بیشتر شود، مقدار بیشینه به حداکثر مقدار مجاز تعدیل و کاهش داده میشود.
- --pthread-ops N
- متوقف کردن کارگران pthread پس از N عملیات ساختگی (bogo) ایجاد pthread.
- تنشزای Ptrace
- --ptrace N
- شروع N کارگر که یک فرآیند فرزند را fork کرده و فراخوانیهای سیستمی آن را با استفاده از ptrace(2) ردیابی (trace) میکنند.
- --ptrace-ops N
- متوقف کردن کارگران ptrace پس از ردگیری N فراخوانی سیستمی bogo.
- تنشزای تعقیب اشارهگر (Pointer Chasing)
- --ptr-chase N
- شروع N کارگر که اشارهگرهای حافظه را در گرههایی از اشارهگرها به اندازه یک صفحه (page) تعقیب میکنند. به طور پیشفرض هر نمونه تنشزا ۴۰۹۶ صفحه از گرهها را تخصیص میدهد؛ هر گره آرایهای از اشارهگرهاست که به صورت تصادفی برای اشاره به دیگر صفحات گره تنظیم شدهاند. تنشزاها اشارهگرهای انتخابی تصادفی از هر گره را دنبال کرده و در کل فضای گرهها به گردش و تعقیب میپردازند. این کار واکشی اشارهگر (pointer fetching)، ارجاعزدایی اشارهگر (pointer dereferencing) را به چالش کشیده و یک تنشزای محک خواندن حافظه نهان (cache-read) است. گرهها به صورت ۵۰٪ از صفحاتِ حافظه heap و ۵۰٪ از حافظه نگاشتشده با mmap تخصیص مییابند..TP --ptr-chase-ops N توقف پس از N بار تعقیب اشارهگر.
- --ptr-chase-pages N
- انتخاب تعداد صفحهها برای تخصیص به گرهها.
- آزمونگر شبهپایانهها (pty)
- --pty N
- آغاز N پردازه کارگر که مکرراً برای باز کردن شبهپایانهها تلاش کرده و قبل از بستن آنها، فراخوانیهای گوناگون ioctl(2) مربوط به pty را بر روی آنها اجرا میکنند.
- --pty-max N
- تلاش برای باز کردن حداکثر N شبهپایانه؛ مقدار پیشفرض 65536 است. محدوده مجاز برای این تنظیم 8..65536 است.
- --pty-ops N
- متوقف کردن کارگرهای pty پس از N عملیات ساختگی (bogo ops) شبهپایانه.
- آزمونگر Qsort
- -Q, --qsort N
- آغاز N پردازه کارگر که اعداد صحیح ۳۲ بیتی را با استفاده از qsort(3) مرتب میکنند.
- --qsort-method [ qsort-libc | qsort-bm ]
- انتخاب پیادهسازی libc از qsort یا پیادهسازی J. L. Bentley و M. D. McIlroy از qsort. مقدار پیشفرض، پیادهسازی libc است.
- --qsort-ops N
- متوقف کردن کارگرهای فشار qsort پس از N مرتبسازی ساختگی (bogo qsorts).
- --qsort-size N
- مشخص کردن تعداد اعداد صحیح ۳۲ بیتی برای مرتبسازی؛ مقدار پیشفرض 262144 (256 × 1024) است.
- آزمونگر سهمیهبندی (Quota)
- --quota N
- آغاز N پردازه کارگر که دستورهای quotactl(2) شامل Q_GETQUOTA، Q_GETFMT، Q_GETINFO، Q_GETSTATS و Q_SYNC را بر روی تمام سیستمفایلهای مبتنی بر بلوک متصل و در دسترس اجرا میکنند. اجرای این گزینه نیازمند مجوز CAP_SYS_ADMIN است.
- --quota-ops N
- متوقف کردن کارگرهای فشار سهمیهبندی پس از N عملیات ساختگی quotactl.
- آزمونگر زمانبند فرایند
- --race-sched N
- آغاز N پردازه کارگر که تغییر سریع وابستگی پردازنده (CPU affinity) در فرایندهای فرزند را هم از طریق آزمونگر کنترلکننده و هم توسط خود فرایندهای فرزند آزمایش میکنند. فرایندهای فرزند با هدف ایجاد شرایط رقابتی (race conditions) در زمانهایی که تغییر وابستگی حین وضعیتهای اجرای فرایند رخ میدهد، با سرعت بالا ایجاد و خاتمه داده میشوند.
- --race-sched-method [ all | next | prev | rand | randinc | syncnext | syncprev ]
- انتخاب روش
انتقال یک
فرایند به
یک CPU مشخص.
روشهای
موجود به
شرح زیر
توصیف
شدهاند:
روش توضیحات all تکرار روی همه روشهای race-sched به شرح زیر: next انتقال یک فرایند به CPU بعدی؛ پس از رسیدن به آخرین CPU چرخش کرده و به صفر برمیگردد. prev انتقال یک فرایند به CPU قبلی؛ پس از رسیدن به اولین CPU چرخش کرده و به آخرین CPU برمیگردد. rand انتقال یک فرایند به هر CPU انتخابشده به صورت تصادفی. randinc انتقال یک فرایند به CPU فعلی + یک مقدار تصادفی بین 1..4، به پیمانه تعداد CPUها. syncnext انتقال همگام تمام فرایندهای آزمونگر race-sched به CPU بعدی در هر ثانیه؛ این کار در هر لحظه تنها ۱ پردازنده را به روش نوبتگردشی (round-robin) زیر بار میبرد. syncprev انتقال همگام تمام فرایندهای آزمونگر race-sched به CPU قبلی در هر ثانیه؛ این کار در هر لحظه تنها ۱ پردازنده را به روش نوبتگردشی (round-robin) زیر بار میبرد. - --race-sched-ops N
- توقف پس از N عملیات ساختگی ایجاد فرایند.
- آزمونگر Radixsort
- --radixsort N
- آغاز N پردازه کارگر که رشتههای تصادفی ۸ بایتی را با استفاده از radixsort(3) مرتب میکنند.
- --radixsort-method [ radixsort-libc | radixsort-nonlibc ]
- انتخاب پیادهسازی libc از radixsort یا یک پیادهسازی بهینهشده از radixsort. در صورت در دسترس بودن، مقدار پیشفرض پیادهسازی libc است.
- --radixsort-ops N
- متوقف کردن کارگرهای فشار radixsort پس از N مرتبسازی ساختگی (bogo radixsorts).
- --radixsort-size N
- مشخص کردن تعداد رشتهها برای مرتبسازی؛ مقدار پیشفرض 262144 (256 × 1024) است.
- آزمونگر سیستمفایل حافظه (RAM)
- --ramfs N
- آغاز N پردازه کارگر برای متصل کردن یک سیستمفایل مبتنی بر حافظه با استفاده از ramfs و tmpfs (فقط لینوکس). این گزینه به طور متناوب بین اتصال و قطع اتصال (mount و umount) یک سیستمفایل ramfs یا tmpfs با استفاده از فراخوانیهای سیستمی سنتی mount(2) و umount(2) و همچنین فراخوانیهای سیستمی جدیدتر لینوکس 5.2 شامل fsopen(2)، fsmount(2)، fsconfig(2) و move_mount(2) (در صورت در دسترس بودن) جابجا میشود. اندازه پیشفرض سیستمفایل حافظه 2 مگابایت است.
- --ramfs-fill
- پر کردن ramfs با دادههای صفر با استفاده از fallocate(2) در صورت در دسترس بودن، یا فراخوانیهای مکرر write(2) در غیر این صورت.
- --ramfs-ops N
- توقف پس از N عملیات اتصال ramfs.
- --ramfs-size N
- تنظیم اندازه ramfs (باید مضربی از اندازه صفحه باشد).
- آزمونگر دستگاه خام (Raw device)
- --rawdev N
- آغاز N پردازه کارگر که دستگاه دیسک خام زیرین را با استفاده از خواندنهای مستقیم ورودی/خروجی (direct IO) میخوانند. دستگاهی (با شماره جزئی 0) که دایرکتوری کاری فعلی در آن قرار دارد، همان دستگاه خامی است که توسط آزمونگر خوانده میشود. اندازه خواندن دقیقاً به اندازه بلوک دستگاه زیرین است. به صورت پیشفرض، این آزمونگر تمام روشهای rawdev را آزمایش میکند (گزینه --rawdev-method را ببینید). این آزمونگر فقط مخصوص لینوکس است و برای خواندن دستگاه خام به دسترسی ریشه (root) نیاز دارد.
- --rawdev-method method
- روشهای
موجود برای
آزمایش
فشار rawdev به
شرح زیر
توصیف
شدهاند:
روش توضیحات all تکرار روی تمام روشهای آزمایش فشار rawdev به شرح زیر: sweep خواندن مکرر در سراسر دستگاه خام از بلوک شماره 0 تا بلوک پایانی با گامهایی به اندازه تعداد بلوکهای روی دستگاه تقسیم بر 128 و بازگشت مجدد به آغاز. wiggle خواندن مکرر در سراسر دستگاه خام در 128 گام مساوی به طوری که در هر گام 1024 بلوک به سمت عقب خوانده شود. ends خواندن مکرر 128 بلوک ابتدایی و انتهایی دستگاه خام به صورت متناوب از آغاز دستگاه تا پایان دستگاه. random خواندن مکرر 256 بلوک تصادفی. burst خواندن مکرر 256 بلوک متوالی با شروع از یک بلوک تصادفی روی دستگاه خام. --rawdev-ops N توقف کارگران تنش rawdev پس از N عملیات صوریِ (bogo operations) خواندن از دستگاه خام. تنشزای فهرست تصادفی (Random list stressor) 5 --randlist N شروع N کارگر که فهرستی از اشیاء را با ترتیب تصادفی در حافظه ایجاد کرده و با پیمایش فهرست، اشیاء را مقداردهی کرده و میخوانند. این کار برای آزمایش و ایجاد کوبش در حافظه و حافظهٔ نهان (cache thrashing) طراحی شده است. در حالت عادی اشیاء در هیپ (heap) تخصیص مییابند، با این حال برای اشیائی با اندازهٔ صفحه یا بزرگتر، احتمال ۱ در ۱۶ وجود دارد که با استفاده از نگاشت حافظهٔ ناشناس اشتراکی (shared anonymous memory mapping) تخصیص یابند تا با درهمآمیختن فضاهای آدرس تخصیصها، کوبش TLB بیشتری ایجاد شود. --randist-compact تخصیص تمام اشیاء فهرست با استفاده از یک تخصیص بزرگ در هیپ و تقسیم آن برای تمام اشیاء فهرست. این کار سربار ناشی از ردیابی تکتک اشیاء فهرست توسط هیپ را حذف میکند و در نتیجه حافظهٔ کمتری مصرف میشود. --randlist-items N تخصیص N آیتم در فهرست. به صورت پیشفرض، ۱۰۰۰۰۰ آیتم تخصیص داده میشود. --randlist-ops N توقف کارگران randlist پس از N بار پیمایش فهرست. --randlist-size N تخصیص اندازهٔ هر آیتم به میزان N بایت. به صورت پیشفرض، اندازه شامل ۶۴ بایت بار داده (payload) به همراه سربار اشارهگر مدیریت فهرست است. تنشزای سوکت خام در میزبان محلی (Localhost raw socket stressor) 5 --rawsock N شروع N کارگر که با استفاده از سوکتهای خام (raw sockets) در localhost، دادههای بسته را ارسال و دریافت میکنند. برای اجرا به CAP_NET_RAW نیاز دارد. --rawsock-ops N توقف کارگران rawsock پس از دریافت N بسته. --rawsock-port P شروع از درگاه سوکت P. برای N فرایند کارگر rawsock، از درگاههای P تا P + (N − 1) استفاده میشود (برای ماندن در محدودهٔ ۱۰۲۴ تا ۶۵۵۳۵ چرخش میکنند). درگاه پیشفرض، درگاه ۴۵۰۰۰ است. تنشزای بستههای خام اترنت در میزبان محلی (Localhost ethernet raw packets stressor) 5 --rawpkt N شروع N کارگر که بستههای اترنت (ethernet) را با استفاده از بستههای خام در localhost از طریق دستگاه لوپبک (loopback) ارسال و دریافت میکنند. برای اجرا به CAP_NET_RAW نیاز دارد. --rawpkt-ops N توقف کارگران rawpkt پس از دریافت N بسته از فرایند فرستنده. --rawpkt-port N شروع از درگاه P. برای N فرایند کارگر rawpkt، از درگاههای P تا P + (N − 1) استفاده میشود (برای ماندن در محدودهٔ ۱۰۲۴ تا ۶۵۵۳۵ چرخش میکنند). درگاه پیشفرض، درگاه ۴۹۹۲۰ است. --rawpkt-rxring N راهاندازی بستههای خام با حلقهٔ دریافت (RX ring) شامل N بلوک؛ این گزینه TPACKET_V را انتخاب میکند. N باید یکی از مقادیر ۱، ۲، ۴، ۸ یا ۱۶ باشد. تنشزای بستهٔ خام UDP در میزبان محلی (Localhost raw UDP packet stressor) 5 --rawudp N شروع N کارگر که با استفاده از سوکتهای خام در localhost، بستههای UDP حاوی شناسه فرایند (PID) را ارسال و دریافت میکنند. برای اجرا به CAP_NET_RAW نیاز دارد. --rawudp-if NAME استفاده از رابط شبکهٔ NAME. اگر رابط NAME وجود نداشته باشد، فعال (up) نباشد یا از دامنه پشتیبانی نکند، از رابط لوپبک (lo) به عنوان پیشفرض استفاده میشود. --rawudp-ops N توقف کارگران rawudp پس از دریافت N بسته. --rawudp-port N شروع از درگاه P. برای N فرایند کارگر rawudp، از درگاههای P تا P + (N − 1) استفاده میشود (برای ماندن در محدودهٔ ۱۰۲۴ تا ۶۵۵۳۵ چرخش میکنند). درگاه پیشفرض، درگاه ۵۰۱۷۶ است. تنشزای مولد عدد تصادفی (Random number generator stressor) 5 --rdrand N شروع N کارگر که یک عدد تصادفی را از مولد عدد تصادفی روی تراشه (on-chip) میخوانند. این گزینه از دستورالعمل rdrand در پردازندههای اینتل x86 یا دستورالعمل darn در پردازندههای PowerPC استفاده میکند. --rdrand-ops N توقف کارگران تنش rdrand پس از N عملیات صوری rdrand (هر عملیات صوری = خواندن موفقیتآمیز ۲۰۴۸ بیت تصادفی است). --rdrand-seed استفاده از rdseed به جای rdrand (فقط در x86). تنشزای پیشخوانی (Read-ahead stressor) 5 --readahead N شروع N کارگر که بهصورت تصادفی در یک فایل با readahead(2) پرش (seek) کرده و عملیات ورودی/خروجیِ (I/O) خواندن/نوشتنِ ۴۰۹۶ بایتی را اجرا میکنند. اندازهٔ پیشفرض فایل ۶۴ مگابایت است. پیشخوانیها و خواندنها در دستههای ۱۶ پیشخوانی و سپس ۱۶ خواندن گروهبندی میشوند. --readahead-bytes N تنظیم اندازهٔ فایل readahead، پیشفرض ۱ گیگابایت است. میتوان اندازه را به صورت درصدی از فضای آزاد سیستم فایل یا در واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با استفاده از پسوندهای b، k، m یا g مشخص کرد. --readahead-ops N توقف کارگران تنش readahead پس از N عملیات صوری خواندن. تنشزای راهاندازی مجدد (Reboot stressor) 5 --reboot N شروع N کارگر که فراخوان سیستمی reboot(2) را به چالش میکشند. در صورت امکان، فرایندی در یک فضای نام PID ایجاد کرده و دستور خاموشکردن reboot را اجرا میکند که باید فرایند را متوقف کند. همچنین، این تنشزا مقادیر جادویی (magic values) نامعتبر reboot و راهاندازیهای مجدد نامعتبر در شرایط دسترسی ناکافی را که در واقع سیستم را راهاندازی مجدد نمیکنند، آزمایش میکند. --reboot-ops N توقف کارگران تنش reboot پس از N چرخهٔ صوری راهاندازی مجدد. تنشزای عبارات باقاعده POSIX (POSIX regular expressions stressor) 5 --regex N شروع N کارگر که انواع عبارات باقاعدهٔ POSIX را کامپایل کرده و آنها را بر روی مجموعهای از رشتههای متنی اجرا میکنند. این کار کتابخانهٔ C مربوط به regex را با طیف متنوعی از عبارات باقاعدهٔ ساده و پیچیده میسنجد. --regex-ops N توقف پس از N بار کامپایل regex. تنشزای ثباتهای پردازنده (CPU registers stressor) 5 --regs N شروع N کارگر که دادهها را بین ثباتهای پردازنده (CPU) جابهجا کرده و دستورالعملهای جابهجایی ثبات را میسنجند. هر عملیات صوری (bogo-op) نمایانگر ۱۰۰۰ بار فراخوانی تابعی است که ثباتها را ۳۲ بار جابهجا میکند. تنها برای کامپایلر GCC پیادهسازی شده است، زیرا برای کامپایل مناسب به نشانهگذاریهای ثبات (register annotations) و سطح بهینهسازی ۰ نیاز دارد. --regs-bitflip وارونه کردن تمام بیتها (معکوسسازی) در هر ثبات، پس از هر بار مقداردهی مجدد ثبات. در برخی پردازندهها ممکن است توان بیشتری مصرف کرده و حرارت بیشتری تولید کند. --regs-ops N توقف تنشزاهای regs پس از N عملیات صوری. تنشزای بازآرایی صفحات حافظه (Memory page reordering stressor) 5 --remap N شروع N کارگر که ۵۱۲ صفحه را نگاشت کرده و ترتیب این صفحات را با استفاده از فراخوان سیستمی منسوخ remap_file_pages(2) بازآرایی میکنند. چندین شیوهٔ بازآرایی صفحات سنجیده میشود: رو به جلو، معکوس، تصادفی و چندین صفحه به ۱ صفحه. --remap-mlock تلاش برای mlock(2) کردن صفحات بزرگ (huge pages) نگاشتشده با mmap در حافظه که با جلوگیری از خروج صفحات به حافظهٔ تعویض (swap out)، فشار بیشتری بر حافظه وارد میکند. --remap-ops N توقف پس از N عملیات صوری بازآرایی. --remap-pages N مشخص کردن تعداد صفحات برای بازآرایی؛ باید توانی از ۲ باشد، پیشفرض ۵۱۲ صفحه است. عامل فشار تغییر نام فایل 5 -R N, --rename N شروع N کارگر که هرکدام فایلی ایجاد کرده و سپس بهطور مکرر نام آن را تغییر میدهند. --rename-ops N توقف کارگران فشار تغییر نام پس از N عملیات تغییر نام bogo. عامل فشار زمانبندی مجدد فرایند 5 --resched N شروع N کارگر که زمانبندی مجدد فرایند را به کار میگیرند. هر عامل فشار برای هر یک از سطوح مثبت nice یک فرایند فرزند ایجاد میکند و روی سطوح nice از ۰ تا پایینترین سطح اولویت (بالاترین مقدار nice) تکرار میشود. برای هر یک از سطوح nice، تعداد ۱۰۲۴ تکرار روی ۳ سیاست زمانبندی غیر بیدرنگ SCHED_OTHER ،SCHED_BATCH و SCHED_IDLE تنظیم شده و یک فراخوانی sched_yield(2) برای تحمیل فعالیت شدید زمانبندی مجدد رخ میدهد. هنگامی که گزینه پرگویی -v استفاده شود، توزیع تعداد yieldها در میان سطوح nice برای نخستین عامل فشار از میان N عامل فشار چاپ میشود. --resched-ops N توقف پس از N فراخوانی sched_yield مربوط به زمانبندی مجدد. عامل فشار منابع سیستم 5 --resources N شروع N کارگر که منابع گوناگون سیستم را مصرف میکنند. هر کارگر بهطور پیشفرض ۲۵۶ فرایند فرزند ایجاد میکند که با ۱۰۲۴ بار تکرار، حافظه اشتراکی، heap، پشته (stack)، فایلهای موقت و توصیفکنندههای فایل گوناگون (مانند eventfdها، memoryfdها، userfaultfdها، لولهها و سوکتها) را مصرف میکنند. --resources-mlock تلاش برای mlock(2) کردن صفحههای مپشده با mmap در حافظه، که با جلوگیری از swap شدن صفحهها به بیرون، موجب فشار حافظه بیشتری میشود. --resources-num N مشخص کردن تعداد حلقههای منابع مورد استفاده در هر فرایند فرزند برای مصرف N دور تخصیص و دسترسی به منابع. مقدار پیشفرض ۱۰۲۴ است. --resources-ops N توقف پس از N بار fork شدن فرزندان منابع. --resources-procs N مشخص کردن تعداد فرایندهای فرزند برای ایجاد به ازای هر نمونه عامل فشار، در محدوده ۱ تا ۴۰۹۶. مقدار پیشفرض ۲۵۶ است. عامل فشار نوشتن فایلهای موقت در موقعیت معکوس 5 --revio N شروع N کارگر که بهطور مداوم با ترتیب موقعیت معکوس در فایلهای موقت مینویسند. حالت پیشفرض برای آزمون فشار نوشتنهای با ترتیب موقعیت معکوس همراه با حفرههای پراکنده (sparse holes) با اندازه تصادفی بین هر نوشتن است. هنگامی که گزینه --aggressive بدون هیچیک از گزینههای --revio-opts فعال باشد، عامل فشار revio تمامی گزینههای --revio-opts را یکی پس از دیگری اعمال میکند تا طیفی از گزینههای I/O را پوشش دهد. --revio-bytes N نوشتن N بایت به ازای هر فرایند revio؛ مقدار پیشفرض 1 گیگابایت (1 GB) است. میتوان اندازه را به صورت درصدی از فضای آزاد سیستمفایل یا در واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با استفاده از پسوندهای b، k، m یا g مشخص کرد. --revio-opts list مشخص کردن گزینههای گوناگون آزمون فشار به صورت یک فهرست جداشده با کاما. گزینهها همانند --hdd-opts هستند اما بدون گزینه iovec و همراه با گزینه readahead برای اعمال اجباری عملیات پیشخوانی (readahead) روی کل فایل پس از اتمام کامل نوشتن آن. --revio-ops N توقف کارگران فشار revio پس از N عملیات bogo. --revio-write-size N مشخص کردن اندازه هر نوشتن به بایت. اندازه میتواند از ۱ بایت تا ۴ مگابایت باشد. عامل فشار لولههای حلقوی 5 --ring-pipe N شروع N کارگر که دادهها را در یک حلقه از لولهها (pipes) با استفاده از poll برای تشخیص زمان آماده بودن دادهها برای رونوشت جابهجا میکنند. بهطور پیشفرض، ۲۵۶ لوله با دو قلم دادهی ۴۰۹۶ بایتی که درون حلقه لولهها رونوشت میشوند، استفاده میشوند. دادهها با فراخوانیهای سیستمی read و write کپی میشوند. اگر فراخوانی سیستمی splice در دسترس باشد، میتوان از splice برای انتقال کارآمدتر دادهها در سطح هسته (in-kernel) به جای کپی میانگیر استفاده کرد. --ring-pipe-num N مشخص کردن تعداد لولههای مورد استفاده. در محدوده ۴ تا ۲۶۲۱۴۴، پیشفرض ۲۵۶ است. --ring-pipe-ops N توقف پس از N انتقال داده در لوله. --ring-pipe-size N مشخص کردن اندازه داده در حال انتقال به بایت. در محدوده ۱ تا ۴۰۹۶، پیشفرض ۴۰۹۶ است. --ring-pipe-splice فعالسازی splice برای جابهجایی داده بین لولهها (تنها در صورتی که splice() در دسترس باشد). عامل فشار Rlimit 5 --rlimit N شروع N کارگر که از محدودیتهای منابع از طریق تنظیم rlimit(2) و تلاش برای فراتر رفتن از این محدودیتها تخطی میکنند و سیگنالهای SIGXCPU ،SIGXFSZ و SIGSEGV را تولید میکنند. --rlimit-ops N توقف پس از دریافت N سیگنال bogo مربوط به محدودیت منابع SIGXCPU ،SIGXFSZ و SIGSEGV. عامل فشار نگاشت معکوس VM 5 --rmap N شروع N کارگر که نگاشت معکوس حافظه مجازی (VM reverse-mapping) را به کار میگیرند. این گزینه ۱۶ فرایند به ازای هر کارگر ایجاد میکند که چندین نگاشت حافظه مبتنی بر فایل (file-backed) را میخوانند/مینویسند. ۶۴ گروه از نگاشتهای ۴ صفحهای روی فایل انجام میشود که هر نگاشت به اندازه ۳ صفحه با نگاشت قبلی همپوشانی دارد و حداقل ۱ صفحه حافظه نگاشتنشده بین هر نگاشت وجود دارد. دادهها بهطور همگام با msync بهصورت تصادفی در هر ۱ بار از ۲۵۶ تکرار با فایل همگامسازی میشوند. --rmap-ops N توقف پس از N عملیات bogo خواندن/نوشتن در حافظه rmap. --rmap-procs N مشخص کردن تعداد فرایندها به ازای هر کارگر برای بهکارگیری نگاشت معکوس. محدوده بین ۸ تا ۲۵۶ و مقدار پیشفرض ۱۶ است. عامل فشار سیستمفایل فقطخواندنی 5 --rofs N شروع N کارگر که سیستمفایلهای سوارشده بهصورت فقطخواندنی را به کار میگیرند. بهطور پیشفرض، این گزینه تلاش میکند تا تمام سیستمفایلهای فقطخواندنی سوارشده را با فراخوانیهای سیستمی access(2)، read(2)، lstat(2)، listxattr(2)، mmap(2)، lseek(2)، flock(2) و statx(2) به کار بگیرد. --rofs-dir directory مشخص کردن دایرکتوریای که سیستمفایل فقطخواندنی در آن سوار شده است؛ این گزینه پیشفرض یافتن سیستمفایلهای فقطخواندنی سوارشده را بازنویسی میکند. --rofs-ops N توقف پس از N عملیات bogo روی سیستمفایل فقطخواندنی. عامل فشار چرخش ۱ بیتی 5 --rotate N شروع N کارگر که چرخش ۱ بیتی متغیرهای عدد صحیح بدون علامت (unsigned integer) به چپ و راست را به کار میگیرند. در حالت پیشفرض، چهار مقدار ۸، ۱۶، ۳۲، ۶۴ (و در صورت پشتیبانی ۱۲۸) بیتی را ۱۰۰۰۰ بار در یک حلقه به ازای هر bogo-op میچرخاند. --rotate-method method مشخص کردن روش چرخش مورد استفاده. روش 'all' از تمامی روشها استفاده میکند و حالت پیشفرض است. lB2 lB l lx. روش توضیحات all آزمون با تمام روشهای عامل فشار rotate (پایین را ببینید): rol8 چرخش ۸ بیتی بدون علامت به چپ به اندازه ۱ بیت ror8 چرخش ۸ بیتی بدون علامت به راست به اندازه ۱ بیت rol16 چرخش ۱۶ بیتی بدون علامت به چپ به اندازه ۱ بیت ror16 چرخش ۱۶ بیتی بدون علامت به راست به اندازه ۱ بیت rol32 چرخش ۳۲ بیتی بدون علامت به چپ به اندازه ۱ بیت ror32 چرخش ۳۲ بیتی بدون علامت به راست به اندازه ۱ بیت rol64 چرخش ۶۴ بیتی بدون علامت به چپ به اندازه ۱ بیت ror64 چرخش ۶۴ بیتی بدون علامت به راست به اندازه ۱ بیت rol128 چرخش ۱۲۸ بیتی بدون علامت به چپ به اندازه ۱ بیت ror128 چرخش ۱۲۸ بیتی بدون علامت به راست به اندازه ۱ بیت --rotate-ops N پس از N عملیات ساختگی (bogo) چرخش متوقف شود. آزمونگر دنبالههای بازآغازپذیر (rseq) (لینوکس) 5 --rseq N شروع N پردازهٔ کارگر که دنبالههای بازآغازپذیر را از طریق فراخوان سیستمی rseq(2) میآزمایند. این کار روی یک بخش بحرانی (critical section) طولانیمدت که احتمال وقفه در آن زیاد است، حلقه میزند. یک گردانندهٔ لغو (abort handler) مربوط به rseq تعداد وقفهها را شمارش میکند و یک گردانندهٔ SIGSEGV نیز لغوهای ناموفق rseq را که ممکن است در صورت عدم تطابق در امضای بررسی rseq رخ دهند ردیابی میکند. فقط مخصوص لینوکس. --rseq-ops N پس از N عملیات ساختگی (bogo) rseq متوقف شود. هر عملیات bogo rseq معادل ۱۰۰۰۰ بار تکرار روی یک بخش بحرانی طولانیمدت مدیریتشده توسط rseq است. آزمونگر ساعت زمان واقعی (RTC) 5 --rtc N شروع N پردازهٔ کارگر که رابطهای ساعت زمان واقعی (RTC) را از طریق /dev/rtc و /sys/class/rtc/rtc0 به کار میگیرند. هیچ نوشتن مخربی (تغییرات) روی RTC انجام نمیشود. این آزمونگر فقط مخصوص لینوکس است. --rtc-ops N پس از N بار دسترسی ساختگی (bogo) به رابط RTC متوقف شود. آزمونگر ترکیب زمانبندی (Scheduler mix) 5 --schedmix N شروع N پردازهٔ کارگر که هرکدام پردازههای فرزندی را آغاز میکنند که مکرراً یک سیاست زمانبندی را بهصورت تصادفی انتخاب کرده و سپس یک فعالیت زمانبر کوتاه و تصادفی را اجرا میکنند. این کار زمانبندی مجدد سریع پردازهها را به چالش میکشد و مقدار زیادی وقفهٔ زمانسنج زمانبندی ایجاد میکند. --schedmix-cpumix انتقال پردازههای فرزند به CPUهای تصادفی به منظور ترکیب پردازندهها (CPU mixing). --schedmix-ops N پس از N عملیات ترکیبی زمانبندی متوقف شود. --schedmix-procs N مشخص کردن تعداد پردازههای فرزندی که برای هر نمونه از آزمونگر اجرا میشوند، در بازهٔ ۱ تا ۶۴، پیشفرض ۱۶ است. آزمونگر سیاست زمانبندی (Scheduling policy) 5 --schedpolicy N شروع N پردازهٔ کارگر که کارگر را روی سیاستهای زمانبندی مختلفِ در دسترس از میان SCHED_OTHER، SCHED_BATCH، SCHED_IDLE، SCHED_FIFO، SCHED_RR، SCHED_DEADLINE و SCHED_EXT تنظیم میکنند. برای سیاستهای زمانبندی بلادرنگ (real time)، یک اولویت زمانبندی تصادفی بین حداقل و حداکثر اولویتهای زمانبندی تنظیمشده انتخاب میشود. --schedpolicy-cpumix انتقال پردازههای فرزند به CPUهای تصادفی به منظور ترکیب پردازندهها (CPU mixing). --schedpolicy-ops N پس از N بار تغییر ساختگی (bogo) در سیاست زمانبندی متوقف شود. --schedpolicy-rand انتخاب تصادفی سیاست زمانبندی به گونهای که سیاست جدید همواره با سیاست پیشین متفاوت باشد. حالت پیشفرض، پیمایش ترتیبی سیاستهای زمانبندی است. آزمونگر پروتکل انتقال کنترل جریان (SCTP) 5 --sctp N شروع N پردازهٔ کارگر که فعالیت بارگذاری شبکه را با استفاده از پروتکل Stream Control Transmission Protocol (SCTP) انجام میدهند. این شامل پردازههای کلاینت/سرور است که اتصال سریع، ارسال/دریافت و قطع اتصال را روی میزبان محلی انجام میدهند. --sctp-domain D دامنهٔ مورد استفاده را مشخص میکند؛ مقدار پیشفرض ipv4 است. در حال حاضر ipv4 و ipv6 پشتیبانی میشوند. --sctp-if NAME استفاده از رابط شبکهٔ NAME. اگر رابط NAME وجود نداشته باشد، فعال (up) نباشد یا از دامنه پشتیبانی نکند، رابط loopback (lo) به عنوان پیشفرض استفاده میشود. --sctp-max-size N مشخص کردن حداکثر اندازهٔ داده بر حسب بایت، در بازهٔ ۱۶ تا ۶۵۵۳۵ با مقدار پیشفرض ۸۱۹۲. --sctp-ops N متوقف کردن پردازههای کارگر sctp پس از N عملیات ساختگی (bogo). --sctp-port P شروع از درگاه sctp برابر با P. برای N پردازهٔ کارگر sctp، از درگاههای P تا P + (N − 1) استفاده میشود (برای ماندن در بازهٔ ۱۰۲۴ تا ۶۵۵۳۵ چرخش مییابد). درگاه پیشفرض ۵۰۱۷۶ است. --sctp-sched [ fc | fcfs | prio | rr | wfq ] مشخص کردن زمانبند SCTP، یکی از fc (ظرفیت منصفانه)، fcfs (نخستین ورودی نخستین خروجی، پیشفرض)، prio (اولویت)، rr (نوبتگردشی یا round-robin) یا wfq (صفبندی منصفانهٔ وزندار). آزمونگر مهروموم فایل (SEAL) (لینوکس) 5 --seal N شروع N پردازهٔ کارگر که دستورات SEAL در fcntl(2) را روی یک فایل ناشناس به اندازهٔ یک صفحه (page) که با memfd_create(2) ایجاد شده میآزمایند. پس از صدور هر دستور SEAL، آزمونگر همچنین بررسی سلامت انجام میدهد تا مطمئن شود که آیا عملیات مهروموم (seal) فایل را به درستی مهروموم کرده است یا خیر. (فقط لینوکس). --seal-ops N پس از N عملیات ساختگی (bogo) مهروموم (seal) متوقف شود. آزمونگر رایانش امن (seccomp) 5 --seccomp N شروع N پردازهٔ کارگر که فیلترکردن فراخوانهای سیستمی Secure Computing را میآزمایند. هر کارگر پردازههای فرزندی ایجاد میکند که یک پیام کوتاه در /dev/null نوشته و سپس خارج میشوند. ۲٪ از پردازههای فرزند دارای فیلتر seccomp هستند که مانع فراخوان سیستمی write میشود و بنابراین با سیگنال SIGSYS توسط seccomp کشته میشوند. توجه داشته باشید که این آزمونگر میتواند با هر بار کشتهشدن فرزند، پیامهای گزارش حسابرسی (audit log) متعددی تولید کند. برای اجرا به CAP_SYS_ADMIN نیاز است. --seccomp-ops N متوقف کردن پردازههای کارگر آزمون seccomp پس از N بار آزمایش فیلتر seccomp. آزمونگر حافظهٔ محرمانه (لینوکس ≥ 5.11) 5 --secretmem N شروع N پردازهٔ کارگر که با استفاده از نگاشت فایل از یک توصیفگر فایل memfd_secret(2)، صفحهها را mmap میکنند. هر تکرار حلقهٔ آزمون، ناحیهٔ قابل نگاشت را با استفاده از ftruncate و mmap به اندازهٔ ۳ صفحه گسترش داده و به صفحهها دسترسی پیدا میکند (لمس میکند). سپس صفحهها با ابطال نگاشت (unmapping) صفحهٔ میانی و سپس ابطال نگاشت صفحههای نخست و پایانی تکهتکه (fragmented) میشوند. این کار سعی میکند تکهتکهشدن صفحات را تحمیل کند و همچنین هنگام اتمام حافظهٔ محرمانه، باعث راهاندازی فرآیند کشتار کمبود حافظه (OOM) برای آزمونگر شود. توجه داشته باشید که این آزمونگر فقط مخصوص لینوکس 5.11+ است و هسته باید با گزینهٔ “secretmem=” راهاندازی شود تا فضای رزرو حافظهٔ محرمانه تخصیص یابد. --secretmem-ops N متوقف کردن پردازههای کارگر آزمون secretmem پس از N بار تکرار حلقهٔ آزمون. آزمونگر پویش در فایل (seek) 5 --seek N شروع N پردازهٔ کارگر که بهصورت تصادفی در یک فایل seek کرده و عملیات ورودی/خروجی (I/O) خواندن/نوشتن ۵۱۲ بایتی انجام میدهند. اندازهٔ پیشفرض فایل 16 GB است. --seek-ops N متوقف کردن پردازههای کارگر آزمون seek پس از N عملیات ساختگی (bogo) جستوجو (seek). --seek-punch ایجاد حفرههای (hole punch) تصادفی ۸ کیلوبایتی (8 K) درون فایل برای ایجاد اکستنتهای (extents) بیشتر به منظور تحمیل بار سنگینتر به آزمونگر seek (فقط لینوکس). --seek-size N مشخص کردن اندازهٔ فایل بر حسب بایت. اندازههای کوچک فایل اجازه میدهد که I/O در حافظهٔ پنهان رخ دهد که باعث بار بیشتر روی CPU میشود. اندازههای بزرگ فایل عملیات I/O بیشتری را به درایو تحمیل کرده که باعث زمان انتظار بیشتر و I/O سنگینتر روی درایو میشود. میتوان اندازه را در واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با استفاده از پسوندهای b، k، m یا g مشخص کرد. آزمونگر سمافور POSIX 5 --sem N شروع N پردازهٔ کارگر که عملیات wait و post را روی سمافور POSIX انجام میدهند. بهطور پیشفرض، برای ایجاد مقداری رقابت (contention) روی سمافور، به ازای هر کارگر یک والد و ۴ فرزند راهاندازی میشوند. این کار عملیات سریع سمافور را تحت فشار قرار میدهد و تعویض زمینهٔ (context switching) سریعی ایجاد میکند..TP --sem-ops N متوقف کردن کارگرهای تنش سمافور پس از N عملیات bogo سمافور. --sem-procs N راهاندازی N کارگر فرزند به ازای هر کارگر برای ایجاد رقابت روی سمافور؛ مقدار پیشفرض ۴ بوده و حداکثر ۶۴ مجاز است. --sem-shared اشتراکگذاری سمافور میان تمام نمونههای تنشزای sem. در حالت عادی هر تنشزای سمافور، یک سمافور را با پردازههای فرزند خود به اشتراک میگذارد؛ این گزینه با به اشتراک گذاشتن یک سمافور در میان تمام پردازههای تنشزای سمافور، رقابت قفلگذاری بیشتر و توان عملیاتی کمتری ایجاد میکند. تنشزای سمافور System V 5 --sem-sysv N راهاندازی N کارگر که عملیاتهای wait و post سمافور System V را انجام میدهند. بهطور پیشفرض، به ازای هر کارگر یک والد و ۴ فرزند برای ایجاد مقداری رقابت روی سمافور راهاندازی میشوند. این کار عملیاتهای سریع سمافور را تحت تنش قرار داده و تعویض زمینه (context switching) سریعی ایجاد میکند. --sem-sysv-ops N متوقف کردن کارگرهای تنش سمافور پس از N عملیات bogo سمافور System V. --sem-sysv-procs N راهاندازی N پردازه فرزند به ازای هر کارگر برای ایجاد رقابت روی سمافور System V؛ مقدار پیشفرض ۴ بوده و حداکثر ۶۴ مجاز است. --sem-sysv-setall تنظیم مقادیر semval برای تمام سمافورها در مجموعهٔ سمافور فرزند. این عمل به تعریف بودن عملیات SETALL در semctl و موفقیتآمیز بودن GETALL وابسته است و یک گزینهٔ انتخابی بهشمار میرود، چرا که بر سمافورِ در حال آزمایش تأثیر میگذارد. تنشزای Sendfile 5 --sendfile N راهاندازی N کارگر که یک فایل خالی را با استفاده از فراخوانی sendfile(2) به /dev/null ارسال میکنند. این عملیات تقریباً تمام زمان را در هسته سپری میکند. اندازه پیشفرض sendfile برابر با 4 MB است. گزینههای sendfile فقط مختص لینوکس هستند. --sendfile-ops N متوقف کردن کارگرهای sendfile پس از N عملیات bogo در sendfile. --sendfile-size N مشخص کردن اندازهای که با هر فراخوانی sendfile کپی میشود. اندازه پیشفرض 4 MB است. میتوان اندازه را در واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با استفاده از پسوندهای b، k، m یا g تعیین کرد. تنشزای Sessions 5 --session N راهاندازی N کارگر که پردازههای فرزند و نوه ایجاد میکنند تا شناسهٔ نشست (session ID) خود را تنظیم و دریافت کنند. ۲۵٪ از پردازههای نوه توسط پردازه فرزند مورد انتظار (wait) قرار نمیگیرند تا نشستهای یتیمی (orphaned) ایجاد شوند که باید توسط init جمعآوری (reap) شوند. --session-ops N متوقف کردن کارگرهای نشست پس از ایجاد و جمعآوری شدن N پردازه فرزند. تنشزای تنظیم داده در هسته (Setting data in the Kernel) 5 --set N راهاندازی N کارگر که فراخوانیهای سیستمی را صدا میزنند که سعی در تنظیم دادهها در هسته دارند؛ در حال حاضر این فراخوانیها عبارتند از: setgid(2)، sethostname(2)، setpgid(2)، setpgrp(2)، setuid(2)، setgroups(2)، setreuid(2)، setregid(2)، setresuid(2)، setresgid(2) و setrlimit(2). برخی از این فراخوانیهای سیستمی مختص سیستمعاملهای خاصی هستند. --set-ops N متوقف کردن کارگرهای set پس از N عملیات bogo تنظیم (set). تنشزای Shellsort 5 --shellsort N راهاندازی N کارگر که اعداد صحیح ۳۲ بیتی را با استفاده از shellsort(3) مرتبسازی میکنند. --shellsort-ops N متوقف کردن کارگرهای تنش shellsort پس از N مرتبسازی bogo با shellsort. --shellsort-size N مشخص کردن تعداد اعداد صحیح ۳۲ بیتی برای مرتبسازی؛ مقدار پیشفرض 262144 (256 × 1024) است. تنشزای حافظه مشترک POSIX 5 --shm N راهاندازی N کارگر که اشیاء حافظه مشترک را با استفاده از واسطهای حافظه مشترک POSIX باز کرده و تخصیص میدهند. بهطور پیشفرض، این آزمایش بهصورت مکرر ۳۲ شیء حافظه مشترک ایجاد و نابود میکند که اندازه هر یک 8 MB است. --shm-bytes N مشخص کردن اندازه اشیاء حافظه مشترک POSIX برای ایجاد شدن. میتوان اندازه را به صورت درصدی از کل حافظه در دسترس یا در واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با استفاده از پسوندهای b، k، m یا g مشخص کرد. --shm-mlock تلاش برای قفل کردن اشیاء حافظه مشترک در حافظه با mlock(2) که با جلوگیری از برونسپاری (swap out) صفحهها به حافظه جانبی، فشار حافظه بیشتری ایجاد میکند. --shm-objs N مشخص کردن تعداد اشیاء حافظه مشترک برای ایجاد شدن. --shm-ops N توقف پس از تکمیل N عملیات bogo ایجاد و تخریب حافظه مشترک POSIX. تنشزای حافظه مشترک System V 5 --shm-sysv N راهاندازی N کارگر که با استفاده از واسط حافظه مشترک System V، حافظه مشترک تخصیص میدهند. بهطور پیشفرض، این آزمایش بهصورت مکرر ۸ بخش حافظه مشترک ایجاد و نابود میکند که اندازه هر یک 8 MB است. --shm-sysv-bytes N مشخص کردن اندازه بخش حافظه مشترک برای ایجاد شدن. میتوان اندازه را به صورت درصدی از کل حافظه در دسترس یا در واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با استفاده از پسوندهای b، k، m یا g مشخص کرد. --shm-sysv-mlock تلاش برای قفل کردن بخش حافظه مشترک در حافظه با mlock(2) که با جلوگیری از برونسپاری (swap out) صفحهها به حافظه جانبی، فشار حافظه بیشتری ایجاد میکند. --shm-sysv-ops N توقف پس از تکمیل N عملیات bogo ایجاد و تخریب حافظه مشترک. --shm-sysv-segs N مشخص کردن تعداد بخشهای حافظه مشترک برای ایجاد شدن؛ مقدار پیشفرض ۸ بخش است. تنشزای SIGABRT 5 --sigabrt N راهاندازی N کارگر که فرزندانی ایجاد میکنند که با سیگنالهای SIGABRT یا با فراخوانی abort(3) کشته میشوند. --sigabrt-ops N متوقف کردن کارگرهای sigabrt پس از مدیریت موفقیتآمیز N سیگنال SIGABRT. تنشزای SIGBUS 5 --sigbus N راهاندازی N کارگر که بهسرعت خطاهای گذرگاه (bus errors) تولیدشده از طریق دسترسی ناتراز (misaligned access) و دسترسی به نگاشت حافظه مبتنی بر فایلی که فضای ذخیرهسازی فایلی برای پشتیبانی از صفحه مورد دسترسی ندارد را ایجاد و دریافت میکنند. --sigbus-ops N متوقف کردن کارگرهای تنش sigbus پس از N خطای گذرگاه bogo. تنشزای SIGCHLD 5 --sigchld N راهاندازی N کارگر که فرزندانی برای تولید سیگنالهای SIGCHLD ایجاد میکنند. این کار فرزندانی را که خارج میشوند (CLD_EXITED)، کشته میشوند (CLD_KILLED)، متوقف میشوند (CLD_STOPPED) یا ادامه مییابند (CLD_CONTINUED) به کار میگیرد. --sigchld-ops N متوقف کردن کارگرهای sigchld پس از مدیریت موفقیتآمیز N سیگنال SIGCHLD. تنشزای SIGFD (لینوکس) 5 --sigfd N راهاندازی N کارگر که سیگنالهای SIGRT تولید میکنند و این سیگنالها با خواندن توسط یک پردازه فرزند با استفاده از توصیفگر فایلی که با signalfd(2) برپا شده مدیریت میشوند (فقط لینوکس). این کار هنگامی که تمام پردازندهها کاملاً زیر بار هستند، بار سنگینی از تعویض زمینه (context switch) ایجاد میکند..TP --sigfd-ops متوقف کردن کارگرهای sigfd پس از ارسال N سیگنال فرضی SIGUSR1. تنشزای SIGFPE 5 --sigfpe N راهاندازی N کارگر که با سرعت خطاهای تقسیم بر صفر SIGFPE ایجاد میکنند. --sigfpe-ops N متوقف کردن کارگرهای تنشزای sigfpe پس از N خطای فرضی SIGFPE. تنشزای SIGHUP 5 --sighup N راهاندازی N کارگر که با استفاده از raise(2) و از طریق کشتن یک فرایند سرگروه (که در آن یک فرایند فرزند هنگام از دست دادن سرگروه خود به طور غیرمستقیم SIGHUP دریافت میکند) سیگنالهای SIGHUP تولید میکنند. --sighup-ops N متوقف کردن کارگرهای تنشزای sighup پس از N سیگنال SIGHUP. تنشزای SIGILL 5 --sigill N راهاندازی N کارگر که دستورالعملهای غیرمجاز را برای تولید سیگنالهای SIGILL اجرا میکنند. --sigill-ops N متوقف کردن کارگرهای تنشزای sigill پس از N سیگنال SIGILL. تنشزای SIGIO 5 --sigio N راهاندازی N کارگر که دادهها را از طریق یک pipe از یک فرایند فرزند خوانده و سیگنالهای SIGIO تولید میکنند. این کار I/O ناهمگام را از طریق SIGIO میآزماید. --sigio-ops N متوقف کردن کارگرهای تنشزای sigio پس از رسیدگی به N سیگنال SIGIO. تنشزای Signal 5 --signal N راهاندازی N کارگر که فراخوان سیستمی signal را با سه گرداننده سیگنال مختلف میآزمایند: SIG_IGN (نادیده گرفتن)، یک گرداننده SIGCHLD و SIG_DFL (کنش پیشفرض). برای گرداننده SIGCHLD، تنشزا به خود یک سیگنال SIGCHLD میفرستد و بررسی میکند که آیا رسیدگی شده است یا خیر. برای سایر گردانندهها، تنشزا بررسی میکند که گرداننده SIGCHLD فراخوانی نشده باشد. این آزمون تنش در صورت امکان فراخوان سیستمی signal را مستقیماً صدا میزند و تلاش میکند از اقدام کتابخانه C برای جایگزینی signal با فراخوان سیستمی مدرنتر sigaction دوری کند. --signal-ops N متوقف کردن کارگرهای تنشزای signal پس از N دور تنظیم گرداننده سیگنال. تنشزای رسیدگی تودرتو به سیگنال 5 --signest N راهاندازی N کارگر که رسیدگی تودرتو به سیگنال را میآزمایند. یک سیگنال برانگیخته میشود و درون گرداننده سیگنال، سیگنال دیگری برانگیخته میشود که فهرستی از سیگنالها را برای آزمودن طی میکند. از یک پشته سیگنال جایگزین استفاده میشود که به اندازه کافی برای مدیریت تمام فراخوانیهای تودرتوی سیگنال بزرگ است. گزینه -v اندازه تقریبی پشته مورد نیاز و میانگین اندازه پشته در هر فراخوانی تودرتو را ثبت خواهد کرد. --signest-ops N توقف پس از رسیدگی به N سیگنال تودرتو. تنشزای سیگنالهای معلق 5 --sigpending N راهاندازی N کارگر که معلق بودن سیگنالهای SIGUSR1 را بررسی میکنند. این تنشزا SIGUSR1 را ماسک میکند، یک سیگنال SIGUSR1 تولید کرده و از sigpending(2) برای بررسی معلق بودن سیگنال استفاده میکند. سپس سیگنال را از حالت ماسک خارج کرده و بررسی میکند که سیگنال دیگر معلق نباشد. --sigpending-ops N متوقف کردن کارگرهای تنشزای sigpending پس از N بررسی فرضی معلق/نامعلق بودن در sigpending. تنشزای SIGPIPE 5 --sigpipe N راهاندازی N کارگر که به طور مکرر فرایندهای فرزندی را ایجاد میکنند که پیش از تکمیل نوشتن در pipe توسط والد خارج میشوند و باعث ایجاد سیگنال SIGPIPE میشوند. فرایندهای فرزند در صورت موجود بودن با clone(2) و در غیر این صورت با استفاده از فراخوان کندتر fork(2) ایجاد میشوند. --sigpipe-ops N متوقف کردن N کارگر پس از دریافت و رسیدگی به N سیگنال SIGPIPE. تنشزای صفبندی سیگنال 5 --sigq N راهاندازی N کارگر که با استفاده از sigqueue(3) به سرعت سیگنالهای SIGUSR1 را به فرایندهای فرزندی که از طریق sigwaitinfo(2) منتظر سیگنال هستند، ارسال میکنند. --sigq-ops N متوقف کردن کارگرهای تنشزای sigq پس از N عملیات فرضی ارسال سیگنال. تنشزای سیگنالهای بلادرنگ 5 --sigrt N راهاندازی N کارگر که هر کدام فرایندهای فرزندی را برای رسیدگی به سیگنالهای بلادرنگ SIGRTMIN تا SIGRMAX ایجاد میکنند. والد از طریق siqueue(2) به هر فرایند فرزند یک سیگنال RT میفرستد و فرایند فرزند از طریق sigwaitinfo(2) منتظر آن میماند. هنگامی که فرزند سیگنال را دریافت میکند، سپس یک سیگنال RT به یکی دیگر از فرایندهای فرزند نیز از طریق sigqueue(2) میفرستد. --sigrt-ops N متوقف کردن کارگرهای تنشزای sigrt پس از N عملیات فرضی ارسال سیگنال با sigqueue. تنشزای SIGSEGV 5 --sigsegv N راهاندازی N کارگر که به سرعت خطاهای نقص قطعهبندی (segmentation faults) تولیدشده از طریق دسترسی غیرمجاز به حافظه، فراخوانهای سیستمی غیرمجاز vdso، خواندنهای غیرمجاز درگاه، وقفههای غیرمجاز یا دسترسی به شمارنده برچسب زمان x86 را ایجاد کرده و به دام میاندازند. --sigsegv-ops N متوقف کردن کارگرهای تنشزای sigsegv پس از N خطای فرضی نقص قطعهبندی. تنشزای SIGSTOP 5 --sigstop N راهاندازی N کارگر که دارای یک فرایند فرزند هستند که خود را با SIGSTOP متوقف میکند و یک فرایند والد که این را با یک SIGCHLD تشخیص میدهد تا بتواند فرزند را با یک سیگنال SIGCONT از سر گیرد. --sigstop-ops N توقف پس از N بار متوقف کردن با استفاده از SIGSTOP و SIGCONT. تنشزای انتظار برای سیگنالهای فرایند 5 --sigsuspend N راهاندازی N کارگر که هر کدام ۴ فرایند فرزند ایجاد میکنند که با استفاده از sigsuspend(2) منتظر یک سیگنال SIGUSR1 از والد میمانند. والد سیگنالهای SIGUSR1 را پیدرپی و با سرعت به هر فرزند میفرستد. هر بیدار شدن sigsuspend به عنوان یک عملیات فرضی شمرده میشود. --sigsuspend-ops N متوقف کردن کارگرهای تنشزای sigsuspend پس از N بار بیدار شدن فرضی sigsuspend. تنشزای SIGTRAP 5 --sigtrap N راهاندازی N کارگر که سیگنال SIGTRAP را میآزمایند. برای سیستمهایی که از SIGTRAP پشتیبانی میکنند، سیگنال با استفاده از raise(SIGTRAP) تولید میشود. فقط در سیستمهای لینوکس x86، سیگنال SIGTRAP همچنین توسط یک دستورالعمل int 3 ایجاد میشود. --sigtrap-ops N متوقف کردن کارگرهای تنشزای sigtrap پس از رسیدگی به N سیگنال SIGTRAP. تنشزای SIGURG 5 --sigurg N راهاندازی کارگرهایی که سیگنال SIGURG را با ارسال دادههای خارج از باند روی یک جریان سوکت TCP/IP IPv4 میآزمایند..TP --sigurg-ops N توقف کارگران استرسزای sigurg پس از مدیریت N سیگنال SIGURG. استرسزای SIGVTARLM 5 --sigvtalrm N آغاز N کارگر که سیگنال SIGVTARLM را با استفاده از یک itimer از نوع ITIMER_VIRTUAL و یک حلقهٔ مشغول (busy loop) که با فراخوانی getitimer برای تایمر ITIMER_VIRTUAL زمان پردازنده (CPU) را مصرف میکند، به کار میگیرند. --sigvtalrm-ops N توقف کارگران استرسزای sigvtalrm پس از رسیدگی به N سیگنال SIGVTARLM. استرسزای SIGXCPU 5 --sigxcpu N آغاز N کارگر که استرسزای SIGXCPU را به کار میگیرند. یک حلقهٔ مشغول با تعیین محدودیت زمان اجرای ۰ ثانیهای و به دنبال آن یک فراخوانی sched_yield(2)، سیگنالهای SIGXCPU تولید میکند. --sigxcpu-ops N توقف کارگران استرسزای sigsxcpu پس از N تلاش ساختگی (bogo) برای سیگنال SIGXCPU. استرسزای SIGXFSZ 5 --sigxfsz N آغاز N کارگر که استرسزای SIGXFSZ را به کار میگیرند. یک محدودیت تصادفی ۳۲ بیتی برای اندازهٔ فایل تنظیم میشود و دادهها خارج از این محدودیت اندازه نوشته میشوند تا یک سیگنال SIGXFSZ تولید شود. --sigxfsz-ops N توقف کارگران استرسزای sigsxfsz پس از N تلاش ساختگی (bogo) برای سیگنال SIGXFSZ. استرسزای تصادفی حافظه و خط حافظهٔ نهان پردازنده با skiplist 5 --skiplist N آغاز N کارگر که با استفاده از یک skiplist، اعداد صحیح را ذخیره و سپس جستجو میکنند. به طور پیشفرض، ۶۵۵۳۶ عدد صحیح اضافه و جستجو میشوند. این یک روش مفید برای به کار گرفتن دسترسی تصادفی به حافظه و حافظهٔ نهان پردازنده است. --skiplist-ops N توقف کارگر skiplist پس از تکمیل N چرخهٔ ذخیره و جستجوی skiplist. --skiplist-size N تعیین اندازه (تعداد اعداد صحیح) برای ذخیره و جستجو در skiplist. اندازه میتواند بین 1 K تا 4 M باشد. استرسزای وقفههای زمانی و تعویضهای زمینه 5 --sleep N آغاز N کارگر که چندین رشته (thread) ایجاد میکنند که هر یک چندین خواب (sleep) در بازههای زمانی ۱ میکروثانیه تا ۰٫۱ ثانیه انجام میدهند. این کار تعویضهای زمینه و وقفههای تایمر متعددی ایجاد میکند. --sleep-max P آغاز P رشته به ازای هر کارگر. مقدار پیشفرض ۱۰۲۴ و حداکثر مقدار مجاز ۳۰۰۰۰ است. --sleep-ops N توقف پس از N عملیات ساختگی (bogo) مربوط به sleep. استرسزای وقفههای مدیریت سیستم (SMI) 5 --smi N آغاز N کارگر که تلاش میکنند با بهکارگیری درگاه مدیریت توان پیشرفته (APM) به آدرس 0xb2، وقفههای مدیریت سیستم (SMIs) را در حالت مدیریت سیستم (SMM) سطح ring -2 معماری x86 تولید کنند. این کار نیازمند گزینهٔ --pathological و امتیازهای ریشه (root) بوده و تنها بر روی پلتفرمهای x86 لینوکس پیادهسازی شده است. این قابلیت احتمالاً در یک محیط مجازیسازیشده کار نخواهد کرد. استرسزا تلاش خواهد کرد با چند بنچمارک مقدماتی و ساده (naïve)، زمان به سرقترفته توسط SMIها را تعیین کند. --smi-ops N توقف پس از N بار تلاش برای تحریک SMI. استرسزای سوکت شبکه 5 -S N, --sock N آغاز N کارگر که فعالیتهای مختلف استرس سوکت را انجام میدهند. این شامل یک جفت فرایند کلاینت/سرور است که اتصالها، ارسالها، دریافتها و قطع اتصالهای سریعی را بر روی میزبان محلی انجام میدهند. --sock-domain D تعیین دامنهٔ مورد استفاده؛ مقدار پیشفرض ipv4 است. در حال حاضر ipv4، ipv6 و unix پشتیبانی میشوند. --sock-if NAME استفاده از رابط شبکهٔ NAME. اگر رابط NAME وجود نداشته باشد، فعال (up) نباشد یا از دامنه پشتیبانی نکند، رابط loopback (lo) به عنوان پیشفرض استفاده میشود. --sock-msgs N ارسال N پیام به ازای هر تکرار از چرخهٔ اتصال، ارسال/دریافت، و قطع اتصال. مقدار پیشفرض ۱۰۰۰ پیام است. اگر N بسیار کوچک باشد، نرخ عملیات به دلیل بار اضافی اتصال و قطع اتصال سوکت محدود میشود (در لینوکس، باید مقدار /proc/sys/net/netfilter/nf_conntrack_max را برای اجازه دادن به اتصالات بیشتر افزایش داد). --sock-nodelay این گزینه الگوریتم TCP Nagle را غیرفعال میکند، بنابراین قطعات داده همیشه در سریعترین زمان ممکن ارسال میشوند. این امر مانع از بافر شدن دادهها پیش از ارسال میشود و در نتیجه به بهرهوری ضعیفتر شبکه و تعویضهای زمینهٔ بیشتری میان فرستنده و گیرنده میانجامد. --sock-ops N توقف کارگران استرس سوکت پس از N عملیات ساختگی (bogo). --sock-opts [ random | send | sendmsg | sendmmsg ] به طور پیشفرض، پیامها با استفاده از send(2) ارسال میشوند. این گزینه امکان مشخص کردن روش ارسال با استفاده از send(2)، sendmsg(2)، sendmmsg(2) یا انتخابی تصادفی از یکی از این ۳ مورد در هر تکرار را فراهم میکند. توجه داشته باشید که sendmmsg تنها برای سیستمهای لینوکسی که از این فراخوانی سیستمی پشتیبانی میکنند در دسترس است. --sock-port P شروع از پورت سوکت P. برای N فرایند کارگر سوکت، پورتهای P تا P + (N − 1) استفاده میشوند (برای ماندن در محدودهٔ ۱۰۲۴ تا ۶۵۵۳۵ چرخش انجام میشود). پورت پیشفرض ۵۰۹۴۴ است. --sock-protocol P استفاده از پروتکل مشخصشدهٔ P؛ مقدار پیشفرض tcp است. گزینهها tcp و mptcp (در صورت پشتیبانی سیستمعامل) هستند. --sock-type [ stream | seqpacket ] تعیین نوع سوکت مورد استفاده. نوع پیشفرض stream است. در حال حاضر seqpacket تنها برای دامنهٔ سوکت unix کار میکند. --sock-zerocopy فعالسازی zerocopy برای فراخوانیهای send و recv در صورتی که MSG_ZEROCOPY پشتیبانی شود. استرسزای سوءاستفاده از سوکت 5 --sockabuse N آغاز N کارگر که با استفاده از سامانههای مختلف مبتنی بر فایل که معمولاً روی سوکتها عمل نمیکنند، از یک توصیفگر فایل سوکت سوءاستفاده میکنند. هسته باید این فراخوانیهای غیرمجاز و غیرمنتظره را با شیوهای ملایم (gracefully) مدیریت کند. --sockabuse-ops N توقف پس از N بار تکرار حلقهٔ استرسزای سوءاستفاده از سوکت. --sockabuse-port P شروع از پورت سوکت P. برای N فرایند کارگر sockabuse، پورتهای P تا P + (N − 1) استفاده میشوند (برای ماندن در محدودهٔ ۱۰۲۴ تا ۶۵۵۳۵ چرخش انجام میشود). پورت پیشفرض ۵۱۲۰۰ است. استرسزای عیبیابی سوکت (لینوکس) 5 --sockdiag N آغاز N کارگر که عیبیابی سوکت netlink از نوع sock_diag در لینوکس را به کار میگیرند (فقط لینوکس). این بخش در حال حاضر اطلاعات تشخیصی را با استفاده از UDIAG_SHOW_NAME، UDIAG_SHOW_VFS، UDIAG_SHOW_PEER، UDIAG_SHOW_ICONS، UDIAG_SHOW_RQLEN و UDIAG_SHOW_MEMINFO برای خانواده اتصالات سوکت AF_UNIX درخواست میکند. --sockdiag-ops N توقف پس از دریافت N پیام تشخیصی sock_diag. استرسزای توصیفگر فایل سوکت 5 --sockfd N آغاز N کارگر که توصیفگرهای فایل را با استفاده از سازوکار دادههای کمکی CMSG(3) از طریق یک سوکت دامنهٔ یونیکس (UNIX domain socket) منتقل میکنند. به ازای هر کارگر، یک جفت فرایند کلاینت/سرور ایجاد میشود؛ سرور تا حد امکان توصیفگرهای فایل را روی /dev/null باز میکند و آنها را از طریق سوکت به کلاینتی میفرستد که این توصیفگرها را از دادههای CMSG میخواند و بلافاصله فایلها را میبندد. --sockfd-ops N توقف کارگران استرس sockfd پس از N عملیات ساختگی (bogo)..TP --sockfd-port P شروع از درگاه سوکت P. برای N پردازهٔ کارگر sockfd، درگاههای P تا P + (N − 1) استفاده میشوند (برای نگهداشتن در محدودهٔ 1024 تا 65535 دور میزند). درگاه پیشفرض 51456 است. --sockfd-reuse استفادهٔ مجدد از توصیفگر فایل با بازگرداندن آن از دریافتکننده به فرستنده و ارسال دوبارهٔ آن، به جای اینکه هر بار /dev/null باز شود. آزمونگر باز کردن سوکت شبکه (Opening network socket stressor) 5 --sockmany N آغاز N کارگر که از یک پردازهٔ کلاینت برای تلاش در جهت باز کردن تا سقف 100000 اتصال سوکت TCP/IP به یک سرور روی درگاه 10000 استفاده میکنند. --sockmany-if NAME استفاده از واسط شبکهٔ NAME. اگر واسط NAME وجود نداشته باشد، بالا (up) نباشد یا از دامنه پشتیبانی نکند، واسط لوپبک (lo) به عنوان پیشفرض استفاده میشود. --sockmany-max-size N تعیین حداکثر اندازهٔ داده به بایت، با محدودهٔ 1 تا 32768 و پیشفرض 8. --sockmany-ops N توقف پس از N اتصال. --sockmany-port P شروع از درگاه سوکت P. برای N پردازهٔ کارگر sockmany، درگاههای P تا P + (N − 1) استفاده میشوند (برای نگهداشتن در محدودهٔ 1024 تا 65535 دور میزند). درگاه پیشفرض 51712 است. آزمونگر ورودی/خروجی سوکت (Socket I/O stressor) 5 --sockpair N آغاز N کارگر که عملیات خواندن/نوشتن ورودی/خروجی جفتسوکت را انجام میدهند. این شامل یک جفت پردازهٔ کلاینت/سرور است که عملیات ورودی/خروجی سوکت با اندازههای تصادفی را اجرا میکنند. --sockpair-max-size N تعیین حداکثر اندازهٔ داده به بایت، با محدودهٔ 1 تا 65535 و پیشفرض 4096. --sockpair-ops N توقف کارگران آزمون جفتسوکت پس از N عملیات ساختگی (bogo ops). آزمونگر قفل نرم (Softlockup stressor) 5 --softlockup N آغاز N کارگر که برای تحمیل قفلهای نرم (softlockup)، با بالاترین اولویت بین سیاستهای زمانبندی “بلادرنگ” به نامهای SCHED_FIO و SCHED_RR جابهجا میشوند. این آزمون تنها با قابلیت CAP_SYS_NICE قابل اجرا است و برای دستیابی به بهترین نتایج، تعداد آزمونگرها باید حداقل برابر با تعداد CPUهای برخط باشد. هنگام اجرا، متوقف کردن آن عملاً غیرممکن است و باعث بروز مشکلات قفل نرم خواهد شد و ممکن است بازراهاندازیهای ناشی از اتمام مهلت زمانسنج ناظر (watchdog timeout) را برانگیزد. --softlockup-ops N توقف کارگران آزمون قفل نرم پس از N تغییر سیاست زمانبندی ساختگی (bogo). آزمونگر ماتریس خلوت (Sparse matrix stressor) 5 --sparsematrix N آغاز N کارگر که ۳ پیادهسازی گوناگون ماتریس خلوت را بر پایهٔ درهمسازی (hashing)، آرایهٔ Judy (برای سامانههای 64 بیتی)، لیستهای پیوندی مدور دوبعدی، ماتریس دوبعدی نگاشتشده در حافظه (غیرخلوت)، درهمسازی سریع (روی گرههای از پیش تخصیصیافته) و درخت سرخسیاه (red-black tree) میآزمایند. ماتریس خلوت با مقادیر پر میشود، مقادیر تصادفی که احتمالاً ناموجود هستند خوانده میشوند، مقادیر شناختهشده و موجود خوانده میشوند، و مقادیر شناختهشده و موجود به عنوان صفر علامتگذاری میشوند. این ماتریس خلوت پیشفرض 500 × 500 استفاده میشود و 5000 مورد درون ماتریس خلوت قرار داده میشوند که میزان استفاده از آن را به 2% میرساند. --sparsematrix-items N پر کردن ماتریس خلوت با N مورد. اگر N بزرگتر از تعداد عناصر موجود در ماتریس خلوت باشد، N محدود خواهد شد تا یک ماتریس خلوت 100% پر ایجاد کند. --sparsematrix-method [ all | hash | hashjudy | judy | list | mmap | qhash | rb ] تعیین نوع پیادهسازی ماتریس خلوت مورد استفاده. روش “all” از تمام روشها استفاده میکند و حالت پیشفرض است. lB2 lB l lx. روش توضیحات all آزمون با تمام روشهای آزمونگر sparsematrix (زیر را ببینید): hash استفاده از یک جدول درهمسازی (hash table) و تخصیص گرهها روی هیپ (heap) برای هر مقدار یکتا در موقعیت ماتریسی (x, y). hashjudy استفاده از یک جدول درهمسازی برای مختصات x و یک آرایهٔ Judy برای مختصات y جهت مقادیر در موقعیت ماتریسی (x, y). judy استفاده از یک آرایهٔ Judy با یک نگاشت یکبهیک یکتا از موقعیت ماتریسی (x, y) به درون آرایه. list استفاده از یک لیست پیوندی مدور برای موقعیتهای خلوت y که هر یک دارای لیستهای پیوندی مدور برای موقعیتهای خلوت x جهت مختصات ماتریسی (x, y) هستند. mmap استفاده از یک mmap غیرخلوت برای کل فضای ماتریس دوبعدی. تنها آن دسته از موقعیتهای ماتریسی (x, y) که به آنها ارجاع داده شده است به صورت فیزیکی نگاشت میشوند. توجه داشته باشید که ماتریسهای خلوت بزرگ را نمیتوان به دلیل محدودیتهای فضای نشانی مجازی mmap کرد، و صفحات ارجاعشدهٔ بیش از حد میتوانند کشندهٔ کمبود حافظه (out of memory killer) را در لینوکس فعال کنند. qhash استفاده از یک جدول درهمسازی با گرههای از پیش تخصیصیافته برای هر مقدار یکتا. این یک پیادهسازی سریع جدول درهمسازی است؛ گرهها هر بار با calloc تخصیص داده نمیشوند و از یک مخزن از پیش تخصیصیافته گرفته میشوند که منجر به عملکرد سریعتر جدول درهمسازی نسبت به روش hash میشود. rb استفاده از یک درخت متوازن سرخسیاه با استفاده از یک گرهٔ درختی برای هر مقدار یکتا در موقعیت ماتریسی (x, y). splay استفاده از یک درخت گسترده (splay tree) با استفاده از یک گرهٔ درختی برای هر مقدار یکتا در موقعیت ماتریسی (x, y). - --sparsematrix-ops N
- توقف پس از N تکرار آزمون sparsematrix.
- --sparsematrix-size N
- استفاده از یک ماتریس خلوت به اندازهٔ N × N.
- آزمونگر ایجاد پردازهٔ پوزیکس (posix_spawn) (لینوکس)
- --spawn N
- آغاز N کارگر که بهطور مداوم با استفاده از posix_spawn(3) پردازههای فرزندی ایجاد میکنند که stress-ng را اجرا (exec) کرده و سپس تقریباً بلافاصله خارج میشوند. در حال حاضر فقط مخصوص لینوکس است.
- --spawn-ops N
- توقف کارگران آزمون ایجاد پردازه (spawn) پس از N ایجاد ساختگی (bogo spawns).
- آزمونگر بازگشت حدسی (Speculative Rollback stressor)
- --spec-rollback N
- آغاز N کارگر که تلاش میکنند پیشبینی نادرست پرش (branch misprediction) و تخلیهٔ بازگشتی (rollback flush) خط لوله با پیشبینی نادرست را تحمیل کنند. بهطور پیشفرض، دادهها به عنوان بخشی از منطق پیشبینی نادرست، از یک مقدار تصادفی از آرایهای متشکل از 256 عدد صحیح 64 بیتی واکشی میشوند.
- --spec-rollback-ops N
- توقف پس از N × 1024 عملیات پیشبینی نادرست پرش.
- --spec-rollback-size N
- تنظیم اندازهٔ آرایهٔ دادههای تصادفی روی N عنصر. این مقدار به طور پیشفرض 256 است، با حداقل 16 تا حداکثر 8388608. مقدار بهینه زمانی است که N توانی از 2 باشد.
- آزمونگر چرخش روی حافظه برای همگامسازی پردازهها
- --spinmem N
- آغاز N کارگر که از یک صفحهٔ حافظهٔ مشترک برای همگام نگهداشتن دو پردازه با استفاده از حلقههای انتظار فعال (busy spin loops) بهره میبرند. یک پردازه نویسندهای است که مقداری را در خانهٔ حافظهٔ 0 افزایش میدهد و با چرخش منتظر میماند تا داده در خانهٔ حافظهٔ 1 ظاهر شود. پردازهٔ دیگر با چرخش منتظر میماند تا داده در خانهٔ 0 تغییر کند و مقدار تغییریافته را در خانهٔ حافظهٔ 1 رونوشت میکند. این آزمونگر زمان لازم برای وقوع تراکنشها میان هر دو پردازه را محک میزند. توجه داشته باشید که تعداد بهینهٔ آزمونگرها نیمی از تعداد CPUهای برخط در یک سامانه است. بهطور پیشفرض از خواندن/نوشتنهای 32 بیتی استفاده میشود.
- --spinmem-affinity
- انتقال پردازههای آزمونگر spinmem به CPUهای به صورت تصادفی انتخابشده در هر یک میلیون تراکنش spinmem.
- --spinmem-method method
- انتخاب
اندازهٔ
خواندن/نوشتنهای
حافظه؛
پیشفرض 32
بیت است.
خواندن/نوشتنهای
128 بیتی و/یا
اتمی ممکن
است در برخی
از
زنجیرههای
ابزار (toolchains)
پشتیبانی
نشوند.
روشهای spinmem
به شرح زیر
هستند:.sp
روش توضیحات 8bit خواندن/نوشتنهای ۸ بیتی 16bit خواندن/نوشتنهای ۱۶ بیتی 32bit خواندن/نوشتنهای ۳۲ بیتی 64bit خواندن/نوشتنهای ۶۴ بیتی 128bit خواندن/نوشتنهای ۱۲۸ بیتی (ممکن است پشتیبانی نشود) 8bitatomic خواندن/نوشتنهای اتمیک ۸ بیتی (ممکن است پشتیبانی نشود) 16bitatomic خواندن/نوشتنهای اتمیک ۱۶ بیتی (ممکن است پشتیبانی نشود) 32bitatomic خواندن/نوشتنهای اتمیک ۳۲ بیتی (ممکن است پشتیبانی نشود) 64bitatomic خواندن/نوشتنهای اتمیک ۶۴ بیتی (ممکن است پشتیبانی نشود) - --spinmem-ops N
- پس از N عملیات ساختگی (bogo ops) مربوط به spinmem متوقف میشود. یک عملیات ساختگی برابر با ۱۰۰۰ تراکنش بین دو فرایند spinmem است.
- --spinmem-yield
- واگذاری اجباری زمانبندی (scheduling yield) پس از هر عملیات خواندن/نوشتن spinmem.
- تنشزای Splice (لینوکس)
- --splice N
- انتقال دادهها از /dev/zero به /dev/null از طریق یک لوله (pipe) بدون هیچگونه کپیبرداری بین فضای آدرس هسته و فضای آدرس کاربر با استفاده از splice(2). این گزینه فقط برای لینوکس در دسترس است.
- --splice-bytes N
- انتقال N بایت در هر فراخوانی splice؛ مقدار پیشفرض 64 K است. میتوان اندازه را به صورت درصدی از کل حافظه در دسترس یا با واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با استفاده از پسوندهای b، k، m یا g مشخص کرد.
- --splice-ops N
- پس از N عملیات ساختگی splice متوقف میشود.
- تنشزای پشته (Stack)
- --stack N
- شروع N کارگر که با استفاده از تخصیصهای بازگشتی و بزرگ در پشته، به سرعت سرریز پشته ایجاد کرده و آن را به دام میاندازند. همانند تنشزای brk، این کار میتواند صفحات را به سرعت مصرف کند و ممکن است باعث فعالسازی OOM killer هسته بر روی فرایند شود؛ با این حال، تنشزای کشتهشده دوباره توسط یک فرایند والد ناظر مجدداً راهاندازی میشود.
- --stack-fill
- عمل پیشفرض لمس کردن (touch) پایینترین صفحه در هر تخصیص پشته است. این گزینه تمام صفحات را با پر کردن تخصیص جدید پشته با صفرها لمس میکند که موجب تخصیص اجباری صفحات فیزیکی شده و در نتیجه تهاجمیتر است.
- --stack-mlock
- تلاش برای مقید کردن صفحات پشته در حافظه با استفاده از mlock(2) که با جلوگیری از خروج صفحات به حافظه مبادله (swap out)، فشار حافظه بیشتری ایجاد میکند.
- --stack-ops N
- متوقف کردن کارگران تنش پشته پس از N سرریز ساختگی پشته.
- --stack-pageout
- انتقال اجباری صفحات پشته به حافظه مبادله (در صورت پشتیبانی madvise(2) از MADV_PAGEOUT در دسترس است).
- --stack-unmap
- لغو نگاشت (unmap) یک صفحه در وسط یک بافر بزرگ تخصیصیافته در پشته در هر بار تخصیص پشته. این کار نگاشت پشته را به چندین نگاشت تخصیص مجزا تقسیم میکند.
- تنشزای صفحه کثیف و استثنای پشته
- --stackmmap N
- شروع N کارگر که از یک پشته ۲ مگابایتی که روی یک فایل موقت نگاشت حافظهای شده است، استفاده میکنند. یک تابع بازگشتی در طول پشته به سمت پایین حرکت کرده و صفحات کثیف پشته را با استفاده از msync(2) به فایل نگاشتشده در حافظه فلاش میکند تا زمانی که به انتهای پشته برسد (سرریز پشته). این کار مدیریت صفحات کثیف و استثناهای پشته را به کار میگیرد.
- --stackmmap-ops N
- متوقف کردن کارگران پس از وقوع N سرریز پشته.
- تنشزای فراخوانیهای سیستمی statmount و listmount
- --statmount N
- شروع N کارگر که نقاط اتصال (mounts) را روی / از طریق listmount پیدا کرده و با استفاده از statmount اطلاعات اتصال را بر روی شناسههای اتصال دریافت میکنند (فقط لینوکس).
- --statmount-ops N
- متوقف کردن کارگران پس از N بار پیمایش نقاط اتصال.
- تنشزای توابع رشتهای libc
- --str N
- شروع N کارگر که توابع رشتهای مختلف libc را بر روی رشتههای تصادفی به کار میگیرند.
- --str-method strfunc
- انتخاب یک تابع رشتهای خاص libc برای اعمال تنش. توابع رشتهای در دسترس برای تنش عبارتند از: all، index، rindex، strcasecmp، strcat، strchr، strcoll، strcmp، strcpy، strlen، strncasecmp، strncat، strncmp، strrchr و strxfrm. برای اطلاعات بیشتر در مورد این توابع رشتهای به string(3) مراجعه کنید. روش `all' پیشفرض است و تمام روشهای رشتهای را آزمایش خواهد کرد.
- --str-ops N
- پس از N عملیات رشتهای ساختگی متوقف میشود.
- تنشزای حافظه STREAM
- --stream N
- شروع N
کارگر برای
اجرای
تنشزای
پهنای باند
حافظه که به
صورت بسیار
تقریبی بر
اساس ابزار
بنچمارک STREAM
موسوم به
"Sustainable Memory Bandwidth in High Performance Computers"
اثر دکتر John D. McCalpin
ساخته شده
است. این
تنشزا ۳
بافر به
اندازه
حافظه نهان
سطح ۳ (L3 cache)
پردازنده
تخصیص
میدهد و به
طور مداوم
دورهایی از
محاسبات
زیر را روی
آرایههای
بزرگی از
اعداد ممیز
شناور با
دقت مضاعف
انجام
میدهد:
عملیات توضیحات copy c[i] = a[i] scale b[i] = scalar × c[i] add c[i] = a[i] + b[i] triad a[i] = b[i] + (c[i] × scalar)
از آنجا که این بخش به صورت تقریبی بر اساس نسخهای از کد بنچمارک STREAM است، هرگز نتایج مبتنی بر آن را ارسال نکنید؛ زیرا هدف آن در stress-ng صرفاً اعمال تنش بر حافظه و محاسبات است و به هیچ عنوان برای بنچمارک دقیق STREAM (تنظیمشده یا تنظیمنشده) در نظر گرفته نشده است. اگر مایل به بنچمارکهای دقیق و استاندارد STREAM هستید، از ابزار رسمی بنچمارک STREAM استفاده کنید.
این تنشزا نرخ خواندن حافظه، نرخ نوشتن حافظه و نرخ عملیات ممیز شناور را محاسبه میکند. این مقادیر به دلیل سربارهای حلقه و استفاده از اشارهگرهای volatile جهت اطمینان از بهینهسازی نشدن و حذف نشدن ذخیرهسازیها توسط کامپایلر، با حداکثر نرخهای نظری خواندن/نوشتن/محاسبه تفاوت خواهند داشت.
- --stream-discontiguous
- تلاش برای ناپیوسته ساختن صفحات فیزیکی نگاشتشده با mmap از طریق قرار دادن اجباری صفحات در مکانهای فیزیکی نامرتب و «تصادفی».
- --stream-index N
- مشخص کردن تعداد نمایههای stream مورد استفاده برای نمایهگذاری در آرایههای داده a، b و c. این کار با استفاده از نمایهگذاری تصادفی و برهمخورده در سه آرایه داده، یک ارجاع غیرمستقیم در جستجوی دادهها اضافه میکند. سطح 0 (بدون نمایهگذاری) پیشفرض است، و سطح 3 جایی است که هر ۳ آرایه از طریق ۳ نمایه تصادفی برهمخورده متفاوت نمایهگذاری میشوند. هرچه مقدار نمایه بالاتر تنظیم شود، تأثیر بیشتری بر حافظههای نهان L1، L2 و L3 میگذارد و در نتیجه تاخیرهای بالاتری در خواندن/نوشتن حافظه ایجاد میکند.
- --stream-l3-size N
- مشخص کردن اندازه حافظه نهان سطح ۳ (L3 cache) پردازنده بر حسب بایت. میتوان اندازه را در واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با استفاده از پسوندهای b، k، m یا g مشخص کرد. اگر اندازه حافظه نهان L3 ارائه نشود، stress-ng تلاش میکند اندازه کش را تشخیص دهد و در صورت عدم موفقیت، اندازه را به طور پیشفرض روی 4 MB قرار میدهد.
- --stream-mlock
- تلاش برای مقید کردن بافرهای stream در حافظه با استفاده از mlock(2) جهت جلوگیری از خروج آنها به حافظه مبادله (swap out).
- --stream-madvise [ collapse | hugepage | nohugepage | normal ]
- مشخص کردن گزینههای madvise(2) مورد استفاده بر روی بافر نگاشتشده در حافظه در تنشزای stream. سیستمهای غیرلینوکسی فقط از توصیه madvise با مقدار `normal' پشتیبانی میکنند. مقدار پیشفرض `normal' است..TP --stream-ops N پس از N عملیات بگو (bogo) استریم متوقف میشود؛ که در آن هر عملیات بگو شامل یک دور از عملیاتهای copy، scale، add و triad است.
- --stream-prefetch
- کامپایلرهایی مانند gcc گزینههای بهینهسازی برای درج واکشی پیشاپیش (prefetching) در حلقههای واکشی حافظه دارند که ممکن است کارایی خواندن را بهبود بخشد. این گزینه این بهینهسازی را فعال میکند، با این وجود اگر کامپایلر واکشی پیشاپیش را در مکانهای درستی درج نکند، ممکن است به افت کارایی منجر شود. بهتر است این گزینه را برای تنظیم پیشفرض --stream-index 0 فعال کنید.
- استرسور تبدیلهای رشته به/از مقادیر عددی
- --strnum 1
- آغاز N کارگر که توابع گوناگون تبدیل رشته به/از عدد در libc را محک میزنند. هر ۱۰۰۰ تکرار بگو (bogo)، یک مجموعه تصادفی جدید از اعداد صحیح علامتدار و بدون علامت (int، long، long long) و مقادیر ممیز شناور (float، double، long double) تولید شده و تبدیل آنها به مقادیر رشتهای و بازگردانی از مقادیر رشتهای به نوع اولیهشان انجام میشود.
- --strnum-ops N
- متوقف شدن پس از N عملیات تبدیل بگو (bogo) رشته/عددی.
- --strnum-method method
- انتخاب
تابع تبدیل
ترجیحی؛
این روشها
به شرح زیر
هستند:
روش توضیحات all انتخاب تمام روشهای تبدیل موجود atoi تبدیل یک رشته به یک عدد صحیح علامتدار با استفاده از atoi() atol تبدیل یک رشته به یک عدد صحیح long علامتدار با استفاده از atol() atoll تبدیل یک رشته به یک عدد صحیح long long علامتدار با استفاده از atoll() strtoul تبدیل یک رشته به یک عدد صحیح long بدون علامت با استفاده از strtoul() strtoull تبدیل یک رشته به یک عدد صحیح long long بدون علامت با استفاده از stroull() sscanf-i تبدیل یک رشته به یک عدد صحیح علامتدار با استفاده از sscanf() sscanf-li تبدیل یک رشته به یک عدد صحیح long علامتدار با استفاده از sscanf() sscanf-lli تبدیل یک رشته به یک عدد صحیح long long علامتدار با استفاده از sscanf() sscanf-u تبدیل یک رشته به یک عدد صحیح بدون علامت با استفاده از sscanf() sscanf-lu تبدیل یک رشته به یک عدد صحیح long بدون علامت با استفاده از sscanf() sscanf-llu تبدیل یک رشته به یک عدد صحیح long long بدون علامت با استفاده از sscanf() snprintf-i تبدیل یک عدد صحیح علامتدار به یک رشته با استفاده از snprintf() snprintf-li تبدیل یک عدد صحیح long علامتدار به یک رشته با استفاده از snprintf() snprintf-lli تبدیل یک عدد صحیح long long علامتدار به یک رشته با استفاده از snprintf() strtof تبدیل یک رشته به یک float با استفاده از strtof() strtod تبدیل یک رشته به یک double با استفاده از strtof() strtold تبدیل یک رشته به یک long double با استفاده از strtof() sscanf-f تبدیل یک رشته به یک float با استفاده از sscanf() sscanf-d تبدیل یک رشته به یک double با استفاده از sscanf() sscanf-ld تبدیل یک رشته به یک long double با استفاده از sscanf() strfromf تبدیل یک float به یک رشته با استفاده از strfromf() strfromd تبدیل یک double به یک رشته با استفاده از strfromd() strfroml تبدیل یک long double به یک رشته با استفاده از strfroml()
- استرسور پارتیشنهای swap (ویژه لینوکس)
- --swap N
- آغاز N کارگر که پارتیشنهای swap با اندازه کوچک و تصادفی را اضافه و حذف میکنند (تنها در لینوکس). توجه داشته باشید که اگر بیش از حد پارتیشن swap اضافه شود، ممکن است استرسورها با کد خروج ۳ (منابع ناکافی) خارج شوند. برای اجرا به CAP_SYS_ADMIN نیاز دارد. این استرسور swap همچنین سرآیندهای ساختگی swap تولید میکند تا بررسیهای سرآیند swap توسط هسته را محک بزند؛ بنابراین هشدارهایی در گزارش وقایع هسته (kernel log) ظاهر خواهند شد.
- --swap-ops N
- متوقف کردن کارگرهای swap پس از N تکرار swapon/swapoff.
- --swap-self
- تلاش برای انتقال صفحههای حافظه استرسور به swap (عملیات swap out).
- استرسور تعویض زمینه میان فرآیندهای به هم وابسته
- -s N, --switch N
- آغاز N کارگر که تعویض زمینه (context switching) اجباری را میان دو فرآیند وابسته به هم که بهطور متقابل یکدیگر را مسدود/رفعمسدود میکنند به اجرا درمیآورند. بهطور پیشفرض ارسال پیام روی یک pipe استفاده میشود، اما روشهای متفاوتی در دسترس هستند.
- --switch-freq F
- اجرای تعویض زمینه با بسامد F تعویض زمینه در ثانیه. توجه داشته باشید که به دلیل محدودیتهای سرعت پردازنده (CPU) و پهنای باند حافظه ممکن است به نرخ تعویض مشخصشده نرسید.
- --switch-method [ mq | pipe | sem-sysv ]
- انتخاب روش
ترجیحی
همگامسازی
مسدود/اجرا
در تعویض
زمینه؛ این
روشها به
شرح زیر
هستند:
روش توضیحات mq استفاده از صف پیام POSIX با اندازه ۱ مورد. پیامها میان یک فرآیند فرستنده و یک فرآیند گیرنده ردوبدل میشوند. pipe پیامهای تکنویسهای درون یک pipe با اندازه یک نویسه میان فرآیند فرستنده و گیرنده ردوبدل میشوند. sem-sysv استفاده از یک سمافور SYSV برای مسدود/اجرا کردن دو فرآیند. - --switch-ops N
- متوقف کردن کارگرهای تعویض زمینه پس از N عملیات بگو (bogo).
- استرسور پیوند نمادین (Symlink)
- --symlink N
- آغاز N کارگر برای ایجاد و حذف پیوندهای نمادین.
- --symlink-ops N
- متوقف کردن کارگرهای آزمون فشار symlink پس از N عملیات بگو (bogo).
- --symlink-sync
- همگامسازی دادههای کثیف (dirty data) و متادیتا با دیسک.
- استرسور همگامسازی جزئی فایل (sync_file_range)
- --sync-file N
- آغاز N کارگر که محدودهای از همگامسازیهای داده را روی یک فایل با استفاده از sync_file_range(2) انجام میدهند. سه ترکیب از همگامسازیها انجام میشود: از ابتدا به انتهای فایل، از انتهای فایل به ابتدا، و یک ترکیب تصادفی. گزینشی تصادفی از انواع معتبر همگامسازی به کار گرفته میشود که بیتهای پرچم SYNC_FILE_RANGE_WAIT_BEFORE، SYNC_FILE_RANGE_WRITE و SYNC_FILE_RANGE_WAIT_AFTER را پوشش میدهد..TP --sync-file-bytes N اندازه فایلی که باید همگامسازی شود را مشخص میکند. میتوان اندازه را به صورت درصدی از فضای آزاد سیستمفایل بر حسب واحدهای Bytes، KBytes، MBytes و GBytes با استفاده از پسوندهای b، k، m یا g تعیین کرد.
- --sync-file-ops N
- متوقف کردن کارگرهای sync-file پس از N عملیات همگامسازی ساختگی (bogo sync).
- عامل فشار بارهای همگامشده پردازنده
- --syncload N
- آغاز N کارگر که بارهای پراکنده و کوتاهمدتی را به صورت همگام میان N فرایند عامل فشار تولید میکنند. بهطور پیشفرض، چرخههای تکرارشوندهای از ۱۲۵ میلیثانیه بار مشغول و در ادامه ۶۲٫۵ میلیثانیه خواب بهصورت همگام در تمامی کارگرها رخ میدهد تا جهشهایی از بار کاری ایجاد کند و گذارهای C-state و تغییر مقیاس فرکانس CPU را به چالش بکشد. به بار مشغول و خوابها ±10% نوسان (jitter) تصادفی اضافه شده است تا الگوهای زمانبندی را بیازماید.
- --syncload-msbusy M
- مدتزمان بار مشغول را بر حسب میلیثانیه مشخص میکند.
- --syncload-mssleep M
- مدتزمان خواب را بر حسب میلیثانیه مشخص میکند.
- --syncload-ops N
- متوقف کردن کارگرهای syncload پس از N چرخه بار/خواب.
- عامل فشار آدرس نامعتبر و رسیدگی به خطای فراخوانهای سیستم
- --sysbadaddr N
- آغاز N کارگر که آدرسهای نامعتبر را به فراخوانهای سیستم ارسال میکنند تا مدیریت آدرسهای بد و رسیدگی به خطاها را بیازمایند. آدرسهای مورداستفاده عبارتند از اشارهگرهای تهی (null pointers)، صفحههای فقطخواندنی، صفحههای فقطنوشتنی، آدرسهای نگاشتنشده، صفحههای فقطمتنی (text only)، آدرسهای ترازنشده (unaligned) و آدرسهای بالای حافظه.
- --sysbadaddr-ops N
- متوقف کردن عاملهای فشار sysbadaddr پس از N فراخوان سیستم ساختگی (bogo system calls).
- عامل فشار فراخوانهای سیستم
- --syscall N
- آغاز N کارگر که دامنهای از فراخوانهای سیستم موجود را میآزمایند. فراخوانهای سیستمی که به دلیل کمبود دسترسیها (capabilities) یا خطاها شکست میخورند، نادیده گرفته میشوند. این عامل فشار تلاش میکند نرخ اجرای فراخوانهای سیستم را بر پایه کل زمان صرفشده برای آمادهسازی، اجرا و پاکسازی پس از هر فراخوان سیستم، به حداکثر برساند.
- --syscall-method method
- انتخاب
مجموعهای
از
فراخوانهای
سیستم برای
اجرا بر
اساس
سریعترین
مدتزمانهای
آزمون. توجه
داشته
باشید که
این زمان
شامل
آمادهسازی،
اجرای
فراخوان
سیستم و
پاکسازی
پس از آن
میشود.
روشهای
موجود به
شرح زیر
است:
روش توضیحات all انتخاب تمام فراخوانهای سیستم موجود fast10 انتخاب ۱۰٪ از سریعترین آزمونهای فراخوان سیستم fast25 انتخاب ۲۵٪ از سریعترین آزمونهای فراخوان سیستم fast50 انتخاب ۵۰٪ از سریعترین آزمونهای فراخوان سیستم fast75 انتخاب ۷۵٪ از سریعترین آزمونهای فراخوان سیستم fast90 انتخاب ۹۰٪ از سریعترین آزمونهای فراخوان سیستم geomean1 انتخاب آزمونهایی که کمتر یا مساوی با میانگین هندسی کل زمانهای آزمون هستند geomean1 انتخاب آزمونهایی که کمتر یا مساوی با 2 × میانگین هندسی کل زمانهای آزمون هستند geomean1 انتخاب آزمونهایی که کمتر یا مساوی با 3 × میانگین هندسی کل زمانهای آزمون هستند - --syscall-rank [ name | average | min | max ]
- انتخاب رتبهبندی سریعترین فراخوانهای سیستم برتر، رتبهبندیشده بر اساس نام فراخوان سیستم، میانگین مدتزمان، حداقل مدتزمان یا حداکثر مدتزمان.
- --syscall-ops N
- متوقف کردن پس از N فراخوان سیستم.
- --sycsall-top N
- گزارش N فراخوان سیستم سریعتر برتر. تنظیم N روی صفر تمام فراخوانهای سیستمی را که قابل اجرا بودند، گزارش میدهد.
- عامل فشار اطلاعات سیستم
- --sysinfo N
- آغاز N کارگر که بهطور مداوم اطلاعات مختص سیستم و فرایند را میخوانند. این آزمون زمانهای کاربری و سیستمی فرایند را با استفاده از فراخوان سیستم times(2) میخواند. برای سیستمهای لینوکس، همچنین آمار کلی سیستم را با فراخوان سیستم sysinfo(2) و آمار سیستمفایل را برای تمام سیستمفایلهای متصلشده با استفاده از statfs(2) میخواند.
- --sysinfo-ops N
- متوقف کردن کارگرهای sysinfo پس از N عملیات ساختگی (bogo ops).
- عامل فشار فراخوانهای سیستم با آرگومانهای نامعتبر (لینوکس)
- --sysinval N
- آغاز N کارگر که فراخوانهای سیستم را به ترتیبی تصادفی با جایگشتهایی از آرگومانهای نامعتبر میآزمایند تا بررسیهای مدیریت خطای هسته را به چالش بکشند. این آزمون فشار فراخوانهای سیستمی را که باعث فروپاشی (crash) یا خروج زودهنگام فرایندها میشوند بهطور خودکار شناسایی کرده و پس از چندین شکست پیاپی آنها را در فهرست مسدودشدهها (blocklist) قرار میدهد. آرگومانهای فراخوان سیستمی نیز که باعث اجرای موفقیتآمیز فراخوانهای سیستم میشوند شناسایی شده و آنها نیز در فهرست مسدودشدهها قرار میگیرند. فقط در لینوکس.
- --sysinval-ops N
- متوقف کردن کارگرهای sysinval پس از N تلاش برای فراخوان سیستم.
- عامل فشار sysfs در /sys (لینوکس)
- --sysfs N
- آغاز N کارگر که فایلها را بهصورت بازگشتی از /sys میخوانند (فقط لینوکس). این کار ممکن است باعث شود درایورهای خاصی از هسته پیامهایی را در لاگ هسته منتشر کنند.
- --sysfs-ops N
- متوقف کردن خواندن sysfs پس از N عملیات خواندن ساختگی (bogo read). توجه داشته باشید، از آنجا که تعداد مدخلها ممکن است در هستههای مختلف متفاوت باشد، این معیار bogo ops احتمالا بسیار گمراهکننده خواهد بود.
- عامل فشار Tee (لینوکس)
- --tee N
- انتقال دادهها از یک فرایند نویسنده به یک فرایند خواننده از طریق لولهها (pipes) و به /dev/null بدون هرگونه رونوشت میان فضای آدرس هسته و فضای آدرس کاربر با استفاده از tee(2). این گزینه فقط برای لینوکس در دسترس است.
- --tee-ops N
- متوقف کردن پس از N عملیات ساختگی tee.
- عامل فشار رویداد زمانسنج (لینوکس)
- -T N, --timer N
- آغاز N کارگر برای ایجاد رویدادهای زمانسنج با نرخ پیشفرض 1 MHz (فقط لینوکس)؛ این کار میتواند هزاران وقفه ساعت زمانسنج ایجاد کند. هر رویداد زمانسنج توسط یک گرداننده سیگنال (signal handler) دریافت شده و به عنوان یک عملیات زمانسنج ساختگی (bogo timer op) شمارش میشود.
- --timer-freq F
- اجرای زمانسنجها در فرکانس F هرتز؛ در بازه 1 تا 1000000000 هرتز (فقط لینوکس). با انتخاب فرکانس مناسب، stress-ng میتواند صدها هزار وقفه در ثانیه تولید کند. نکته: همچنین برای فرکانسهای بالا استفاده از --timer-slack 0 توصیه میشود تا از ادغام (coalescing) رویدادهای زمانسنج توسط هسته جلوگیری به عمل آید.
- --timer-ops N
- متوقف کردن کارگرهای فشار زمانسنج پس از N رویداد زمانسنج ساختگی (فقط لینوکس).
- --timer-rand
- انتخاب فرکانس زمانسنج بر پایه فرکانس زمانسنج به همراه ±12.5% نوسان (jitter) تصادفی. این گزینه تلاش میکند تا تغییرپذیری بیشتری در بازه زمانسنج ایجاد کند تا زمانبندی کمتر قابل پیشبینی باشد. استرسور Timerfd (لینوکس)
- --timerfd N
- آغاز N پردازه کارگر که رویدادهای timerfd را با نرخ پیشفرض ۱ مگاهرتز (1 MHz) ایجاد میکنند (فقط لینوکس)؛ این کار میتواند هزاران رویداد ساعت تایمر ایجاد کند. برای رویدادهای تایمر با استفاده از select(2) بر روی توصیفگر فایل تایمر انتظار کشیده میشود و سپس خوانده شده و به عنوان یک عملیات bogo timerfd شمرده میشوند.
- --timerfs-fds N
- تلاش برای استفاده از حداکثر N توصیفگر فایل timerfd به ازای هر استرسور.
- --timerfd-freq F
- اجرای تایمرها در فرکانس F هرتز؛ در بازهٔ ۱ تا ۱۰۰۰۰۰۰۰۰۰ هرتز (فقط لینوکس). با انتخاب فرکانس مناسب، stress-ng میتواند صدها هزار وقفه در ثانیه تولید کند.
- --timerfd-ops N
- توقف پردازههای کارگر استرس timerfd پس از N رویداد bogo timerfd (فقط لینوکس).
- --timerfd-rand
- انتخاب فرکانس timerfd بر پایهٔ فرکانس تایمر به همراه تغییرات تصادفی (jitter) حدود ±12.5%. این گزینه تلاش میکند تا تغییرپذیری بیشتری در بازهٔ زمانی تایمر ایجاد کند تا زمانبندی کمتر قابل پیشبینی باشد.
- استرسور Timer Mix
- --timermix N
- آغاز N پردازه کارگر که سیگنالهای timer و itimer را با نرخ بالا ایجاد میکنند؛ این کار میتواند در هر ثانیه چندین هزار وقفهٔ ساعت تایمر ایجاد کند. هر سیگنالی که رسیدگی (handle) شود به عنوان یک عملیات bogo شمرده میشود. برای تایمرها، انواع ساعتهای زیر (در صورت در دسترس بودن) به کار میروند: CLOCK_REALTIME، CLOCK_MONOTONIC، CLOCK_PROCESS_CPUTIME_ID، CLOCK_THREAD_CPUTIME_ID، CLOCK_BOOTTIME و CLOCK_TAI. برای itimerها، انواع تایمرهای بازهای زیر استفاده میشوند: ITIMER_REAL، ITIMER_VIRTUAL و ITIMER_PROF. برخی سیستمها ممکن است از هیچکدام یا زیرمجموعهای از این انواع timer یا itimer پشتیبانی کنند. فرکانس itimerها به صورت خودکار تنظیم میشود تا نرخ وقفهٔ تایمر به بیشینه برسد.
- --timermix-ops N
- توقف پس از N سیگنال از timerها و itimerها.
- استرسور Time warp
- --time-warp N
- آغاز N پردازه کارگر که زمان سیستم را میخوانند و در صورت لزوم برای ساعتهای یکنواخت (monotonic)، بررسی پیچش زمانی معکوس (reverse time warping) را انجام میدهند. در پایان اجرا، بررسیهای پیچش زمان به دور خود (time wrap-around) انجام میگیرد. این استرسور clock_gettime(2) را بر روی تمام ساعتهای در دسترس، gettimeofday(2)، time(2) و getrusage(2) را برای بررسی رفتارهای غیرمنتظرهٔ زمانی به کار میگیرد. توجه داشته باشید که تنها برخی از ساعتها به صورت قابل اتکا یکنواخت هستند.
- --time-warp-ops N
- توقف پس از N دور بررسی تمام ساعتهای در دسترس و فراخوانهای سیستمی دریافت زمان.
- استرسور TLB shootdowns در NUMA
- --tlb-numa N
- آغاز N پردازه کارگر که پاکسازی بافر ترجمه نشانی (TLB shootdown) را تحمیل میکنند، به طوری که صفحات به گرههای NUMA انتخابشده به صورت تصادفی مقید (bind) میشوند و pthreadهای استرسور به پردازندههای (CPU) تصادفی انتقال مییابند. در سیستمهای x86، بیشترین تعداد مدخلهای TLB در حافظههای نهان L1 یا L2 برای تعیین تعداد کل صفحاتی که توسط تمام نمونههای استرسور mmap میشوند به کار میرود. سایر سیستمها از مقدار پیشفرض ۵۱۲ مدخل استفاده میکنند. توجه داشته باشید که این استرسور در سیستمهای غیر NUMA نیز قابل استفاده است.
- --tlb-numa-entries N
- تعیین تعداد مدخلهای TLB برای جایگزینی مقدار پیشفرض.
- --tlb-numa-nombind
- غیرفعال کردن تغییرات سیاست حافظه NUMA که صفحات را با استفاده از mbind(2) به گرههای NUMA منتقل میکنند.
- --tlb-numa-nopageout
- غیرفعال کردن خارجسازی تصادفی صفحات (page-out) از حافظه برای صفحات mmap شده. این کار تعداد TLB shootdownها را کاهش میدهد.
- --tlb-ops N
- توقف پس از N عملیات حلقه pthread مربوط به TLB. این مقدار ممکن است لزوماً به هیچ معیار توان عملیاتی واقعی TLB مربوط نباشد. برای معیارهای قابل اتکا، از گزینهٔ --metrics استفاده کنید.
- استرسور TLB shootdowns
- --tlb-shootdown N
- آغاز N پردازه کارگر که پاکسازی بافر ترجمه نشانی (TLB shootdowns) را تحمیل میکنند. این کار با ایجاد حداکثر ۱۶ فرآیند فرزند حاصل میشود که همگی در یک ناحیه از حافظه مشترک هستند و این فرآیندها بین پردازندههای موجود توزیع میشوند. فرآیندها تنظیمات نگاشت صفحه را تغییر میدهند که باعث میشود TLBها در پردازندههای دیگر به اجبار تخلیه (flush) شوند و در نتیجه TLB shootdown رخ دهد.
- --tlb-shootdown-ops N
- توقف پس از تکمیل N عملیات bogo TLB shootdown.
- استرسور Tmpfs
- --tmpfs N
- آغاز N پردازه کارگر که یک فایل موقت روی یک سیستمفایل tmpfs در دسترس ایجاد کرده و عملیات مختلف mmap مبتنی بر فایل را بر روی آن انجام میدهند.
- --tmpfs-mmap-async
- فعالسازی نگاشت حافظه مبتنی بر فایل و استفاده از msync ناهمگام (asynchronous) روی هر صفحه؛ --tmpfs-mmap-file را ببینید.
- --tmpfs-mmap-file
- فعالسازی نگاشت حافظه مبتنی بر فایل tmpfs و استفادهٔ پیشفرض از msync همگام (synchronous) روی هر صفحه.
- --tmpfs-ops N
- توقف استرسورهای tmpfs پس از N عملیات bogo mmap.
- استرسور دستکاری فایلها (Touching files)
- --touch N
- دستکاری (touch) فایلها با استفاده از open(2) یا creat(2) و سپس بستن و پیوندزدایی (unlink) آنها. نام فایل شامل شمارهٔ bogo-op است و در هر عملیات دستکاری یکی به آن افزوده میشود، بنابراین حافظهٔ نهان dentry را پر میکند. توجه داشته باشید که زمان کاربر و زمان سیستم ممکن است بسیار کم باشد زیرا بیشتر زمان اجرا صرف انتظار برای I/O فایل میشود و این کار نرخ bogo-op بسیار بالایی را به ازای زمان بسیار کمی از CPU که مصرف شده تولید میکند.
- --touch-method [ random | open | creat ]
- انتخاب روش ایجاد فایل؛ به صورت تصادفی با استفاده از open(2) یا creat(2)، صرفاً با استفاده از open(2) به همراه پرچم باز کردن O_CREAT، یا با creat(2).
- --touch-ops N
- توقف پردازههای کارگر touch پس از N بار دستکاری فایل.
- --touch-opts [ all | direct | dsync | excl | noatime | sync ]
- تعیین
گزینههای
مختلف باز
کردن فایل
به عنوان یک
فهرست جدا
شده با
کاما.
گزینهها
به شرح زیر
هستند:
گزینه توضیحات all استفاده از تمام گزینههای باز کردن، یعنی direct، dsync، excl، noatime و sync direct تلاش برای کمینهسازی اثرات حافظهٔ نهان روی ورودی/خروجی (I/O) به این فایل و از آن، با استفاده از پرچم باز کردن O_DIRECT. dsync اطمینان از انتقال خروجی به سختافزار زیرین و بهروزرسانی فرادادههای (metadata) فایل با استفاده از پرچم باز کردن O_DSYNC. excl در صورتی که فایل از قبل وجود داشته باشد ناموفق شود (نباید از قبل وجود داشته باشد). noatime در صورت خوانده شدن فایل، زمان آخرین دسترسی به فایل بهروزرسانی نشود. sync اطمینان از انتقال خروجی به سختافزار زیرین با استفاده از پرچم باز کردن O_SYNC.
- استرسور ساختارهای داده درختی (Tree data structures)
- --tree N
- آغاز N پردازه کارگر که ساختارهای داده درختی را تحت آزمون قرار میدهند. حالت پیشفرض شامل افزودن، یافتن و حذف ۲۵۰۰۰۰ عدد صحیح ۳۲ بیتی در درختهای AVL (با شناسه avl)، دودویی (binary)، درخت ب (btree)، سرخ-سیاه (rb)، گسترده (splay) و treap است. هدف این استرسور به کار کشیدن حافظه و حافظهٔ نهان با عملیات مختلف درختی است.
- --tree-method [ all | avl | binary | btree | rb | splay | treap ]
- تعیین درخت مورد استفاده. به صورت پیشفرض، از تمام درختها استفاده میشود (گزینهٔ `all`)..TP --tree-ops N متوقف کردن تنشزاهای درخت پس از N عملیات ساختگی (bogo ops). یک عملیات ساختگی شامل افزودن، یافتن و حذف تمامی موارد در درخت(ها) است.
- --tree-size N
- مشخص کردن اندازهٔ درخت، که در آن N تعداد اعداد صحیح ۶۴ بیتی برای افزودن به درخت است.
- تنشزای توابع مثلثاتی
- --trig N
- شروع N پردازهٔ کارگر که توابع مثلثاتی libm شامل sin، cos، sincos (در صورت وجود) و tan را با استفاده از انواع ممیز شناور float، double و long double ارزیابی و تحت تنش قرار میدهند. هر تابع ۱۰٬۰۰۰ بار به ازای هر عملیات ساختگی (bogo-operation) اجرا میشود.
- --trig-method function
- مشخص کردن
یک تابع تنش
مثلثاتی.
بهطور
پیشفرض،
همهٔ توابع
به صورت
متوالی
ارزیابی
میشوند؛
با این حال
در صورت
نیاز
میتوان
تنها یک
تابع را
برای
استفاده
مشخص کرد.
گزینههای
موجود به
شرح زیر
است:
روش توضیحات all پیمایش روی تمامی توابع مثلثاتی زیر cos کسینوس (دقت double) cosf کسینوس (دقت float) cosl کسینوس (دقت long double) sin سینوس (دقت double) sinf سینوس (دقت float) sinl سینوس (دقت long double) sincos سینوس و کسینوس (دقت double) sincosf سینوس و کسینوس (دقت float) sincosl سینوس و کسینوس (دقت long double) tan تانژانت (دقت double) tanf تانژانت (دقت float) tanl تانژانت (دقت long double) - --trig-ops N
- توقف پس از N عملیات ساختگی (bogo-operations).
- تنشزای شمارندهٔ برچسب زمان (TSC)
- --tsc N
- شروع N پردازهٔ کارگر که شمارندهٔ برچسب زمان (TSC) را ۲۵۶ بار در هر تکرار حلقه (عملیات ساختگی) میخوانند. این گزینه دستورالعمل tsc را برای x86، دستورالعمل mftb را برای ppc64، دستورالعمل rdcycle را برای RISC-V، دستورالعمل tick را روی SPARC و دستورالعمل rdtime.d را برای Loong64 به کار میگیرد.
- --tsc-lfence
- افزودن lfence پس از هر خواندن tsc برای تحمیل ترتیببندی ترتیبی (فقط x86).
- --tsc-ops N
- متوقف کردن کارگرهای tsc پس از تکمیل N عملیات ساختگی.
- --tsc-rdtscp
- استفاده از دستورالعمل rdtscp به جای rdtsc (فقط x86). این گزینه همچنین گزینهٔ --tsc-lfence را غیرفعال میکند.
- تنشزای جستجوی درخت دودویی
- --tsearch N
- شروع N پردازهٔ کارگر که اعداد صحیح ۳۲ بیتی را با استفاده از tsearch(3)، tfind(3) و tdelete(3) در یک درخت دودویی درج، جستجو و حذف میکنند. بهطور پیشفرض، از ۶۵۵۳۶ عدد صحیح تصادفی در درخت استفاده میشود. این روشی مفید برای آزمودن دسترسی تصادفی به حافظه و حافظهٔ نهان پردازنده است.
- --tsearch-ops N
- متوقف کردن کارگرهای tsearch پس از تکمیل N عملیات ساختگی درخت.
- --tsearch-size N
- مشخص کردن اندازه (تعداد اعداد صحیح ۳۲ بیتی) در آرایه برای tsearch. اندازه میتواند از 1 K تا 4 M باشد.
- تنشزای تونل شبکه
- --tun N
- شروع N پردازهٔ کارگر که یک دستگاه تونل شبکه ایجاد کرده و از طریق تونل با استفاده از UDP بستهها را ارسال و دریافت نموده و سپس آن را از بین میبرند. هر بار که تونلی ایجاد میشود، یک نشانی IPv4 تصادفی جدید به صورت 192.168.*.* استفاده میشود.
- --tun-ops N
- توقف پس از N تکرار از ایجاد/ارسال/دریافت/نابودسازی یک تونل.
- --tun-port P
- شروع از درگاه P. برای N پردازهٔ کارگر tun، درگاههای P تا P + (N + 16) − 1 استفاده میشوند (برای نگهداشتن در محدودهٔ ۱۰۲۴ تا ۶۵۵۳۵ چرخش انجام میشود). درگاه پیشفرض ۵۱۹۶۸ است.
- --tun-tap
- استفاده از دستگاه tap شبکه با فریمهای لایهٔ ۲ (پلزنی) به جای دستگاه tun برای بستههای خام لایهٔ ۳ (تونلزنی).
- تنشزای شبکه UDP
- --udp N
- شروع N پردازهٔ کارگر که دادهها را با استفاده از UDP منتقل میکنند. این شامل یک جفت پردازهٔ کارخواه/کارساز است که اتصال، ارسال، دریافت و قطع اتصال سریع را روی میزبان محلی انجام میدهند. دادهها با اندازهٔ افزایشی از حداقل ۱۶ بایت تا حداکثر اندازهٔ داده (پیشفرض ۱۰۲۴ بایت) در گامهای افزایشی ۱۶ تایی انتقال مییابند.
- --udp-domain D
- مشخص کردن دامنهٔ مورد استفاده؛ پیشفرض ipv4 است. در حال حاضر ipv4 و ipv6 پشتیبانی میشوند.
- --udp-gro
- فعالسازی UDP-GRO (تخلیه بار دریافت عمومی) در صورت پشتیبانی.
- --udp-if NAME
- استفاده از رابط شبکهٔ NAME. اگر رابط NAME وجود نداشته باشد، فعال (up) نباشد یا از دامنه پشتیبانی نکند، از رابط لوپبک (lo) به عنوان پیشفرض استفاده میشود.
- --udp-lite
- استفاده از پروتکل UDP-Lite (RFC 3828) (فقط برای دامنههای ipv4 و ipv6). توجه داشته باشید که UDP-Lite از لینوکس 7.1 حذف شده است و این گزینه ناموفق خواهد بود.
- --udp-max-size N
- مشخص کردن حداکثر اندازهٔ داده به بایت، در محدودهٔ ۱۶ تا ۶۵۵۰۷.
- --udp-ops N
- متوقف کردن کارگرهای تنش udp پس از N عملیات ساختگی.
- --udp-port P
- شروع از درگاه P. برای N پردازهٔ کارگر udp، درگاههای P تا P + (N − 1) استفاده میشوند (برای نگهداشتن در محدودهٔ ۱۰۲۴ تا ۶۵۵۳۵ چرخش انجام میشود). درگاه پیشفرض درگاه ۵۲۲۲۴ است.
- تنشزای سیل UDP
- --udp-flood N
- شروع N پردازهٔ کارگر که تلاش میکنند میزبان را با ارسال بستههای UDP به درگاههای تصادفی انتخابشده دچار سیلان کنند (flood). نشانی IP بستهها در حال حاضر جعل نمیشود. این گزینه تنها در سیستمهایی که از AF_PACKET پشتیبانی میکنند در دسترس است.
- --udp-flood-domain D
- مشخص کردن دامنهٔ مورد استفاده؛ پیشفرض ipv4 است. در حال حاضر ipv4 و ipv6 پشتیبانی میشوند.
- --udp-flood-if NAME
- استفاده از رابط شبکهٔ NAME. اگر رابط NAME وجود نداشته باشد، فعال (up) نباشد یا از دامنه پشتیبانی نکند، از رابط لوپبک (lo) به عنوان پیشفرض استفاده میشود..TP --udp-flood-max-size N حداکثر اندازه داده به بایت را مشخص میکند، در محدوده ۱ تا ۶۵۵۰۷.
- --udp-flood-ops N
- متوقف کردن کارگرهای تنش udp-flood پس از N عملیات bogo.
- تنشزای umask فایل
- --umask N
- راهاندازی N کارگر که تنظیم umask و ایجاد، fstat گرفتن، بستن و unlink کردن یک فایل و بررسی صحت تنظیم حالت فایل (file mode) را میآزمایند. این کار مقادیر ماسک umask را از پایه هشت 0000 تا 0777 (شامل هر دو) میآزماید.
- --umask-ops N
- متوقف شدن پس از N دور آزمودن مقادیر umask از 0000 تا 0777.
- تنشزای Umount
- --umount N
- راهاندازی N کارگر که سوار کردن (mount) و پیادهسازی رقابتی (racy unmounting) سیستمهای فایل کوچک tmpfs و ramfs را میآزمایند. سه پردازه فرزند فراخوانی میشوند: یکی برای سوار کردن، دیگری برای اجبار به پیادهسازی (force umount) و سومی برای آزمودن /proc/mounts. از تاخیرهای تصادفی کوتاه بین فراخوانیهای mount و umount برای تلاش جهت تحریک شرایط رقابتی (race conditions) در فراخوانیهای umount استفاده میشود.
- --umount-ops N
- متوقف کردن کارگرهای umount پس از N عملیات موفق bogo mount/umount.
- تنشزای Unlink
- --unlink N
- راهاندازی N کارگر که هر کدام ۴ پردازه به ازای هر کارگر اجرا میکنند تا ۱۰۲۴ فایل را با ترتیبی تصادفی ایجاد، باز، unlink و بسته کنند تا حذف پیوند (حذف) فایلها را بیازمایند. این تلاش میکند شرایط رقابتی در ایجاد، پیوند و حذف پیوند فایلها به وجود آورد.
- --unlink-ops N
- متوقف شدن پس از N دور bogo از عملیاتهای unlink روی ۱۰۲۴ فایل توسط کارگر کنترلکننده.
- تنشزای Unshare (لینوکس)
- راهاندازی N کارگر که هر کدام ۳۲ پردازه فرزند منشعب (fork) میکنند؛ هر یک از آنها با جداسازی بخشهایی از زمینه اجرای پردازه (execution context)، فراخوانی سیستمی unshare(2) را میآزمایند. (فقط لینوکس).
- متوقف شدن پس از N عملیات bogo unshare.
- تنشزای Uprobe (لینوکس)
- --uprobe N
- راهاندازی N کارگر که ورود به تابع libc به نام getpid(2) را با استفاده از سازوکار ردیابی هسته uprobe لینوکس ردیابی میکنند. این گزینه به قابلیتهای CAP_SYS_ADMIN و یک هسته مدرن لینوکس با پشتیبانی از uprobe نیاز دارد.
- --uprobe-ops N
- متوقف کردن ردیابی uprobe پس از N رویداد ردیابی از تابعی که ردیابی میشود.
- تنشزای /dev/urandom (لینوکس)
- -u N, --urandom N
- راهاندازی N کارگر که از /dev/urandom میخوانند (فقط لینوکس). این کار منبع اعداد تصادفی هسته را زیر بار قرار میدهد.
- --urandom-ops N
- متوقف کردن کارگرهای تنش urandom پس از N عملیات خواندن bogo urandom (فقط لینوکس).
- تنشزای نقص صفحه (لینوکس)
- --userfaultfd N
- راهاندازی N کارگر که نقصهای صفحه نوشتن (write page faults) را روی یک ناحیه حافظه کوچک با نگاشت ناشناس (anonymously mapped) ایجاد کرده و این نقصها را با استفاده از مدیریت نقص فضای کاربری از طریق سازوکار userfaultfd(2) مدیریت میکنند. این کار حجم زیادی از نقصهای صفحه اصلی (major page faults) و همچنین تعویض زمینه (context switch) را در حین مدیریت نقصهای صفحه ایجاد میکند. (فقط لینوکس).
- --userfaultfd-bytes N
- تخصیص mmap به مقدار N بایت به ازای هر کارگر userfaultfd برای ایجاد نقص صفحه روی آن؛ پیشفرض 16 MB است. میتوان اندازه را به صورت درصدی از کل حافظه در دسترس یا با واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با استفاده از پسوندهای b، k، m یا g مشخص کرد.
- --userfaultfd-ops N
- متوقف کردن کارگرهای تنش userfaultfd پس از N نقص صفحه.
- تنشزای SIGSYS
- --usersyscall N
- راهاندازی N کارگر که سازوکار فراخوانی سیستمی فضای کاربری prctl در لینوکس را میآزمایند. یک فراخوانی سیستمی فضای کاربری توسط یک گرداننده سیگنال SIGSYS مدیریت شده و با فراخوانی سیستمی غیرفعال (ENOSYS) و فعال (از طریق SIGSYS) با استفاده از PR_SET_SYSCALL_USER_DISPATCH در prctl آزمایش میشود.
- --usersyscall-ops N
- متوقف شدن پس از N فراخوانی سیستمی فضای کاربری موفقیتآمیز از طریق گرداننده سیگنال SIGSYS.
- تنشزای برچسب زمانی فایل
- --utime N
- راهاندازی N کارگر که برچسبهای زمانی فایل را بهروزرسانی میکنند. این کار در حالت پیشفرض عمدتاً وابسته به پردازنده (CPU bound) است، زیرا سیستم تغییرات متادیتا را فقط بهصورت دورهای تخلیه (flush) میکند.
- --utime-fsync
- اجبار به تخلیه (flush) تغییرات متادیتا در هر بهروزرسانی برچسب زمانی فایل به دیسک. این کار آزمون را وادار میکند تا وابسته به ورودی/خروجی (I/O bound) شود و منجر به نوشتنهای متادیتای کثیف (dirty metadata writes) زیادی خواهد شد.
- --utime-ops N
- متوقف کردن کارگرهای تنش utime پس از N عملیات bogo utime.
- تنشزای بار متغیر
- --varyload N
- راهاندازی N کارگر که بار سیستم را با استفاده از ۱ تا N نمونه تنشزای آمادهبهاجرای varyload تغییر میدهند. بسته به --varyload-type، تعداد نمونههای varyload در حال اجرا در هر لحظه تغییر میکند تا بار در حال اجرا افزایش یا کاهش یابد. نمونههای varyload با ارسال سیگنالهای SIGSTOP و SIGCONT توسط یک نمونه کنترلکننده به این پردازهها، موقتاً متوقف و دوباره آغاز میشوند.
- --varyload-ops N
- متوقف شدن پس از N چرخه bogo ۱ میلیثانیهای varyload.
- --varyload-ms M
- تغییر دادن بار در هر M میلیثانیه (از ۱ تا ۳۶۰۰۰۰۰ میلیثانیه). بار بر اساس گزینه --varyload-type تغییر میکند.
- --varyload-sched P
- انتخاب سیاست زمانبند، میتواند یکی از batch، deadline، ext، fifo، idle، rr یا other باشد.
- --varyload-method M
- انتخاب روش
بارگذاری
پردازنده (CPU).
روشهای
موجود به
شرح زیر
توصیف
شدهاند:
روش توضیحات all انتخاب تصادفی یکی از تمام روشهای زیر: fma انجام عملیاتهای ضرب-جمع؛ در پردازندههای مدرن این موارد ممکن است به دستورالعملهای fused-multiply-add کامپایل شوند. getpid دریافت PID تنشزا از طریق getpid(2). inc64 افزایش یک عدد صحیح ۶۴ بیتی. memmove کپی (انتقال) یک بافر ۱ مگابایتی با استفاده از memmove(3). memread خواندن از یک بافر ۱ مگابایتی با استفاده از خواندنهای سریع حافظه. memset نوشتن روی یک بافر ۱ مگابایتی با استفاده از memset(3). mcw64 محاسبه اعداد تصادفی ۶۴ بیتی با استفاده از یک مولد تصادفی mwc. nop اتلاف چرخهها با استفاده از دستورالعملهای no-op. pause توقف اجرا با استفاده از دستورالعملهای pause/yield پردازنده یا سدهای حافظه (memory barrier) در صورت موجود بودن. procname در صورت امکان، تغییر نام پردازه تنشزا. random ترکیب تصادفی از تمامی روشهای بار کاری، همراه با تغییر روش بار کاری در هر حلقه چرخش (spin-loop). strnum ترکیبی از تبدیلهای رشته به/از عددی؛ میتواند سیستمهای x86 را داغ کند. sqrt انجام عملیاتهای ریاضی ممیز شناور با دقت مضاعف (double precision) برای sqrt(3) و hypot(3). time دریافت زمان کنونی از طریق time(2). vecfp انجام ضرب و جمع روی برداری شامل ۶۴ مقدار ممیز شناور با دقت مضاعف. vecint انجام ضرب و جمع روی برداری شامل ۲۵۶ عدد صحیح ۸ بیتی بدون علامت. --varyload-type T نوع بارگذاری متغیر را انتخاب میکند. انواع موجود به شرح زیر هستند: lB2 lB l lx. نوع توضیحات all چرخش در میان تمام انواع varyload، با اجرای هر نوع به مدت ۲۰ ثانیه در هر نوبت. brown تغییر مکرر بار با استفاده از نویز قهوهای (brown noise)، با استفاده از افزایش/کاهش تصادفی در میزان بار. triangle تغییر مکرر بار از ۱ تا N و سپس کاهش تا ۱ در گامهای ۱ واحدی. saw-inc تغییر مکرر بار از ۱ تا N در گامهای افزایشی ۱ واحدی و سپس بازگشت مستقیم به ۱. saw-dec تغییر مکرر بار از N تا ۱ در گامهای کاهشی ۱ واحدی و سپس بازگشت مستقیم به N. pulse تغییر مکرر بار بهصورت مستقیم از ۱ تا N و سپس بازگشت مستقیم به ۱. random انتخاب تصادفی بار در بازهٔ 1..N.
- استرسسنج شیء اشتراکی پویای مجازی (Virtual dynamic shared object stressor)
- --vdso N
- آغاز N کارگر (worker) که بهطور مکرر هر یک از توابع فراخوانی سیستمی را در vDSO (شیء اشتراکی پویای مجازی) فراخوانی میکنند. vDSO یک کتابخانهٔ مشترک است که هسته آن را در فضای نشانی تمام برنامههای فضای کاربری نگاشت میکند تا دسترسی سریع به دادههای هسته را برای برخی از فراخوانیهای سیستمی بدون نیاز به انجام فراخوانی سیستمی پرهزینه فراهم آورد.
- --vdso-func F
- بهجای فراخوانی تمام توابع vDSO، تنها تابع F از vDSO را فراخوانی میکند. این توابع به هستهٔ مورد استفاده بستگی دارند، اما معمولاً clock_gettime(2)، getcpu(2)، gettimeofday(2) و time(2) هستند.
- --vdso-ops N
- توقف پس از N بار فراخوانی توابع vDSO.
- استرسسنج عملیات مقایسهٔ اعداد صحیح برداری (Vector integer comparison operations stressor)
- --veccmp N
- آغاز N کارگر (worker) که عملیات گوناگون مقایسهٔ ریاضی اعداد صحیح بدون علامت را روی بردارهای مختلف ۱۲۸ بیتی انجام میدهند. ترکیبی از عملیات مقایسهٔ برداری اعداد صحیح روی بردارهای زیر انجام میشود: ۱۶ × ۸ بیت، ۸ × ۱۶ بیت، ۴ × ۳۲ بیت، ۲ × ۶۴ بیت، و در صورت پشتیبانی ۱ × ۱۲۸ بیت. معیارهای تولیدشده توسط این ترکیب به معماری پردازنده و بهینهسازیهای ریاضی برداری ایجادشده توسط کامپایلر بستگی دارد.
- --veccmp-ops N
- توقف پس از N عملیات مقایسهٔ ساختگی (bogo) برداری اعداد صحیح.
- استرسسنج عملیات ممیز شناور برداری (Vector floating point operations stressor)
- --vecfp N
- آغاز N کارگر (worker) که جمع، ضرب، تقسیم و منفیسازی ممیز شناور (با دقت یگانه و مضاعف) را روی بردارهایی از ۱۲۸، ۶۴، ۳۲، ۱۶ و ۸ مقدار ممیز شناور میآزمایند. گزینهٔ -v توان عملیاتی تقریبی را بر حسب میلیون عملیات ممیز شناور بر ثانیه برای هر عملیات نشان خواهد داد. برای x86، صفت target clones در gcc/clang جهت ایجاد بهینهسازیهای برداری برای مجموعهای از قابلیتهای پردازنده و ویژگیهای mmx، sse و avx به کار گرفته شده است.
- --vecfp-method method
- تعیین یک
روش تنش vecfp.
بهطور
پیشفرض،
تمام
روشهای
تنش
بهصورت
متوالی
اجرا
میشوند،
با این حال
در صورت
نیاز
میتوان
تنها یک روش
را برای
استفاده
تعیین کرد.
روش توضیحات all پیمایش در میان تمام روشهای برداری زیر floatv128add جمع یک بردار از ۱۲۸ مقدار ممیز شناور با دقت یگانه floatv64add جمع یک بردار از ۶۴ مقدار ممیز شناور با دقت یگانه floatv32add جمع یک بردار از ۳۲ مقدار ممیز شناور با دقت یگانه floatv16add جمع یک بردار از ۱۶ مقدار ممیز شناور با دقت یگانه floatv8add جمع یک بردار از ۸ مقدار ممیز شناور با دقت یگانه floatv128mul ضرب یک بردار از ۱۲۸ مقدار ممیز شناور با دقت یگانه floatv64mul ضرب یک بردار از ۶۴ مقدار ممیز شناور با دقت یگانه floatv32mul ضرب یک بردار از ۳۲ مقدار ممیز شناور با دقت یگانه floatv16mul ضرب یک بردار از ۱۶ مقدار ممیز شناور با دقت یگانه floatv8mul ضرب یک بردار از ۸ مقدار ممیز شناور با دقت یگانه floatv128div تقسیم یک بردار از ۱۲۸ مقدار ممیز شناور با دقت یگانه floatv64div تقسیم یک بردار از ۶۴ مقدار ممیز شناور با دقت یگانه floatv32div تقسیم یک بردار از ۳۲ مقدار ممیز شناور با دقت یگانه floatv16div تقسیم یک بردار از ۱۶ مقدار ممیز شناور با دقت یگانه floatv8div تقسیم یک بردار از ۸ مقدار ممیز شناور با دقت یگانه doublev128add جمع یک بردار از ۱۲۸ مقدار ممیز شناور با دقت مضاعف doublev64add جمع یک بردار از ۶۴ مقدار ممیز شناور با دقت مضاعف doublev32add جمع یک بردار از ۳۲ مقدار ممیز شناور با دقت مضاعف doublev16add جمع یک بردار از ۱۶ مقدار ممیز شناور با دقت مضاعف doublev8add جمع یک بردار از ۸ مقدار ممیز شناور با دقت مضاعف doublev128mul ضرب یک بردار از ۱۲۸ مقدار ممیز شناور با دقت مضاعف doublev64mul ضرب یک بردار از ۶۴ مقدار ممیز شناور با دقت مضاعف doublev32mul ضرب یک بردار از ۳۲ مقدار ممیز شناور با دقت مضاعف doublev16mul ضرب یک بردار از ۱۶ مقدار ممیز شناور با دقت مضاعف doublev8mul ضرب یک بردار از ۸ مقدار ممیز شناور با دقت مضاعف doublev128div تقسیم یک بردار از ۱۲۸ مقدار ممیز شناور با دقت مضاعف doublev64div تقسیم یک بردار از ۶۴ مقدار ممیز شناور با دقت مضاعف doublev32div تقسیم یک بردار از ۳۲ مقدار ممیز شناور با دقت مضاعف doublev16div تقسیم یک بردار از ۱۶ مقدار ممیز شناور با دقت مضاعف doublev8div تقسیم یک بردار از ۸ مقدار ممیز شناور با دقت مضاعف doublev128neg منفیسازی یک بردار از ۱۲۸ مقدار ممیز شناور با دقت مضاعف doublev64neg منفیسازی یک بردار از ۶۴ مقدار ممیز شناور با دقت مضاعف doublev32neg منفیسازی یک بردار از ۳۲ مقدار ممیز شناور با دقت مضاعف doublev16neg منفیسازی یک بردار از ۱۶ مقدار ممیز شناور با دقت مضاعف doublev8neg منفیسازی یک بردار از ۸ مقدار ممیز شناور با دقت مضاعف --vecfp-ops N پس از N بگو-عملیات (bogo-operation) ممیز شناور برداری متوقف شود. هر بگو-عملیات معادل ۶۵۵۳۶ حلقه از ۲ عملیات برداری است. برای نمونه، یک بگو-عملیات روی یک بردار با پهنای ۱۶ معادل 65536 × 2 × 16 عملیات ممیز شناور است. تنشزای عملیات ریاضی برداری 5 --vecmath N آغاز N کارگر که عملیات مختلف ریاضی اعداد صحیح بدون علامت را روی بردارهای مختلف ۱۲۸ بیتی انجام میدهند. ترکیبی از عملیات ریاضی برداری روی بردارهای زیر انجام میشود: 16 × 8 بیت، 8 × 16 بیت، 4 × 32 بیت، 2 × 64 بیت و در صورت پشتیبانی 1 × 128 بیت. معیارهای تولیدشده توسط این ترکیب به معماری پردازنده و بهینهسازیهای ریاضی برداری ایجادشده توسط کامپایلر بستگی دارد. --vecmath-ops N پس از N بگو-عملیات ریاضی برداری اعداد صحیح متوقف شود. تنشزای عملیات ریاضی برداری برهمریخته 5 --vecshuf N آغاز N کارگر که دادهها را روی بردارهای مختلف ۶۴ بایتی متشکل از اعداد صحیح بدون علامت ۸، ۱۶، ۳۲، ۶۴ و ۱۲۸ بیتی برهم میریزند (shuffle میکنند). اعداد صحیح در سرتاسر بردار با ۴ عملیات برهمریزی در هر حلقه جابهجا میشوند؛ ۶۵۵۳۶ حلقه یک بگو-عملیات برهمریزی را تشکیل میدهند. نرخ برهمریزی دادهها و نرخ عملیات برهمریزی هنگام استفاده از گزینه -v ثبت میشوند. این تنشزا عملیات بارگذاری بردار (load)، برهمریزی/جایگشت (shuffle/permute)، بستهبندی/بازکردن بستهبندی (packing/unpacking) و ذخیرهسازی (store) را محک میزند. --vecshuf-method method مشخص کردن یک روش تنش برهمریزی برداری. بهطور پیشفرض، تمام روشهای تنش بهصورت متوالی اجرا میشوند، با این حال در صورت نیاز میتوان تنها یک روش را برای استفاده تعیین کرد. lB2 lb l lx. روش توضیحات all پیمایش تمام روشهای برداری زیر u8x64 برهمریزی یک بردار متشکل از ۶۴ عدد صحیح بدون علامت ۸ بیتی u16x32 برهمریزی یک بردار متشکل از ۳۲ عدد صحیح بدون علامت ۱۶ بیتی u32x16 برهمریزی یک بردار متشکل از ۱۶ عدد صحیح بدون علامت ۳۲ بیتی u64x8 برهمریزی یک بردار متشکل از ۸ عدد صحیح بدون علامت ۶۴ بیتی u128x4 برهمریزی یک بردار متشکل از ۴ عدد صحیح بدون علامت ۱۲۸ بیتی (در صورت پشتیبانی) - --vecshuf-ops N
- پس از N بگو-عملیات برهمریزی برداری متوقف شود. یک بگو-عملیات معادل 4 × 65536 عملیات برهمریزی برداری روی ۶۴ بایت داده برداری است.
- تنشزای عملیات ریاضی بردار عریض
- --vecwide N
- آغاز N کارگر که عملیات ریاضی ۸ بیتی گوناگونی را روی بردارهایی با اندازه ۴، ۸، ۱۶، ۳۲، ۶۴، ۱۲۸، ۲۵۶، ۵۱۲، ۱۰۲۴ و ۲۰۴۸ بایت انجام میدهند. با گزینه -v، عملکرد محاسباتی نسبی در مقایسه با عملکرد محاسباتی مورد انتظار بر اساس زمان کل اجرا برای نخستین کارگر vecwide نمایش داده میشود. تنشزای vecwide ترکیبهای گوناگون دستورالعملهای برداری پردازنده و میزان توانایی کامپایلر در نگاشت عملیات برداری به مجموعه دستورالعملهای مقصد را محک میزند.
- --vecwide-ops N
- پس از N بگو-عملیات برداری (۲۰۴۸ تکرار از ترکیبی از عملیات دستورالعمل برداری) متوقف شود.
- تنشزای حفاظت از اصالت مبتنی بر فایل (verity)
- --verity N
- آغاز N کارگر که حفاظت از اصالت مبتنی بر فایلِ فقطخواندنی را با استفاده از ioctlهای verity شامل FS_IOC_ENABLE_VERITY و FS_IOC_MEASURE_VERITY محک میزنند. این امر نیازمند سیستمفایلهایی با پشتیبانی از verity (در حال حاضر ext4 و f2fs در Linux) است که ویژگی verity در آنها فعال شده باشد. این آزمون سعی میکند یک فایل کوچک با چندین وسعت (extent) کوچک ایجاد کرده، verity را روی فایل فعال کند و صحت آن را بسنجد. همچنین بررسی میکند که آیا بیت FS_VERITY_FL روی پرچمهای فایل برای فعال بودن verity تنظیم شده است یا خیر.
- --verity-ops N
- متوقف کردن کارگران verity پس از N چرخه از ایجاد فایل، فعالسازی verity، بررسی verity و unlink.
- تنشزای vfork
- --vfork N
- آغاز N کارگر که بهطور مداوم فرایندهای فرزند را با vfork ایجاد میکنند که بلافاصله خارج میشوند.
- --vfork-max P
- ایجاد P فرایند و سپس انتظار برای خروج آنها در هر تکرار. مقدار پیشفرض فقط ۱ است؛ مقادیر بالاتر فرایندهای زامبی (zombie) موقت زیادی ایجاد میکنند که منتظر درو شدن (reap شدن) هستند. با استفاده از مقادیر بالا برای --vfork-max و --vfork، میتوان جدول فرایندها را بهطور بالقوه پر کرد.
- --vfork-ops N
- متوقف کردن کارگران تنش vfork پس از N بگو-عملیات.
- تنشزای ایجاد حداکثری فرایندها با vfork
- --vforkmany N
- آغاز N کارگر که زنجیرهای از فرزندان vfork را تولید میکنند تا زمانی که جدول فرایندها پر شود و/یا vfork با شکست مواجه گردد. فراخوانی vfork میتواند فرایندهای فرزند را بهسرعت ایجاد کند و فرایند والد باید تا زمان اتمام فرایند فرزند منتظر بماند؛ بنابراین این تنشزا جدول فرایندها را بهسرعت پر میکند.
- --vforkmany-ops N
- متوقف کردن تنشزاهای vforkmany پس از انجام N بار vfork.
- --vforkmany-vm
- فعالسازی توصیههای حافظه مجازی مخرب کارایی با استفاده از madvise(2) روی تمام صفحههای فرایندِ ایجادشده با vfork. در صورت امکان، این گزینه تلاش میکند برای هر صفحه در فرایند جدید با استفاده از madvise(2)، پرچمهای MADV_MERGEABLE، MADV_WILLNEED، MADV_HUGEPAGE و MADV_RANDOM را تنظیم کند. فقط در Linux.
- --vforkmany-vm-bytes N
- نگاشت (mmap) به اندازه N بایت برای هر کارگر vm جهت اعمال فشار بیشتر بر حافظه، مقدار پیشفرض ۶۴ مگابایت (64 MB) است. این کار گزینه --vforkmany-vm را نیز فعال میکند. میتوان اندازه را بهصورت درصدی از کل حافظه موجود (%) یا در واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با استفاده از پسوندهای b، k، m یا g مشخص کرد.
- تنشزای تخصیص و نوشتن در حافظه
- -m N, --vm N
- آغاز N کارگر که بهطور مداوم mmap(2)/munmap(2) را فراخوانی کرده و در حافظه تخصیصیافته مینویسند. توجه داشته باشید در صورتی که حافظه فیزیکی و swap کافی در دسترس نباشد، این امر میتواند در سیستمهای Linux باعث تحریک قاتل کمبود حافظه (OOM killer) هسته شود.
- --vm-bytes N
- نگاشت (mmap) مجموعاً N بایت، این حافظه بین هر کارگر vm به اشتراک گذاشته میشود؛ مقدار پیشفرض ۲۵۶ مگابایت (256 MB) است. میتوان اندازه را بهصورت درصدی از کل حافظه موجود (%) یا در واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با استفاده از پسوندهای b، k، m یا g مشخص کرد.
- --vm-discontiguous
- تلاش برای ناپیوسته کردن صفحات فیزیکی mmap شده با وادار کردن صفحات به قرارگیری در موقعیتهای مکانی فیزیکی «تصادفی» درهمآمیخته.
- --vm-flush
- تخلیه حافظه نهان (cache flush) حافظه نگاشتشده پس از اینکه روی هر ناحیه حافظه بهطور کامل نوشته شد.
- --vm-hang N
- خواب به مدت N ثانیه قبل از لغو نگاشت (unmap) حافظه؛ مقدار پیشفرض صفر ثانیه است. تعیین مقدار 0 موجب انتظار نامحدود خواهد شد.
- --vm-keep
- لغو نگاشت و نگاشت مجدد مداوم حافظه انجام نشود، بلکه صرفاً به نوشتن مجدد روی آن ادامه یابد.
- --vm-locked
- قفل کردن صفحات ناحیه نگاشتشده در حافظه با استفاده از MAP_LOCKED در mmap (از نسخه 2.5.37 لینوکس). این کار شبیه به قفل کردن حافظه به صورتی است که در mlock(2) شرح داده شده است.
- --vm-madvise advice
- مشخص کردن گزینه «توصیه» (advice) در madvise که روی نواحی نگاشتشده حافظه در تنشزای vm اعمال میشود. سیستمهای غیرلینوکسی تنها توصیه madvise از نوع `normal` را خواهند داشت؛ سیستمهای لینوکس از توصیههای `collapse`، `dontneed`، `hugepage`، `mergeable`، `nohugepage`، `normal`، `random`، `sequential`، `unmergeable` و `willneed` پشتیبانی میکنند. اگر از این گزینه استفاده نشود، حالت پیشفرض انتخاب تصادفی توصیه madvise برای هر فراخوانی mmap است. برای جزئیات بیشتر madvise(2) را ببینید..TP --vm-method method یک روش تنش vm را مشخص میکند. بهطور پیشفرض، تمام روشهای تنش بهصورت متوالی آزموده میشوند، با این وجود در صورت نیاز میتوان تنها یک روش را برای استفاده تعیین کرد. هر یک از کارگرهای (workers) vm دارای ۳ مرحله هستند:
۱. مقداردهی اولیه (Initialised). ناحیهٔ نگاشتشدهٔ حافظهٔ ناشناس با یک الگوی مشخص تنظیم میشود.
۲. آزمودن (Exercised). حافظه به شیوهای مشخص و قابل پیشبینی تغییر داده میشود. برخی کارگرهای vm حافظه را بهصورت متوالی تغییر میدهند، برخی دیگر از گامهای (strides) کوچک یا بزرگ برای حرکت در طول حافظه استفاده میکنند.
۳. بررسی (Checked). حافظهٔ تغییریافته بررسی میشود تا تطابق آن با نتیجهٔ مورد انتظار سنجیده شود.
روشهای vm که نام آنها شامل «prime» است، گامی برابر با بزرگترین عدد اول کوچکتر از 2↑64 دارند؛ این ویژگی به آنها اجازه میدهد تا بهطور کامل در حافظه پیمایش کرده و هر مکان را دقیقاً یکبار لمس کنند، بدون آنکه سلولهای حافظهٔ مجاور یکدیگر لمس شوند. این راهبرد، حافظهٔ پنهان (کش) و عدم محلی بودن صفحات را میآزماید.
از آنجا که حافظهٔ تحت آزمون بهصورت مجازی نگاشت شده است، هیچ تضمینی برای دسترسی به آدرسهای صفحه با یک ترتیب فیزیکی خاص وجود ندارد. این کارگرها نباید برای آزمایش درستی عملکرد تمام حافظهٔ سیستم به کار روند، در عوض از ابزارهایی مانند memtest86 استفاده کنید.
هدف روشهای تنش vm، اعمال فشار بر حافظه به شیوههایی است که احتمالاً خطاهای حافظه را آشکار کرده و خطاهای حرارتی را تحریک کنند.
روشهای تنش vm دردسترس به شرح زیر هستند:
| روش | توضیحات |
| all | تکرار روی تمام روشهای تنش vm بهشرح فهرست زیر. |
| cache-lines | پیمایش حافظه در گامهایی بهاندازهٔ خط حافظهٔ پنهان ۶۴ بایتی با نوشتن یک بایت در هر خط کش. با اتمام عمل نوشتن، حافظه برای تأیید درستی مقادیر نوشتهشده خوانده میشود. |
| cache-stripe | پیمایش حافظه در قطعات ۶۴ بایتی بهاندازهٔ خط کش، با نوشتن در ترتیب صعودی آدرسها در آفستهای زوج و ترتیب نزولی آدرسها در آفستهای فرد. |
| checkerboard | پیمایش حافظه با نوشتن متناوب مقادیر بیتی صفر/یک در حافظه با یک الگوی شطرنجی ترکیبی. حافظه جابهجا میشود تا اطمینان حاصل شود که تکتک بیتها خوانده، معکوس، بازنویسی و سپس برای تأیید مجدداً خوانده میشوند. |
| flip | پیمایش متوالی حافظه طی ۸ دور؛ در هر دور فقط یک بیت در حافظه معکوس (منقلب) میشود. این کار عملاً هر بایت را در ۸ دور معکوس میکند. |
| fwdrev | نوشتن در بایتهای با آدرس زوج در جهت رو به جلو و بایتهای با آدرس فرد در جهت معکوس. پس از نوشتهشدن تمامی آدرسها، محتویات از نظر درستی بررسی میشوند. |
| galpat-0 | الگوی پرشی صفرها (galloping pattern zeros). تمام بیتها را روی 0 تنظیم کرده و فقط ۱ بیت از هر 4096 بیت را به 1 تغییر میدهد. سپس بررسی میکند که آیا بیتهای 1 توسط همسایگانشان به 0 کشیده شدهاند یا همسایگان به 1 تغییر یافتهاند. |
| galpat-1 | الگوی پرشی یکها (galloping pattern ones). تمام بیتها را روی 1 تنظیم کرده و فقط ۱ بیت از هر 4096 بیت را به 0 تغییر میدهد. سپس بررسی میکند که آیا بیتهای 0 توسط همسایگانشان به 1 کشیده شدهاند یا همسایگان به 0 تغییر یافتهاند. |
| gray | پر کردن حافظه با کدهای گری متوالی (که در هر نوبت بین بایتهای مجاور تنها ۱ بیت تغییر میکند) و سپس بررسی صحت تنظیم آنها. |
| grayflip | پر کردن حافظه با جفتهای بایت مجاورِ کد گری و کد گری معکوس، تا بیشترین تعداد بیت ممکن بین بایتهای مجاور تغییر کند و سپس بررسی صحت تنظیم آنها. |
| incdec | پیمایش متوالی حافظه در دو دور؛ دور نخست هر بایت را با مقداری مشخص افزایش میدهد و دور دوم هر بایت را کاهش داده و به مقدار اولیه بازمیگرداند. مقدار افزایش/کاهش در هر بار فراخوانی تنشزا تغییر میکند. |
| inc-nybble | مقداردهی اولیهٔ حافظه به یک مقدار مشخص (که در هر بار فراخوانی تنشزا تغییر میکند) و سپس پیمایش متوالی تمام بایتها با افزودن ۱ واحد به ۴ بیت پایینی و ۱۵ واحد به ۴ بیت بالایی. |
| lfsr32 | پر کردن حافظه با مقادیر تولیدشده از یک ثبات تغییر بازخورد خطی گالوای ۳۲ بیتی با استفاده از چندجملهای x↑32 + x↑31 + x↑29 + x + 1. این روش حلقهای از 2↑32 − 1 مقدار یکتا (تمام مقادیر ۳۲ بیتی بهجز 0) تولید میکند. |
| modulo-x | پر کردن حافظه طی ۲۳ تکرار. هر تکرار یک بایت جلوتر از آغاز حافظه شروع میشود و با گامهای ۲۳ بایتی به جلو میرود. در هر گام، نخستین بایت با یک الگوی تصادفی و تمامی بایتهای دیگر با معکوس آن مقداردهی میشوند. سپس بررسی میشود که آیا بایت نخست حاوی الگوی تصادفی مورد انتظار است یا خیر. این کار بارگذاری/خواندن کش را میآزماید و همچنین اثر متقابل سلولهای همسایه بر یکدیگر را ارزیابی میکند. |
| move-inv | پر کردن متوالی حافظه بهمیزان ۶۴ بیت در هر نوبت با مقادیر تصادفی، و سپس بررسی تنظیم درست حافظه. در مرحلهٔ بعد، معکوسسازی متوالی هر الگوی ۶۴ بیتی و بررسی دوبارهٔ تطابق حافظه با انتظار. |
| mscan | پر کردن تمام بیتهای هر بایت با 1 و بررسی ثبت آنها، سپس پر کردن تمام بیتهای هر بایت با 0 و بررسی پاک شدن آنها. |
| one-zero | تنظیم تمام بیتهای حافظه روی یک و بررسی عدم وجود بیتی غیر از یک. سپس، تنظیم تمام بیتهای حافظه روی صفر و بررسی عدم وجود بیتی غیر از صفر. |
| prime-0 | ۸ بار تکرار با پیمایش حافظه در گامهای اولِ بسیار بزرگ، و پاک کردن تنها یک بیت در هر نوبت در هر بایت. سپس بررسی اینکه آیا همهٔ بیتها روی صفر تنظیم شدهاند یا خیر. |
| prime-1 | ۸ بار تکرار با پیمایش حافظه در گامهای اولِ بسیار بزرگ، و تنظیم تنها یک بیت در هر نوبت در هر بایت روی یک. سپس بررسی اینکه آیا همهٔ بیتها روی یک تنظیم شدهاند یا خیر. |
| prime-gray-0 | نخست پیمایش حافظه در گامهای اول بسیار بزرگ و پاک کردن تنها یک بیت (بر پایهٔ کد گری) در هر بایت. سپس تکرار این روند برای پاک کردن ۷ بیت دیگر. در پایان، بررسی اینکه آیا همهٔ بیتها روی صفر تنظیم شدهاند یا خیر. |
| prime-gray-1 | نخست پیمایش حافظه در گامهای اول بسیار بزرگ و تنظیم تنها یک بیت (بر پایهٔ کد گری) در هر بایت روی یک. سپس تکرار این روند برای تنظیم ۷ بیت دیگر روی یک. در پایان، بررسی اینکه آیا همهٔ بیتها روی یک تنظیم شدهاند یا خیر. |
| prime-incdec | پیمایش حافظه در گامهای اول بزرگ با افزایش بایتها و سپس تکرار مجدد با کاهش بایتها. |
| rand-set | پیمایش متوالی حافظه در قطعات ۶۴ بیتی با تنظیم بایتهای موجود در قطعه روی یک مقدار تصادفی ۸ بیتی یکسان. مقدار تصادفی در هر قطعه تغییر میکند. سپس بررسی عدم تغییر مقادیر. |
| rand-sum | تنظیم متوالی تمام حافظه با مقادیر تصادفی و سپس جمع زدن تعداد بیتهایی که نسبت به مقادیر اولیه تغییر کردهاند. |
| read64 | خواندن متوالی حافظه با استفاده از 32 × 64 بیت خواندن در هر حلقهٔ bogo. هر حلقه معادل یک عملیات bogo است. این روش خواندن خام حافظه را میآزماید. |
| ror | پر کردن حافظه با یک الگوی تصادفی و سپس چرخش متوالی ۶۴ بیت از حافظه به راست بهاندازهٔ یک بیت، و در نهایت بررسی مقادیر بارگذاری/چرخش/ذخیرهشدهٔ نهایی. |
| rowhammer | تلاش برای ایجاد فساد در حافظه با استفاده از تنشزای حافظهٔ rowhammer. این روش دو عدد صحیح ۳۲ بیتی را از حافظه فراخوانی کرده و چندین بار تخلیهٔ کش (cache flush) را روی این دو آدرس اعمال میکند. این کار روی برخی سختافزارها، بهویژه در بسامدهای پایینتر چرخههای بازنشانی حافظه، موجب تحریک تغییر ناخواستهٔ بیتها (bit flipping) میشود. |
| swap | پر کردن حافظه در قطعات ۶۴ بایتی با الگوهای تصادفی. سپس جابهجا کردن هر قطعهٔ ۶۴ بایتی با یک قطعهٔ انتخابی تصادفی. در پایان، معکوس کردن این جابهجایی برای بازگرداندن قطعات به جایگاه نخستین خود و بررسی صحت دادهها. این روش بارگذاری/ذخیرهسازی مجاور و تصادفی حافظه را میآزماید. |
| walk-0a | در نگاشت حافظهٔ ارائهشده، پیمایش بازهای از آدرسهای ویژه با بررسی خطوط آدرس برای اطمینان از گیر نکردن خطوط روی سطح پایین (low). این روش با آدرسدهی فیزیکی حافظه بهترین عملکرد را دارد، با این حال آزمودن این آدرسهای مجازی نیز ارزشمند است. |
| walk-0d | برای هر بایت در حافظه، پیمایش هر خط داده و تنظیم آن روی سطح پایین (و بقیه روی بالا) و بررسی درستی مقدار نوشتهشده. این آزمون گیر کردن خطوط داده را بررسی میکند. |
| walk-1a | در نگاشت حافظهٔ ارائهشده، پیمایش بازهای از آدرسهای ویژه با بررسی خطوط آدرس برای اطمینان از گیر نکردن خطوط روی سطح بالا (high). این روش با آدرسدهی فیزیکی حافظه بهترین عملکرد را دارد، با این حال آزمودن این آدرسهای مجازی نیز ارزشمند است. |
| walk-1d | برای هر بایت در حافظه، پیمایش هر خط داده و تنظیم آن روی سطح بالا (و بقیه روی پایین) و بررسی درستی مقدار نوشتهشده. این آزمون گیر کردن خطوط داده را بررسی میکند. |
| walk-flush | پیمایش حافظه بهصورت بایت به بایت با نوشتن/تخلیه کردن/خواندن ۸ بایت از دادههای افزایشی ۸ بیتی. برای معماریهایی که از تخلیهٔ کش در فضای کاربری پشتیبانی میکنند، این عمل باعث نرخ بالای عدم تطابق کش داده (data cache miss) میشود. |
| write64 | نوشتن متوالی در حافظه با استفاده از 32 × 64 بیت نوشتن در هر حلقهٔ bogo. هر حلقه معادل یک عملیات bogo است. این روش نوشتن خام در حافظه را میآزماید. توجه داشته باشید که عملیات نوشتن در حافظه در پایان هر تکرار آزمون بررسی نمیشود. |
| write64ds | نوشتن متوالی در حافظه با استفاده از 32 × 64 بیت نوشتن ذخیرهسازی مستقیم (direct store) در هر حلقهٔ bogo. هر حلقه معادل یک عملیات bogo است. این روش پروتکل نوع حافظهٔ ترکیب نوشتاری (WC) بدون کش را برای نوشتنهای حافظه میآزماید و تنها در سامانههای x86 دارای دستورالعمل movediri که با کامپایلرهای gcc و clang ساخته شده باشند موجود است. توجه داشته باشید که عملیات نوشتن در حافظه در پایان هر تکرار آزمون بررسی نمیشود. |
| write64nt | نوشتن متوالی در حافظه با استفاده از 32 × 64 بیت نوشتن غیرزمانی (non-temporal) در هر حلقهٔ bogo. هر حلقه معادل یک عملیات bogo است. این روش نوشتن خام بدون کش در حافظه را میآزماید و تنها در سامانههای x86 با پشتیبانی از sse2 که با کامپایلرهای gcc و clang ساخته شده باشند در دسترس است. توجه داشته باشید که عملیات نوشتن در حافظه در پایان هر تکرار آزمون بررسی نمیشود. |
| write1024v | نوشتن متوالی در حافظه با استفاده از 1 × 1024 بیت نوشتن برداری در هر حلقهٔ bogo (تنها در صورتی که کامپایلر از انواع برداری پشتیبانی کند در دسترس است). هر حلقه معادل یک عملیات bogo است. این روش نوشتن خام در حافظه را میآزماید. توجه داشته باشید که عملیات نوشتن در حافظه در پایان هر تکرار آزمون بررسی نمیشود. |
| wrrd128nt | نوشتن در حافظه در قطعات ۱۲۸ بیتی با استفاده از نوشتنهای غیرزمانی (با دور زدن کش). هر قطعه ۴ بار نوشته میشود تا حافظه تحت کوبش (hammer) قرار گیرد. سپس صحت دادهها با استفاده از خواندنهای غیرزمانی (در صورت پشتیبانی) یا خواندنهای معمولی بررسی میشود. تنها در پردازندههایی که امکان نوشتن غیرزمانی ۱۲۸ بیتی را ارائه میدهند در دسترس است. |
| zero-one | تنظیم تمام بیتهای حافظه روی صفر و بررسی عدم وجود بیتی غیر از صفر. سپس، تنظیم تمام بیتهای حافظه روی یک و بررسی عدم وجود بیتی غیر از یک. |
- --vm-numa
- تخصیص صفحههای نگاشتشده حافظه به گرههای NUMA که بهصورت تصادفی انتخاب شدهاند. این گزینه در سامانههایی که از NUMA پشتیبانی نمیکنند غیرفعال است.
- --vm-ops N
- متوقف کردن کارگرهای vm پس از N عملیات ساختگی (bogo ops).
- --vm-populate
- پر کردن (پیشخطا دادن یا prefault) جدولهای صفحه برای نگاشتهای حافظه؛ این کار میتواند مبادله حافظه (swapping) را تحت فشار بگذارد. فقط در سامانههایی در دسترس است که از MAP_POPULATE پشتیبانی میکنند (از لینوکس ۲.۵.۴۶ به بعد).
- آزمونگر آدرسدهی حافظه مجازی
- --vm-addr N
- شروع N کارگر که با استفاده از روشهای گوناگون جهت پیمایش بازه آدرس نگاشتشده حافظه، آدرسدهی حافظه مجازی را به کار میگیرند. این امر آدرسهای خصوصی نگاشتشده از ۸ مگابایت تا ۶۴ مگابایت را به ازای هر کارگر به کار میگیرد و تلاش میکند الگوهای آدرسدهی ناکارآمد برای حافظه نهان (cache) و TLB ایجاد کند. هر روش در مرحله نوشتن حافظه را با یک الگوی تصادفی مقداردهی میکند و سپس در مرحله خواندن سلامت آن را میسنجد.
- --vm-addr-method method
- مشخص کردن روش آزمون فشار آدرس vm. بهطور پیشفرض، تمام روشهای استرس بهصورت متوالی اجرا میشوند، اما در صورت نیاز میتوان تنها یک روش را برای استفاده تعیین کرد.
روشهای در دسترس برای آزمون فشار آدرس vm به شرح زیر هستند:
| روش | توضیحات |
| all | پیمایش روی تمام روشهای آزمون فشار vm به ترتیبی که در زیر آمده است. |
| bitposn | نوشتن تکرارشونده در حافظه با گامهایی از توانهای ۲ از max_stride تا ۱ و سپس بازخوانی و بررسی حافظه با گامهایی از توانهای ۲ از ۱ تا max_stride؛ که در آن max_stride نیمی از اندازه ناحیه نگاشتشده حافظه است. تمام موقعیتهای بیتی فضای آدرس حافظه در طول گامبرداری وارون (flip) میشوند. |
| dec | پیمایش بازه آدرس بهصورت ترتیبی و رو به عقب، بایت به بایت. |
| decinv | مشابه dec، اما با معکوس شدن تمام بیتهای مربوط به آدرس. |
| flip | آدرسدهی حافظه با استفاده از آدرسهای کد گری و معکوس آنها جهت وارونسازی بیشترین بیتهای آدرس در هر عملیات خواندن/نوشتن. |
| gray | پیمایش حافظه با آدرسهای کد گری، بهگونهای که هر تغییر آدرس نسبت به آدرس قبلی تنها باعث تغییر ۱ بیت میشود. |
| grayinv | مشابه gray، اما با معکوس شدن تمام بیتهای مربوط به آدرس، بنابراین در بازه آدرس به جز ۱ بیت، همه بیتهای دیگر تغییر میکنند. |
| inc | پیمایش بازه آدرس بهصورت ترتیبی و رو به جلو، بایت به بایت. |
| incinv | مشابه inc، اما با معکوس شدن تمام بیتهای مربوط به آدرس. |
| pwr2 | پیمایش آدرسهای حافظه در گامهایی از توانهای دو. |
| pwr2inv | مشابه pwr2، اما با معکوس شدن تمام بیتهای مربوط به آدرس. |
| rev | پیمایش بازه آدرس در حالی که بیتهای بازه آدرس معکوس شدهاند. |
| revinv | مشابه rev، اما با معکوس شدن تمام بیتهای مربوط به آدرس. |
- --vm-addr-mlock
- تلاش برای مقید کردن صفحهها در حافظه با mlock(2) که با جلوگیری از خروج صفحهها به حافظه مبادله (swap out)، فشار حافظه بیشتری وارد میکند.
- --vm-addr-numa
- تخصیص صفحههای نگاشتشده حافظه به گرههای NUMA که بهصورت تصادفی انتخاب شدهاند. این قابلیت در سامانههایی که از NUMA پشتیبانی نمیکنند غیرفعال است.
- --vm-addr-ops N
- متوقف کردن N کارگر پس از N دور آدرسدهی ساختگی (bogo).
- آزمونگر انتقال حافظه بین فرایندهای والد و فرزند (لینوکس)
- --vm-rw N
- شروع N کارگر که حافظه را با استفاده از process_vm_writev(2) و process_vm_readv(2) میان والد/فرزند منتقل میکنند. این قابلیت تنها در لینوکس پشتیبانی میشود. انتقالهای حافظه تنها در صورتی راستیآزمایی میشوند که گزینه --verify فعال باشد.
- --vm-rw-bytes N
- نگاشت حافظه با mmap به میزان N بایت به ازای هر کارگر vm-rw؛ مقدار پیشفرض ۱۶ مگابایت است. میتوان اندازه را بهصورت درصدی از کل حافظه در دسترس یا در واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با استفاده از پسوندهای b، k، m یا g مشخص کرد.
- --vm-rw-ops N
- متوقف کردن کارگرهای vm-rw پس از N خواندن/نوشتن در حافظه.
- آزمونگر لغو نگاشت حافظه از یک فرایند فرزند
- --vm-segv N
- شروع N کارگر که یک فرایند فرزند ایجاد میکنند که فضای آدرس خود را لغو نگاشت (unmap) میکند و در هنگام بازگشت از لغو نگاشت، سیگنال SIGSEGV ایجاد میکند.
- --vm-segv-ops N
- توقف پس از N خطای SIGSEGV ساختگی (bogo) در vm-segv.
- آزمونگر Vmsplice (لینوکس)
- --vm-splice N
- انتقال دادهها از حافظه به /dev/null از طریق یک لوله (pipe) بدون هرگونه کپی بین فضای آدرس هسته و فضای آدرس کاربر با استفاده از vmsplice(2) و splice(2). این قابلیت تنها برای لینوکس در دسترس است.
- --vm-splice-bytes N
- انتقال N بایت در هر فراخوانی vmsplice؛ مقدار پیشفرض ۶۴ کیلوبایت است. میتوان اندازه را بهصورت درصدی از کل حافظه در دسترس یا در واحدهای بایت، کیلوبایت، مگابایت و گیگابایت با استفاده از پسوندهای b، k، m یا g مشخص کرد.
- --vm-splice-ops N
- توقف پس از N عملیات ساختگی vm-splice.
- آزمونگر ناحیه حافظه مجازی (VMA)
- --vma N
- شروع M کارگر که برای فراخوانیهای mmap(2)، munmap(2)، mlock(2)، munlock(2)، madvise(2)، msync(2)، mprotect(2)، mincore(2) و دسترسی به ۳۲ صفحه در یک فضای آدرس حافظه مجازی انتخابشده بهصورت تصادفی، ریسمانهای pthread ایجاد میکنند. این آزمون برای تحریک شرایط رقابتی هنگام اصلاح صفحههای VMA طراحی شده است. هر ۱۵ ثانیه یک فضای آدرس مجازی متفاوت بهصورت تصادفی انتخاب میشود.
- --vma-ops N
- متوقف کردن آزمونگرهای vma پس از N نگاشت موفقیتآمیز حافظه.
- آزمونگر دستورالعملهای برداری شبکه عصبی
- --vnni N
- شروع N کارگر که دستورالعملهای برداری شبکه عصبی (VNNI) مورد استفاده در حلقههای شبکه عصبی پیچشی را به کار میگیرند. یک بردار ۲۵۶ بایتی با استفاده از ضرب ۸ بیتی با جمع ۱۶ بیتی، ضرب ۱۶ بیتی و جمع ۳۲ بیتی، و جمع ۸ بیتی مورد پردازش قرار میگیرد. هنگامی که قابلیتهای پردازنده اجازه دهد، این عملیات از عملیات برداری ۵۱۲، ۲۵۶ و ۱۲۸ بیتی استفاده میکنند. انواع کدهای عمومی غیربرداری نیز ارائه شدهاند (که ممکن است توسط کامپایلرهای بهینهساز پیشرفتهتر برداریسازی شوند).
- --vnni-intrinsic
- تنها
استفاده از
روشهای vnni
که از
دستورالعملهای
درونی (intrinsic) VNNI
استفاده
میکنند و
نادیده
گرفتن
روشهای
عمومی
غیربرداریشده..TP
--vnni-method N روش VNNI
مورد نظر
برای
آزمودن را
انتخاب
میکند؛
میتواند
یکی از
موارد زیر
باشد:
روش توضیحات all تمام روشهای VNNI زیر را میآزماید vpaddb512 جمع برداری ۸ بیتی با استفاده از عملیات برداری ۵۱۲ بیتی بر روی ۶۴ × عدد صحیح ۸ بیتی، (x86 vpaddb) vpaddb256 جمع برداری ۸ بیتی با استفاده از عملیات برداری ۲۵۶ بیتی بر روی ۳۲ × عدد صحیح ۸ بیتی، (x86 vpaddb) vpaddb128 جمع برداری ۸ بیتی با استفاده از عملیات برداری ۱۲۸ بیتی بر روی ۳۲ × عدد صحیح ۸ بیتی، (x86 vpaddb) vpaddb جمع برداری ۸ بیتی با استفاده از جمع ترتیبی ۸ بیتی (ممکن است توسط کامپایلر برداری شود) vpdpbusd512 ضرب برداری ۸ بیتی مقادیر بدون علامت و علامتدار ۸ بیتی به همراه جمع ۱۶ بیتی با استفاده از عملیات برداری ۵۱۲ بیتی بر روی ۶۴ × عدد صحیح ۸ بیتی، (x86 vpdpbusd) vpdpbusd256 ضرب برداری ۸ بیتی مقادیر بدون علامت و علامتدار ۸ بیتی به همراه جمع ۱۶ بیتی با استفاده از عملیات برداری ۲۵۶ بیتی بر روی ۳۲ × عدد صحیح ۸ بیتی، (x86 vpdpbusd) vpdpbusd128 ضرب برداری ۸ بیتی مقادیر بدون علامت و علامتدار ۸ بیتی به همراه جمع ۱۶ بیتی با استفاده از عملیات برداری ۱۲۸ بیتی بر روی ۳۲ × عدد صحیح ۸ بیتی، (x86 vpdpbusd) vpdpbusd ضرب برداری ۸ بیتی مقادیر بدون علامت و علامتدار ۸ بیتی به همراه جمع ۱۶ بیتی با استفاده از عملیات ترتیبی (ممکن است توسط کامپایلر برداری شود) vpdpwssd512 ضرب برداری ۱۶ بیتی مقادیر بدون علامت و علامتدار ۱۶ بیتی به همراه جمع ۳۲ بیتی با استفاده از عملیات برداری ۵۱۲ بیتی بر روی ۶۴ × عدد صحیح ۸ بیتی، (x86 vpdpwssd) vpdpwssd256 ضرب برداری ۱۶ بیتی مقادیر بدون علامت و علامتدار ۱۶ بیتی به همراه جمع ۳۲ بیتی با استفاده از عملیات برداری ۲۵۶ بیتی بر روی ۶۴ × عدد صحیح ۸ بیتی، (x86 vpdpwssd) vpdpwssd128 ضرب برداری ۱۶ بیتی مقادیر بدون علامت و علامتدار ۱۶ بیتی به همراه جمع ۳۲ بیتی با استفاده از عملیات برداری ۱۲۸ بیتی بر روی ۶۴ × عدد صحیح ۸ بیتی، (x86 vpdpwssd) vpdpwssd ضرب برداری ۱۶ بیتی مقادیر بدون علامت و علامتدار ۱۶ بیتی به همراه جمع ۳۲ بیتی با استفاده از عملیات ترتیبی (ممکن است توسط کامپایلر برداری شود) - --vnni-ops N
- پس از N عملیات محاسباتی بوگو VNNI متوقف میشود. یک bogo-op معادل ۱۰۲۴ حلقه کانولوشن است که بر روی ۲۵۶ بایت داده عمل میکنند.
- استرسور مکث و ازسرگیری رشتهها
- --wait N
- تعداد N کارگر (worker) را آغاز میکند که دو فرزند ایجاد میکنند؛ یکی در حلقه pause(2) به دور خود میچرخد و دیگری بهطور مداوم اولی را متوقف کرده و ادامه میدهد. فرایند کنترلکننده منتظر میماند تا فرزند اول با دریافت SIGCONT با استفاده از waitpid(2) و waitid(2) از سر گرفته شود.
- --wait-ops N
- پس از N عملیات انتظار بوگو (bogo wait) متوقف میشود.
- استرسور دستور انتظار پردازنده
- --waitcpu N
- تعداد N کارگر را آغاز میکند که دستورات انتظار پردازنده را میآزمایند. برای x86 این دستورات عبارتند از pause، tpause و umwait (در صورت در دسترس بودن) و nop. برای ARM دستور yield استفاده میشود. برای PPC64 دستورات yield، mdoio و mdooom استفاده میشوند. برای RISC-V دستور pause استفاده میشود. برای Loong64 دستور dbar استفاده میشود. برای openRISC دستور psync استفاده میشود. برای سایر معماریها دستورات no-op استفاده میشوند.
- --waitcpu-ops N
- پس از N عملیات انتظار پردازنده بوگو متوقف میشود.
- استرسور دیدهبان (Watchdog)
- --watchdog N
- تعداد N کارگر را آغاز میکند که رابط دیدهبان /dev/watchdog را با باز کردن آن، اجرای دستورات مختلف ioctl(2) ویژه watchdog بر روی دستگاه و بستن آن میآزمایند. پیش از بستن، پیام جادویی ویژه بستن دیدهبان (magic close) روی دستگاه نوشته میشود تا سعی کند مانع از تحریک راهاندازی مجدد (reboot) توسط watchdog پس از اجرای استرسور شود. توجه داشته باشید که این استرسور باید با دسترسی ریشه (root) به همراه گزینه --pathological اجرا شود و فقط در Linux در دسترس است.
- --watchdog-ops N
- پس از N عملیات بوگو بر روی دستگاه watchdog متوقف میشود.
- استرسور توابع رشتههای نویسه عریض Libc
- --wcs N
- تعداد N کارگر را آغاز میکند که توابع مختلف رشتههای نویسه عریض (wide character string) در libc را روی رشتههای تصادفی میآزمایند.
- --wcs-method wcsfunc
- یک تابع خاص از رشتههای نویسه عریض libc را برای اعمال فشار انتخاب میکند. توابع رشتهای در دسترس برای آزمودن عبارتند از: all، wcscasecmp، wcscat، wcschr، wcscoll، wcscmp، wcscpy، wcslen، wcsncasecmp، wcsncat، wcsncmp، wcsrchr و wcsxfrm. روش “all” پیشفرض است و تمام روشهای رشتهای را میآزماید.
- --wcs-ops N
- پس از N عملیات رشتههای نویسه عریض بوگو متوقف میشود.
- استرسور بار کاری زمانبند
- --workload N
- تعداد N
کارگر را
آغاز
میکند که
با
آیتمهای
کاری که در
زمانهای
تصادفی و با
تاخیرهای
خواب (sleep)
تصادفی بین
آیتمهای
کاری شروع
میشوند،
زمانبند
را
میآزمایند.
بهطور
پیشفرض یک
برش زمانی
۱۰۰۰۰۰
میکروثانیهای
دارای ۱۰۰
آیتم کاری
است که در
زمانهای
تصادفی در
طول این برش
شروع
میشوند.
آیتمهای
کاری
بهطور
پیشفرض
برای یک
کوانتای
۱۰۰۰
میکروثانیهای
مقیاسبندیشده
با درصد بار
کاری
(پیشفرض
۳۰٪) اجرا
میشوند.
برای یک برش
S
میکروثانیهای
و مدت
کوانتای
آیتم کاری Q
میکروثانیهای،
تعداد S / Q
آیتم کاری
در هر برش
اجرا
میشود.
برای بار
کاری L
درصد، زمان
اجرا به
ازای هر
آیتم برابر
با کوانتای
Q × L / 100
میکروثانیه
است. گزینه
--workload-threads اجازه
میدهد
آیتمهای
کاری از یک
صف دریافت
شده و در
صورت تداخل
زمانهای
اجرای
زمانبندیشده،
بهصورت
همروند
اجرا شوند.
اگر هنگام زمانبندی برای اجرای یک آیتم کاری جدید، آیتمی از قبل در حال اجرا باشد، در حالت پیشفرضِ صفر رشته کارگر، آیتم کاری جدید به تاخیر افتاده و بلافاصله پس از اتمام آیتم کاری در حال اجرا شروع میشود. این رفتار، پردازشهای زمانبندیشده رگباری (bursty) را شبیهسازی میکند؛ مانند مدیریت بستههای ورودی که ممکن است تعداد زیادی آیتم کاری بهصورت فشرده در کنار هم یا با تاخیرهای تصادفی غیرقابلپیشبینی بین آیتمهای کاری وجود داشته باشد. - --workload-load L
- درصد بار زمان اجرای هر آیتم کاری را نسبت به مدت زمان کوانتای اجرا تعیین میکند. اساساً مدت زمان اجرای هر آیتم کاری برابر است با مدت کوانتای Q × L / 100.
- --workload-method method
- روش بار
کاری را
انتخاب
میکند. هر
کوانتای
زمان اجرا
با استفاده
از یک حلقه
چرخش فشرده
(tight spin-loop) که روش
بار کاری را
اجرا
میکند،
مصرف
میشود.
روشهای
موجود به
شرح زیر
توصیف
شدهاند:
روش توضیحات all بهطور تصادفی یکی از تمام روشهای زیر را انتخاب میکند: fma عملیات ضرب-جمع را انجام میدهد؛ در پردازندههای امروزی ممکن است به دستورات fused-multiply-add کامپایل شوند. getpid شناسه PID استرسور را از طریق getpid(2) دریافت میکند. inc64 یک عدد صحیح ۶۴ بیتی را افزایش میدهد (increment). memmove یک بافر ۱ مگابایتی را با استفاده از memmove(3) کپی میکند (انتقال میدهد). memread از یک بافر ۱ مگابایتی با استفاده از خواندن سریع حافظه میخواند. memset در یک بافر ۱ مگابایتی با استفاده از memset(3) مینویسد. mcw64 اعداد تصادفی ۶۴ بیتی را با استفاده از یک مولد تصادفی mwc محاسبه میکند. nop چرخههای پردازنده را با استفاده از دستورات no-op هدر میدهد. pause اجرا را با استفاده از دستورات pause/yield پردازنده یا سد حافظه (memory barrier) در صورت وجود، متوقف میکند. procname در صورت امکان، نام فرایند استرسور را تغییر میدهد. random ترکیبی تصادفی از تمامی روشهای بار کاری، با تغییر روش بار کاری در هر حلقه چرخش (spin-loop). strnum ترکیبی از تبدیلات رشته به/از عددی؛ میتواند سیستمهای x86 را به شدت داغ کند. sqrt عملیات ریاضی ممیز شناور با دقت مضاعف (double precision) تابع sqrt(3) و hypot(3) را انجام میدهد. time زمان کنونی را از طریق time(2) دریافت میکند. vecfp عملیات ضرب و جمع را بر روی برداری از ۶۴ مقدار ممیز شناور با دقت مضاعف انجام میدهد. vecint عملیات ضرب و جمع را بر روی برداری از ۲۵۶ عدد صحیح ۸ بیتی بدون علامت انجام میدهد. --workload-sched [ batch | deadline | ext | fifo | idle | other | rr ] سیاست زمانبندی را انتخاب میکند. توجه داشته باشید که deadline، fifo و rr به دسترسی ریشه (root) نیاز دارند. --workload-slice-us S مدتزمان هر برش زمانبندی را بر حسب میکروثانیه مشخص میکند. مقدار پیشفرض ۱۰۰۰۰۰ میکروثانیه (۰٫۱ ثانیه) است. --workload-quanta-us Q مدتزمان هر بخش کاری (work item) را بر حسب میکروثانیه مشخص میکند. مقدار پیشفرض ۱۰۰۰ میکروثانیه (۱ میلیثانیه) است. --workload-threads N از N ریسه پردازشی برای دریافت موارد کاری زمانبند از یک صف کار (workqueue) و اجرای آنها استفاده میکند (پیشفرض ۲ است). هنگامی که N برابر ۰ باشد، هیچ ریسهای استفاده نمیشود و موارد کاری پشت سر هم و بهصورت متوالی بدون استفاده از صف کار اجرا میشوند. استفاده از بیش از ۲ ریسه، در صورت وجود پردازندههای بیکار کافی، امکان مدیریت همزمان موارد کاری را فراهم میکند. --workload-dist [ cluster | even | poisson | random1 | random2 | random3 ] نحوه توزیع زمانبندی موارد کاری را مشخص میکند؛ مقدار پیشفرض cluster است. روشهای توزیع به شرح زیر هستند: lB2 lB l lx. روش توضیحات cluster خوشهبندی ۲/۳ از زمانهای شروع برای تلاش جهت شروع در زمانی تصادفی در طول برش زمانی، بههمراه ۱/۳ دیگر زمانهای شروع که بهصورت تصادفی یکنواخت با استفاده از یک متغیر تصادفی واحد توزیع شدهاند. زمانهای شروع خوشهبندیشده باعث میشوند دستهای از موارد کاری بهصورت ناگهانی و بدون تأخیر بین هر مورد در خوشه زمانبندی شوند. even زمانهای شروع زمانبندی را بهطور یکنواخت در سراسر برش بار کاری توزیع میکند poisson رویدادهای زمانبندی را ایجاد میکند که بهطور جداگانه در لحظات تصادفی رخ میدهند، اما تمایل دارند با یک نرخ میانگین رخ دهند (معروف به فرایند پواسون). random1 زمانهای شروع زمانبندی را بهصورت تصادفی یکنواخت با استفاده از یک متغیر تصادفی واحد توزیع میکند. random2 زمانهای شروع زمانبندی را با استفاده از مجموع دو متغیر تصادفی، مشابه پرتاب ۲ تاس، بهصورت تصادفی توزیع میکند. random3 زمانهای شروع زمانبندی را با استفاده از مجموع سه متغیر تصادفی، مشابه پرتاب ۳ تاس، بهصورت تصادفی توزیع میکند. - --workload-ops N
- ورکرهای بار کاری را پس از N عملیات صوری (bogo-operations) متوقف میکند.
- استرسور x86 cpuid
- --x86cpuid N
- تعداد N ورکر را آغاز میکند که دستور cpuid در x86 را با ۱۸ نوع برگ (leaf) مختلف به کار میگیرند.
- --x86cpuid-ops N
- پس از N تکرار در آزمایش انواع مختلف برگههای cpuid متوقف میشود.
- استرسور x86-64 syscall (لینوکس)
- --x86syscall N
- تعداد N ورکر را آغاز میکند که بهطور مکرر دستور syscall در x86-64 را برای فراخوانی فراخوانهای سیستمی getcpu(2)، geteuid(2)، getgid(2)، getpid(2)، gettimeofday(2) و time(2) با استفاده از گرداننده vsyscall لینوکس اجرا میکنند. فقط برای لینوکس.
- --x86syscall-func F
- بهجای اجرای هر ۶ فراخوان سیستمی syscall، تنها تابع فراخوان سیستمی F را اجرا میکند. تابع F باید یکی از getcpu، geteuid، getgid، getpid، gettimeofday یا time باشد.
- --x86syscall-ops N
- پس از N فراخوان سیستمی x86syscall متوقف میشود.
- استرسور ویژگیهای گسترده فایل
- --xattr N
- تعداد N ورکر را آغاز میکند که دستههایی از ویژگیهای گسترده (extended attributes) را روی یک فایل ایجاد، بهروزرسانی و حذف میکنند.
- --xattr-ops N
- پس از N عملیات صوری ویژگیهای گسترده متوقف میشود.
- استرسور زمانبندی yield
- -y N, --yield N
- تعداد N ورکر را آغاز میکند که sched_yield(2) را فراخوانی میکنند. این استرسور تضمین میکند که صرفنظر از تعداد ورکرهای مشخصشده، حداقل ۲ پردازه فرزند بهازای هر پردازنده sched_yield(2) را اجرا کنند، و در نتیجه همواره تعویض زمینه (context switching) سریع را تضمین میکند.
- --yield-ops N
- ورکرهای فشار yield را پس از N عملیات صوری sched_yield(2) متوقف میکند.
- --yield-procs N
- تعداد پردازههای فرزند را برای اجرا بهازای هر نمونه استرسور مشخص میکند. مقدار پیشفرض ۲ است و بازه آن بین ۱ تا ۶۵۵۳۶ میباشد.
- --yield-sched [ batch | deadline | ext | fifo | idle | other | rr ]
- سیاست زمانبندی را انتخاب میکند. توجه داشته باشید که deadline، fifo و rr به دسترسی ریشه (root) نیاز دارند.
- استرسور /dev/zero
- --zero N
- تعداد N ورکر را آغاز میکند که /dev/zero را با فراخوانیهای read(2)، lseek(2)، ioctl(2) و mmap(2) به کار میگیرند. برای بنچمارک صرفاً خواندن از /dev/zero، از گزینه --zero-read استفاده کنید.
- --zero-ops N
- ورکرهای فشار zero را پس از N عملیات صوری خواندن از /dev/zero متوقف میکند.
- --zero-read
- فقط /dev/zero را با خواندنهای ۴ کیلوبایتی، بدون هیچ اعمال فشار اضافی بر /dev/zero میخواند.
- استرسور zlib
- --zlib N
- تعداد N ورکر را آغاز میکند که دادههای تصادفی را با استفاده از zlib فشردهسازی و بازگشایی میکنند. هر ورکر دارای دو پردازه است: یکی که دادههای تصادفی را فشرده کرده و از طریق لوله (pipe) به پردازه دیگر میفرستد که دادهها را بازگشایی میکند. این استرسور CPU، حافظه نهان (cache) و حافظه را به کار میگیرد.
- --zlib-level L
- سطح فشردهسازی را مشخص میکند (۰..۹)، که در آن 0 = بدون فشردهسازی، 1 = سریعترین فشردهسازی و 9 = بهترین فشردهسازی است.
- --zlib-mem-level L
- حافظه
رزروشده
وضعیت
فشردهسازی
را برای zlib
مشخص
میکند.
مقدار
پیشفرض ۸
است.
مقدار 1 حداقل مصرف حافظه. 9 حداکثر مصرف حافظه. - --zlib-method method
- نوع
دادههای
تصادفی
ارسالی به
کتابخانه zlib
را مشخص
میکند.
بهطور
پیشفرض،
جریان داده
از یک
انتخاب
تصادفی از
فرایندهای
مختلف
تولید داده
ایجاد
میشود. با
این حال در
صورت نیاز
میتوان
تنها یک روش
را برای
استفاده
تعیین کرد.
روشهای
موجود برای
تولید داده
zlib به شرح زیر
هستند:
روش توضیحات 00ff مقادیر 0x00 و 0xFF با توزیع تصادفی. ascii01 نویسههای ۰ و ۱ اسکی (ASCII) با توزیع تصادفی. asciidigits ارقام اسکی با توزیع تصادفی در بازه ۰ تا ۹. bcd اعداد دهدهی با کدگذاری دودویی بستهبندیشده (packed BCD)، مقادیر ۰..۹۹ بستهبندیشده در ۲ نیمبایت (nybble) چهار بیتی. binary اعداد تصادفی ۳۲ بیتی. brown نویز قهوهای ۸ بیتی (حرکت براونی/نویز گام تصادفی). double اعداد ممیز شناور با دقت مضاعف حاصل از sin(θ). fixed جریان داده تکرار 0x04030201 است. gcr مقادیر تصادفی بهصورت دادههای ۴ × ۴ بیتی که به الگوهای ۴ × ۵ بیتی group coded recording (GCR) تبدیل شدهاند. هر مقدار ۵ بیتی GCR با حداکثر یک بیت صفر آغاز شده یا پایان مییابد، بهگونهای که کدهای GCR متصلبههم بیش از دو بیت صفر متوالی در یک ردیف نداشته باشند. gray کدهای گری (Gray codes) ۱۶ بیتی تولیدشده از یک شمارنده افزایشی. inc16 مقادیر افزایشی ۱۶ بیتی که از یک مقدار تصادفی ۱۶ بیتی شروع میشوند. latin جملات تصادفی لاتین برگرفته از نمونهای از متن Lorem Ipsum. lehmer مقادیر تصادفی سریع تولیدشده با استفاده از مولد لمر (Lehmer) با ضرب ۱۲۸ بیتی. lfsr32 مقادیر تولیدشده از یک ثبات تغییر بازخورد خطی گالوا (Galois LFSR) ۳۲ بیتی با استفاده از چندجملهای x↑32 + x↑31 + x↑29 + x + 1. این روش حلقهای از 2↑32 − 1 مقادیر یکتا تولید میکند (تمام مقادیر ۳۲ بیتی به جز ۰). logmap مقادیر تولیدشده از یک نگاشت لجستیک بر اساس معادله Χn+1 = r × Χn × (1 − Χn) که در آن r > ∼ 3.56994567 است تا دادههای آشوبناک (chaotic) تولید شوند. مقادیر با یک عدد دلخواه بزرگ مقیاسبندی شده و ۸ بیت پایینی این مقدار فشرده میشوند. lrand48 مقادیر ۳۲ بیتی شبهتصادفی با توزیع یکنواخت تولیدشده از lrand48(3). morse کد مورس تولیدشده از جملات لاتین تصادفی برگرفته از یک نمونه متن Lorem Ipsum. nybble بایتهایی با توزیع تصادفی در بازه 0x00 تا 0x0f. objcode کد شیء (object code) انتخابشده از یک نقطه شروع تصادفی در بخش متنی (text segment) برنامه stress-ng. parity دادههای دودویی ۷ بیتی همراه با ۱ بیت توازن (parity bit). pink نویز صورتی در بازه ۰..۲۵۵ تولیدشده با استفاده از روش گاردنر (Gardner) بههمراه بهینهسازی درخت انتخاب مککارتنی (McCartney). نویز صورتی نوعی نویز است که چگالی طیفی توان آن با بسامد سیگنال رابطه عکس دارد و از این رو تا حدی قابل فشردهسازی است. random بخشهایی از جریان داده با فراخوانی تصادفی روشهای مختلف تولید داده ایجاد میشوند. rarely1 دادههایی که در هر ۳۲ بیت، تنها یک بیت ۱ با جایگاه تصادفی دارند. rarely0 دادههایی که در هر ۳۲ بیت، تنها یک بیت ۰ با جایگاه تصادفی دارند. rdrand تولید دادههای تصادفی با استفاده از دستور rdrand (در معماری x86) یا استفاده از مولد اعداد شبهتصادفی ۶۴ بیتی mwc برای سیستمهای غیر x86. ror32 تولید یک مقدار تصادفی ۳۲ بیتی، چرخش آن به راست بین ۰ تا ۷ جایگاه و ذخیره مقدار چرخاندهشده برای هر یک از چرخشها. text متن اسکی (ASCII) تصادفی. utf8 دادههای تصادفی ۸ بیتی کدگذاریشده با فرمت UTF-8. zero تماماً صفر، که بسیار آسان فشرده میشود. --zlib-ops N پس از N عملیات فشردهسازی bogo متوقف میشود؛ هر عملیات فشردهسازی bogo عبارت است از فشردهسازی 64 K داده تصادفی در بالاترین سطح فشردهسازی. --zlib-strategy S استراتژی مورد استفاده هنگام deflate کردن دادهها را مشخص میکند. این گزینه برای تنظیم دقیق الگوریتم فشردهسازی استفاده میشود. مقدار پیشفرض 0 است. cB2 lB lB lB c l s s. مقدار 0 برای دادههای عادی استفاده میشود (Z_DEFAULT_STRATEGY). 1 برای دادههای تولیدشده توسط یک فیلتر یا پیشبین (Z_FILTERED). 2 کدگذاری هافمن را اجباری میکند (Z_HUFFMAN_ONLY). 3 محدود کردن فواصل تطابق به یک کدگذاری طولاجرا (Z_RLE). 4 از کدهای هافمن پویا جلوگیری میکند (Z_FIXED). - --zlib-stream-bytes S
- مقدار
بایتها را
برای deflate کردن
مشخص
میکند تا
زمانی که deflate
باید بلوک
را تمام
کرده و با Z_STREAM_END
بازگردد.
میتوان
اندازه را
در واحدهای
بایت،
کیلوبایت،
مگابایت و
گیگابایت
با استفاده
از
پسوندهای b،
k، m یا g مشخص
کرد.
پیشفرض 0
است که یک
جریان
بیپایان
تا زمان
پایان
تنشزا
ایجاد
میکند.
مقدار 0 یک جریان بیپایان deflate ایجاد میکند تا زمانی که تنشزا متوقف شود. n جریانی از n بایت را مکرراً ایجاد میکند. هر بلوک با Z_STREAM_END بسته خواهد شد. - --zlib-window-bits W
- بیتهای
پنجره مورد
استفاده
برای تعیین
اندازه
بافر
تاریخچه را
مشخص
میکند. این
مقدار به
صورت
لگاریتم در
مبنای دو از
اندازه
بافر مشخص
میشود
(برای مثال،
مقدار 9
برابر است
با 2↑9 = 512 بایت).
مقدار
پیشفرض 15
است.
مقدار -8-(-15) قالب خام deflate. 8-15 قالب zlib. 24-31 قالب gzip. 40-47 تشخیص خودکار قالب inflate با استفاده از قالب zlib deflate.
- تنشزای فرایندهای زامبی (Zombie processes stressor)
- --zombie N
- راهاندازی N کارگر که فرایندهای زامبی ایجاد میکنند. این گزینه بهسرعت تلاش میکند بهطور پیشفرض 8192 فرایند فرزند ایجاد کند که بلافاصله خاتمه یافته و در وضعیت زامبی منتظر میمانند تا برداشت (reap) شوند. هنگامی که به حداکثر تعداد فرایندها برسد (یا fork به دلیل رسیدن به حداکثر تعداد مجاز فرزندان با شکست مواجه شود)، مسنترین فرزند درو (reap) شده و سپس فرایند جدیدی به شیوه خروج به ترتیب ورود (FIFO) ایجاد میشود و این روند تکرار میگردد.
- --zombie-clone
- استفاده از clone(2) بهجای fork(2) برای ایجاد فرایندهای زامبی (فقط در لینوکس). در صورت اجرا با دسترسی CAP_SYS_ADMIN، فرایندها با فضاهای نام (namespaces) جدیدِ cgroup، ipc، net، mount و PID ایجاد میشوند و نشت فضای نام با ایجاد یک mount و سوکت جدید آزموده میشود.
- --zombie-max N
- تلاش برای ایجاد حداکثر N فرایند زامبی. اگر محدودیت سیستم کمتر از N باشد، ممکن است به این تعداد نرسد.
- --zombie-ops N
- توقف کارگران تنش زامبی پس از N عملیات زامبی ساختگی (bogo).
stress-ng --vm 8 --vm-bytes 80% -t 1h
- اجرای ۸ استرسور حافظهٔ مجازی که در مجموع ۸۰٪ از حافظهٔ موجود را به مدت ۱ ساعت استفاده میکنند. به این ترتیب هر استرسور ۱۰٪ از حافظهٔ موجود را مصرف میکند.
stress-ng --vm 50% -t 1h
- اجرای استرسورهای حافظهٔ مجازی روی ۵۰٪ از تعداد CPUهای برخط به مدت ۱ ساعت.
stress-ng --vm 200% -t 1h
- اجرای استرسورهای حافظهٔ مجازی با ۲ برابر تعداد CPUهای برخط به مدت ۱ ساعت.
stress-ng --cpu 4 --io 2 --vm 1 --vm-bytes 1G --timeout 60s
- اجرا به مدت ۶۰ ثانیه با ۴ استرسور cpu، ۲ استرسور io و ۱ استرسور vm که از ۱ گیگابایت حافظهٔ مجازی استفاده میکند.
stress-ng --iomix 2 --iomix-bytes 10% -t 10m
- اجرای ۲ نمونه از استرسورهای ترکیبی I/O با استفاده از مجموعاً ۱۰٪ از فضای موجود فایلسیستم به مدت ۱۰ دقیقه. هر استرسور ۵٪ از فضای موجود فایلسیستم را استفاده خواهد کرد.
stress-ng --with cpu,matrix,vecmath,fp --seq 8 -t 1m
- اجرای متوالی و پشتسرهمِ ۸ نمونه از استرسورهای cpu، matrix، vecmath و fp، به مدت ۱ دقیقه برای هر استرسور.
stress-ng --trig 25% --fp 50% --fma 25% -t 5m --verify
- اجرای استرسور توابع مثلثاتی روی ۲۵٪ از CPUهای برخط، استرسور ممیز شناور (floating point) روی ۵۰٪ از CPUهای برخط و استرسور fused-multiple-add روی ۲۵٪ از CPUهای برخط به مدت ۵ دقیقه و فعالسازی اعتبارسنجی نتایج.
stress-ng --with cpu,matrix,vecmath,fp --permute 5 -t 10s
- اجرای جایگشتهای ۵ نمونه از استرسورهای cpu، matrix، vecmath و fp بهطور متوالی پشت سر هم، به مدت ۱۰ ثانیه برای هر ترکیب جایگشت.
stress-ng --cyclic 1 --cyclic-dist 2500 --cyclic-method clock_ns --cyclic-prio 100 --cyclic-sleep 10000 --hdd 0 -t 1m
- اندازهگیری تاخیرهای زمانبندی بیدرنگ (real time) ایجاد شده توسط استرسور hdd. این دستور از ساعت دقیق نانوثانیهای برای اندازهگیری تاخیرها در طول خوابهای ۱۰۰۰۰ نانوثانیهای استفاده میکند. در پایان ۱ دقیقه اعمال فشار، توزیع تاخیر با بازههای ۲۵۰۰ نانوثانیه نمایش داده خواهد شد. نکته: این دستور باید با قابلیت CAP_SYS_NICE اجرا شود تا زمانبندی بیدرنگ جهت دریافت اندازهگیریهای دقیق فعال گردد.
stress-ng --cpu 8 --cpu-ops 800000
- اجرای ۸ استرسور cpu و توقف پس از ۸۰۰۰۰۰ عملیات bogo.
stress-ng --sequential 2 --timeout 2m --metrics
- اجرای ۲ نمونهٔ همزمان از تمام استرسورها به صورت متوالی و یکی پس از دیگری، هر کدام به مدت ۲ دقیقه، و ارائهٔ خلاصهای به همراه معیارهای عملکردی در پایان.
stress-ng --cpu 4 --cpu-method fft --cpu-ops 10000 --metrics-brief
- اجرای ۴ استرسور cpu با روش FFT، توقف پس از ۱۰۰۰۰ عملیات bogo و تولید خلاصه فقط برای نتایج FFT.
stress-ng --cpu -1 --cpu-method all -t 1h --cpu-load 90
- اجرای استرسورهای cpu روی تمام CPUهای برخط و پیمایش تمام استرسورهای موجود CPU به مدت ۱ ساعت، با بارگذاری CPUها در ظرفیت بار ۹۰٪.
stress-ng --cpu 0 --cpu-method all -t 20m
- اجرای استرسورهای cpu روی تمام CPUهای پیکربندیشده و پیمایش تمام استرسورهای موجود CPU به مدت ۲۰ دقیقه.
stress-ng --all 4 --timeout 5m
- اجرای ۴ نمونه از تمام استرسورها به مدت ۵ دقیقه.
stress-ng --random 64
- اجرای ۶۴ استرسور که بهصورت تصادفی از میان تمام استرسورهای موجود انتخاب شدهاند.
stress-ng --cpu 64 --cpu-method all --verify -t 10m --metrics-brief
- اجرای ۶۴ نمونه از تمام استرسورهای مختلف cpu و اعتبارسنجی صحت محاسبات به مدت ۱۰ دقیقه همراه با خلاصهای از عملیات bogo در پایان.
stress-ng --sequential -1 -t 10m
- اجرای تمام استرسورها یکی پس از دیگری به مدت ۱۰ دقیقه، به طوری که تعداد نمونههای هر استرسور با تعداد CPUهای برخط مطابقت داشته باشد.
stress-ng --sequential 8 --class io -t 5m --times
- اجرای تمام استرسورهای ردهٔ io یکی پس از دیگری هر کدام به مدت ۵ دقیقه، با اجرای همزمان ۸ نمونه از هر استرسور، و نمایش آمار کلی استفاده از زمان در پایان اجرا.
stress-ng --class io\?
- نمایش تمام استرسورهای موجود در ردهٔ io.
sudo stress-ng --class scheduler --seq 0 -t 1m --taskset-random --progress --klog-check
- اجرای متوالی تمام استرسورهای آزمون زمانبند (scheduler) روی تمام CPUهای برخط به مدت ۱ دقیقه برای هر نوع استرسور، با تغییر مداوم CPUهایی که فرآیندها روی آنها اجرا میشوند، نمایش پیشرفت و گزارش هرگونه مشکل شناساییشده در کرنل.
stress-ng --all -1 --maximize --aggressive
- اجرای همزمان تمام استرسورها (۱ نمونه از هر کدام به ازای هر CPU برخط)، بیشینهسازی تنظیمات (اندازهٔ حافظه، تخصیصهای فایل و غیره) و انتخاب تهاجمیترین/سنگینترین گزینهها.
stress-ng --all 8 --with cpu,hash,nop,vm --timeout 1m
- اجرای همزمان ۸ نمونه از استرسورهای cpu، hash، nop و vm در مجموع به مدت ۱ دقیقه.
stress-ng --seq 8 --with cpu,hash,nop,vm --timeout 1m --progress
- اجرای ۸ نمونه از استرسورهای cpu، hash، nop و vm یکی پس از دیگری، هر کدام به مدت ۱ دقیقه، و نمایش پیشرفت اجرا.
stress-ng --random 32 -x numa,hdd,key
- اجرای ۳۲ استرسور انتخابشده بهصورت تصادفی و مستثنی کردن استرسورهای numa، hdd و key.
stress-ng --sequential 4 --class vm --exclude bigheap,brk,stack
- اجرای ۴ نمونه از استرسورهای VM یکی پس از دیگری، به استثنای استرسورهای bigheap، brk و stack.
stress-ng --taskset 0,2-3 --cpu 3
- اجرای ۳ نمونه از استرسور CPU و مقید کردن (pin) آنها به CPUهای ۰، ۲ و ۳.
stress-ng --taskset odd --cpu 32
- اجرای ۳۲ نمونه از استرسور CPU و مقید کردن (pin) آنها به CPUهای با شمارهٔ فرد.
stress-ng --exercise-feature memory-copy,memory-cmp --seq 1 -t 10
- اجرای ۱ نمونه از تمام استرسورهایی (هر کدام به مدت ۱۰ ثانیه) که مشخصاً کپیهای حافظه و مقایسههای حافظه را میآزمایند.
stress-ng --exercise-syscall select,poll --all 4 -t 60
- اجرای ۴ نمونه از تمام استرسورهایی که فراخوانهای سیستمی select و poll را به کار میگیرند.
stress-ng --exercise-syscall \?
- گزارش
فراخوانهای
سیستمی
استفادهشده
توسط تمام
استرسورها..SH
"وضعیت
خروج (EXIT STATUS)"
وضعیت توضیحات 0 موفقیتآمیز. 1 خطا؛ گزینههای نادرست کاربر یا یک مشکل بحرانی در منابع در چارچوب بارگذار (stressor harness) برنامهٔ stress-ng (برای مثال، کمبود حافظه). 2 یک یا چند بارگذار (stressor) با شکست مواجه شدند. 3 یک یا چند بارگذار به دلیل کمبود منابع موفق به راهاندازی اولیه نشدند، برای مثال ENOMEM (نبود حافظه)، ENOSPC (نبود فضا در سیستم فایل) یا یک فراخوان سیستمی ناموجود یا پیادهسازینشده. 4 یک یا چند بارگذار روی یک معماری یا سیستمعامل خاص پیادهسازی نشده بودند. 5 یک بارگذار توسط یک سیگنال غیرمنتظره خاتمه یافته است (کشته شده است). 6 یک بارگذار با exit(2) خارج شد که غیرمنتظره بود و امکان جمعآوری معیارهای زمانبندی وجود نداشت. 7 معیارهای bogo ops ممکن است غیرقابل اعتماد باشند. این حالت بیشتر زمانی رخ میدهد که یک آزمون بار در حین بهروزرسانی شمارندهٔ bogo-ops خاتمه یابد؛ مانند زمانی که توسط OOM کشته شده باشد. دلیلی با احتمال کمتر این است که نشانگر آماده بودن شمارنده مخدوش شده باشد.
گزارش باگها (BUGS)
گزارشهای باگ را در این نشانی ثبت کنید: https://github.com/ColinIanKing/stress-ng/issues - لطفاً توجه داشته باشید که اگر stress-ng بدون این راهنما بستهبندی شده باشد، هیچ پشتیبانیای ارائه نخواهد شد.
همچنین ببینید (SEE ALSO)
cpuburn(1), perf(1), stress(1),
taskset(1)
https://github.com/ColinIanKing/stress-ng/blob/master/README.md
نویسندگان (AUTHORS)
برنامهٔ stress-ng توسط Colin Ian King <colin.i.king@gmail.com> نوشته شده است و یک بازپیادهسازی اتاق پاک (clean room) و توسعهیافته از ابزار اصلی stress اثر Amos Waterland است. همچنین با تشکر از مشارکتکنندگان پرشمار stress-ng. فایل README.md در کد منبع حاوی فهرست کاملی از مشارکتکنندگان است.
حامی مالی (SPONSOR)
برنامهٔ stress-ng آزاد است و همیشه آزاد خواهد ماند. حمایت مالی از این پروژه روشی عالی برای کمک به پرداخت هزینههای جاری (سختافزار، برق و غیره) در جهت پشتیبانی از روند توسعه است.
پیوند حمایت مالی: https://github.com/sponsors/ColinIanKing
نکات (NOTES)
ارسال یک سیگنال SIGALRM، SIGINT یا SIGHUP به stress-ng باعث میشود که این برنامه تمام فرایندهای بارگذار (stressor) را خاتمه دهد و اطمینان حاصل کند که فایلهای موقت و بخشهای حافظهٔ مشترک بهطور کامل و تمیز پاکسازی میشوند.
ارسال سیگنال SIGUSR2 به stress-ng میانگین بار فعلی (load average) و آمار حافظه را در خروجی تخلیه و نمایش میدهد.
توجه داشته باشید که آزمونهای cpu، io، vm و hdd در stress-ng پیادهسازیهای متفاوتی از آزمونهای ابزار اصلی stress هستند و بنابراین ممکن است مشخصات بار متفاوتی ایجاد کنند.
معیارهای عملیات bogo ممکن است در هر نسخه به دلیل رفع باگهای کد، قابلیتهای جدید، بهینهسازیهای کامپایلر، تغییرات در کتابخانههای پشتیبان یا کارایی فراخوانهای سیستمی تغییر کنند.
کپیرایت و تکثیر (COPYRIGHT)
کپیرایت
© 2013-2021 متعلق به
Canonical Ltd،
کپیرایت ©
2021-2026 متعلق به Colin
Ian King.
این یک
نرمافزار
آزاد است؛
برای شرایط
نسخهبرداری
کد منبع را
ببینید. هیچ
ضمانتی
وجود
ندارد؛ حتی
برای
قابلیت
فروش یا
تناسب با یک
هدف خاص.
| 14 August 2026 |