.TH fio 1 "May 2025" "User Manual" .SH "نام (NAME)" fio \- ابزار انعطاف‌پذیر سنجش و آزمون ورودی/خروجی (I/O) .SH "خلاصه دستور (SYNOPSIS)" .B fio [\fIoptions\fR] [\fIjobfile\fR]... .SH "توضیحات (DESCRIPTION)" .B fio ابزاری است که تعدادی ریسه (thread) یا فرایند را برای اجرای نوع خاصی از عملیات I/O طبق مشخصات ارائه‌شده از سوی کاربر ایجاد می‌کند. استفادهٔ معمول از fio، نوشتن یک فایل وظیفه (jobfile) متناسب با بار کاری ورودی/خروجی مورد نظر برای شبیه‌سازی است. .SH "گزینه‌ها (OPTIONS)" .TP .BI \-\-debug \fR=\fPtype ردیابی تفصیلی \fItype\fR را برای اقدامات گوناگون fio فعال می‌کند. می‌تواند مقدار \(lqall\(rq برای همهٔ \fItype\fRها یا نوع‌های مجزا که با ویرگول از هم جدا شده‌اند باشد (برای نمونه \(lq\-\-debug=file,mem\(rq اشکال‌زدایی مربوط به فایل و حافظه را فعال می‌کند). مقدار \(lqhelp\(rq همهٔ گزینه‌های ردیابی موجود را فهرست می‌کند. .TP .BI \-\-parse\-only تنها گزینه‌ها را تجزیه می‌کند و هیچ عملیات I/O را آغاز نمی‌کند. .TP .BI \-\-merge\-blktrace\-only تنها blktraceها را ادغام می‌کند و هیچ عملیات I/O را آغاز نمی‌کند. .TP .BI \-\-output \fR=\fPfilename خروجی را در \fIfilename\fR می‌نویسد. .TP .BI \-\-output\-format \fR=\fPformat قالب گزارش‌دهی (\fIformat\fR) را روی \(lqnormal\(rq، \(lqterse\(rq، \(lqjson\(rq یا \(lqjson+\(rq تنظیم می‌کند. چندین قالب را می‌توان با جدا کردن توسط ویرگول انتخاب کرد. قالب \(lqterse\(rq قالبی مبتنی بر CSV است. \(lqjson+\(rq شبیه \(lqjson\(rq است، با این تفاوت که تخلیهٔ کامل (dump) دسته‌های تاخیر (latency buckets) را اضافه می‌کند. .TP .BI \-\-bandwidth\-log گزارش‌های پهنای باند تجمیعی را تولید می‌کند. آرگومان `filename` اختیاری است. اگر مشخص نشود، Fio به‌طور پیش‌فرض فایل‌هایی با نام \(lqagg\-{read,write,trim}_bw.log\(rq ایجاد خواهد کرد. اگر آرگومان filename داده شود، Fio فایل‌هایی با نام \(lq{filename}\-{read,write,trim}_bw.log\(rq ایجاد خواهد کرد. .TP .BI \-\-minimal آمار را در قالبی مختصر و جداشده با نقطه‌ویرگول چاپ می‌کند. .TP .BI \-\-append\-terse آمار را در حالت انتخاب‌شده و همچنین در قالب مختصر و جداشده با نقطه‌ویرگول چاپ می‌کند. \fBمنسوخ شده\fR، به جای آن از \fB\-\-output\-format\fR برای انتخاب چند قالب استفاده کنید. .TP .BI \-\-terse\-version \fR=\fPversion نسخهٔ قالب خروجی مختصر (\fIversion\fR) را تنظیم می‌کند (پیش‌فرض \(lq3\(rq، یا \(lq2\(rq، \(lq4\(rq، \(lq5\(rq). .TP .BI \-\-version اطلاعات نسخه را چاپ کرده و خارج می‌شود. .TP .BI \-\-help خلاصه‌ای از گزینه‌های خط فرمان را چاپ کرده و خارج می‌شود. .TP .BI \-\-cpuclock\-test آزمایش و اعتبارسنجی ساعت داخلی CPU را انجام می‌دهد. .TP .BI \-\-crctest \fR=\fP[test] سرعت توابع درونی محاسبهٔ چکسام (checksum) را آزمایش می‌کند. اگر هیچ آرگومانی داده نشود، همهٔ آن‌ها آزمایش می‌شوند. در غیر این صورت، می‌توان فهرستی جداشده با ویرگول را ارسال کرد که در این حالت تنها موارد ارائه‌شده آزمایش می‌شوند. .TP .BI \-\-cmdhelp \fR=\fPcommand اطلاعات راهنما را برای \fIcommand\fR چاپ می‌کند. می‌تواند \(lqall\(rq برای همهٔ دستورها باشد. .TP .BI \-\-enghelp \fR=\fP[ioengine[,command]] همهٔ دستورهای تعریف‌شده توسط \fIioengine\fR را فهرست می‌کند، یا راهنمای \fIcommand\fR تعریف‌شده توسط \fIioengine\fR را چاپ می‌کند. اگر هیچ \fIioengine\fR مشخص نشود، تمام موتورهای I/O موجود را فهرست می‌کند. .TP .BI \-\-showcmd فایل‌های \fIjobfile\fR داده‌شده را به مجموعه‌ای از گزینه‌های خط فرمان تبدیل می‌کند. .TP .BI \-\-readonly بررسی‌های ایمنی فقط‌خواندنی را فعال می‌کند و مانع از عملیات نوشتن و trim می‌شود. گزینهٔ \fB\-\-readonly\fR یک محافظ ایمنی اضافی است تا از شروع تصادفی یک بار کاری نوشتن یا trim در زمانی که مطلوب نیست جلوگیری کند. Fio تنها در صورتی دستگاه تحت آزمایش را تغییر می‌دهد که \(lqrw=write/randwrite/rw/randrw/trim/randtrim/trimwrite\(rq مشخص شده باشد. از این شبکهٔ ایمنی می‌توان به عنوان یک اقدام احتیاطی مضاعف استفاده کرد. .TP .BI \-\-eta \fR=\fPwhen مشخص می‌کند چه زمانی تخمین بلادرنگ زمان تقریبی اتمام (ETA) باید چاپ شود. \fIwhen\fR می‌تواند یکی از مقادیر \(lqalways\(rq، \(lqnever\(rq یا \(lqauto\(rq باشد. حالت \(lqauto\(rq پیش‌فرض است و اگر خروجی یک TTY باشد، هنگام درخواست، ETA را چاپ می‌کند. حالت \(lqalways\(rq بدون توجه به نوع خروجی، هنگام درخواست ETA را چاپ می‌کند. حالت \(lqnever\(rq هرگز ETA را چاپ نمی‌کند. .TP .BI \-\-eta\-interval \fR=\fPtime به‌طور پیش‌فرض، fio وضعیت ETA کارخواه را تقریباً در هر ثانیه درخواست می‌کند. با این گزینه، این فاصلهٔ زمانی قابل تنظیم است. Fio برای جلوگیری از پر شدن بیش از حد کنسول، حداقل زمان مجازی را اعمال می‌کند؛ کمتر از ۲۵۰ میلی‌ثانیه پشتیبانی نمی‌شود. .TP .BI \-\-eta\-newline \fR=\fPtime پس از سپری شدن هر دورهٔ زمانی \fItime\fR، رفتن به سطر جدید را اجباری می‌کند. هنگامی که واحد زمان ذکر نشود، مقدار بر حسب ثانیه تفسیر می‌شود. .TP .BI \-\-status\-interval \fR=\fPtime تخلیهٔ کامل وضعیت مقادیر تجمعی (از آغاز وظیفه) را در فواصل زمانی \fItime\fR اجباری می‌کند. این گزینه اندازه‌گیری‌های مبتنی بر هر دوره را ارائه *نمی‌دهد*. بنابراین مقادیری چون پهنای باند، میانگین‌های متحرک هستند. هنگامی که واحد زمان ذکر نشود، \fItime\fR بر حسب ثانیه تفسیر می‌شود. توجه داشته باشید که استفاده از این گزینه به همراه `\-\-output-format=json` خروجی‌ای تولید می‌کند که از نظر فنی JSON معتبری نیست، زیرا خروجی مجموعه‌هایی تطبیق‌یافته از JSON معتبر خواهد بود. لازم است پس از اجرا، به مجموعه‌های معتبری از JSON تفکیک شود. .TP .BI \-\-section \fR=\fPname تنها بخش \fIname\fR مشخص‌شده را در فایل وظیفه اجرا می‌کند. چند بخش را می‌توان تعیین کرد. گزینهٔ \fB\-\-section\fR امکان ترکیب وظایف مرتبط را در یک فایل فراهم می‌کند. برای نمونه، یک jobfile می‌تواند بخش‌های سبک (light)، متوسط (moderate) و سنگین (heavy) را تعریف کند. با دادن گزینهٔ خط فرمان `\-\-section=heavy` به fio می‌گویید که تنها بخش "heavy" را اجرا کند. همچنین می‌توان عملیات "write" را در یک بخش و عملیات "verify" را در بخشی دیگر مشخص کرد. گزینهٔ \fB\-\-section\fR تنها برای بخش‌های وظیفه اعمال می‌شود. بخش رزروشدهٔ *global* همیشه تجزیه و استفاده می‌شود. .TP .BI \-\-alloc\-size \fR=\fPkb استخرهای حافظهٔ داخلی اضافی smalloc را با اندازهٔ \fIkb\fR بر حسب KiB تخصیص می‌دهد. گزینهٔ \fB\-\-alloc\-size\fR حافظهٔ اشتراکی کنار گذاشته‌شده برای استفاده توسط fio را افزایش می‌دهد. اگر وظایف بزرگی با فعال بودن randommap اجرا شوند، ممکن است حافظهٔ fio تمام شود. Smalloc یک تخصیص‌دهندهٔ داخلی برای ساختارهای اشتراکی از یک استخر حافظه با اندازهٔ ثابت است و می‌تواند تا ۱۶ استخر رشد کند. اندازهٔ پیش‌فرض استخر 16MiB است. نکته: در حین اجرا، فایل‌های پشتیبان `.fio_smalloc.*` در `/tmp` قابل مشاهده هستند. .TP .BI \-\-warnings\-fatal تمام هشدارهای تجزیه‌کنندهٔ fio مهلک در نظر گرفته می‌شوند و باعث می‌شوند fio با خطا خارج شود. .TP .BI \-\-max\-jobs \fR=\fPnr حداکثر تعداد ریسه‌ها/فرایندهای قابل پشتیبانی را روی \fInr\fR تنظیم می‌کند. نکته: در لینوکس، اگر fio در حین ایجاد وظایف با خطا مواجه شود، ممکن است نیاز به افزایش حد حافظهٔ اشتراکی (`/proc/sys/kernel/shmmax`) باشد. .TP .BI \-\-server \fR=\fPargs یک کارساز (server) پس‌زمینه را راه‌اندازی می‌کند که در آن \fIargs\fR مشخص می‌کند روی چه چیزی شنود شود. بخش \fBCLIENT/SERVER\fR را ببینید. .TP .BI \-\-daemonize \fR=\fPpidfile کارساز fio را در پس‌زمینه اجرا کرده و pid را در فایل \fIpidfile\fR مشخص‌شده می‌نویسد. .TP .BI \-\-client \fR=\fPhostname به جای اجرای محلی وظایف، آن‌ها را به \fIhostname\fR یا مجموعه‌ای از \fIhostname\fRهای مشخص‌شده فرستاده و اجرا می‌کند. بخش \fBCLIENT/SERVER\fR را ببینید. .TP .BI \-\-remote\-config \fR=\fPfile به کارساز fio اعلام می‌کند که این \fIfile\fR محلی را بارگذاری کند. .TP .BI \-\-idle\-prof \fR=\fPoption بیکاری CPU را گزارش می‌دهد. \fIoption\fR یکی از موارد زیر است: .RS .RS .TP .B calibrate تنها کالیبراسیون واحد کار را اجرا کرده و خارج می‌شود. .TP .B system بیکاری تجمیعی سامانه و واحد کار را نشان می‌دهد. .TP .B percpu مانند \fBsystem\fR است، اما میزان بیکاری را به تفکیک هر CPU نیز نمایش می‌دهد. .RE .RE .TP .BI \-\-inflate\-log \fR=\fPlog فایل گزارش فشرده‌شدهٔ \fIlog\fR را از حالت فشرده خارج کرده و خروجی می‌دهد. .TP .BI \-\-trigger\-file \fR=\fPfile هنگام وجود داشتن \fIfile\fR، دستور راه‌انداز (trigger) را اجرا می‌کند. .TP .BI \-\-trigger\-timeout \fR=\fPtime راه‌انداز را در این زمان (\fItime\fR) اجرا می‌کند. .TP .BI \-\-trigger \fR=\fPcommand این \fIcommand\fR را به عنوان راه‌انداز محلی تنظیم می‌کند. .TP .BI \-\-trigger\-remote \fR=\fPcommand این \fIcommand\fR را به عنوان راه‌انداز دوردست تنظیم می‌کند. .TP .BI \-\-aux\-path \fR=\fPpath به جای دایرکتوری کاری جاری، از دایرکتوری مشخص‌شده توسط \fIpath\fP برای فایل‌های وضعیت تولیدشده استفاده می‌کند..SH "قالب فایل کار (JOB FILE FORMAT)" هر پارامتری پس از گزینه‌ها به عنوان فایل کار در نظر گرفته خواهد شد، مگر اینکه با یک پارامتر فایل کار مطابقت داشته باشد. می‌توان چندین فایل کار را مشخص کرد و هر فایل کار به عنوان یک گروه مجزا در نظر گرفته خواهد شد. Fio اجرای بین هر گروه را \fBstonewall\fR (سدبندی) خواهد کرد. Fio یک یا چند فایل کار را می‌پذیرد که وظایف آن را توصیف می‌کنند. قالب فایل کار، یک فایل ini کلاسیک است که در آن نام‌های محصور در براکت‌های []، نام کار را تعریف می‌کنند. شما در استفاده از هر نام ASCII دلخواه آزاد هستید، به جز *global* که معنای ویژه‌ای دارد. پس از نام کار، دنباله‌ای از صفر یا چند پارامتر، هر کدام در یک خط، می‌آیند که رفتار کار را مشخص می‌کنند. اگر اولین نویسه در یک خط ';' یا '#' باشد، کل خط به عنوان توضیح نادیده گرفته می‌شود. یک بخش *global* پیش‌فرض‌هایی را برای کارهای توصیف‌شده در آن فایل تنظیم می‌کند. یک کار می‌تواند پارامتر یک بخش *global* را بازنویسی کند، و یک فایل کار در صورت نیاز حتی می‌تواند چندین بخش *global* داشته باشد. هر کار تنها تحت تأثیر بخش *global* قرار می‌گیرد که بالاتر از آن قرار دارد. گزینهٔ \fB\-\-cmdhelp\fR نیز تمام گزینه‌ها را فهرست می‌کند. در صورت استفاده با یک آرگومان \fIcommand\fR، گزینهٔ \fB\-\-cmdhelp\fR جزئیات \fIcommand\fR داده‌شده را شرح می‌دهد. برای الگوبرداری در مورد نحوهٔ نوشتن فایل‌های کار، به دایرکتوری `examples/' مراجعه کنید. توجه داشته باشید که الزامات کپی‌رایت و مجوز در حال حاضر برای فایل‌های `examples/' اعمال می‌شوند. توجه داشته باشید که حداکثر طول یک خط در فایل کار ۸۱۹۲ بایت است. .SH "پارامترهای فایل کار (JOB FILE PARAMETERS)" برخی پارامترها گزینه‌ای از نوعی مشخص، مانند یک عدد صحیح یا یک رشته را می‌پذیرند. در هر جایی که مقدار عددی لازم باشد، می‌توان از یک عبارت حسابی استفاده کرد، به شرطی که در پرانتز قرار گیرد. عملگرهای پشتیبانی‌شده عبارتند از: .RS .P .B جمع (+) .P .B تفریق (\-) .P .B ضرب (*) .P .B تقسیم (/) .P .B باقی‌مانده (%) .P .B توان (^) .RE .P برای مقادیر زمانی در عبارت‌ها، واحدها به طور پیش‌فرض میکروثانیه هستند. این با مقادیر زمانی خارج از عبارت‌ها (محصور نشده در پرانتز) متفاوت است. .SH "انواع پارامترها (PARAMETER TYPES)" انواع پارامترهای زیر استفاده می‌شوند: .TP .I str رشته. دنباله‌ای از نویسه‌های حرفی\-عددی. .TP .I time عدد صحیح با پسوند زمانی ممکن. در صورت نبود واحد، مقدار به عنوان ثانیه تفسیر می‌شود مگر اینکه خلاف آن مشخص شده باشد. پسوندهای 'd' برای روز، 'h' برای ساعت، 'm' برای دقیقه، 's' برای ثانیه، 'ms' (یا 'msec') برای میلی‌ثانیه، و 'us' (یا 'usec') برای میکروثانیه را می‌پذیرد. برای مثال، از 10m برای ۱۰ دقیقه استفاده کنید. .TP .I int عدد صحیح. یک مقدار عدد کامل که می‌تواند شامل یک پیشوند عدد صحیح و یک پسوند عدد صحیح باشد. .RS .RS .P [*integer prefix*] **number** [*integer suffix*] .RE .P پیشوند اختیاری *integer prefix* مبنای عدد را مشخص می‌کند. پیش‌فرض دهدهی (decimal) است. *0x* مبنای شانزده‌شانزدهی (hexadecimal) را مشخص می‌کند. .P پسوند اختیاری *integer suffix* واحدهای عدد را مشخص می‌کند و شامل یک پیشوند واحد اختیاری و یک واحد اختیاری است. برای مقادیر داده، واحد پیش‌فرض بایت است. برای مقادیر زمان، واحد پیش‌فرض ثانیه است مگر اینکه خلاف آن مشخص شده باشد. .P با `kb_base=1000'، fio از استانداردهای بین‌المللی برای پیشوندهای واحد پیروی می‌کند. برای تعیین مقادیر ده‌دهی توان ۱۰ تعریف‌شده در سامانهٔ بین‌المللی یکactorها (SI): .RS .P .PD 0 K به معنای کیلو (K) یا 1000 .P M به معنای مگا (M) یا 1000**2 .P G به معنای گیگا (G) یا 1000**3 .P T به معنای ترا (T) یا 1000**4 .P P به معنای پتا (P) یا 1000**5 .PD .RE .P برای تعیین مقادیر دودویی توان ۲ تعریف‌شده در IEC 80000-13: .RS .P .PD 0 Ki به معنای کیبی (Ki) یا 1024 .P Mi به معنای مبی (Mi) یا 1024**2 .P Gi به معنای گیبی (Gi) یا 1024**3 .P Ti به معنای تبی (Ti) یا 1024**4 .P Pi به معنای پبی (Pi) یا 1024**5 .PD .RE .P برای حالت دستگاه بلوکی ناحیه‌ای (Zone Block Device Mode): .RS .P .PD 0 z به معنای Zone (ناحیه) .P .PD .RE .P با `kb_base=1024' (پیش‌فرض)، پیشوندهای واحد برعکس پیشوندهای تعیین‌شده در استانداردهای SI و IEC 80000-13 هستند تا سازگاری با اسکریپت‌های قدیمی فراهم شود. برای مثال، 4k به معنای 4096 است. .P برای مقادیر داده، می‌توان یک واحد اختیاری 'B' را نیز گنجاند (مثلاً 'kB' همانند 'k' است). .P پسوند *integer suffix* به بزرگی و کوچکی حروف حساس نیست (مثلاً m/mi به معنای mebi/mega است، نه milli). هم 'b' و هم 'B' به معنای بایت هستند، نه بیت. .P مثال‌ها با `kb_base=1000': .RS .P .PD 0 4 KiB: 4096, 4096b, 4096B, 4k, 4kb, 4kB, 4K, 4KB .P 1 MiB: 1048576, 1m, 1024k .P 1 MB: 1000000, 1mi, 1000ki .P 1 TiB: 1073741824, 1t, 1024m, 1048576k .P 1 TB: 1000000000, 1ti, 1000mi, 1000000ki .PD .RE .P مثال‌ها با `kb_base=1024' (پیش‌فرض): .RS .P .PD 0 4 KiB: 4096, 4096b, 4096B, 4k, 4kb, 4kB, 4K, 4KB .P 1 MiB: 1048576, 1m, 1024k .P 1 MB: 1000000, 1mi, 1000ki .P 1 TiB: 1073741824, 1t, 1024m, 1048576k .P 1 TB: 1000000000, 1ti, 1000mi, 1000000ki .PD .RE .P برای تعیین زمان‌ها (واحدها به بزرگی و کوچکی حروف حساس نیستند): .RS .P .PD 0 D به معنای روز (days) .P H به معنای ساعت (hours) .P M به معنای دقیقه (minutes) .P s یا sec به معنای ثانیه (پیش‌فرض) .P ms یا msec به معنای میلی‌ثانیه .P us یا usec به معنای میکروثانیه .PD .RE .P پسوند `z' مشخص می‌کند که مقدار بر حسب ناحیه‌ها (zones) اندازه‌گیری می‌شود. به محض مشخص شدن اندازهٔ ناحیهٔ دستگاه بلوکی، مقدار مجدداً محاسبه می‌شود. .P اگر گزینه یک محدودهٔ بالا و پایین را بپذیرد، از دونقطه ':' یا خط پیوند '\-' برای جداسازی این مقادیر استفاده کنید. نوع پارامتر \fIirange\fR را ببینید. اگر مقدار پایینی تعیین‌شده تصادفاً بزرگتر از مقدار بالایی باشد، این دو مقدار جابه‌جا می‌شوند. .RE .TP .I bool بولی (Boolean). معمولاً به عنوان یک عدد صحیح پردازش می‌شود، اما تنها برای درست و نادرست (1 و 0) تعریف شده است. .TP .I irange محدودهٔ عدد صحیح با پسوند. امکان تعیین یک محدوده از مقادیر را فراهم می‌کند، مانند 1024\-4096. همچنین می‌توان از دونقطه به عنوان جداکننده استفاده کرد، مانند 1k:4k. اگر گزینه دو مجموعه محدوده را بپذیرد، می‌توان آن‌ها را با جداکنندهٔ ',' یا '/' مشخص کرد: 1k\-4k/8k\-32k. همچنین نوع پارامتر \fIint\fR را ببینید. .TP .I float_list فهرستی از اعداد ممیز شناور، که با نویسهٔ ':' از هم جدا شده‌اند..SH "پارامترهای کار (JOB PARAMETERS)" با در نظر گرفتن موارد بالا، در ادامه فهرست کامل پارامترهای کار fio آورده شده است. .SS "واحدها (Units)" .TP .BI kb_base \fR=\fPint انتخاب نحوه تفسیر پیشوندهای واحد در پارامترهای ورودی. .RS .RS .TP .B 1000 ورودی‌ها با IEC 80000-13 و سامانه استاندارد بین‌المللی یکاها (SI) مطابقت دارند. استفاده کنید از: .RS .P .PD 0 \- مقادیر توان ۲ با پیشوندهای IEC (مانند KiB) .P \- مقادیر توان ۱۰ با پیشوندهای SI (مانند kB) .PD .RE .TP .B 1024 حالت سازگاری (پیش‌فرض). برای جلوگیری از کارافتادن اسکریپت‌های قدیمی: .P .RS .PD 0 \- مقادیر توان ۲ با پیشوندهای SI .P \- مقادیر توان ۱۰ با پیشوندهای IEC .PD .RE .RE .P برای جزئیات بیشتر درباره پارامترهای ورودی، \fBbs\fR را ببینید. .P خروجی‌ها همواره از پیشوندهای صحیح استفاده می‌کنند. اکثر خروجی‌ها شامل هر دو در کنار یکدیگر هستند، مانند: .P .RS bw=2383.3kB/s (2327.4KiB/s) .RE .P اگر تنها یک مقدار گزارش شود، آنگاه kb_base انتخاب می‌کند کدام‌یک استفاده شود: .P .RS .PD 0 1000 \-\- پیشوندهای SI .P 1024 \-\- پیشوندهای IEC .PD .RE .RE .TP .BI unit_base \fR=\fPint واحد پایه برای گزارش‌دهی. مقادیر مجاز عبارتند از: .RS .RS .TP .B 0 استفاده از تشخیص خودکار (پیش‌فرض). .TP .B 8 بر پایه بایت. .TP .B 1 بر پایه بیت. .RE .RE .SS "شرح کار (Job description)" .TP .BI name \fR=\fPstr نام ASCII کار. این پارامتر می‌تواند برای جایگزین کردن نام چاپ‌شده توسط fio برای این کار استفاده شود. در غیر این صورت از نام کار استفاده خواهد شد. در خط فرمان، این پارامتر کاربرد ویژه‌ای نیز دارد که نشان‌دهنده آغاز یک کار جدید است. .TP .BI description \fR=\fPstr شرح متنی کار. کاری انجام نمی‌دهد جز اینکه هنگام اجرای این کار، این شرح متنی را نمایش می‌دهد. این متن تجزیه نمی‌شود. .TP .BI loops \fR=\fPint اجرای تعداد دفعات تکرار مشخص‌شده از این کار. برای تکرار همان بار کاری به تعداد دفعات معین استفاده می‌شود. پیش‌فرض 1 است. .TP .BI numjobs \fR=\fPint ایجاد تعداد همسان‌های (clone) مشخص‌شده از این کار. هر همسان از کار به صورت یک ریسه یا فرایند مستقل ایجاد می‌شود. می‌تواند برای راه‌اندازی تعداد بیشتری از ریسه‌ها/فرایندهایی که کار یکسانی را انجام می‌دهند استفاده شود. هر ریسه به‌طور جداگانه گزارش می‌شود؛ برای دیدن آمار تمام همسان‌ها به صورت یکجا، از \fBgroup_reporting\fR همراه با \fBnew_group\fR استفاده کنید. \fB\-\-max\-jobs\fR را ببینید. پیش‌فرض: 1. .SS "پارامترهای مرتبط با زمان (Time related parameters)" .TP .BI runtime \fR=\fPtime محدود کردن زمان اجرا. آزمایش تا زمانی اجرا می‌شود که بار کاری I/O پیکربندی‌شده کامل شود یا به این مدت زمان مشخص‌شده اجرا شده باشد؛ هر کدام که زودتر رخ دهد. تعیین مدت زمان اجرای یک کار مشخص می‌تواند بسیار دشوار باشد، بنابراین این پارامتر برای محدود کردن کل زمان اجرا به یک زمان معین کارآمد است. در صورت حذف واحد، مقدار بر حسب ثانیه تفسیر می‌شود. .TP .BI time_based در صورت تنظیم، fio برای کل مدت زمان مشخص‌شده در \fBruntime\fR اجرا خواهد شد، حتی اگر فایل(ها) به طور کامل خوانده یا نوشته شده باشند. این گزینه تا جایی که \fBruntime\fR اجازه دهد، همان بار کاری را تکرار می‌کند. .TP .BI startdelay \fR=\fPirange(int) به تأخیر انداختن شروع کار به مدت زمان مشخص‌شده. می‌تواند یک مقدار منفرد یا یک محدوده باشد. در صورت مشخص شدن به عنوان یک محدوده، هر ریسه مقداری را به صورت تصادفی از درون محدوده انتخاب می‌کند. اگر واحد حذف شود، مقدار بر حسب ثانیه است. .TP .BI ramp_time \fR=\fPtime در صورت تنظیم، fio قبل از ثبت هرگونه آمار کارایی، بار کاری مشخص‌شده را برای این مدت زمان اجرا می‌کند. برای تثبیت کارایی پیش از ثبت نتایج مفید است و در نتیجه زمان اجرای لازم برای دستیابی به نتایج پایدار را به حداقل می‌رساند. توجه داشته باشید که \fBramp_time\fR به عنوان زمان گرم‌کردن اولیه کار در نظر گرفته می‌شود، بنابراین در صورتی که یک مهلت زمانی خاص یا \fBruntime\fR مشخص شده باشد، کل زمان اجرا را افزایش می‌دهد. در صورت حذف واحد، مقدار بر حسب ثانیه است. .TP .BI ramp_size \fR=\fPsize در صورت تنظیم، fio تا زمانی که کار میزان معینی I/O انجام دهد، پیش از ثبت هرگونه آمار کارایی منتظر می‌ماند. هنگامی که \fBgroup_reporting\fR فعال باشد، ثبت زمانی آغاز می‌شود که تمام کارهای موجود در گروه با یکدیگر میزان معین I/O را انجام دهند. مشابه با \fBramp_time\fR، این گزینه برای تثبیت کارایی پیش از ثبت نتایج مفید است و در صورتی که مهلت زمانی خاص یا \fBruntime\fR مشخص شده باشد، کل زمان اجرا را افزایش می‌دهد. در صورت حذف واحد، مقدار بر حسب بایت است. .TP .BI clocksource \fR=\fPstr استفاده از منبع ساعت (clocksource) داده‌شده به عنوان پایه زمان‌سنجی. گزینه‌های پشتیبانی‌شده عبارتند از: .RS .RS .TP .B gettimeofday \fBgettimeofday\fR\|(2) .TP .B clock_gettime \fBclock_gettime\fR\|(2) .TP .B cpu منبع ساعت داخلی پردازنده (CPU) .RE .P در صورت قابل اعتماد بودن، \fBcpu\fR منبع ساعت ترجیحی است، زیرا بسیار سریع است (و fio فراخوانی‌های زمانی متعددی دارد). Fio در صورتی که این منبع ساعت پشتیبانی شود و روی سامانه‌ای که در حال اجرا است قابل اعتماد در نظر گرفته شود، به طور خودکار از آن استفاده خواهد کرد، مگر اینکه منبع ساعت دیگری به طور مشخص تنظیم شده باشد. برای پردازنده‌های x86/x86\-64، این به معنای پشتیبانی از TSC Invariant است. .RE .TP .BI gtod_reduce \fR=\fPbool فعال‌سازی تمام گزینه‌های کاهنده فراخوانی‌های \fBgettimeofday\fR\|(2) (\fBdisable_clat\fR، \fBdisable_slat\fR، \fBdisable_bw_measurement\fR) به همراه کاهش اندک دقت مهلت زمانی (timeout) برای کاهش چشمگیر تعداد فراخوانی‌های \fBgettimeofday\fR\|(2). با فعال بودن این گزینه، تنها حدود 0.4% از فراخوانی‌های \fBgettimeofday\fR\|(2) در مقایسه با زمانی که تمام زمان‌سنجی‌ها فعال باشند انجام می‌شود. .TP .BI gtod_cpu \fR=\fPint گاهی اختصاص یک ریسه اجرایی مجزا تنها برای دریافت زمان جاری مقرون‌به‌صرفه‌تر است. Fio (و برای مثال پایگاه‌های داده) استفاده بسیار فشرده‌ای از فراخوانی‌های \fBgettimeofday\fR\|(2) دارند. با این گزینه، می‌توانید یک پردازنده (CPU) را کنار بگذارید تا کاری جز ثبت زمان جاری در یک مکان حافظه مشترک انجام ندهد. سپس سایر ریسه‌ها/فرایندهایی که بارهای کاری I/O را اجرا می‌کنند تنها نیاز به رونوشت از آن قطعه دارند، به جای اینکه با فراخوانی \fBgettimeofday\fR\|(2) وارد هسته سیستم‌عامل شوند. پردازنده‌ای که برای انجام این فراخوانی‌های زمانی کنار گذاشته شده است از سایر کاربردها مستثنی خواهد شد. Fio آن را به صورت دستی از ماسک CPU سایر کارها حذف می‌کند. .TP .BI job_start_clock_id \fR=\fPint شناسه clock_id ارائه‌شده به فراخوانی \fBclock_gettime\fR که برای ثبت job_start در قالب خروجی \fBjson\fR استفاده می‌شود. مقدار پیش‌فرض 0 یا CLOCK_REALTIME است..SS "فایل/دستگاه هدف (Target file/device)" .TP .BI directory \fR=\fPstr این دایرکتوری را به عنوان پیشوند به \fBfilename\fRها اضافه می‌کند. برای قرار دادن فایل‌ها در مکانی به جز `./' به کار می‌رود. می‌توانید با جدا کردن نام‌ها توسط نویسهٔ ':'، چندین دایرکتوری مشخص کنید. این دایرکتوری‌ها تا زمانی که از نام‌فایل‌های تولیدشده استفاده شود، به طور مساوی بین همزادهای کاری (job clones) ایجاد شده توسط \fBnumjobs\fR توزیع خواهند شد. اگر \fBfilename\fR(های) خاصی تعیین شده باشد، fio از نخستین دایرکتوری فهرست‌شده استفاده می‌کند و در نتیجه با معناشناسی \fBfilename\fR مطابقت خواهد داشت (که در صورت عدم تعیین، برای هر همزاد یک فایل تولید می‌کند، اما در صورت تنظیم، به همهٔ همزادها اجازه می‌دهد از یک فایل مشترک استفاده کنند). .RS .P برای اطلاعات دربارهٔ نحوهٔ گریز (escape) دادن نویسه‌های ':' در خود مسیر دایرکتوری، گزینهٔ \fBfilename\fR را ببینید. .P نکته: برای کنترل دایرکتوری‌ای که fio برای فایل‌های وضعیت داخلی استفاده می‌کند، از \fB\-\-aux\-path\fR استفاده کنید. .RE .TP .BI filename \fR=\fPstr معمولاً fio یک \fBfilename\fR را بر اساس نام کار، شمارهٔ رشته (thread) و شمارهٔ فایل می‌سازد (گزینهٔ \fBfilename_format\fR را ببینید). اگر می‌خواهید فایل‌ها را بین رشته‌های یک کار یا چندین کار با مسیرهای فایل ثابت به اشتراک بگذارید، برای هر یک از آن‌ها یک \fBfilename\fR تعیین کنید تا مقدار پیش‌فرض بازنویسی شود. اگر ioengine مبتنی بر فایل باشد، می‌توانید با جدا کردن نام‌ها توسط دونقطهٔ ':'، چندین فایل را مشخص کنید. بنابراین اگر می‌خواستید کاری دو فایل `/dev/sda' و `/dev/sdb' را به عنوان دو فایل کاری باز کند، از `filename=/dev/sda:/dev/sdb' استفاده می‌کردید. این همچنین بدان معناست که هرگاه این گزینه مشخص شود، \fBnrfiles\fR نادیده گرفته می‌شود. اندازهٔ فایل‌های عادی تعیین‌شده توسط این گزینه برابر با \fBsize\fR تقسیم بر تعداد فایل‌ها خواهد بود، مگر اینکه اندازهٔ صریحی توسط \fBfilesize\fR مشخص شده باشد. .RS .P هر دونقطه در مسیر مورد نظر باید با یک نویسهٔ '\e' گریز داده شود. برای مثال، اگر مسیر `/dev/dsk/foo@3,0:c' باشد، باید از `filename=/dev/dsk/foo@3,0\\:c' استفاده کنید و اگر مسیر `F:\\filename' باشد، باید از `filename=F\\:\\filename' استفاده کنید. .P در Windows، دستگاه‌های دیسک برای اولین دستگاه به صورت `\\\\.\\PhysicalDrive0'، برای دستگاه دوم به صورت `\\\\.\\PhysicalDrive1' و به همین ترتیب در دسترس هستند. نکته: Windows و FreeBSD از دسترسی نوشتن به بخش‌هایی از دیسک که حاوی داده‌های در حال استفاده هستند (مانند سیستم‌های فایل) جلوگیری می‌کنند. .P برای دسترسی HTTP و S3، به ترتیب یک مسیر URL معتبر یا کلید S3 مشخص کنید. نام‌فایل برای S3 به سبک path-style شامل نام باکت است (`/bucket/k/e.y') در حالی که نام‌فایل S3 به سبک virtual-hosted-style (`/k/e.y') شامل آن نیست، زیرا نام باکت آن در \fBhttp_host\fR تعیین می‌شود. .P نام‌فایل `\-' یک نام رزرو شده به معنای *stdin* یا *stdout* است. اینکه کدام یک از این دو باشد، به جهت خواندن/نوشتن تنظیم‌شده بستگی دارد. .RE .TP .BI filename_format \fR=\fPstr در صورت اشتراک‌گذاری چندین فایل بین کارها، معمولاً لازم است fio نام‌های دقیق مد نظر شما را تولید کند. به طور پیش‌فرض، fio فایل را بر اساس مشخصهٔ قالب پیش‌فرض یعنی `jobname.jobnumber.filenumber' نام‌گذاری می‌کند. با این گزینه، این الگو قابل سفارشی‌سازی است. Fio کلیدواژه‌های زیر را در این رشته شناسایی و جایگزین می‌کند: .RS .RS .TP .B $jobname نام رشته یا فرآیند کارگر (worker). .TP .B $clientuid آدرس IP فرآیند fio هنگام استفاده از حالت client/server. .TP .B $jobnum شمارهٔ افزایشی رشته یا فرآیند کارگر. .TP .B $filenum شمارهٔ افزایشی فایل برای آن رشته یا فرآیند کارگر. .RE .P برای اینکه کارهای وابسته مجموعه‌ای از فایل‌ها را به اشتراک بگذارند، این گزینه می‌تواند طوری تنظیم شود که fio نام‌فایل‌هایی تولید کند که بین آن دو مشترک باشد. برای مثال، اگر `testfiles.$filenum' تعیین شود، فایل شمارهٔ ۴ برای هر کاری به نام `testfiles.4' نام‌گذاری خواهد شد. اگر مشخص‌کنندهٔ قالب دیگری ارائه نشود، مقدار پیش‌فرض `$jobname.$jobnum.$filenum' استفاده خواهد شد. .P اگر مسیری را مشخص کنید، دایرکتوری‌ها تا دایرکتوری اصلی فایل ایجاد خواهند شد. بنابراین برای نمونه اگر `a/b/c/$jobnum` را مشخص کنید، دایرکتوری‌های a/b/c پیش از مرحلهٔ برپایی فایل در کار ایجاد می‌شوند. اگر \fBdirectory\fR را تعیین کنید، مسیر نسبت به آن دایرکتوری نسبی خواهد بود، در غیر این صورت به عنوان یک مسیر مطلق در نظر گرفته می‌شود. .RE .TP .BI unique_filename \fR=\fPbool برای جلوگیری از تداخل میان کلاینت‌های شبکه‌ای، fio به طور پیش‌فرض مبدا کلاینت متصل‌شونده را به عنوان پیشوند به هر نام‌فایل تولیدشده (با دایرکتوری مشخص‌شده) اضافه می‌کند. برای غیرفعال کردن این رفتار، این گزینه را روی 0 تنظیم کنید. .TP .BI filetype \fR=\fPstr فرض را بر این می‌گذارد که تمام فایل‌های تعریف‌شده در یک کار از این نوع هستند. به طور پیش‌فرض fio برای هر فایل یک فراخوانی \fBstat\fR\|(2) انجام می‌دهد تا نوع فایل آن را متوجه شود. برای مجموعه‌فایل‌های عظیم این عمل ممکن است یک گلوگاه باشد، بنابراین از این گزینه می‌توان برای صرف‌نظر کردن از تعداد انبوه فراخوانی‌های سیستمی استفاده کرد. انواع فایل عبارتند از: .RS .RS .TP .B none تنظیم‌نشده. مقدار پیش‌فرض. .TP .B file فایل عادی (regular). .TP .B block فایل دستگاه بلوکی (Block device). .TP .B char فایل دستگاه نویسه‌ای (Char device). .RE .RE .TP .BI opendir \fR=\fPstr به صورت بازگشتی هر فایلی را در زیر دایرکتوری \fIstr\fR باز می‌کند. این گزینه تنها یک دایرکتوری منفرد را می‌پذیرد و بر خلاف گزینه‌های مرتبط، دونقطه‌های موجود در مسیر نباید گریز داده شوند. .TP .BI lockfile \fR=\fPstr fio به طور پیش‌فرض پیش از انجام I/O روی فایل‌ها، آن‌ها را قفل نمی‌کند. اگر یک فایل یا توصیف‌گر فایل مشترک باشد، fio می‌تواند I/O به آن فایل را پیاپی (سریالایز) کند تا نتیجهٔ نهایی سازگار باشد. این عمل برای شبیه‌سازی بارهای کاری واقعی که فایل‌ها را به اشتراک می‌گذارند معمول است. حالت‌های قفل عبارتند از: .RS .RS .TP .B none بدون قفل‌گذاری. مقدار پیش‌فرض. .TP .B exclusive فقط یک رشته یا فرآیند می‌تواند در هر زمان I/O انجام دهد، و بقیه را مستثنی می‌کند (قفل انحصاری). .TP .B readwrite قفل خواندن-نوشتن (Read\-write) روی فایل. چندین خواننده می‌توانند هم‌زمان به فایل دسترسی داشته باشند، اما نوشتن‌ها دسترسی انحصاری دریافت می‌کنند. .RE .RE .TP .BI nrfiles \fR=\fPint تعداد فایل‌های مورد استفاده برای این کار. مقدار پیش‌فرض 1 است. اندازهٔ فایل‌ها برابر با \fBsize\fR تقسیم بر این تعداد خواهد بود، مگر اینکه اندازهٔ صریحی توسط \fBfilesize\fR تعیین شده باشد. فایل‌ها برای هر رشته به صورت جداگانه ایجاد می‌شوند و همان‌طور که در بخش \fBfilename\fR توضیح داده شد، هر فایل به طور پیش‌فرض شمارهٔ فایلی درون نام خود خواهد داشت. .TP .BI openfiles \fR=\fPint تعداد فایل‌هایی که به طور هم‌زمان باز نگه داشته می‌شوند. پیش‌فرض آن مشابه با \fBnrfiles\fR است؛ می‌تواند برای محدود کردن تعداد فایل‌های باز هم‌زمان، روی مقدار کمتری تنظیم شود. .TP .BI file_service_type \fR=\fPstr تعیین می‌کند fio چگونه تصمیم بگیرد که در مرحلهٔ بعد به کدام فایل از یک کار سرویس‌دهی کند. انواع زیر تعریف شده‌اند: .RS .RS .TP .B random انتخاب تصادفی یک فایل. .TP .B roundrobin روش نوبتی (Round robin) روی فایل‌های بازشده. این حالت پیش‌فرض است. .TP .B sequential اتمام یک فایل پیش از رفتن به سراغ فایل بعدی. بسته به \fBopenfiles\fR، همچنان چندین فایل می‌توانند هم‌زمان باز باشند. .TP .B zipf استفاده از توزیع زیف (Zipf) برای تصمیم‌گیری دربارهٔ دسترسی به فایل. .TP .B pareto استفاده از توزیع پارتو (Pareto) برای تصمیم‌گیری دربارهٔ دسترسی به فایل. .TP .B normal استفاده از توزیع گاوسی (نرمال) برای تصمیم‌گیری دربارهٔ دسترسی به فایل. .TP .B gauss نام مستعاری برای normal. .RE .P برای \fBrandom\fR، \fBroundrobin\fR، و \fBsequential\fR، می‌توان یک پسوند اضافه کرد تا به fio بگوید پیش از جابجایی به یک فایل جدید، چه تعداد I/O صادر کند. برای مثال، تعیین `file_service_type=random:8' باعث می‌شود fio پیش از انتخاب تصادفی یک فایل جدید، ۸ عملیات I/O صادر کند. برای توزیع‌های غیریکنواخت، می‌توان یک پسوند ممیز شناور تعیین کرد تا بر میزان چولگی توزیع تأثیر بگذارد. برای توضیحات نحوهٔ کارکرد آن، \fBrandom_distribution\fR را ببینید. .RE .TP .BI ioscheduler \fR=\fPstr تلاش می‌کند پیش از اجرا، زمان‌بند ورودی/خروجی (I/O scheduler) دستگاه میزبان فایل را به مورد تعیین‌شده تغییر دهد. اگر فایل یک لوله (pipe) باشد، یا یک فایل دستگاه نویسه‌ای باشد، یا در صورتی که دستگاه میزبان فایل قابل تشخیص نباشد، این گزینه نادیده گرفته می‌شود. .TP .BI create_serialize \fR=\fPbool در صورت مقدار true، ایجاد فایل را برای کارها به صورت ترتیبی (سریالایز) انجام می‌دهد. این امر ممکن است برای جلوگیری از درهم‌آمیختگی (interleaving) فایل‌های داده کاربردی باشد، که می‌تواند به سیستم فایل مورد استفاده و حتی تعداد پردازنده‌های سیستم به شدت وابسته باشد. مقدار پیش‌فرض: true..TP .BI create_fsync \fR=\fPbool اجرای \fBfsync\fR\|(2) روی فایل داده پس از ایجاد. این مقدار پیش‌فرض است. .TP .BI create_on_open \fR=\fPbool اگر true باشد، فایل‌ها از قبل ایجاد نمی‌شوند، بلکه به فراخوانی open() کار اجازه داده می‌شود تا هنگام فرا رسیدن زمان I/O فایل را ایجاد کند. پیش‌فرض: false \-\- تمام فایل‌های لازم هنگام شروع کار از قبل ایجاد می‌شوند. .TP .BI create_only \fR=\fPbool اگر true باشد، fio تنها فاز راه‌اندازی (setup) کار را اجرا خواهد کرد. اگر نیاز باشد فایل‌ها روی دیسک چیده شده یا به‌روزرسانی شوند، فقط همین کار انجام خواهد شد \-\- محتوای اصلی کار اجرا نمی‌شود. پیش‌فرض: false. .TP .BI allow_file_create \fR=\fPbool اگر true باشد، fio مجاز است به عنوان بخشی از بار کاری خود فایل‌ها را ایجاد کند. اگر این گزینه false باشد، چنانچه فایل‌های مورد نیاز از پیش وجود نداشته باشند fio با خطا متوقف خواهد شد. پیش‌فرض: true. .TP .BI allow_mounted_write \fR=\fPbool اگر این گزینه تنظیم نشود، fio کارهایی را که مخرب هستند (مانند عملیات نوشتن) روی دستگاه‌ها یا پارتیشن‌هایی که به نظر می‌رسد متصل (mounted) هستند متوقف می‌کند. این کار به جلوگیری از ایجاد تصادفی آزمون‌های مخرب کمک می‌کند، آزمون‌هایی که بدون درک اینکه داده‌ها در سامانه فایل متصل نابود خواهند شد اجرا می‌شوند. توجه داشته باشید که برخی پلتفرم‌ها صرف‌نظر از این گزینه، اجازه نوشتن روی یک دستگاه متصل را نمی‌دهند. پیش‌فرض: false. .TP .BI pre_read \fR=\fPbool در صورت تعیین این گزینه، فایل‌ها پیش از آغاز عملیات I/O مشخص‌شده، از قبل در حافظه خوانده می‌شوند. این کار همچنین پرچم \fBinvalidate\fR را پاک می‌کند، چرا که خواندن از پیش و سپس دور انداختن کش بی‌معنی است. این ویژگی تنها برای موتورهای I/O که دارای قابلیت تغییر مکان (seek-able) هستند کار می‌کند، زیرا به شما امکان می‌دهند داده‌های یکسان را چندین بار بخوانید. بنابراین روی موتورهای I/O فاقد قابلیت تغییر مکان (مانند network و splice) کار نخواهد کرد. پیش‌فرض: false. .TP .BI unlink \fR=\fPbool حذف (unlink) فایل‌های کار پس از پایان. این مقدار پیش‌فرض نیست، زیرا در صورت اجرای مکرر آن کار، زمان زیادی صرف بازتولید پیاپی مجموعه فایل‌ها خواهد شد. پیش‌فرض: false. .TP .BI unlink_each_loop \fR=\fPbool حذف (unlink) فایل‌های کار پس از هر تکرار یا حلقه. پیش‌فرض: false. .TP .BI zonemode \fR=\fPstr مقادیر پذیرفته‌شده عبارتند از: .RS .RS .TP .B none پارامترهای \fBzonerange\fR، \fBzonesize\fR، \fBzonecapacity\fR و \fBzoneskip\fR نادیده گرفته می‌شوند. .TP .B strided عملیات I/O در یک ناحیه (zone) واحد انجام می‌شود تا زمانی که به اندازه \fBzonesize\fR بایت منتقل شود. پس از انتقال این حجم از بایت‌ها، پردازش ناحیه بعدی آغاز می‌شود. پارامتر \fBzonecapacity\fR نادیده گرفته می‌شود. .TP .B zbd حالت دستگاه بلوکی ناحیه‌بندی‌شده (Zoned block device). عملیات I/O در هر ناحیه به صورت ترتیبی رخ می‌دهد، حتی اگر I/O تصادفی انتخاب شده باشد. I/O تصادفی به جای محدود شدن به یک ناحیه واحد، در سرتاسر همه ناحیه‌ها اتفاق می‌افتد. پارامتر \fBzoneskip\fR نادیده گرفته می‌شود. مقادیر \fBzonerange\fR و \fBzonesize\fR باید یکسان باشند. اگر اندازه فضای ننوشته‌شده در یک ناحیه در ابتدای بار کاری، مضربی از اندازه بلوک مشخص‌شده نباشد، بارهای کاری نوشتن نواحی باقیمانده ننوشته‌شده در انتهای نواحی ایجاد می‌کنند و وضعیت نواحی را در حالت باز (open) نگه می‌دارند. برای آزاد کردن منابع نواحی باز، fio عملیات اتمام ناحیه (zone finish) را برای نواحی دارای باقیمانده صادر می‌کند. عملیات Trim با استفاده از عملیات بازنشانی ناحیه (zone reset) انجام می‌پذیرد. در Trim تنها نواحی غیرخالی از نوع sequential write required و sequential write preferred در نظر گرفته می‌شوند. .RE .RE .TP .BI zonerange \fR=\fPint برای \fBzonemode\fR=strided، این پارامتر اندازه یک ناحیه منفرد را مشخص می‌کند. همچنین گزینه‌های \fBzonesize\fR و \fBzoneskip\fR را ببینید. برای \fBzonemode\fR=zbd، این پارامتر نادیده گرفته می‌شود. .TP .BI zonesize \fR=\fPint برای \fBzonemode\fR=strided، این مقدار نشان‌دهنده تعداد بایت‌هایی است که باید پیش از رد کردن (skip) \fBzoneskip\fR بایت منتقل شوند. اگر این پارامتر از \fBzonerange\fR کوچک‌تر باشد، تنها به بخشی از هر ناحیه با اندازه \fBzonerange\fR دسترسی پیدا خواهد شد. اگر این پارامتر از \fBzonerange\fR بزرگ‌تر باشد، پیش از پرش به ناحیه بعدی، به هر ناحیه چندین بار دسترسی پیدا خواهد شد. برای \fBzonemode\fR=zbd، این اندازه یک ناحیه منفرد است. پارامتر \fBzonerange\fR در این حالت نادیده گرفته می‌شود. برای کاری که به یک دستگاه بلوکی ناحیه‌بندی‌شده دسترسی دارد، مقدار \fBzonesize\fR مشخص‌شده باید 0 یا برابر با اندازه ناحیه دستگاه باشد. برای یک دستگاه بلوکی معمولی یا یک فایل، \fBzonesize\fR مشخص‌شده باید حداقل 512B باشد. .TP .BI zonecapacity \fR=\fPint برای \fBzonemode\fR=zbd، این پارامتر ظرفیت یک ناحیه واحد را تعریف می‌کند، که محدوده در دسترس از آدرس شروع ناحیه است. این پارامتر فقط زمانی اعمال می‌شود که \fBzonemode\fR=zbd در ترکیب با دستگاه‌های بلوکی معمولی استفاده شود. در صورت عدم تعیین، مقدار پیش‌فرض آن اندازه ناحیه است. اگر دستگاه هدف یک دستگاه بلوکی ناحیه‌بندی‌شده باشد، ظرفیت ناحیه از اطلاعات دستگاه به دست می‌آید و این گزینه نادیده گرفته می‌شود. .TP .BI zoneskip \fR=\fPint[z] برای \fBzonemode\fR=strided، تعداد بایت‌هایی است که باید پس از انتقال \fBzonesize\fR بایت داده نادیده گرفته و رد شوند. برای \fBzonemode\fR=zbd، تعداد بایت‌های هم‌تراز با \fBzonesize\fR است که باید پس از پر شدن کامل یک ناحیه (بارهای کاری نوشتن) یا خوانده شدن تمام داده‌های نوشته‌شده در ناحیه (بارهای کاری خواندن) رد شوند. این پارامتر فقط برای بارهای کاری ترتیبی معتبر است و برای بارهای کاری تصادفی نادیده گرفته می‌شود. برای بارهای کاری خواندن، \fBread_beyond_wp\fR را نیز ببینید. .TP .BI read_beyond_wp \fR=\fPbool این پارامتر فقط برای \fBzonemode=zbd\fR اعمال می‌شود. دستگاه‌های بلوکی ناحیه‌بندی‌شده، دستگاه‌های بلوکی هستند که از چندین ناحیه تشکیل شده‌اند. هر ناحیه دارای یک نوع است، مانند conventional (سنتی) یا sequential (ترتیبی). یک ناحیه conventional می‌تواند در هر آفستی که مضربی از اندازه بلوک باشد نوشته شود. نواحی sequential باید به صورت ترتیبی نوشته شوند. موقعیتی که عمل نوشتن باید در آن رخ دهد «اشاره‌گر نوشتن» (write pointer) نامیده می‌شود. یک دستگاه بلوکی ناحیه‌بندی‌شده می‌تواند host managed یا host aware باشد. در دستگاه‌های host managed، میزبان باید اطمینان حاصل کند که نوشتن‌ها به صورت ترتیبی انجام می‌شوند. ابزار fio دستگاه‌های host managed را شناسایی کرده و نوشتن‌ها در نواحی ترتیبی را برای این دستگاه‌ها به شکل متوالی و سریالی درمی‌آورد. اگر در یک ناحیه ترتیبی، خواندن فراتر از اشاره‌گر نوشتن رخ دهد، دستگاه بلوکی ناحیه‌بندی‌شده عملیات خواندن را بدون خواندن هیچ داده‌ای از رسانه ذخیره‌سازی تکمیل می‌کند. از آنجا که این نوع خواندن‌ها منجر به مقادیر پهنای باند و IOPS به شکل غیرواقعی بالا می‌شوند، fio تنها در صورتی اقدام به خواندن فراتر از اشاره‌گر نوشتن می‌کند که صریحاً به آن دستور داده شده باشد. پیش‌فرض: false. .TP .BI max_open_zones \fR=\fPint هنگامی که یک ناحیه از دستگاه بلوکی ناحیه‌بندی‌شده به صورت جزئی نوشته شده باشد (یعنی همه سکتورهای ناحیه نوشته نشده باشند)، ناحیه در یکی از این سه وضعیت قرار می‌گیرد: \(lqimplicit open\(rq (باز ضمنی)، \(lqexplicit open\(rq (باز صریح) یا \(lqclosed\(rq (بسته). دستگاه‌های بلوکی ناحیه‌بندی‌شده ممکن است دارای محدودیتی به نام \(lqmax_open_zones\(rq (هم‌نام با این پارامتر) برای کل تعداد نواحی باشند که می‌توانند به طور همزمان در وضعیت‌های \(lqimplicit open\(rq یا \(lqexplicit open\(rq قرار گیرند. همچنین ممکن است این دستگاه‌ها دارای محدودیت دیگری به نام \(lqmax_active_zones\(rq برای کل تعداد نواحی باشند که می‌توانند به طور همزمان در هر سه وضعیت قرار گیرند. پارامتر \fBmax_open_zones\fR تعداد نواحی را که دستورات نوشتن برای آن‌ها توسط همه کارهای fio صادر می‌شود محدود می‌کند، یعنی تعداد نواحی که در این شرایط قرار خواهند گرفت را محدود می‌سازد. هنگامی که دستگاه دارای محدودیت max_open_zones بوده و فاقد محدودیت max_active_zones باشد، پارامتر \fBmax_open_zones\fR تعداد نواحی در دو حالت باز را تا سقف مجاز محدود می‌کند. در این حالت، fio در ابتدای شروع به کار خود نواحی موجود در دو وضعیت باز را جزء نواحی هدف نوشتن قرار می‌دهد. هنگامی که دستگاه هم دارای محدودیت max_open_zones و هم max_active_zones باشد، پارامتر \fBmax_open_zones\fR تعداد نواحی در هر سه وضعیت را تا سقف مجاز محدود می‌نماید. در این حالت، fio در هنگام شروع، نواحی موجود در این سه وضعیت را جزء نواحی هدف نوشتن در نظر می‌گیرد. این پارامتر تنها در صورتی مرتبط است که از \fBzonemode=zbd\fR استفاده شود. مقدار پیش‌فرض همیشه برابر با محدودیت max_open_zones دستگاه بلوکی ناحیه‌بندی‌شده هدف است و مقداری بالاتر از این حد توسط کاربران قابل تعیین نیست مگر اینکه گزینه \fBignore_zone_limits\fR مشخص شده باشد. هنگامی که \fBignore_zone_limits\fR مشخص شده باشد یا دستگاه هدف فاقد محدودیت max_open_zones باشد، می‌توان در \fBmax_open_zones\fR مقدار 0 را تعیین کرد تا هرگونه محدودیت بر روی تعداد نواحی که می‌توانند به طور همزمان توسط تمام کارها نوشته شوند، غیرفعال گردد. .TP .BI job_max_open_zones \fR=\fPint به همان شیوه \fBmax_open_zones\fR، تعداد نواحی باز را به ازای هر کار fio محدود می‌کند، یعنی تعداد نواحی که یک کار منفرد می‌تواند به طور همزمان روی آن‌ها بنویسد. مقدار صفر به معنی نبود محدودیت است. پیش‌فرض: صفر. .TP .BI ignore_zone_limits \fR=\fPbool اگر از این گزینه استفاده شود، fio محدودیت حداکثر تعداد نواحی باز در دستگاه بلوکی ناحیه‌بندی‌شده مورد استفاده را نادیده می‌گیرد و بدین ترتیب اجازه می‌دهد مقدار گزینه \fBmax_open_zones\fR بزرگتر از حد گزارش‌شده توسط دستگاه باشد. پیش‌فرض: false. .TP .BI zone_reset_threshold \fR=\fPfloat عددی بین صفر و یک که نشان‌دهنده نسبت بایت‌های نوشته‌شده در نواحی دارای اشاره‌گر نوشتن در محدوده IO به اندازه محدوده IO است. هنگامی که نسبت فعلی فراتر از این مقدار رود، نواحی به صورت دوره‌ای مطابق با آنچه در \fBzone_reset_frequency\fR مشخص شده است بازنشانی می‌شوند. اگر هنگام استفاده از این گزینه چندین کار وجود داشته باشد، محدوده IO برای همه کارهای نوشتن باید یکسان باشد. .TP .BI zone_reset_frequency \fR=\fPfloat عددی بین صفر و یک که مشخص می‌کند در صورت فراتر رفتن از آستانه بازنشانی ناحیه، بازنشانی ناحیه هر چند وقت یک‌بار باید ارسال شود. یک بازنشانی ناحیه پس از هر (1 / zone_reset_frequency) درخواست نوشتن ارسال می‌شود. از این پارامتر و پارامتر پیشین می‌توان برای شبیه‌سازی فعالیت بازیافت حافظه (garbage collection) استفاده کرد. .TP .BI recover_zbd_write_error \fR=\fPbool اگر این گزینه به همراه گزینه \fBcontinue_on_error\fR مشخص شود، پس از نوشتن‌های ناموفق در نواحی sequential write required، موقعیت‌های اشاره‌گر نوشتن بررسی می‌شود. سپس اشاره‌گرهای نوشتن جابه‌جا می‌شوند تا نوشتن‌های بعدی به دلیل نوشتن‌های ناقص و موقعیت‌های پیش‌بینی‌نشده اشاره‌گر نوشتن با شکست مواجه نشوند. اگر \fBcontinue_on_error\fR مشخص نشده باشد، برنامه با خطا متوقف می‌شود. هنگامی که نوشتن‌ها به صورت ناهمگام (asynchronous) باشند، جابه‌جایی اشاره‌گر نوشتن بلوک‌ها را با صفر پر می‌کند و سپس داده‌های اعتبارسنجی را مخدوش می‌سازد. اگر یک موتور IO ناهمگام و بار کاری \fBverify\fR مشخص شده باشد، با خطا متوقف می‌شود. پیش‌فرض: false. .TP .BI write_zone_remainders \fR=\fPbool اگر اندازه فضای ننوشته‌شده در یک ناحیه در ابتدای بار کاری، مضربی از اندازه بلوک مشخص‌شده نباشد، بارهای کاری نوشتن نواحی باقیمانده ننوشته‌شده‌ای در انتهای نواحی ایجاد می‌کنند. به‌طور پیش‌فرض، fio عملیات‌های zone finish را روی چنین نواحی اجرا می‌کند و وضعیت آن‌ها را به وضعیت کامل (full) برده و منابع نواحی باز را آزاد می‌سازد. با این حال، عملیات‌های zone finish باعث ایجاد انتظار برای نوشتن‌های در جریان (in-flight) می‌شود و توان عملیاتی کلی نوشتن را کاهش می‌دهد. اگر این گزینه مشخص شود، fio به جای انجام عملیات‌های zone finish، داده‌ها را در نواحی باقیمانده می‌نویسد. این امر با جلوگیری از انتظار برای نوشتن‌های در حال انجام، به‌ویژه در بارهای کاری نوشتن ناهمگام، توان عملیاتی نوشتن را بهبود می‌بخشد. عیب این گزینه این است که نیازمند انجام عملیات‌های نوشتن کوچک‌تر از حداقل اندازه بلوک توسط fio است. در نتیجه، گزینه \fBnorandommap\fR باید تنظیم شود. اگر \fBnorandommap\fR تنظیم نشده باشد، به طور خودکار فعال خواهد شد. پیش‌فرض: false..SS "نوع I/O (I/O type)" .TP .BI direct \fR=\fPbool اگر مقدار true باشد، از I/O بدون بافر استفاده می‌شود. این معمولاً O_DIRECT است. توجه داشته باشید که OpenBSD و ZFS روی Solaris از direct I/O پشتیبانی نمی‌کنند. در Windows، موتورهای ورودی/خروجی (ioengines) همگام از direct I/O پشتیبانی نمی‌کنند. پیش‌فرض: false. .TP .BI buffered \fR=\fPbool اگر مقدار true باشد، از I/O بافری استفاده می‌شود. این برعکس گزینهٔ \fBdirect\fR است. پیش‌فرض: true. .TP .BI readwrite \fR=\fPstr "\fR,\fP rw" \fR=\fPstr نوع الگوی I/O. مقادیر پذیرفته‌شده عبارتند از: .RS .RS .TP .B read خواندن‌های ترتیبی. .TP .B write نوشتن‌های ترتیبی. .TP .B trim تریم‌های (trim) ترتیبی (تنها برای دستگاه‌های بلوکی Linux و دستگاه‌های نویسه‌ای SCSI). .TP .B randread خواندن‌های تصادفی. .TP .B randwrite نوشتن‌های تصادفی. .TP .B randtrim تریم‌های (trim) تصادفی (تنها برای دستگاه‌های بلوکی Linux و دستگاه‌های نویسه‌ای SCSI). .TP .B rw,readwrite خواندن و نوشتن‌های ترکیبی ترتیبی. .TP .B randrw خواندن و نوشتن‌های ترکیبی تصادفی. .TP .B trimwrite توالی‌های ترتیبی trim+write. بلوک‌ها ابتدا تریم می‌شوند، سپس روی همان بلوک‌ها نوشته خواهد شد. بنابراین اگر `io_size=64K' مشخص شده باشد، Fio در مجموع ۶۴ کیلوبایت را تریم کرده و همچنین ۶۴ کیلوبایت را روی همان بلوک‌های تریم‌شده می‌نویسد. این رفتار با `number_ios' یا دیگر گزینه‌های Fio که بایت‌های کل یا تعداد I/Oها را محدود می‌کنند، سازگار خواهد بود. .TP .B randtrimwrite مانند .B trimwrite ، اما به جای نوشتن‌های ترتیبی از آفست‌های تصادفی استفاده می‌کند. .RE .P اگر گزینه مشخص نشده باشد، پیش‌فرض Fio مقدار read است. برای انواع I/O ترکیبی، پیش‌فرض تقسیم ۵۰/۵۰ آنها است. برای انواع خاصی از I/O ممکن است نتیجه کمی نامتوازن باشد، زیرا سرعت ممکن است متفاوت باشد. .P می‌توان تعداد I/Oهایی را که باید قبل از دریافت یک آفست جدید انجام شوند، با افزودن `:' به انتهای رشتهٔ ارائه‌شده مشخص کرد. برای یک خواندن تصادفی، اعمال یک تعدیل‌کنندهٔ آفست با مقدار ۸ به شکل `rw=randread:8' خواهد بود. اگر این پسوند با یک الگوی I/O ترتیبی استفاده شود، مقدار `' مشخص‌شده به آفست تولیدشده برای هر I/O اضافه می‌شود که I/O ترتیبی را به I/O ترتیبی با فاصله (حفره) تبدیل می‌کند. به عنوان مثال، استفاده از `rw=write:4k' برای هر بار نوشتن مقدار 4k را نادیده می‌گیرد (می‌پرد). همچنین گزینهٔ \fBrw_sequencer\fR را ببینید. اگر این مورد همراه با \fBverify\fR استفاده شود، گزینهٔ \fBverify_header_seed\fR غیرفعال خواهد شد، مگر اینکه به‌طور صریح فعال شده باشد. .RE .TP .BI rw_sequencer \fR=\fPstr اگر یک تعدیل‌کنندهٔ آفست با افزودن یک عدد به خط `rw=\fIstr\fR' مشخص شود، این گزینه نحوهٔ اصلاح آفست I/O تولیدشده توسط آن عدد را کنترل می‌کند. مقادیر پذیرفته‌شده عبارتند از: .RS .RS .TP .B sequential ایجاد آفست ترتیبی. .TP .B identical ایجاد آفست یکسان. .RE .P مقدار \fBsequential\fR فقط برای I/O تصادفی مفید است، جایی که fio معمولاً برای هر I/O یک آفست تصادفی جدید ایجاد می‌کند. اگر برای مثال عدد ۸ را به randread اضافه کنید، یعنی `rw=randread:8'، به ازای هر ۸ عدد I/O یک آفست تصادفی جدید دریافت خواهید کرد. نتیجه توالی‌ای از ۸ آفست ترتیبی با یک نقطهٔ شروع تصادفی خواهد بود. با این حال، اگر یک I/O ترتیبی به انتهای فایل برسد ممکن است این رفتار تغییر کند. از آنجا که I/O ترتیبی از قبل ترتیبی است، تنظیم \fBsequential\fR برای آن تفاوتی ایجاد نمی‌کند. مقدار \fBidentical\fR به شکلی مشابه عمل می‌کند، با این تفاوت که آفست یکسانی را ۸ بار قبل از ایجاد یک آفست جدید ارسال می‌کند. .P مثال ۱: .RS .P .PD 0 rw=randread:8 .P rw_sequencer=sequential .P bs=4k .PD .RE .P توالی آفست‌های تولیدشده به این صورت خواهد بود: 4k, 8k, 12k, 16k, 20k, 24k, 28k, 32k, 92k, 96k, 100k, 104k, 108k, 112k, 116k, 120k, 48k, 52k ... .P مثال ۲: .RS .P .PD 0 rw=randread:8 .P rw_sequencer=identical .P bs=4k .PD .RE .P توالی آفست‌های تولیدشده به این صورت خواهد بود: 4k, 4k, 4k, 4k, 4k, 4k, 4k, 4k, 92k, 92k, 92k, 92k, 92k, 92k, 92k, 92k, 48k, 48k, 48k ... .RE .TP .BI unified_rw_reporting \fR=\fPstr Fio معمولاً آمارها را بر اساس جهت داده (data direction) گزارش می‌دهد، به این معنی که خواندن‌ها، نوشتن‌ها و تریم‌ها به‌طور جداگانه محاسبه و گزارش می‌شوند. این گزینه تعیین می‌کند که آیا fio نتایج را به‌صورت عادی، جمع‌شده با یکدیگر، یا در هر دو حالت گزارش دهد. مقادیر پذیرفته‌شده عبارتند از: .RS .TP .B none گزارش آمار به‌صورت عادی. .TP .B mixed آمار بر اساس جهت داده جمع شده و با هم گزارش می‌شوند. .TP .B both آمار به‌صورت عادی گزارش شده و پس از آن آمار ترکیبی می‌آید. .TP .B 0 نام مستعار سازگار با گذشته برای \fBnone\fR. .TP .B 1 نام مستعار سازگار با گذشته برای \fBmixed\fR. .TP .B 2 نام مستعار برای \fBboth\fR. .RE .TP .BI randrepeat \fR=\fPbool مقداردهی اولیه (seed) همهٔ مولدهای اعداد تصادفی به روشی قابل پیش‌بینی، به‌گونه‌ای که الگو در طول اجراهای مختلف تکرارپذیر باشد. پیش‌فرض: true. .TP .BI allrandrepeat \fR=\fPbool نام مستعار برای \fBrandrepeat\fR. پیش‌فرض: true. .TP .BI randseed \fR=\fPint مقداردهی اولیه (seed) مولدهای اعداد تصادفی بر اساس این مقدار seed، تا بتوان توالی خروجی تولیدشده را کنترل کرد. در صورت عدم تنظیم، توالی تصادفی به تنظیمات \fBrandrepeat\fR وابسته خواهد بود. .TP .BI fallocate \fR=\fPstr تعیین اینکه آیا هنگام ایجاد فایل‌ها پیش‌تخصیص فضا انجام شود یا خیر. مقادیر پذیرفته‌شده عبارتند از: .RS .RS .TP .B none فضا را از پیش تخصیص نده. .TP .B native استفاده از فراخوانی بومی پیش‌تخصیص سکوی کاری، اما در صورت شکست یا پیاده‌سازی نشدن، بازگشت به رفتار \fBnone\fR. .TP .B posix پیش‌تخصیص از طریق \fBposix_fallocate\fR\|(3). .TP .B keep پیش‌تخصیص از طریق \fBfallocate\fR\|(2) همراه با تنظیم FALLOC_FL_KEEP_SIZE. .TP .B truncate افزایش اندازهٔ فایل به اندازهٔ نهایی با استفاده از \fBftruncate\fR|(2) به جای تخصیص فضا. .TP .B 0 نام مستعار سازگار با گذشته برای \fBnone\fR. .TP .B 1 نام مستعار سازگار با گذشته برای \fBposix\fR. .RE .P ممکن است در تمام بسترهای پشتیبانی‌شده در دسترس نباشد. مقدار \fBkeep\fR تنها در Linux موجود است. هنگام استفاده از ZFS در Solaris نمی‌توان آن را روی \fBposix\fR تنظیم کرد چرا که ZFS از پیش‌تخصیص فضا پشتیبانی نمی‌کند. پیش‌فرض: \fBnative\fR در صورتی که هر روش پیش‌تخصیصی به جز \fBtruncate\fR در دسترس باشد، در غیر این صورت \fBnone\fR. .P توجه داشته باشید که استفاده از \fBtruncate\fR در Windows رفتار پیش‌بینی‌نشده‌ای با الگوهای نوشتن غیرترتیبی خواهد داشت. هنگام نوشتن روی فایلی که با تنظیم اطلاعات انتهای فایل (end-of-file) گسترش یافته است، Windows قبل از اعمال نوشتن جدید، بخش نوشته‌نشدهٔ فایل را تا آن آفست با صفر پر می‌کند. این بدان معناست که یک نوشتن کوچک در انتهای یک فایل گسترش‌یافته تا زمانی که کل فایل با صفر پر نشود، متوقف خواهد ماند. .RE.TP .BI fadvise_hint \fR=\fPstr از \fBposix_fadvise\fR\|(2) یا \fBposix_madvise\fR\|(2) برای اعلان به هسته درباره اینکه چه الگوهای I/O احتمالاً صادر خواهند شد استفاده می‌کند. مقادیر پذیرفته‌شده عبارتند از: .RS .RS .TP .B 0 راهنمایی سازگار با نسخه‌های پیشین برای «بدون راهنمایی» (no hint). .TP .B 1 راهنمایی سازگار با نسخه‌های پیشین برای «اعلان بر اساس نوع بار کاری fio». این گزینه برای بار کاری تصادفی از FADV_RANDOM و برای بار کاری ترتیبی از FADV_SEQUENTIAL استفاده می‌کند. .TP .B sequential اعلان با استفاده از FADV_SEQUENTIAL. .TP .B random اعلان با استفاده از FADV_RANDOM. .TP .B noreuse اعلان با استفاده از FADV_NOREUSE. این مقدار ممکن است در هسته‌های قدیمی‌تر لینوکس بدون عملیات (no-op) باشد. از نسخه ۶.۳ لینوکس، راهنمایی برای الگوریتم LRU فراهم می‌کند. صفحه راهنمای \fBposix_fadvise\fR\|(2) را ببینید. .RE .RE .TP .BI write_hint \fR=\fPstr از \fBfcntl\fR\|(2) برای اعلان طول عمر مورد انتظار از یک نوشتن به هسته استفاده می‌کند. این ویژگی تنها در لینوکس، از نسخه ۴.۱۳ به بعد پشتیبانی می‌شود. مقادیر پذیرفته‌شده عبارتند از: .RS .RS .TP .B none هیچ طول عمر مشخصی وابسته به این فایل نیست. .TP .B short داده‌های نوشته‌شده در این فایل طول عمر کوتاهی دارند. .TP .B medium داده‌های نوشته‌شده در این فایل طول عمر متوسطی دارند. .TP .B long داده‌های نوشته‌شده در این فایل طول عمر طولانی دارند. .TP .B extreme داده‌های نوشته‌شده در این فایل طول عمر بسیار طولانی دارند. .RE .P این مقادیر همگی نسبت به یکدیگر سنجیده می‌شوند و نباید معنای مطلقی برای آن‌ها در نظر گرفت. .RE .TP .BI offset \fR=\fPint[%|z] عملیات I/O را در آفست ارائه‌شده در فایل آغاز می‌کند، که می‌تواند به صورت یک اندازه ثابت بر حسب بایت، ناحیه (zones) یا درصد داده شود. در صورت ارائه درصد، آفست تولیدشده با کمینه \fBblocksize\fR یا با مقدار \fBoffset_align\fR (در صورت تعیین) تراز خواهد شد. به داده‌های قبل از آفست داده‌شده دست زده نخواهد شد. این کار در عمل اندازه فایل را به `real_size \- offset' محدود می‌کند. می‌تواند با \fBsize\fR ترکیب شود تا محدوده شروع و پایان بار کاری I/O مقید گردد. درصد می‌تواند با عددی بین ۱ و ۱۰۰ همراه با '%' مشخص شود؛ برای نمونه `offset=20%' برای تعیین ۲۰٪. در حالت ZBD، مقدار می‌تواند با استفاده از 'z' به صورت تعداد نواحی تنظیم شود. .TP .BI offset_align \fR=\fPint اگر روی مقداری غیر از صفر تنظیم شود، آفست بایتی تولیدشده از یک \fBoffset\fR درصدی به سمت بالا با این مقدار تراز می‌شود. مقدار پیش‌فرض 0 است، به این معنی که آفست درصدی با کمینه اندازه بلوک تراز می‌گردد. .TP .BI offset_increment \fR=\fPint[%|z] در صورت تعیین این گزینه، آفست واقعی به صورت `\fBoffset\fR + \fBoffset_increment\fR * thread_number' درمی‌آید، که در آن thread_number شمارنده‌ای است که از 0 شروع شده و به ازای هر زیروظیفه (یعنی هنگامی که گزینه \fBnumjobs\fR مشخص شده باشد) افزایش می‌یابد. این گزینه زمانی مفید است که چندین وظیفه بخواهند روی یک فایل در بخش‌های مجزا و موازی با فواصل یکنواخت بین نقاط آغازین کار کنند. برای این گزینه می‌توان از درصد نیز استفاده کرد. در صورت تعیین درصد، آفست تولیدشده با کمینه \fBblocksize\fR یا مقدار \fBoffset_align\fR (در صورت تعیین) تراز خواهد شد. در حالت ZBD، مقدار می‌تواند با استفاده از 'z' به صورت تعداد نواحی تنظیم شود. .TP .BI number_ios \fR=\fPint برنامه fio به طور معمول عملیات‌های I/O را تا زمانی انجام می‌دهد که اندازه محدوده تعیین‌شده توسط \fBsize\fR پایان یابد، یا زمان اختصاص‌داده‌شده به پایان برسد (یا با یک وضعیت خطا مواجه شود). با این تنظیم، محدوده/اندازه را می‌توان مستقل از تعداد I/Oهای اجرایی تنظیم کرد. هنگامی که fio به این تعداد برسد، به طور معمول خارج شده و وضعیت را گزارش می‌کند. توجه داشته باشید که این گزینه میزان I/O انجام‌شده را افزایش نمی‌دهد، بلکه تنها در صورتی که این شرط پیش از سایر معیارهای پایان وظیفه برآورده شود، fio را متوقف می‌کند. .TP .BI fsync \fR=\fPint در صورت نوشتن در فایل، به ازای هر تعداد بلوک داده‌شده، یک \fBfsync\fR\|(2) (یا معادل آن) برای داده‌های تغییریافته (dirty) صادر می‌کند. برای نمونه، اگر ۳۲ را به عنوان پارامتر بدهید، fio فایل را پس از هر ۳۲ نوشتن صادرشده همگام‌سازی می‌کند. اگر fio از I/O بدون بافر استفاده کند، ممکن است فایل را همگام‌سازی نکنیم. استثنا موتور sg I/O است که در هر صورت کَش دیسک را همگام‌سازی می‌کند. مقدار پیش‌فرض 0 است، به این معنی که fio به طور دوره‌ای همگام‌سازی را صادر نکرده و منتظر تکمیل آن نمی‌ماند. همچنین گزینه‌های \fBend_fsync\fR، \fBend_syncfs\fR و \fBfsync_on_close\fR را ببینید. .TP .BI fdatasync \fR=\fPint مانند \fBfsync\fR است اما از \fBfdatasync\fR\|(2) استفاده می‌کند تا تنها بلوک‌های داده و نه فراداده (metadata) را همگام‌سازی کند. در Windows، DragonFlyBSD یا OSX فراخوانی \fBfdatasync\fR\|(2) وجود ندارد، بنابراین به استفاده از \fBfsync\fR\|(2) برمی‌گردد. مقدار پیش‌فرض 0 است، به این معنی که fio به طور دوره‌ای همگام‌سازی صرفاً داده را صادر نکرده و منتظر تکمیل آن نمی‌ماند. .TP .BI write_barrier \fR=\fPint هر N\-اُمین عمل نوشتن را به یک نوشتن سدگونه (barrier write) تبدیل می‌کند. .TP .BI sync_file_range \fR=\fPstr:int به ازای هر تعداد \fIint\fR از عملیات‌های نوشتن، از \fBsync_file_range\fR\|(2) استفاده می‌کند. برنامه fio محدوده نوشته‌هایی را که پس از آخرین فراخوانی \fBsync_file_range\fR\|(2) رخ داده‌اند، ردگیری خواهد کرد. \fIstr\fR در حال حاضر می‌تواند یک یا چند مورد از گزینه‌های زیر باشد: .RS .RS .TP .B wait_before SYNC_FILE_RANGE_WAIT_BEFORE .TP .B write SYNC_FILE_RANGE_WRITE .TP .B wait_after SYNC_FILE_RANGE_WRITE_AFTER .RE .P بنابراین اگر از `sync_file_range=wait_before,write:8' استفاده کنید، fio به ازای هر ۸ نوشتن از `SYNC_FILE_RANGE_WAIT_BEFORE | SYNC_FILE_RANGE_WRITE' استفاده خواهد کرد. همچنین به صفحه راهنمای \fBsync_file_range\fR\|(2) مراجعه کنید. این گزینه مختص لینوکس است. .RE .TP .BI overwrite \fR=\fPbool اگر مقدار true باشد، نوشتن‌ها در فایل همیشه داده‌های موجود را رونویسی می‌کنند. اگر فایل از پیش وجود نداشته باشد، قبل از آغاز مرحله نوشتن ایجاد خواهد شد. اگر فایل وجود داشته باشد و برای مرحله نوشتن مشخص‌شده به اندازه کافی بزرگ باشد، هیچ کاری انجام نخواهد شد. پیش‌فرض: false. .TP .BI end_fsync \fR=\fPbool اگر مقدار true باشد، با پایان یک مرحله نوشتن، محتویات فایل را با \fBfsync\fR\|(2) همگام‌سازی می‌کند. پیش‌فرض: false. .TP .BI end_syncfs \fR=\fPbool معادل \fBend_fsync\fR است، اما به جای اجرای \fBfsync\fR\|(2) برای هر فایل از یک مرحله نوشتن، با استفاده از فراخوانی سیستمی منفرد \fBsyncfs\fR\|(2) تمام فایل‌های نوشته‌شده را با اتمام مرحله نوشتن همگام‌سازی می‌کند. پیش‌فرض: false. .TP .BI fsync_on_close \fR=\fPbool اگر مقدار true باشد، fio هنگام بستن فایل دارای داده‌های همگام‌نشده (dirty)، فراخوانی \fBfsync\fR\|(2) را صادر می‌کند. این گزینه با \fBend_fsync\fR تفاوت دارد، زیرا هنگام بستن هر فایل اتفاق می‌افتد، نه فقط در پایان وظیفه. پیش‌فرض: false. .TP .BI rwmixread \fR=\fPint درصد بار کاری ترکیبی که باید شامل خواندن باشد. پیش‌فرض: 50. .TP .BI rwmixwrite \fR=\fPint درصد بار کاری ترکیبی که باید شامل نوشتن باشد. اگر هر دو گزینه \fBrwmixread\fR و \fBrwmixwrite\fR مشخص شده باشند و مجموع مقادیر آن‌ها ۱۰۰٪ نشود، مقدار دومی برای بازنویسی اولی به کار خواهد رفت. اگر از fio خواسته شود که خواندن یا نوشتن را به نرخ مشخصی محدود کند، این موضوع ممکن است با تنظیم نرخ تداخل داشته باشد. در این صورت، ممکن است توزیع دچار انحراف شود. پیش‌فرض: 50. .TP .BI random_distribution \fR=\fPstr:float[:float][,str:float][,str:float] به طور پیش‌فرض، هنگامی که از fio خواسته شود I/O تصادفی انجام دهد، از توزیع تصادفی کاملاً یکنواخت استفاده خواهد کرد. گاهی اوقات مفید است که توزیع را به شیوه‌های خاصی منحرف کنیم تا اطمینان حاصل شود بخش‌هایی از داده‌ها نسبت به بخش‌های دیگر داغ‌تر (پرمراجعه‌تر) هستند. برنامه fio شامل مدل‌های توزیع زیر است: .RS .RS .TP .B random توزیع تصادفی یکنواخت .TP .B zipf توزیع زیف (Zipf) .TP .B pareto توزیع پارتو (Pareto) .TP .B normal توزیع نرمال (گاوسی) .TP .B zoned توزیع تصادفی ناحیه‌ای .B zoned_abs توزیع تصادفی ناحیه‌ای مطلق .RE .P هنگام استفاده از توزیع \fBzipf\fR یا \fBpareto\fR، یک مقدار ورودی نیز برای تعریف الگوی دسترسی لازم است. برای \fBzipf\fR این مقدار `Zipf theta' است. برای \fBpareto\fR مقدار `Pareto power' است. برنامه fio شامل یک برنامه آزمایشی به نام \fBfio\-genzipf\fR است که می‌تواند برای مصورسازی آنچه مقادیر ورودی داده‌شده از نظر نرخ اصابت حاصل می‌کنند به کار رود. اگر می‌خواستید از \fBzipf\fR با یک `theta' برابر با 1.2 استفاده کنید، از گزینه `random_distribution=zipf:1.2' استفاده می‌کردید. در صورت استفاده از یک مدل غیریکنواخت، fio استفاده از نگاشت تصادفی (random map) را غیرفعال خواهد کرد. برای توزیع \fBnormal\fR، یک انحراف نرمال (گاوسی) به صورت مقداری بین 0 تا 100 ارائه می‌شود. .P مقدار ممیز شناور دوم و اختیاری برای توزیع‌های \fBpareto\fR، \fBzipf\fR و \fBnormal\fR مجاز است. این مقدار امکان می‌دهد مبنای توزیع در مکانی غیر از پیش‌فرض تنظیم شود، که کنترل بیشتری روی محتمل‌ترین نتیجه فراهم می‌کند. این مقدار در بازه [0-1] است که به صورت خطی به محدوده مقادیر تصادفی ممکن نگاشت می‌شود. مقادیر پیش‌فرض عبارتند از: تصادفی برای \fBpareto\fR و \fBzipf\fR، و 0.5 برای \fBnormal\fR. اگر می‌خواستید از \fBzipf\fR با مقدار `theta` برابر با 1.2 و متمرکز بر ۱/۴ محدوده مجاز مقادیر استفاده کنید، از `random_distribution=zipf:1.2:0.25' استفاده می‌کردید. .P برای توزیع \fBzoned\fR، برنامه fio از تعیین درصدهایی از دسترسی I/O که باید در کدام محدوده از فایل یا دستگاه قرار گیرند پشتیبانی می‌کند. برای نمونه، با در نظر گرفتن این معیارها: .RS .P .PD 0 ۶۰٪ دسترسی‌ها باید به ۱۰٪ نخست باشد .P ۳۰٪ دسترسی‌ها باید به ۲۰٪ بعدی باشد .P ۸٪ دسترسی‌ها باید به ۳۰٪ بعدی باشد .P ۲٪ دسترسی‌ها باید به ۴۰٪ بعدی باشد .PD .RE .P می‌توانیم آن را از طریق ناحیه‌بندی دسترسی‌های تصادفی تعریف کنیم. برای مثال بالا، کاربر به این شیوه عمل می‌کند: .RS .P random_distribution=zoned:60/10:30/20:8/30:2/40 .RE .P یک توزیع \fBzoned_abs\fR دقیقاً مانند \fBzoned\fR عمل می‌کند، با این تفاوت که اندازه‌های مطلق را می‌گیرد. برای نمونه، فرض کنید می‌خواستید دسترسی را بر اساس معیارهای زیر تعریف کنید: .RS .P .PD 0 ۶۰٪ دسترسی‌ها باید به 20G نخست باشد .P ۳۰٪ دسترسی‌ها باید به 100G بعدی باشد .P ۱۰٪ دسترسی‌ها باید به 500G بعدی باشد .PD .RE .P می‌توانیم یک توزیع ناحیه‌بندی مطلق را با دستور زیر تعریف کنیم: .RS .P random_distribution=zoned:60/10:30/20:8/30:2/40 .RE .P برای هر دو توزیع \fBzoned\fR و \fBzoned_abs\fR، برنامه fio از تعریف تا حداکثر ۲۵۶ ناحیه جداگانه پشتیبانی می‌کند. .P مشابه روش عملکرد \fBbssplit\fR برای تنظیم محدوده‌ها و درصدهای اندازه‌های بلوک. همانند \fBbssplit\fR، تعیین نواحی جداگانه برای عملیات‌های خواندن، نوشتن و trim امکان‌پذیر است. اگر تنها یک مجموعه ارائه شود، برای همه آن‌ها اعمال خواهد شد. .RE.TP .BI percentage_random \fR=\fPint[,int][,int] برای یک بار کاری تصادفی، مشخص می‌کند چه درصدی از عملیات باید تصادفی باشد. مقدار پیش‌فرض این گزینه %100 است که در این حالت بار کاری کاملاً تصادفی خواهد بود. این مقدار می‌تواند از 0 تا 100 تنظیم شود. تنظیم آن روی 0 بار کاری را کاملاً ترتیبی می‌کند. هر مقداری بین این دو منجر به ترکیبی تصادفی از I/O ترتیبی و تصادفی، بر اساس درصدهای ارائه‌شده خواهد شد. مقادیر جداشده با کاما می‌توانند برای خواندن، نوشتن و trim مطابق با آنچه در \fBblocksize\fR توضیح داده شده است مشخص شوند. .TP .BI norandommap به‌طور معمول fio هنگام انجام I/O تصادفی، تمام بلوک‌های فایل را پوشش می‌دهد. اگر این گزینه مشخص شود، fio بدون نگاه کردن به تاریخچه قبلی I/O، صرفاً یک آفست تصادفی جدید دریافت می‌کند. این بدان معناست که ممکن است برخی بلوک‌ها اصلاً خوانده یا نوشته نشوند، و برخی بلوک‌ها بیش از یک بار خوانده/نوشته شوند. اگر این گزینه به همراه \fBverify\fR استفاده شود، \fBverify_header_seed\fR غیرفعال خواهد شد. اگر این گزینه به همراه \fBverify\fR و اندازه‌های بلوک چندگانه (از طریق \fBbsrange\fR) استفاده شود، تنها بلوک‌های دست‌نخورده اعتبارسنجی می‌شوند؛ یعنی بلوک‌هایی که تا حدی رونویسی (partially-overwritten) شده‌اند نادیده گرفته می‌شوند. با یک موتور I/O ناهمگام (async) و عمق I/O بیشتر از 1 (I/O depth > 1)، اعتبارسنجی شماره توالی نوشتن سرایند غیرفعال خواهد شد. \fBverify_write_sequence\fR را ببینید. .TP .BI softrandommap \fR=\fPbool به \fBnorandommap\fR مراجعه کنید. اگر fio با نگاشت بلوک تصادفیِ فعال اجرا شود و در تخصیص نگاشت با شکست مواجه گردد، در صورت تنظیم این گزینه، بدون نگاشت بلوک تصادفی به کار خود ادامه می‌دهد. از آنجا که پوشش بلوک‌ها به کاملیِ حالت نگاشت تصادفی نخواهد بود، این گزینه به صورت پیش‌فرض غیرفعال است. .TP .BI random_generator \fR=\fPstr برنامه fio از موتورهای زیر برای تولید آفست‌های I/O در عملیات تصادفی پشتیبانی می‌کند: .RS .RS .TP .B tausworthe تولیدکننده اعداد تصادفی قوی با چرخه 2^88. .TP .B lfsr تولیدکننده ثبات تغییر بازخورد خطی (Linear feedback shift register). .TP .B tausworthe64 تولیدکننده اعداد تصادفی قوی ۶۴ بیتی با چرخه 2^258. .RE .P \fBtausworthe\fR یک تولیدکننده اعداد تصادفی قوی است، اما اگر بخواهیم اطمینان حاصل کنیم که بلوک‌ها تنها یک‌بار خوانده یا نوشته می‌شوند، به ردیابی جانبی نیاز دارد. \fBlfsr\fR تضمین می‌کند که هرگز یک آفست دو بار تولید نشود و همچنین از نظر محاسباتی کم‌هزینه‌تر است. با این حال، یک تولیدکننده تصادفی واقعی نیست، گرچه برای اهداف I/O معمولاً به اندازه کافی خوب است. \fBlfsr\fR تنها با اندازه بلوک منفرد کار می‌کند، نه با بارهای کاری که از چندین اندازه بلوک استفاده می‌کنند. اگر با چنین بارهای کاری استفاده شود، ممکن است fio برخی بلوک‌ها را چندین بار بخواند یا بنویسد. مقدار پیش‌فرض \fBtausworthe\fR است، مگر اینکه فضای مورد نیاز از 2^32 بلوک فراتر رود؛ در این صورت \fBtausworthe64\fR به طور خودکار انتخاب می‌شود. .RE .TP .B sprandom=bool روش SPRandom روشی است که برای آماده‌سازی سریع اولیه (precondition) درایوهای SSD جهت بارهای کاری نوشتن تصادفی در وضعیت پایدار (steady-state) طراحی شده است. این روش دستگاه را به ناحیه‌هایی با اندازه یکسان تقسیم کرده و کل ظرفیت فیزیکی دستگاه را یک بار بازنویسی می‌کند، و آفست‌ها را به‌گونه‌ای انتخاب می‌نماید که ناحیه‌ها دارای توزیعی از بلوک‌های نامعتبر متناسب با توزیع رخ‌داده در وضعیت پایدار باشند. پیش‌فرض: false. این گزینه از \fBrandom_generator=lfsr\fR استفاده می‌کند که fio آن را به صورت پیش‌فرض تنظیم خواهد کرد. انتخاب هر مولد تصادفی دیگری منجر به خطا خواهد شد. .TP .B spr_num_regions=int به .BR sprandom مراجعه کنید. تعداد ناحیه‌های مورد استفاده برای SPRandom را مشخص می‌کند. پیش‌فرض: 100 .P .RS برای دستگاه‌های بزرگ، بهتر است از ناحیه‌های بیشتری استفاده شود تا دقت افزایش یافته و میزان حافظه تخصیص‌یافته کاهش یابد. این تخصیص متناسب با اندازه ناحیه است. .RE .TP .B spr_cs=int به .BR sprandom مراجعه کنید. اندازه حافظه موقت (کش) را بر حسب بایت، طبق مشخصات سازنده SSD تعیین می‌کند. .P .RS هنگامی که این مقدار غیر صفر باشد، نوشتن‌های نامعتبرکننده را به اندازه یک ناحیه به تعویق می‌اندازد تا اطمینان حاصل شود که تمام نوشتن‌های اولیه یک ناحیه قبل از ارسال نوشتن‌های نامعتبرکننده بعدی به دستگاه، از کش تخلیه (flush) شده‌اند. این تعویق از حضور همزمان نوشتن اولیه و نوشتن نامعتبرکننده بعدی در کش دستگاه جلوگیری می‌کند؛ چرا که در غیر این صورت دستگاه می‌توانست نوشتن اولیه را نادیده بگیرد و مانع از رسیدن sprandom به کسر معتبر هدف خود شود. اندازه واقعی کش برای این منظور استفاده می‌شود که اطمینان حاصل شود تعداد ناحیه‌ها آن‌قدر بزرگ تنظیم نشود که اندازه یک ناحیه از کش دستگاه کوچک‌تر گردد. پیش‌فرض: 0. .RE .TP .B spr_op=float به .BR sprandom مراجعه کنید. نسبت بیش‌تجهیز (Over-provisioning) در بازه (0, 1)، طبق مشخصات اعلام‌شده توسط سازنده SSD. پیش‌فرض: 0.15. .RE .SS "اندازه بلوک (Block size)" .TP .BI blocksize \fR=\fPint[,int][,int] "\fR,\fB bs" \fR=\fPint[,int][,int] اندازه بلوک بر حسب بایت که برای واحدهای I/O استفاده می‌شود. پیش‌فرض: 4096. تعیین یک مقدار منفرد برای خواندن، نوشتن و trim اعمال می‌شود. مقادیر جداشده با کاما می‌توانند برای خواندن، نوشتن و trim مشخص شوند. مقداری که به کاما ختم نشود به انواع بعدی اعمال می‌گردد. مثال‌ها: .RS .RS .P .PD 0 bs=256k به معنای 256k برای خواندن، نوشتن و trim است. .P bs=8k,32k به معنای 8k برای خواندن، و 32k برای نوشتن و trim است. .P bs=8k,32k, به معنای 8k برای خواندن، 32k برای نوشتن، و پیش‌فرض برای trim است. .P bs=,8k به معنای پیش‌فرض برای خواندن، و 8k برای نوشتن و trim است. .P bs=,8k, به معنای پیش‌فرض برای خواندن، 8k برای نوشتن، و پیش‌فرض برای trim است. .PD .RE .RE .TP .BI blocksize_range \fR=\fPirange[,irange][,irange] "\fR,\fB bsrange" \fR=\fPirange[,irange][,irange] محدوده‌ای از اندازه‌های بلوک بر حسب بایت برای واحدهای I/O. واحد I/O صادرشده همواره مضربی از حداقل اندازه خواهد بود، مگر اینکه \fBblocksize_unaligned\fR تنظیم شده باشد. محدوده‌های جداشده با کاما می‌توانند برای خواندن، نوشتن و trim مطابق آنچه در \fBblocksize\fR شرح داده شده است مشخص شوند. مثال: .RS .RS .P bsrange=1k\-4k,2k\-8k یا bsrange=1k:4k,2k:8k .RE .RE .TP .BI bssplit \fR=\fPstr[,str][,str] گاهی اوقات کنترل دقیق‌تری بر اندازه‌های بلوک صادرشده مورد نیاز است، نه صرفاً یک تقسیم یکنواخت بین آن‌ها. این گزینه به شما اجازه می‌دهد به اندازه‌های مختلف بلوک وزن اختصاص دهید، به‌طوری که بتوانید نسبت مشخصی از اندازه‌های بلوک صادرشده را تعیین کنید. ساختار این گزینه به شکل زیر است: .RS .RS .P bssplit=blocksize/percentage:blocksize/percentage .RE .P به تعداد اندازه‌های بلوک مورد نیاز. بنابراین اگر می‌خواهید بار کاری تعریف کنید که دارای %50 بلوک‌های 64k، %10 بلوک‌های 4k و %40 بلوک‌های 32k باشد، این‌گونه می‌نویسید: .RS .P bssplit=4k/10:64k/50:32k/40 .RE .P ترتیب آن‌ها اهمیتی ندارد. اگر درصد خالی رها شود، fio مقادیر باقی‌مانده را به صورت یکسان تقسیم خواهد کرد. بنابراین گزینه‌ای مانند این: .RS .P bssplit=4k/50:1k/:32k/ .RE .P دارای %50 عملیات 4k، و %25 عملیات برای هر یک از اندازه‌های 1k و 32k خواهد بود. مجموع درصدها همواره باید به 100 برسد؛ اگر به bssplit محدوده‌ای داده شود که مجموع آن بیشتر شود، با خطا متوقف خواهد شد. .P مقادیر جداشده با کاما می‌توانند برای خواندن، نوشتن و trim مطابق با توضیحات \fBblocksize\fR مشخص شوند. .P اگر باری کاری می‌خواهید که دارای %50 خواندن‌های 2k و %50 خواندن‌های 4k باشد، در حالی که دارای %90 نوشتن‌های 4k و %10 نوشتن‌های 8k است، به این صورت مشخص می‌کنید: .RS .P bssplit=2k/50:4k/50,4k/90:8k/10 .RE .P برنامه fio از تعریف حداکثر 64 وزن مختلف برای هر جهت داده پشتیبانی می‌کند. .RE .TP .BI blocksize_unaligned "\fR,\fB bs_unaligned" در صورت تنظیم، fio واحدهای I/O را با هر اندازه‌ای درون \fBblocksize_range\fR صادر می‌کند، نه فقط مضاربی از حداقل اندازه. این گزینه معمولاً با direct I/O کار نخواهد کرد، زیرا direct I/O معمولاً به تراز بخش (sector alignment) نیاز دارد. .TP .BI bs_is_seq_rand \fR=\fPbool اگر این گزینه تنظیم شود، fio تنظیمات معمول اندازه بلوک read,write را به عنوان تنظیمات اندازه بلوک sequential,random در نظر می‌گیرد. هر خواندن یا نوشتن تصادفی از تنظیمات اندازه بلوک WRITE، و هر خواندن یا نوشتن ترتیبی از تنظیمات اندازه بلوک READ استفاده خواهد کرد. .TP .BI blockalign \fR=\fPint[,int][,int] "\fR,\fB ba" \fR=\fPint[,int][,int] مرزی که fio واحدهای I/O تصادفی را با آن تراز می‌کند. پیش‌فرض: \fBblocksize\fR. حداقل میزان تراز برای استفاده از direct I/O معمولاً 512b است، اگرچه معمولاً به اندازه بلوک سخت‌افزاری بستگی دارد. این گزینه با استفاده از نگاشت تصادفی برای فایل‌ها مانعة‌الجمع است، بنابراین آن گزینه را غیرفعال خواهد کرد. مقادیر جداشده با کاما می‌توانند برای خواندن، نوشتن و trim مطابق آنچه در \fBblocksize\fR شرح داده شده است مشخص شوند..SS "بافرها و حافظه (Buffers and memory)" .TP .BI zero_buffers مقداردهی اولیه بافرها با تماماً صفر. پیش‌فرض: پر کردن بافرها با داده‌های تصادفی. .TP .BI refill_buffers اگر این گزینه مشخص شود، fio در هر بار ثبت I/O (عملیات submit)، بافرهای I/O را دوباره پر می‌کند. پیش‌فرض این است که بافرها فقط در زمان مقداردهی اولیه پر شده و مجدداً از همان داده‌ها استفاده شود. طبیعتاً تنها زمانی کاربرد دارد که zero_buffers تعیین نشده باشد. در صورت فعال بودن اعتبارسنجی داده‌ها (data verification)، گزینه \fBrefill_buffers\fR نیز به‌طور خودکار فعال می‌شود. .TP .BI scramble_buffers \fR=\fPbool اگر \fBrefill_buffers\fR بار پردازشی بالایی داشته باشد و مقصد از حذف داده‌های تکراری (deduplication) استفاده کند، تنظیم این گزینه محتویات بافر I/O را اندکی تغییر می‌دهد تا تلاش‌های معمول حذف داده‌های تکراری خنثی شود. این کار برای بی‌اثر کردن فشرده‌سازی‌های بلوکی هوشمندانه‌تر کافی نیست، اما جلوی dedupe ساده‌ی بلوک‌ها را می‌گیرد. پیش‌فرض: true. .TP .BI buffer_compress_percentage \fR=\fPint اگر این گزینه تنظیم شود، fio تلاش می‌کند محتوای بافر I/O را (در عملیات نوشتن/WRITE) به نحوی آماده کند که تا سطح تعیین‌شده فشرده شود. fio این کار را با ارائه ترکیبی از داده‌های تصادفی و به دنبال آن داده‌هایی با الگوی ثابت انجام می‌دهد. الگوی ثابت یا صفرها هستند، یا الگویی که توسط \fBbuffer_pattern\fR تعیین شده است. در صورت استفاده از گزینه \fBbuffer_pattern\fR، ممکن است نسبت فشرده‌سازی کمی تغییر کند. تنظیم \fBbuffer_compress_percentage\fR روی مقداری غیر از ۱۰۰ همچنین گزینه \fBrefill_buffers\fR را فعال می‌کند تا احتمال شباهت زیاد بلوک‌های مجاور و فشرده‌سازی بیش‌ازحد آن‌ها در کنار هم کاهش یابد. برای نحوه تنظیم دانه‌بندی (granularity) ریزتر یا درشت‌ترِ نواحی داده‌های تصادفی/ثابت، به \fBbuffer_compress_chunk\fR مراجعه کنید. پیش‌فرض تنظیم‌نشده است؛ یعنی داده‌های بافر از هیچ سطح فشرده‌سازی تبعیت نخواهند کرد. .TP .BI buffer_compress_chunk \fR=\fPint این تنظیم به fio اجازه می‌دهد تا اندازه ناحیه داده‌های تصادفی/ثابت را هنگام استفاده از \fBbuffer_compress_percentage\fR مدیریت کند. هنگامی که \fBbuffer_compress_chunk\fR روی مقدار غیرصفری کوچک‌تر از اندازه بلوک (block size) تنظیم شود، fio می‌تواند ناحیه تصادفی/ثابت را در فواصل مشخص‌شده در سراسر بافر I/O تکرار کند (که به‌ویژه زمانی که اندازه‌های بلوک بزرگ‌تری برای یک کار استفاده می‌شود کاربرد دارد). هنگامی که روی ۰ تنظیم شود، fio از اندازه‌ی تکه‌ای (chunk size) منطبق با اندازه بلوک استفاده خواهد کرد که منجر به یک ناحیه تصادفی/ثابت واحد درون بافر I/O می‌شود. پیش‌فرض: ۵۱۲. در صورت عدم ذکر واحد، مقدار بر حسب بایت تفسیر می‌شود. .TP .BI buffer_pattern \fR=\fPstr در صورت تنظیم، fio بافرهای I/O را با این الگو یا با محتویات یک فایل پر می‌کند. اگر تنظیم نشود، محتویات بافرهای I/O توسط سایر گزینه‌های مربوط به محتوای بافر تعیین می‌شود. این تنظیم می‌تواند هر الگویی از بایت‌ها باشد و برای مقادیر هگزادسیمال می‌تواند پیشوند 0x داشته باشد. همچنین می‌تواند یک رشته باشد، که در این صورت رشته باید داخل "" قرار گیرد. یا می‌تواند نام یک فایل باشد، که در این حالت نام فایل باید داخل '' قرار گیرد که در این صورت فایل باز و خوانده می‌شود. توجه داشته باشید که اگر خواندن تمام محتوای فایل باعث سرریز بافرها شود، تمام محتوای آن خوانده نخواهد شد. برای مثال: .RS .RS .P .PD 0 buffer_pattern='filename' .P یا: .P buffer_pattern="abcd" .P یا: .P buffer_pattern=\-12 .P یا: .P buffer_pattern=0xdeadface .PD .RE .P همچنین می‌توانید همه چیز را به هر ترتیبی با هم ترکیب کنید: .RS .P buffer_pattern=0xdeadface"abcd"\-12'filename' .RE .RE .TP .BI dedupe_percentage \fR=\fPint در صورت تنظیم، fio هنگام نوشتن این درصد از بافرهای یکسان را تولید می‌کند. این بافرها طبیعتاً قابلیت حذف تکرار (dedupe) دارند. محتویات بافرها به سایر تنظیمات فشرده‌سازی بافر که اعمال شده‌اند بستگی دارد. این امکان وجود دارد که بافرهای منفرد کاملاً قابل فشرده‌سازی باشند یا اصلاً فشرده نشوند \-\- این گزینه تنها توزیع بافرهای یکتا (unique) را کنترل می‌کند. تنظیم این گزینه همچنین \fBrefill_buffers\fR را فعال می‌کند تا از یکسان شدن همه بافرها جلوگیری شود. .TP .BI dedupe_mode \fR=\fPstr اگر \fBdedupe_percentage\fR مشخص شده باشد، این گزینه نحوه تولید بافرهای dedupe توسط fio را کنترل می‌کند. .RS .RS .TP .B repeat .P .RS تولید بافرهای dedupe با تکرار نوشتن‌های قبلی .RE .TP .B working_set .P .RS تولید بافرهای dedupe از مجموعه کاری (working set) .RE .RE .P گزینه \fBrepeat\fR حالت پیش‌فرض fio است. بافرهای dedupe با تکرار نوشتن‌های یکتای قبلی ایجاد می‌شوند. حالت \fBworking_set\fR یک بار کاری واقع‌گرایانه‌تر است. با انتخاب \fBworking_set\fR، باید گزینه \fBdedupe_working_set_percentage\fR نیز ارائه شود. با این کار، fio بافرهای نوشتن یکتای اولیه را به عنوان مجموعه کاری خود استفاده می‌کند. هنگامی که تصمیم به انجام dedupe گرفته شد، fio به طور تصادفی یک بافر از مجموعه کاری انتخاب می‌کند. توجه داشته باشید که با استفاده از \fBworking_set\fR، درصد dedupe به مرور زمان به مقدار مطلوب همگرا می‌شود؛ در حالی که \fBrepeat\fR مقدار درصد مطلوب را در طول کار حفظ می‌کند. .RE .TP .BI dedupe_working_set_percentage \fR=\fPint اگر \fBdedupe_mode\fR روی \fBworking_set\fR تنظیم شود، این گزینه درصدی از اندازه فایل یا دستگاه مورد استفاده به عنوان بافرها را کنترل می‌کند که fio برای تولید بافرهای dedupe از میان آن‌ها انتخاب خواهد کرد. .P .RS توجه داشته باشید که \fBsize\fR باید صریحاً مشخص شود و در هر کار (job) تنها از ۱ فایل پشتیبانی می‌شود. .RE .TP .BI dedupe_global \fR=\fPbool این گزینه کنترل می‌کند که آیا بافرهای حذف تکرار (deduplication) بین تمام کارهایی که این گزینه را فعال کرده‌اند به اشتراک گذاشته شوند یا خیر. بافرها به طور مساوی بین کارهای مشارکت‌کننده پخش می‌شوند. .P .RS توجه داشته باشید که برای کارکرد این گزینه، \fBdedupe_mode\fR باید روی \fBworking_set\fR تنظیم شده باشد. می‌تواند در ترکیب با فشرده‌سازی استفاده شود. .TP .BI invalidate \fR=\fPbool در صورت پشتیبانی پلتفرم و نوع فایل، بخش‌های کش بافر/صفحه (buffer/page cache) فایل‌های مورد استفاده را قبل از شروع I/O نامعتبر (invalidate) می‌کند. پیش‌فرض: true. اگر برای همان کار گزینه \fBpre_read\fR نیز مشخص شده باشد، این گزینه نادیده گرفته خواهد شد. .TP .BI sync \fR=\fPstr اینکه آیا، و از چه نوع I/O همگامی (synchronous I/O) برای نوشتن استفاده شود. مقادیر مجاز عبارتند از: .RS .RS .TP .B none عدم استفاده از I/O همگام؛ حالت پیش‌فرض. .TP .B 0 مشابه \fBnone\fR. .TP .B sync استفاده از I/O همگام فایل. برای اکثر موتورهای I/O، این به معنای استفاده از O_SYNC است. .TP .B 1 مشابه \fBsync\fR. .TP .B dsync استفاده از I/O همگام داده. برای اکثر موتورهای I/O، این به معنای استفاده از O_DSYNC است. .PD .RE .RE .TP .BI iomem \fR=\fPstr "\fR,\fP mem" \fR=\fPstr fio می‌تواند از انواع مختلف حافظه به عنوان بافر واحد I/O استفاده کند. مقادیر مجاز عبارتند از: .RS .RS .TP .B malloc استفاده از حافظه اختصاص‌یافته از \fBmalloc\fR\|(3) به عنوان بافرها. نوع حافظه پیش‌فرض. .TP .B shm استفاده از حافظه اشتراکی (shared memory) به عنوان بافرها. تخصیص‌یافته از طریق \fBshmget\fR\|(2). .TP .B shmhuge مشابه \fBshm\fR، اما با استفاده از صفحه‌های بزرگ (huge pages) به عنوان پشتیبان. .TP .B mmap استفاده از \fBmmap\fR\|(2) برای تخصیص بافرها. می‌تواند حافظه ناشناس (anonymous memory) باشد، یا در صورت ذکر نام فایل پس از گزینه، با فایل پشتیبانی شود (file-backed). قالب آن به صورت `mem=mmap:/path/to/file' است. .TP .B mmaphuge استفاده از یک فایل بزرگ نگاشت‌شده در حافظه به عنوان پشتیبان بافر. نام فایل پس از mmaphuge اضافه می‌شود، مانند `mem=mmaphuge:/hugetlbfs/file'. .TP .B mmapshared مشابه \fBmmap\fR، اما با استفاده از نگاشت MMAP_SHARED. .TP .B cudamalloc استفاده از حافظه GPU به عنوان بافرها برای بنچمارک GPUDirect RDMA. گزینه \fBioengine\fR باید \fBrdma\fR باشد. .RE .P فضای تخصیص‌یافته تابعی از حداکثر اندازه bs مجاز برای کار، ضربدر عمق I/O (I/O depth) مشخص‌شده است. توجه داشته باشید که برای کارکرد \fBshmhuge\fR و \fBmmaphuge\fR، سیستم باید صفحه‌های بزرگ آزاد تخصیص‌یافته داشته باشد. این مقدار معمولاً در سیستم‌های لینوکس با خواندن/نوشتن در `/proc/sys/vm/nr_hugepages' قابل بررسی و تنظیم است. fio بسته به پلتفرم، اندازه یک huge page را ۲ یا ۴ مبی‌بایت (MiB) فرض می‌کند. بنابراین برای محاسبه تعداد صفحه‌های بزرگ مورد نیاز برای یک فایل کاری مشخص، عمق I/O تمام کارها را جمع کنید (معمولاً یک است، مگر اینکه از \fBiodepth\fR استفاده شود) و در حداکثر bs تعیین‌شده ضرب نمایید. سپس آن عدد را بر اندازه huge page تقسیم کنید. می‌توانید اندازه huge pageها را در `/proc/meminfo' مشاهده نمایید. اگر با نبود یک عدد غیرصفر در `nr_hugepages' هیچ huge pageای تخصیص نیافته باشد، استفاده از \fBmmaphuge\fR یا \fBshmhuge\fR با شکست مواجه خواهد شد. همچنین به \fBhugepage\-size\fR مراجعه کنید. .P گزینه \fBmmaphuge\fR همچنین نیاز دارد که hugetlbfs سوار (mount) شده باشد و مسیر فایل باید به آنجا اشاره کند. بنابراین اگر در `/huge' سوار شده است، از `mem=mmaphuge:/huge/somefile' استفاده خواهید کرد. .RE.TP .BI iomem_align \fR=\fPint "\fR,\fP mem_align" \fR=\fPint این گزینه هم‌ترازی حافظه بافرهای حافظه I/O را مشخص می‌کند. توجه داشته باشید که هم‌ترازی مشخص‌شده برای بافر نخستین واحد I/O اعمال می‌شود؛ در صورت استفاده از \fBiodepth\fR، هم‌ترازی بافرهای بعدی بر اساس \fBbs\fR مورد استفاده تعیین خواهد شد. به عبارت دیگر، در صورت استفاده از یک \fBbs\fR که مضربی از اندازه صفحه (page size) در سیستم باشد، تمام بافرها با این مقدار هم‌تراز می‌شوند. در صورت استفاده از \fBbs\fR که با اندازه صفحه هم‌تراز نباشد، هم‌ترازی بافرهای حافظه I/O بعدی حاصل جمع \fBiomem_align\fR و \fBbs\fR استفاده‌شده خواهد بود. .TP .BI hugepage\-size \fR=\fPint اندازه یک huge page را تعریف می‌کند. باید حداقل برابر با تنظیمات سیستم باشد؛ به `/proc/meminfo' و `/sys/kernel/mm/hugepages/' مراجعه کنید. بسته به بستر اجرا، پیش‌فرض ۲ یا ۴ مگابایت (2MiB یا 4MiB) است. احتمالاً همیشه باید مضربی از مگابایت باشد، بنابراین استفاده از `hugepage\-size=Xm' روش ترجیحی برای تنظیم این گزینه است تا از تعیین مقادیر نامناسب که توانی از ۲ نیستند جلوگیری شود. .TP .BI lockmem \fR=\fPint قفل کردن (Pin) مقدار حافظه مشخص‌شده با استفاده از \fBmlock\fR\|(2). می‌تواند برای شبیه‌سازی مقدار کمتری از حافظه استفاده شود. مقدار مشخص‌شده به ازای هر worker است. .SS "اندازه I/O (I/O size)" .TP .BI size \fR=\fPint[%|z] اندازه کل I/O فایل برای هر رشته (thread) از این کار. برنامه fio تا زمانی که این مقدار بایت منتقل شود اجرا خواهد شد، مگر اینکه زمان اجرا توسط عوامل دیگری تغییر یابد، از جمله (۱) \fBruntime\fR، (۲) \fBio_size\fR، (۳) \fBnumber_ios\fR، (۴) فاصله‌ها/حفره‌ها حین انجام عملیات I/O مانند `rw=read:16K'، یا (۵) رسیدن I/O متوالی به پایان فایل که در صورت کمتر بودن \fBpercentage_random\fR از ۱۰۰ امکان‌پذیر است. برنامه fio این اندازه را میان فایل‌های موجود که توسط گزینه‌هایی مانند \fBnrfiles\fR و \fBfilename\fR تعیین شده‌اند تقسیم می‌کند، مگر اینکه \fBfilesize\fR توسط کار مشخص شده باشد. اگر حاصل تقسیم برابر ۰ شود، در صورت وجود فایل‌ها یا دستگاه‌ها، اندازه برابر با اندازه فیزیکی فایل‌ها یا دستگاه‌های داده‌شده تنظیم می‌شود. اگر این گزینه مشخص نشده باشد، fio از اندازه کامل فایل‌ها یا دستگاه‌های داده‌شده استفاده خواهد کرد. اگر فایل‌ها وجود نداشته باشند، اندازه باید مشخص شود. همچنین امکان تعیین اندازه به عنوان درصدی بین ۱ و ۱۰۰ وجود دارد. اگر `size=20%' داده شود، fio از ۲۰٪ اندازه کامل فایل‌ها یا دستگاه‌های داده‌شده استفاده خواهد کرد. در حالت ZBD، اندازه می‌تواند بر حسب تعداد zone با استفاده از 'z' تعیین شود. می‌توان آن را با \fBoffset\fR ترکیب کرد تا محدوده آغاز و پایان اجرای I/O محدود شود. .TP .BI io_size \fR=\fPint[%|z] "\fR,\fB io_limit" \fR=\fPint[%|z] به طور معمول fio در محدوده‌ای عمل می‌کند که توسط \fBsize\fR تعیین شده است، به این معنی که گزینه \fBsize\fR هم محدوده و هم اندازه I/O اجرایی را مشخص می‌کند. گاهی اوقات این مورد نظر نیست. با این گزینه، می‌توان تنها مقدار I/O را که fio باید انجام دهد مشخص کرد. برای مثال، اگر \fBsize\fR روی 20GiB و \fBio_size\fR روی 5GiB تنظیم شود، fio عملیات I/O را در محدوده 20GiB اول انجام می‌دهد اما پس از انجام 5GiB خارج می‌شود. حالت معکوس نیز امکان‌پذیر است \-\- اگر \fBsize\fR روی 20GiB و \fBio_size\fR روی 40GiB تنظیم شود، fio به میزان 40GiB عملیات I/O را درون محدوده 0..20GiB انجام خواهد داد. مقدار می‌تواند به صورت درصد نیز تعیین شود: \fBio_size\fR=N%. در این حالت مقدار \fBio_size\fR در مقدار =\fBsize\fR ضرب می‌شود. در حالت ZBD، مقدار می‌تواند با استفاده از 'z' به صورت تعداد zoneها نیز مشخص شود. .TP .BI filesize \fR=\fPirange(int) اندازه هر یک از فایل‌ها به صورت جداگانه. ممکن است یک بازه باشد، که در این حالت fio اندازه‌های فایل‌ها را به طور تصادفی در بازه داده‌شده انتخاب می‌کند. اگر مشخص نشود، هر فایل ایجادشده اندازه یکسانی خواهد داشت. این گزینه از نظر اندازه فایل بر \fBsize\fR اولویت دارد، یعنی \fBsize\fR صرفاً پیش‌فرضی برای \fBio_size\fR می‌شود (و اگر \fBio_size\fR به طور صریح تعیین شده باشد، اصلاً هیچ اثری نخواهد داشت). .TP .BI file_append \fR=\fPbool انجام I/O پس از انتهای فایل. به طور معمول fio در محدوده اندازه یک فایل عمل می‌کند. اگر این گزینه تنظیم شود، fio در عوض داده‌ها را به انتهای فایل ضمیمه (append) می‌کند. این رفتار مشابه تنظیم \fBoffset\fR به اندازه فایل است. این گزینه برای فایل‌های غیرعادی (non-regular) نادیده گرفته می‌شود. .TP .BI fill_device \fR=\fPbool "\fR,\fB fill_fs" \fR=\fPbool اندازه را روی مقداری بسیار بزرگ تنظیم می‌کند و برای ENOSPC (نبود فضای خالی روی دستگاه) یا EDQUOT (فراتر رفتن از سهمیه دیسک) به عنوان شرط خاتمه منتظر می‌ماند. تنها برای نوشتن ترتیبی منطقی است. برای بار کاری خواندن، ابتدا نقطه اتصال (mount point) پر شده و سپس I/O روی نتیجه آغاز می‌شود. .SS "موتور I/O (I/O engine)" .TP .BI ioengine \fR=\fPstr برنامه fio از ۲ نوع اندازه‌گیری کارایی پشتیبانی می‌کند: عملیات I/O و عملیات فایل/دایرکتوری. موتورهای I/O نحوه صدور درخواست I/O به فایل را توسط کار مشخص می‌کنند. انواع زیر تعریف شده‌اند: .RS .TP .B sync عملیات I/O پایه با \fBread\fR\|(2) یا \fBwrite\fR\|(2). از \fBlseek\fR\|(2) برای تعیین موقعیت I/O استفاده می‌شود. برای همگام‌سازی I/Oهای نوشتن، به \fBfsync\fR و \fBfdatasync\fR مراجعه کنید. .TP .B psync عملیات I/O پایه با \fBpread\fR\|(2) یا \fBpwrite\fR\|(2). پیش‌فرض در تمام سیستم‌عامل‌های پشتیبانی‌شده به جز Windows. .TP .B vsync عملیات I/O پایه با \fBreadv\fR\|(2) یا \fBwritev\fR\|(2). صف‌بندی را با ادغام (coalescing) I/Oهای مجاور در یک ارسال واحد شبیه‌سازی می‌کند. .TP .B pvsync عملیات I/O پایه با \fBpreadv\fR\|(2) یا \fBpwritev\fR\|(2). .TP .B pvsync2 عملیات I/O پایه با \fBpreadv2\fR\|(2) یا \fBpwritev2\fR\|(2). .TP .B io_uring ورودی/خروجی ناهمگام بومی و سریع لینوکس. از I/O ناهمگام هم برای direct IO و هم برای buffered IO پشتیبانی می‌کند. این موتور گزینه‌های مختص به خود را تعریف می‌کند. .TP .B io_uring_cmd ورودی/خروجی ناهمگام بومی و سریع لینوکس برای دستورهای passthrough. این موتور گزینه‌های مختص به خود را تعریف می‌کند. .TP .B libaio ورودی/خروجی ناهمگام بومی لینوکس. توجه داشته باشید که لینوکس ممکن است رفتار صف‌بندی‌شده را تنها برای I/O غیربافری پشتیبانی کند (`direct=1' یا `buffered=0' را تنظیم کنید). این موتور گزینه‌های مختص به خود را تعریف می‌کند. .TP .B posixaio ورودی/خروجی ناهمگام POSIX با استفاده از \fBaio_read\fR\|(3) و \fBaio_write\fR\|(3). .TP .B solarisaio ورودی/خروجی ناهمگام بومی Solaris. .TP .B windowsaio ورودی/خروجی ناهمگام بومی Windows. پیش‌فرض در Windows. .TP .B mmap فایل با استفاده از \fBmmap\fR\|(2) در حافظه نگاشت شده و داده‌ها با استفاده از \fBmemcpy\fR\|(3) کپی/خوانده می‌شوند. .TP .B splice از \fBsplice\fR\|(2) برای انتقال داده و از \fBvmsplice\fR\|(2) برای انتقال داده از فضای کاربری به هسته استفاده می‌شود. .TP .B sg ورودی/خروجی عمومی SCSI نگارش 3 (sg v3). می‌تواند با استفاده از SG_IO ioctl همگام باشد، یا اگر هدف یک دستگاه نویسه‌ای sg باشد، از \fBread\fR\|(2) و \fBwrite\fR\|(2) برای I/O ناهمگام استفاده می‌کند. برای تعیین دستگاه‌های بلوکی یا نویسه‌ای به گزینه \fBfilename\fR نیاز دارد. این موتور از عملیات trim پشتیبانی می‌کند. موتور sg شامل گزینه‌های مختص به خود است. .TP .B libzbc عملیات خواندن، نوشتن، trim و ZBC/ZAC روی دستگاه بلوکی زون‌بندی‌شده با استفاده از کتابخانه \fBlibzbc\fR. هدف می‌تواند یک دستگاه نویسه‌ای SG یا یک فایل دستگاه بلوکی باشد. .TP .B null هیچ داده‌ای را انتقال نمی‌دهد، بلکه تنها وانمود به انتقال می‌کند. عمدتاً برای به‌کارگیری خود fio و برای اهداف اشکال‌زدایی/آزمایش استفاده می‌شود. .TP .B net انتقال بر بستر شبکه به `host:port' مشخص‌شده. بسته به \fBprotocol\fR استفاده‌شده، گزینه‌های \fBhostname\fR، \fBport\fR، \fBlisten\fR و \fBfilename\fR برای تعیین نوع اتصالی که باید برقرار شود به کار می‌روند، در حالی که گزینه \fBprotocol\fR پروتکل مورد استفاده را مشخص می‌کند. این موتور گزینه‌های مختص به خود را تعریف می‌کند. .TP .B netsplice مشابه \fBnet\fR، اما از \fBsplice\fR\|(2) و \fBvmsplice\fR\|(2) برای نگاشت داده و ارسال/دریافت استفاده می‌کند. این موتور گزینه‌های مختص به خود را تعریف می‌کند. .TP .B cpuio هیچ داده‌ای را انتقال نمی‌دهد، اما چرخه‌های CPU را بر اساس گزینه‌های \fBcpuload\fR، \fBcpuchunks\fR و \fBcpumode\fR مصرف می‌کند. یک کار هرگز پایان نمی‌یابد مگر اینکه حداقل یک کار غیر-cpuio وجود داشته باشد. .RS .P .PD 0 \fBcpuload\fR=85 باعث می‌شود که کار هیچ کاری جز سوزاندن ۸۵٪ از CPU انجام ندهد. در ماشین‌های SMP، از \fBnumjobs=\fR\ برای دستیابی به مصرف مورد نظر پردازنده استفاده کنید، زیرا cpuload تنها یک پردازنده واحد را با نرخ مورد نظر بارگذاری می‌کند. .P \fBcpumode\fR=qsort حلقه دستورات پیش‌فرض noop را با الگوریتم qsort جایگزین می‌کند تا انرژی بیشتری مصرف شود. .PD .RE .TP .B rdma موتور I/O از نوع RDMA هم از معناشناسی حافظه RDMA (یعنی RDMA_WRITE/RDMA_READ) و هم از معناشناسی کانال (Send/Recv) برای پروتکل‌های InfiniBand، RoCE و iWARP پشتیبانی می‌کند. این موتور گزینه‌های مختص به خود را تعریف می‌کند. .TP .B falloc موتور I/O که دستور معمولی fallocate را برای شبیه‌سازی انتقال داده به عنوان ioengine در fio انجام می‌دهد. .RS .P .PD 0 DDIR_READ fallocate(,mode = FALLOC_FL_KEEP_SIZE,) را اجرا می‌کند. .P DIR_WRITE fallocate(,mode = 0) را اجرا می‌کند. .P DDIR_TRIM fallocate(,mode = FALLOC_FL_KEEP_SIZE|FALLOC_FL_PUNCH_HOLE) را اجرا می‌کند. .PD .RE.TP .B ftruncate موتور I/O که در پاسخ به رویدادهای نوشتن (DDIR_WRITE)، عملیات‌های \fBftruncate\fR\|(2) را ارسال می‌کند. هر ftruncate صادر شده، اندازه فایل را روی آفست بلوک جاری تنظیم می‌کند. مقدار \fBblocksize\fR نادیده گرفته می‌شود. .TP .B e4defrag موتور I/O که ioctlهای معمولی EXT4_IOC_MOVE_EXT را برای شبیه‌سازی فعالیت یکپارچه‌سازی دیسک (defragment) در پاسخ به رویداد DDIR_WRITE انجام می‌دهد. .TP .B rados موتور I/O با پشتیبانی از دسترسی مستقیم به Ceph Reliable Autonomic Distributed Object Store (RADOS) از طریق librados. این ioengine گزینه‌های مختص به خود را تعریف می‌کند. .TP .B rbd موتور I/O با پشتیبانی از دسترسی مستقیم به Ceph Rados Block Devices (RBD) از طریق librbd بدون نیاز به استفاده از درایور rbd هسته. این ioengine گزینه‌های مختص به خود را تعریف می‌کند. .TP .B http موتور I/O با پشتیبانی از درخواست‌های GET/PUT روی HTTP(S) با استفاده از libcurl به یک نقطه پایانی WebDAV یا S3. این ioengine گزینه‌های مختص به خود را تعریف می‌کند. این موتور تنها از I/O مستقیم با iodepth=1 پشتیبانی می‌کند؛ باید این مورد را از طریق numjobs مقیاس‌بندی کنید. مقدار blocksize اندازه اشیاء ایجاد شونده را مشخص می‌کند. دستور TRIM به حذف شیء ترجمه می‌شود. .TP .B gfapi استفاده از رابط همگام libgfapi در GlusterFS برای دسترسی مستقیم به حجم‌های ذخیره‌سازی GlusterFS بدون نیاز به گذر از FUSE. این ioengine گزینه‌های مختص به خود را تعریف می‌کند. .TP .B gfapi_async استفاده از رابط ناهمگام libgfapi در GlusterFS برای دسترسی مستقیم به حجم‌های ذخیره‌سازی GlusterFS بدون نیاز به گذر از FUSE. این ioengine گزینه‌های مختص به خود را تعریف می‌کند. .TP .B libhdfs خواندن و نوشتن از طریق Hadoop (HDFS). گزینه \fBfilename\fR برای مشخص کردن host,port مربوط به name\-node در hdfs جهت اتصال استفاده می‌شود. این موتور آفست‌ها را کمی متفاوت تفسیر می‌کند. در HDFS، فایل‌ها پس از ایجاد قابل تغییر نیستند، بنابراین نوشتن تصادفی امکان‌پذیر نیست. برای شبیه‌سازی این موضوع، موتور libhdfs انتظار دارد مجموعه‌ای از فایل‌های کوچک روی HDFS ایجاد شوند و به طور تصادفی فایلی را از میان آن‌ها بر اساس آفست ایجاد شده توسط بک‌اند fio انتخاب می‌کند (برای ایجاد چنین فایل‌هایی، فایل job نمونه را ببینید، از گزینه `rw=write' استفاده کنید). لطفاً توجه داشته باشید که ممکن است برای کارکرد صحیح با HDFS/libhdfs، تنظیم متغیرهای محیطی لازم باشد. هر job از اتصال اختصاصی خود به HDFS استفاده می‌کند. .TP .B mtd خواندن، نوشتن و پاک کردن دستگاه نویسه‌ای MTD (مانند `/dev/mtd0'). عملیات‌های discard به عنوان erase در نظر گرفته می‌شوند. بسته به نوع دستگاه زیربنایی، ممکن است لازم باشد I/O طبق الگوی خاصی انجام شود؛ برای مثال، در NAND، نوشتن ترتیبی در بلوک‌های erase و انجام discard قبل از بازنویسی (overwriting). حالت \fBtrimwrite\fR برای این محدودیت به خوبی عمل می‌کند. .TP .B dev\-dax خواندن و نوشتن با استفاده از device DAX روی یک دستگاه حافظه پایدار (مانند /dev/dax0.0) از طریق کتابخانه PMDK libpmem. .TP .B external پیشوندی برای مشخص کردن بارگذاری یک فایل شیء (object file) از موتور I/O خارجی. نام فایل موتور را پیوست کنید، برای مثال `ioengine=external:/tmp/foo.o' جهت بارگذاری ioengine با نام `foo.o' در پوشه `/tmp'. مسیر می‌تواند مطلق یا نسبی باشد. برای جزئیات نوشتن یک موتور I/O خارجی، فایل `engines/skeleton_external.c' را در سورس fio ببینید. .TP .B libpmem خواندن و نوشتن با استفاده از mmap I/O روی فایلی در یک سیستم‌فایل سوارشده (mounted) با DAX روی یک دستگاه حافظه پایدار از طریق کتابخانه PMDK libpmem. .TP .B ime_psync خواندن و نوشتن همگام با استفاده از Infinite Memory Engine (IME) متعلق به DDN. این موتور بسیار ابتدایی است و هر زمان که یک IO در صف قرار گیرد، فراخوانی‌هایی را به IME صادر می‌کند. .TP .B ime_psyncv خواندن و نوشتن همگام با استفاده از Infinite Memory Engine (IME) متعلق به DDN. این موتور از iovecها استفاده کرده و پیش از صدور فراخوانی به IME، تلاش می‌کند تا جای ممکن عملیات‌های IO را روی هم انباشته کند (اگر IOها «پیوسته» باشند و از عمق IO فراتر نرود). .TP .B ime_aio خواندن و نوشتن ناهمگام با استفاده از Infinite Memory Engine (IME) متعلق به DDN. این موتور تلاش می‌کند با ایجاد درخواست‌ها برای IME، تا حد ممکن عملیات‌های IO را روی هم انباشته کند. سپس FIO تصمیم می‌گیرد که چه زمانی این درخواست‌ها ثبت (commit) شوند. .TP .B libiscsi خواندن و نوشتن iscsi lun با استفاده از libiscsi. .TP .B nbd خواندن و نوشتن همگام در یک Network Block Device (NBD). .TP .B libcufile موتور I/O با پشتیبانی از دسترسی همگام libcufile به nvidia-fs و یک سیستم‌فایل با پشتیبانی از GPUDirect Storage. این موتور I/O را بدون انتقال بافرها بین فضای کاربری و هسته انجام می‌دهد، مگر اینکه \fBverify\fR تنظیم شده باشد یا \fBcuda_io\fR برابر با \fBposix\fR باشد. مقدار \fBiomem\fR نباید \fBcudamalloc\fR باشد. این ioengine گزینه‌های مختص به خود را تعریف می‌کند. .TP .B dfs موتور I/O با پشتیبانی از عملیات‌های خواندن و نوشتن ناهمگام در DAOS File System (DFS) از طریق libdfs. .TP .B nfs موتور I/O با پشتیبانی از عملیات‌های خواندن و نوشتن ناهمگام در سیستم‌فایل‌های NFS از فضای کاربری از طریق libnfs. این ویژگی برای دستیابی به همزمانی بیشتر و در نتیجه توان عملیاتی (throughput) بالاتر نسبت به NFS هسته مفید است. .TP .B exec اجرای ابزارهای شخص ثالث (3rd party). می‌تواند برای انجام پایش در حین اجرای jobها استفاده شود. .TP .B xnvme موتور I/O با استفاده از API زبان C مربوط به xNVMe، برای دستگاه‌های NVMe. موتور xnvme انعطاف‌پذیری لازم را جهت دسترسی به درایور NVMe هسته GNU/Linux از طریق libaio، فراخوانی‌های IOCTL، io_uring، درایور NVMe مربوط به SPDK، یا درایور سفارشی شما فراهم می‌کند. موتور xnvme شامل گزینه‌های اختصاصی این موتور است. (ببینید: \fIhttps://xnvme.io\fR). .TP .B libblkio استفاده از کتابخانه libblkio (\fIhttps://gitlab.com/libblkio/libblkio\fR). درایور خاص مورد استفاده باید با \fBlibblkio_driver\fR تنظیم شود. اگر \fBmem\fR/\fBiomem\fR مشخص نشده باشد، تخصیص حافظه به libblkio واگذار می‌شود (و در نتیجه کارکرد آن با درایور انتخاب‌شده تضمین می‌شود). برای هر فرایند از یک نمونه libblkio استفاده می‌شود، بنابراین تمام jobهایی که گزینه \fBthread\fR را تنظیم کرده‌اند یک نمونه مشترک خواهند داشت (با یک صف به ازای هر thread) و باید گزینه‌های سازگار را مشخص کنند. توجه داشته باشید که برخی از درایورها اجازه دسترسی همزمان چندین نمونه به همان دستگاه یا فایل را نمی‌دهند، اما این کار را برای threadها مجاز می‌دانند. .RE .P موتورهای عملیات فایل/دایرکتوری نحوه کارکرد job روی فایل یا دایرکتوری را مشخص می‌کنند. انواع زیر تعریف شده‌اند: .RS .TP .B filecreate صرفاً ایجاد فایل‌ها بدون انجام هیچگونه I/O روی آن‌ها. هنوز نیاز است که \fBfilesize\fP را تنظیم کنید تا تمام محاسبات آماری انجام شود، اما به جز ایجاد فایل هیچ I/O واقعی انجام نخواهد شد. فایل job نمونه: filecreate-ioengine.fio. .TP .B filestat صرفاً اجرای stat() بدون انجام هیچ I/O روی فایل. باید \fBfilesize\fP و \fBnrfiles\fP را تنظیم کنید تا فایل‌ها ایجاد شوند. این موتور برای سنجش جستجوی فایل و دسترسی به فراداده (metadata) است. فایل job نمونه: filestat-ioengine.fio. .TP .B filedelete صرفاً حذف فایل‌ها با unlink() بدون انجام I/O روی آن‌ها. باید \fBfilesize\fP و \fBnrfiles\fP را تنظیم کنید تا فایل‌ها ایجاد شوند. این موتور برای سنجش حذف فایل است. فایل job نمونه: filedelete-ioengine.fio. .TP .B dircreate صرفاً ایجاد دایرکتوری‌ها بدون انجام هیچگونه I/O روی آن‌ها. هنوز نیاز است که \fBfilesize\fP را تنظیم کنید تا تمام محاسبات آماری انجام شود، اما به جز ایجاد دایرکتوری‌ها هیچ I/O واقعی انجام نخواهد شد. فایل job نمونه: dircreate-ioengine.fio. .TP .B dirstat صرفاً اجرای stat() بدون انجام I/O روی دایرکتوری‌ها. باید \fBfilesize\fP و \fBnrfiles\fP را تنظیم کنید تا دایرکتوری‌ها ایجاد شوند. این موتور برای سنجش جستجوی دایرکتوری و دسترسی به فراداده (metadata) است. فایل job نمونه: dirstat-ioengine.fio. .TP .B dirdelete صرفاً حذف دایرکتوری‌ها با rmdir() بدون انجام I/O روی آن‌ها. باید \fBfilesize\fP و \fBnrfiles\fP را تنظیم کنید تا دایرکتوری‌ها ایجاد شوند. این موتور برای سنجش حذف دایرکتوری است. .P برای موتورهای عملیات فایل و دایرکتوری، هیچ توان عملیاتی I/O وجود ندارد، بنابراین داده‌های \ آماری در گزارش معانی متفاوتی دارند. شاخص‌های خروجی معنادار عبارتند از: \fBiops\fP و \fBclat\fP. \ مقدار \fBbw\fP بی‌معنی است. برای جزئیات بیشتر به بخش «Interpreting the output» مراجعه کنید. .RE.SS "پارامترهای اختصاصی موتورهای I/O" علاوه بر این، پارامترهایی وجود دارند که تنها هنگام استفاده از یک \fBioengine\fR خاص معتبر هستند. این‌ها همانند پارامترهای عادی استفاده می‌شوند، با این هشدار که هنگام استفاده در خط فرمان، باید پس از انتخاب \fBioengine\fR تعریف‌کننده‌شان قرار گیرند. .TP .BI (io_uring,libaio)cmdprio_percentage \fR=\fPint[,int] درصد I/Oهایی که با بالاترین اولویت صادر می‌شوند را تعیین می‌کند. پیش‌فرض: 0. یک مقدار منفرد برای خواندن‌ها و نوشتن‌ها اعمال می‌شود. مقادیر جداشده با کاما می‌توانند برای خواندن‌ها و نوشتن‌ها مشخص شوند. برای اثربخش بودن این گزینه، اولویت NCQ باید پشتیبانی و فعال شده باشد، و گزینه `direct=1' باید استفاده شود. همچنین fio باید به عنوان کاربر root اجرا گردد. برخلاف آمارهای slat/clat/lat که می‌توانند به‌طور مستقل ردیابی و گزارش شوند، آمارهای به ازای هر اولویت تنها یک نوع تاخیر را ردیابی و گزارش می‌کنند. به‌طور پیش‌فرض، تاخیر تکمیل (clat) گزارش خواهد شد؛ اگر \fBlat_percentiles\fR تنظیم شده باشد، تاخیر کل (lat) گزارش خواهد شد. .TP .BI (io_uring,libaio)cmdprio_class \fR=\fPint[,int] کلاس اولویت I/O را برای I/Oهایی که هنگام تنظیم \fBcmdprio_percentage\fR یا \fBcmdprio_bssplit\fR باید با اولویت صادر شوند، تعیین می‌کند. اگر هنگام تنظیم \fBcmdprio_percentage\fR یا \fBcmdprio_bssplit\fR مشخص نشود، پیش‌فرض بالاترین کلاس اولویت است. یک مقدار منفرد برای خواندن‌ها و نوشتن‌ها اعمال می‌شود. مقادیر جداشده با کاما می‌توانند برای خواندن‌ها و نوشتن‌ها مشخص شوند. به صفحه راهنمای \fBionice\fR\|(1) مراجعه کنید. همچنین گزینه \fBprioclass\fR را ببینید. .TP .BI (io_uring,libaio)cmdprio_hint \fR=\fPint[,int] نشانه اولویت I/O (priority hint) را برای I/Oهایی که هنگام تنظیم \fBcmdprio_percentage\fR یا \fBcmdprio_bssplit\fR باید با اولویت صادر شوند، تعیین می‌کند. اگر هنگام تنظیم \fBcmdprio_percentage\fR یا \fBcmdprio_bssplit\fR مشخص نشود، پیش‌فرض 0 (بدون نشانه) است. یک مقدار منفرد برای خواندن‌ها و نوشتن‌ها اعمال می‌شود. مقادیر جداشده با کاما می‌توانند برای خواندن‌ها و نوشتن‌ها مشخص شوند. همچنین گزینه \fBpriohint\fR را ببینید. .TP .BI (io_uring,libaio)cmdprio \fR=\fPint[,int] مقدار اولویت I/O را برای I/Oهایی که هنگام تنظیم \fBcmdprio_percentage\fR یا \fBcmdprio_bssplit\fR باید با اولویت صادر شوند، تعیین می‌کند. اگر هنگام تنظیم \fBcmdprio_percentage\fR یا \fBcmdprio_bssplit\fR مشخص نشود، پیش‌فرض 0 است. لینوکس ما را به یک مقدار مثبت بین 0 تا 7 محدود می‌کند که 0 بالاترین اولویت است. یک مقدار منفرد برای خواندن‌ها و نوشتن‌ها اعمال می‌شود. مقادیر جداشده با کاما می‌توانند برای خواندن‌ها و نوشتن‌ها مشخص شوند. به صفحه راهنمای \fBionice\fR\|(1) مراجعه کنید. برای سایر سیستم‌عامل‌ها به صفحه راهنمای مناسب رجوع کنید زیرا ممکن است معنای اولویت متفاوت باشد. همچنین گزینه \fBprio\fR را ببینید. .TP .BI (io_uring,libaio)cmdprio_bssplit \fR=\fPstr[,str] برای داشتن کنترل دقیق‌تر بر روی اولویت I/O، این گزینه امکان تعیین درصد I/Oهایی را فراهم می‌کند که بسته به اندازه بلوک (block size) ورودی/خروجی باید دارای اولویت باشند. این گزینه تنها زمانی مفید است که همراه با گزینه \fBbssplit\fR استفاده شود، یعنی زمانی که چندین اندازه بلوک مختلف برای خواندن‌ها و نوشتن‌ها استفاده می‌شود. .RS .P نخستین قالب پذیرفته‌شده برای این گزینه همانند قالب گزینه \fBbssplit\fR است: .RS .P cmdprio_bssplit=blocksize/percentage:blocksize/percentage .RE .P در این حالت، هر ورودی به‌ترتیب از کلاس اولویت، نشانه اولویت و سطح اولویت تعریف‌شده توسط گزینه‌های \fBcmdprio_class\fR، \fBcmdprio\fR و \fBcmdprio_hint\fR استفاده خواهد کرد. .P دومین قالب پذیرفته‌شده برای این گزینه عبارت است از: .RS .P cmdprio_bssplit=blocksize/percentage/class/level:blocksize/percentage/class/level .RE .P در این حالت، کلاس اولویت و سطح اولویت در داخل هر ورودی تعریف می‌شود. در مقایسه با نخستین قالب، قالب دوم محدود نمی‌کند که همه ورودی‌ها کلاس اولویت و سطح اولویت یکسانی داشته باشند. .P سومین قالب پذیرفته‌شده برای این گزینه عبارت است از: .RS .P cmdprio_bssplit=blocksize/percentage/class/level/hint:... .RE .P این توسعه‌ای از قالب دوم است که امکان تعیین یک نشانه اولویت (priority hint) را نیز فراهم می‌کند. .P برای تمام قالب‌ها، تنها جهت‌های داده‌ای خواندن و نوشتن پشتیبانی می‌شوند و مقادیر مربوط به I/Oهای trim نادیده گرفته می‌شوند. این گزینه با گزینه \fBcmdprio_percentage\fR مانعة‌الجمع است و نمی‌توانند هم‌زمان استفاده شوند. .RE .TP .BI (io_uring,io_uring_cmd)fixedbufs اگر از fio خواسته شود I/O مستقیم (direct IO) انجام دهد، لینوکس برای هر فراخوانی IO صفحه‌ها را نگاشت (map) می‌کند و پس از اتمام IO آن‌ها را آزاد می‌سازد. اگر این گزینه تنظیم شود، صفحه‌ها پیش از شروع IO از پیش نگاشت می‌شوند. این کار نیاز به نگاشت و آزادسازی برای هر IO را از بین می‌برد. این روش کارآمدتر بوده و تاخیر IO را نیز کاهش می‌دهد. .TP .BI (io_uring,io_uring_cmd)nonvectored \fR=\fPint با این گزینه، fio از دستورهای خواندن/نوشتن غیربرداری (non-vectored) استفاده می‌کند که در آن‌ها آدرس باید مستقیماً حاوی نشانی باشد. پیش‌فرض \-1 است. .TP .BI (io_uring,io_uring_cmd)force_async عملکرد عادی io_uring به این صورت است که ابتدا تلاش می‌کند یک sqe را به‌صورت غیرمسدودکننده (non-blocking) صادر کند، و در صورت شکست، آن را به‌شیوه ناهمگام (async) اجرا نماید. با تنظیم این گزینه بر روی N، در هر N درخواست fio تقاضا می‌کند که sqe به‌شیوه ناهمگام صادر شود. پیش‌فرض 0 است. .TP .BI (io_uring,io_uring_cmd,xnvme)hipri اگر این گزینه تنظیم شود، fio تلاش خواهد کرد از تکمیل‌های پایش‌شده ورودی/خروجی (polled IO completions) استفاده کند. تکمیل‌های عادی IO برای اعلام اتمام وقفه (interrupt) ایجاد می‌کنند، در حالی که تکمیل‌های پایش‌شده چنین نیستند؛ بنابراین نیازمند جمع‌آوری فعال (active reaping) توسط برنامه هستند. مزایای آن، IO کارآمدتر برای سناریوهای با IOPS بالا و تاخیر کمتر برای IO با عمق صف پایین است. .TP .BI (io_uring,io_uring_cmd)registerfiles با این گزینه، fio مجموعه فایل‌های در حال استفاده را نزد هسته ثبت می‌کند. این امر از بار اضافی مدیریت تعداد فایل‌ها در هسته جلوگیری کرده و بخش ارسال (submission) و تکمیل (completion) را سبک‌تر می‌سازد. برای گزینه \fBsqthread_poll\fR در زیر الزامی است. .TP .BI (io_uring,io_uring_cmd,xnvme)sqthread_poll به‌طور معمول fio ورودی/خروجی را با صدور یک فراخوانی سیستمی ارسال می‌کند تا هسته را از آیتم‌های موجود در حلقه SQ مطلع سازد. اگر این گزینه تنظیم شود، عمل ارسال IO توسط یک ریسه پایش (polling thread) در هسته انجام خواهد شد. این کار چرخه‌های پردازشی را برای fio آزاد می‌کند، اما به بهای مصرف CPU بیشتر در سیستم تمام می‌شود. از آنجا که ارسال تنها شامل زمان لازم برای پر کردن ورودی‌های sqe و هر فراخوانی سیستمی مورد نیاز برای بیدار کردن ریسه غیرفعال هسته است، fio تاخیرهای ارسال (submission latencies) را گزارش نخواهد کرد. .TP .BI (io_uring,io_uring_cmd)sqthread_poll_cpu \fR=\fPint هنگامی که `sqthread_poll` تنظیم شده باشد، این گزینه روشی برای تعیین این که کدام CPU باید برای ریسه پایش استفاده شود فراهم می‌کند. .TP .BI (io_uring_cmd)cmd_type \fR=\fPstr نوع دستور uring passthrough را برای استفاده مشخص می‌کند. مقدار پشتیبانی‌شده nvme است. پیش‌فرض nvme است. .TP .BI (libaio)userspace_reap به‌طور عادی، هنگام استفاده از موتور libaio، برنامه fio از فراخوانی سیستمی \fBio_getevents\fR\|(3) برای جمع‌آوری رویدادهای بازگشتی جدید استفاده می‌کند. با روشن بودن این پرچم، حلقه AIO مستقیماً از فضای کاربری برای جمع‌آوری رویدادها خوانده می‌شود. حالت جمع‌آوری تنها زمانی فعال می‌شود که پایش حداقل برای 0 رویداد صورت گیرد (مثلاً هنگامی که `iodepth_batch_complete=0`). .TP .BI (pvsync2)hipri پرچم RWF_HIPRI را بر روی I/O تنظیم می‌کند، که به هسته نشان می‌دهد این عملیات دارای اولویتی بالاتر از حالت عادی است. .TP .BI (pvsync2)hipri_percentage هنگامی که hipri تنظیم شده باشد، این گزینه احتمال اولویت‌بالا بودن یک I/O در pvsync2 را تعیین می‌کند. پیش‌فرض 100% است. .TP .BI (pvsync2,libaio,io_uring,io_uring_cmd)nowait \fR=\fPbool به‌طور پیش‌فرض اگر درخواستی نتواند بلافاصله اجرا شود (مثلاً کمبود منابع یا انتظار روی قفل‌ها)، در صف قرار می‌گیرد و فرایند آغازگر تا زمان آزاد شدن منبع مورد نیاز مسدود خواهد شد. این گزینه پرچم RWF_NOWAIT را تنظیم می‌کند (از هسته لینوکس 4.14 پشتیبانی می‌شود) و فراخوانی به جای معطل ماندن، فوراً با EAGAIN یا یک نتیجه جزئی بازمی‌گردد. استفاده از \fBignore_error\fR=EAGAIN نیز همراه با این گزینه مفید است. نکته: در بسته‌بندهای فراخوانی سیستمی preadv2 و pwritev2 در glibc نسخه‌های 2.27 و 2.28 یک باگ وجود دارد که به جای EAGAIN مقدار EOPNOTSUP را بازمی‌گردانند. برای I/Oهای دارای حافظه نهان (cached I/O)، استفاده از این گزینه معمولاً به این معنی است که یک درخواست تنها با داده‌های حافظه‌نهان‌شده کار می‌کند. در حال حاضر پرچم RWF_NOWAIT برای نوشتن حافظه‌نهان‌شده پشتیبانی نمی‌شود. برای I/O مستقیم، درخواست‌ها تنها در صورتی موفق خواهند شد که ابطال حافظه نهان لازم نباشد، بلوک‌های فایل به‌طور کامل تخصیص یافته باشند و درخواست دیسک بتواند فوراً صادر شود. .TP .BI (pvsync2,io_uring)uncached \fR=\fPint این گزینه I/O بافتری را بدون نگه‌داشتن داده‌ها در حافظه نهان صفحه (page cache) پس از پایان عملیات، انجام می‌دهد. خواندن‌ها مانند یک خواندن بافتری معمولی کار می‌کنند، اما صفحه‌ها بلافاصله پس از کپی داده‌ها به فضای کاربری کنار گذاشته (evict) می‌شوند. نوشتن‌ها مانند نوشتن بافتری عمل می‌کنند اما یک writeback پیش از بازگشت فراخوانی سیستمی آغاز می‌شود. پس از اتمام writeback، صفحه‌ها بیرون رانده می‌شوند. این گزینه پرچم RWF_UNCACHED را (از هسته لینوکس 6.14 پشتیبانی می‌شود) بر پایه هر I/O تنظیم می‌کند. .TP .BI (pvsync2,libaio,io_uring)atomic \fR=\fPbool این گزینه بدین معناست که نوشتن‌ها با حفاظت در برابر نوشتن تکه‌تکه (torn-write protection) صادر می‌شوند؛ بدین مفهوم که در صورت قطع برق یا از کار افتادن هسته، تمام داده‌های نوشتن ذخیره می‌شوند یا هیچ‌کدام، و هرگز ترکیبی از داده‌های قدیم و جدید نخواهد بود. حفاظت torn-write با نام نوشتن‌های اتمی (atomic writes) نیز شناخته می‌شود. این گزینه پرچم RWF_ATOMIC را (از هسته لینوکس 6.11 پشتیبانی می‌شود) بر پایه هر I/O تنظیم می‌کند. نوشتن‌هایی که RWF_ATOMIC در آن‌ها تنظیم شده است، در صورتی که فایل از حفاظت torn-write پشتیبانی نکند توسط هسته رد خواهند شد. برای اطلاع از محدودیت‌های torn-write یک فایل، دستور statx را با STATX_WRITE_ATOMIC اجرا کنید. .TP .BI (io_uring_cmd,xnvme)fdp \fR=\fPbool فعال‌سازی حالت Flexible Data Placement برای دستورهای نوشتن. .TP .BI (io_uring_cmd,xnvme)dataplacement \fR=\fPstr نوع دستورالعمل data placement را برای استفاده در دستورهای نوشتن مشخص می‌کند. انواع زیر پشتیبانی می‌شوند: .RS .RS .TP .B none از دستورالعمل data placement استفاده نشود. این پیش‌فرض است. .TP .B fdp استفاده از دستورالعمل‌های Flexible Data Placement برای دستورهای نوشتن. این معادل مشخص کردن \fBfdp\fR=1 است..TP .B streams استفاده از دستورالعمل‌های Streams برای دستورات نوشتن (write). .RE .RE .TP .BI (io_uring_cmd,xnvme)plid_select=str, fdp_pli_select \fR=\fPstr تعیین می‌کند که fio چگونه تصمیم می‌گیرد کدام شناسهٔ جای‌گذاری (placement ID) را در نوبت بعدی به کار ببرد. انواع زیر تعریف شده‌اند: .RS .RS .TP .B random انتخاب یک شناسهٔ جای‌گذاری (placement ID) به‌صورت تصادفی (یکنواخت). .TP .B roundrobin چرخش نوبتی (Round robin) بین شناسه‌های جای‌گذاری موجود. این مقدار پیش‌فرض است. .TP .B scheme انتخاب یک شناسهٔ جای‌گذاری (اندیس) بر اساس فایل طرحوارهٔ تعریف‌شده توسط گزینهٔ \fBdp_scheme\fP. .RE .P شناسه‌های (اندیس‌های) جای‌گذاری موجود به‌وسیلهٔ گزینهٔ \fBplids\fR یا \fBfdp_pli\fR تعریف می‌شوند، مگر در حالت \fBscheme\fP. .RE .TP .BI (io_uring_cmd,xnvme)plids=str, fdp_pli \fR=\fPstr مشخص می‌کند که این کار (job) مجاز به استفاده از کدام اندیس‌های شناسهٔ جای‌گذاری (FDP) یا شناسه‌های جای‌گذاری (streams) برای نوشتن است. این گزینه فهرستی از مقادیر یا محدوده‌های جداشده با کاما را می‌پذیرد (برای نمونه 1,2-4,5,6-8). برای FDP به‌طور پیش‌فرض، کار در میان تمام شناسه‌های جای‌گذاری موجود گردش می‌کند، بنابراین از این گزینه برای انتخاب موردی استفاده کنید. مقادیر مشخص‌شده در اینجا، اندیس‌های آرایه برای فهرست شناسه‌های جای‌گذاری بازگردانده‌شده توسط دستور nvme-cli یعنی `nvme fdp status' هستند. اگر می‌خواهید fio فقط از شناسه‌های جای‌گذاری FDP در اندیس‌های 0، 2 و 5 استفاده کند، `plids=0,2,5' را تنظیم کنید. برای streams این باید فهرستی از Stream IDها باشد. .TP .BI (io_uring_cmd,xnvme)\fR\fBdp_scheme\fP=str تعیین می‌کند کدام شناسهٔ جای‌گذاری (اندیس) بر اساس محدودهٔ آفست (LBA) انتخاب شود. فایل باید شامل یک یا چند مدخل طرحواره در قالب زیر باشد: .sp .RS .RS 0, 10737418240, 0 .br 10737418240, 21474836480, 1 .br 21474836480, 32212254720, 2 .br \&... .RE .sp هر خط به عنوان یک مدخل طرحواره، شامل آفست شروع، آفست پایان و شناسهٔ جای‌گذاری (اندیس) است که با کاما (,) جدا شده‌اند. اگر آفست نوشتن در محدودهٔ یک مدخل طرحوارهٔ خاص باشد (start offset ≤ offset < end offset)، شناسهٔ جای‌گذاری (اندیس) متناظر انتخاب خواهد شد. اگر آفست نوشتن متعلق به چند مدخل طرحواره باشد، اولین مدخل منطبق اعمال می‌شود. اگر آفست در هیچ محدوده‌ای از مدخل‌های طرحواره نباشد، فیلد dspec روی 0، یعنی RUH پیش‌فرض تنظیم خواهد شد. (احتیاط: در صورت وجود چند دستگاه در یک کار، تمام دستگاه‌های آن کار تحت تأثیر طرحواره قرار خواهند گرفت. در صورت مشخص شدن این گزینه، گزینهٔ \fBplids\fP یا \fBfdp_pli\fP نادیده گرفته خواهد شد.) .RE .TP .BI (io_uring_cmd,xnvme)md_per_io_size \fR=\fPint اندازه بر حسب بایت برای بافر فرادادهٔ جداگانه به ازای هر IO. برای io_uring_cmd این بافرها بدون توجه به مقدار تنظیم‌شده برای \fBiomem\fR، با استفاده از malloc تخصیص می‌یابند. پیش‌فرض: 0. .TP .BI (io_uring_cmd,xnvme)pi_act \fR=\fPint عملیاتی که در صورت قالب‌بندی فضای‌نام nvme با اطلاعات محافظت (protection information) انجام می‌شود. اگر روی 1 تنظیم شود و فضای‌نام با اندازهٔ فراداده برابر با اندازهٔ اطلاعات محافظت قالب‌بندی شده باشد، fio از بافر فرادادهٔ جداگانه یا بلوک منطقی گسترش‌یافته استفاده نخواهد کرد. اگر روی 1 تنظیم شود و فضای‌نام با اندازهٔ فراداده بزرگ‌تر از اندازهٔ اطلاعات محافظت قالب‌بندی شده باشد، fio بخش اطلاعات محافظت از فراداده را به ترتیب برای عملیات نوشتن یا خواندن تولید یا اعتبارسنجی نخواهد کرد. اگر روی 0 تنظیم شود، fio اطلاعات محافظت را برای حالت نوشتن تولید و برای حالت خواندن اعتبارسنجی می‌کند. پیش‌فرض: 1. برای تولید CRC شانزده بیتی (16 bit)، در صورت موجود بودن، fio از isa-l استفاده می‌کند؛ در غیر این صورت از تولیدکنندهٔ پیش‌فرض با سرعت کمتر استفاده خواهد شد. (ببینید: https://github.com/intel/isa-l) .TP .BI (io_uring_cmd,xnvme)pi_chk \fR=\fPstr[,str][,str] بررسی اطلاعات محافظت را کنترل می‌کند. این گزینه می‌تواند یک یا چند مورد از این مقادیر را بپذیرد. پیش‌فرض: none. .RS .RS .TP .B GUARD بررسی اطلاعات محافظت مربوط به فیلد guard را فعال می‌کند. .TP .B REFTAG بررسی اطلاعات محافظت مربوط به فیلد برچسب مرجع بلوک منطقی (logical block reference tag) را فعال می‌کند. .TP .B APPTAG بررسی اطلاعات محافظت مربوط به فیلد برچسب برنامه (application tag) را فعال می‌کند. .RE .RE .TP .BI (io_uring_cmd,xnvme)apptag \fR=\fPint در صورتی که فضای‌نام برای استفاده از اطلاعات محافظت سرتاسری قالب‌بندی شده باشد، مقدار برچسب برنامهٔ (application tag) بلوک منطقی را مشخص می‌کند. پیش‌فرض: 0x1234. .TP .BI (io_uring_cmd,xnvme)apptag_mask \fR=\fPint در صورتی که فضای‌نام برای استفاده از اطلاعات محافظت سرتاسری قالب‌بندی شده باشد، مقدار ماسک برچسب برنامهٔ (application tag mask) بلوک منطقی را مشخص می‌کند. پیش‌فرض: 0xffff. .TP .BI (io_uring_cmd)num_range \fR=\fPint برای دستور trim، این مقدار تعداد محدوده‌هایی خواهد بود که در هر درخواست I/O تریم می‌شوند. تعداد بلوک‌های منطقی در هر محدوده توسط گزینهٔ \fBbs\fR تعیین می‌شود که باید مضربی از اندازهٔ بلوک منطقی باشد. این گزینه همراه با خواندن یا نوشتن قابل استفاده نیست. توجه داشته باشید که با تنظیم این گزینه بزرگ‌تر از 1 (> 1)، گزینهٔ \fBlog_offset\fR قادر به ثبت تمام آفست‌ها نخواهد بود. پیش‌فرض: 1. .TP .BI (cpuio)cpuload \fR=\fPint تلاش برای استفاده از درصد مشخص‌شده‌ای از چرخه‌های CPU. این گزینه هنگام استفاده از موتور ورودی/خروجی cpuio اجباری است. .TP .BI (cpuio)cpuchunks \fR=\fPint تقسیم بار کاری به چرخه‌هایی با مدت‌زمان داده‌شده. بر حسب میکروثانیه. .TP .BI (cpuio)cpumode \fR=\fPstr نحوهٔ اعمال بار کاری به CPU را مشخص می‌کند. می‌تواند این دو مقدار را بپذیرد: .RS .RS .TP .B noop این مقدار پیش‌فرض است و به CPU دستور می‌دهد تا دستورالعمل‌های noop را اجرا کند. .TP .B qsort دستورالعمل‌های پیش‌فرض noop را با الگوریتم qsort جایگزین می‌کند تا انرژی بیشتری مصرف شود. .RE .RE .TP .BI (cpuio)exit_on_io_done \fR=\fPbool تشخیص زمان اتمام نخ‌های I/O و سپس خروج. .TP .BI (libhdfs)namenode \fR=\fPstr نام میزبان (hostname) یا نشانی IP مربوط به namenode خوشهٔ HDFS جهت برقراری ارتباط. .TP .BI (libhdfs)port \fR=\fPint درگاه شنود namenode خوشهٔ HDFS. .TP .BI (netsplice,net)port \fR=\fPint درگاه TCP یا UDP برای bind شدن یا اتصال به آن. اگر این گزینه همراه با \fBnumjobs\fR برای ایجاد چندین نمونه از یک نوع کار استفاده شود، این درگاه به عنوان شماره درگاه شروع خواهد بود زیرا fio از محدوده‌ای از درگاه‌ها استفاده خواهد کرد. .TP .BI (rdma)port \fR=\fPint درگاه مورد استفاده برای ارتباط RDMA-CM. این مقدار باید در سمت کارخواه (client) و کارساز (server) یکسان باشد. .TP .BI (netsplice,net,rdma)hostname \fR=\fPstr نام میزبان یا نشانی IP مورد استفاده برای I/O مبتنی بر TCP، UDP یا RDMA-CM. اگر کار یک شنوندهٔ TCP یا خوانندهٔ UDP باشد، hostname استفاده نمی‌شود و باید حذف شود مگر اینکه یک نشانی معتبر چندپخشی (multicast) در UDP باشد. .TP .BI (netsplice,net)interface \fR=\fPstr نشانی IP رابط شبکه که برای ارسال یا دریافت چندپخشی UDP استفاده می‌شود. .TP .BI (netsplice,net)ttl \fR=\fPint مقدار Time\-to\-live برای بسته‌های چندپخشی خروجی UDP. پیش‌فرض: 1. .TP .BI (netsplice,net)nodelay \fR=\fPbool تنظیم TCP_NODELAY روی اتصال‌های TCP. .TP .BI (netsplice,net)protocol \fR=\fPstr "\fR,\fP proto" \fR=\fPstr پروتکل شبکه برای استفاده. مقادیر پذیرفته‌شده عبارتند از: .RS .RS .TP .B tcp پروتکل کنترل انتقال (Transmission control protocol). .TP .B tcpv6 پروتکل کنترل انتقال نسخهٔ ۶ (Transmission control protocol V6). .TP .B udp پروتکل بسته‌دادهٔ کاربر (User datagram protocol). .TP .B udpv6 پروتکل بسته‌دادهٔ کاربر نسخهٔ ۶ (User datagram protocol V6). .TP .B unix سوکت دامنهٔ یونیکس (UNIX domain socket). .TP .B vsock پروتکل VSOCK. .RE .P هنگامی که پروتکل TCP، UDP یا VSOCK باشد، درگاه (port) نیز باید ارائه شود؛ همچنین اگر کار یک شنوندهٔ TCP یا VSOCK یا یک خوانندهٔ UDP باشد، hostname نیز باید داده شود. برای سوکت‌های unix، باید از گزینهٔ معمولی \fBfilename\fR استفاده شود و درگاه نامعتبر است. هنگامی که پروتکل VSOCK است، \fBhostname\fR همان CID ماشین مجازی راه دور خواهد بود. .RE.TP .BI (netsplice,net)listen برای اتصال‌های شبکه TCP، به fio اعلام می‌کند که به جای برقراری یک اتصال خروجی، منتظر اتصال‌های ورودی بماند (listen کند). در صورت استفاده از این گزینه، \fBhostname\fR باید حذف شود. .TP .BI (netsplice,net)pingpong در حالت عادی، یک نویسنده شبکه فقط به نوشتن داده ادامه می‌دهد و یک خواننده شبکه فقط بسته‌ها را دریافت و مصرف می‌کند. اگر `pingpong=1' تنظیم شود، نویسنده بار داده (payload) معمول خود را به خواننده ارسال می‌کند، سپس منتظر می‌ماند تا خواننده همان بار داده را برگرداند. این قابلیت به fio اجازه می‌دهد تا تاخیرهای شبکه را بسنجد. تاخیرهای ثبت (submission) و تکمیل (completion) در این حالت زمان محلی صرف‌شده برای ارسال یا دریافت را می‌سنجند، و تاخیر تکمیل مشخص می‌کند چه مدت طول کشیده است تا طرف مقابل داده را دریافت کرده و پس بفرستد. برای ترافیک چندپخشی (multicast) در UDP، هنگامی که چندین خواننده به یک نشانی یکسان گوش می‌دهند، `pingpong=1' باید تنها برای یک خواننده واحد تنظیم شود. .TP .BI (netsplice,net)window_size \fR=\fPint اندازه بافر سوکت مورد نظر را برای اتصال تنظیم می‌کند. .TP .BI (netsplice,net)mss \fR=\fPint بیشینه اندازه سگمنت TCP (TCP_MAXSEG) را تنظیم می‌کند. .TP .BI (e4defrag)donorname \fR=\fPstr فایلی که به عنوان اهداکننده بلوک (donor) برای تعویض وسعت‌ها (extents) بین فایل‌ها استفاده می‌شود. .TP .BI (e4defrag)inplace \fR=\fPint راهبرد تخصیص بلوک‌های فایل اهداکننده را پیکربندی می‌کند: .RS .RS .TP .B 0 پیش‌فرض. پیش‌تخصیص فایل اهداکننده در زمان راه‌اندازی اولیه. .TP .B 1 تخصیص فوری فضا درون رخداد یکپارچه‌سازی (defragment) و آزادسازی بلافاصله پس از پایان رخداد. .RE .RE .TP .BI (rbd,rados)clustername \fR=\fPstr نام کلاستر Ceph را مشخص می‌کند. .TP .BI (rbd)rbdname \fR=\fPstr نام RBD را مشخص می‌کند. .TP .BI (rbd,rados)pool \fR=\fPstr نام استخر (pool) در Ceph که حاوی داده‌های RBD یا RADOS است را مشخص می‌کند. .TP .BI (rbd,rados)clientname \fR=\fPstr نام کاربری (بدون پیشوند 'client.') مورد استفاده برای دسترسی به کلاستر Ceph را مشخص می‌کند. اگر \fBclustername\fR مشخص شده باشد، \fBclientname\fR باید رشته کامل *type.id* باشد. اگر هیچ پیشوند type. داده نشود، fio به طور پیش‌فرض 'client.' را اضافه خواهد کرد. .TP .BI (rados)conf \fR=\fPstr مسیر پیکربندی کلاستر ceph را مشخص می‌کند، بنابراین فایل conf لزوماً نباید /etc/ceph/ceph.conf باشد. .TP .BI (rbd,rados)busy_poll \fR=\fPbool به جای انتظار برای تکمیل، مخزن را پایش مداوم (poll) می‌کند. این گزینه معمولاً توان عملیاتی بهتری به قیمت مصرف بالاتر پردازنده (تا ۱۰۰٪) فراهم می‌کند. .TP .BI (rados)touch_objects \fR=\fPbool در طول راه‌اندازی اولیه، همه اشیاء (فایل‌ها) را لمس (در صورت عدم وجود ایجاد) می‌کند. لمس همه اشیاء بر حافظه‌های موقت ceph تأثیر می‌گذارد و احتمالاً نتایج آزمون را دگرگون می‌سازد. به طور پیش‌فرض فعال است. .TP .BI (rbd)rbd_encryption_format \fR=\fPstr قالب رمزنگاری ایمیج RBD را مشخص می‌کند. مقادیر پشتیبانی‌شده `luks1' و `luks2' هستند. در صورت تعیین، \fBrbd_encryption_passphrase\fR نیز باید مشخص شود. توجه داشته باشید که ایمیج باید از قبل با استفاده از `rbd encryption format ' قالب‌بندی شده باشد؛ موتور rbd در fio تنها تلاش خواهد کرد بستر رمزنگاری را بارگذاری کند، نه اینکه ایمیج را فرمت کند. قابلیت رمزنگاری RBD به طور پیش‌فرض غیرفعال است. پشتیبانی از این ویژگی نیازمند نسخه ۱۶.۲ librbd (Ceph Pacific) یا جدیدتر است. .TP .BI (rbd)rbd_encryption_passphrase \fR=\fPstr عبارت‌عبور مورد استفاده برای باز کردن قفل ایمیج رمزنگاری‌شده RBD. در صورت مشخص بودن \fBrbd_encryption_format\fR الزامی است. .TP .BI (http)http_host \fR=\fPstr نام میزبانی که باید به آن متصل شد. در صورتی که مقدار پارامتر \fBhttps\fP برابر با \fBoff\fP باشد، پورت ۸۰ در HTTP به طور خودکار استفاده می‌شود و در صورت فعال بودن (\fBon\fP) پورت ۴۴۳ در HTTPS به کار می‌رود. نام میزبان S3 به سبک virtual-hosted با نام یک باکت آغاز می‌شود، در حالی که نام میزبان S3 به سبک path-style این‌گونه نیست. پیش‌فرض \fBlocalhost\fR است. .TP .BI (http)http_user \fR=\fPstr نام کاربری برای احراز هویت HTTP. .TP .BI (http)http_pass \fR=\fPstr گذرواژه برای احراز هویت HTTP. .TP .BI (http)https \fR=\fPstr مشخص می‌کند که آیا به جای HTTP معمولی از HTTPS استفاده شود یا خیر. مقدار \fBon\fP پروتکل HTTPS را فعال می‌کند؛ مقدار \fBinsecure\fP پروتکل HTTPS را فعال می‌سازد، اما اعتبارسنجی همتای SSL را غیرفعال می‌کند (با احتیاط استفاده شود!). پیش‌فرض \fBoff\fR است. .TP .BI (http)http_mode \fR=\fPstr حالت دسترسی HTTP مورد استفاده: webdav، swift یا s3. پیش‌فرض \fBwebdav\fR است. .TP .BI (http)http_s3_region \fR=\fPstr منطقه/ناحیه (region/zone) در S3 که باید در درخواست گنجانده شود. پیش‌فرض \fBus-east-1\fR است. .TP .BI (http)http_s3_key \fR=\fPstr کلید محرمانه (secret key) در S3. .TP .BI (http)http_s3_keyid \fR=\fPstr شناسه دسترسی/کلید (access id) در S3. .TP .BI (http)http_s3_security_token \fR=\fPstr توکن امنیتی S3. .TP .BI (http)http_s3_sse_customer_key \fR=\fPstr کلید رمزنگاری مشتری در سمت سرور SSE. .TP .BI (http)http_s3_sse_customer_algorithm \fR=\fPstr الگوریتم رمزنگاری مشتری در سمت سرور SSE. پیش‌فرض \fBAES256\fR است. .TP .BI (http)http_s3_storage_class \fR=\fPstr کلاس ذخیره‌سازی برای دسترسی. تنظیماتی که توسط کاربر قابل سفارشی‌سازی است. پیش‌فرض \fBSTANDARD\fR است. .TP .BI (http)http_swift_auth_token \fR=\fPstr توکن احراز هویت Swift. برای نحوه دریافت آن به فایل پیکربندی نمونه مراجعه کنید. .TP .BI (http)http_verbose \fR=\fPint فعال‌سازی گزارش‌دهی پرجزئیات (verbose) درخواست‌ها از libcurl. برای اشکال‌زدایی مفید است. مقدار 1 گزارش‌دهی پرجزئیات libcurl را فعال می‌کند و مقدار 2 علاوه بر آن ردگیری ورودی/خروجی HTTP را نیز به کار می‌اندازد. پیش‌فرض \fB0\fR است. .TP .BI (http)http_object_mode \fR=\fPstr نحوه ساختاردهی اشیاء برای ورودی/خروجی HTTP: block یا range. پیش‌فرض \fBblock\fR است. .RS .RS .TP .B block برای هر بلوک یک شیء ایجاد می‌شود. موتور HTTP پارامتر \fBblocksize\fR را به عنوان اندازه شیء برای خواندن یا نوشتن در نظر می‌گیرد، و آفست‌های شروع/پایان بلوک را به \fBfilename\fR الحاق می‌کند تا مسیر شیء هدف را بسازد. عملیات خواندن و نوشتن هر بار روی کل اشیاء انجام می‌شود. .TP .B range برای هر فایل یک شیء ایجاد می‌شود. مسیر شیء برای هر دو عملیات خواندن و نوشتن I/O مستقیماً همان نام فایل است. برای درخواست‌های خواندن، از \fBblocksize\fR و \fBoffset\fR برای تنظیم سرایند "Range" در درخواست‌ها استفاده می‌شود تا خواندن‌های جزئی از شیء انجام گیرد. برای درخواست‌های نوشتن، همانند حالت \fBblock\fR از blocksize برای تنظیم اندازه شیء استفاده می‌شود. .RE .RE .TP .BI (mtd)skip_bad \fR=\fPbool صرف‌نظر کردن از عملیات روی بلوک‌های خرابِ شناخته‌شده (bad blocks). .TP .BI (libhdfs)hdfsdirectory کتابخانه libhdfs تکه‌ها (chunks) را در این دایرکتوری HDFS ایجاد خواهد کرد. .TP .BI (libhdfs)chunk_size اندازه تکه مورد استفاده برای هر فایل. .TP .BI (rdma)verb \fR=\fPstr دستور (verb) در RDMA برای استفاده در این سمت از اتصال موتور ورودی/خروجی RDMA. مقادیر معتبر عبارتند از write، read، send و recv. این موارد با دستورهای معادل RDMA متناظر هستند (مثلاً write = rdma_write و غیره). توجه داشته باشید که این مقدار تنها باید در سمت کلاینت اتصال مشخص شود. پوشه مثال‌ها را بررسی کنید. .TP .BI (rdma)bindname \fR=\fPstr نام مورد استفاده برای مقیدسازی (bind) اتصال محلی RDMA-CM به یک دستگاه محلی RDMA. این مقدار می‌تواند یک نام میزبان یا یک نشانی IPv4 یا IPv6 باشد. در سمت سرور این مقدار به تابع rdma_bind_addr() ارسال خواهد شد و در سمت کلاینت در تابع rdma_resolve_add() استفاده خواهد شد. این گزینه زمانی که چندین مسیر بین کلاینت و سرور وجود دارد یا در پیکربندی‌های خاص بازگشتی (loopback) کاربرد دارد. .TP .BI (filestat)stat_type \fR=\fPstr نوع فراخوانی سیستمی stat را برای اندازه‌گیری کارایی lookup/getattr مشخص می‌کند. پیش‌فرض برای \fBstat\fR\|(2) مقدار \fBstat\fR است. .TP .BI (sg)hipri اگر این گزینه تنظیم شود، fio تلاش خواهد کرد تا از اتمام‌های پایش‌شده ورودی/خروجی (polled IO completions) استفاده کند. این گزینه تأثیری مشابه با (io_uring)hipri خواهد داشت. تنها دستورهای READ و WRITE در SCSI دارای پرچم SGV4_FLAG_HIPRI خواهند بود (نه UNMAP (trim) و نه VERIFY). نسخه‌های قدیمی‌تر درایور sg لینوکس که از hipri پشتیبانی نمی‌کنند، به سادگی این پرچم را نادیده گرفته و ورودی/خروجی معمولی را انجام می‌دهند. درایور سطح پایین SCSI لینوکس (LLD) که «مالک» دستگاه است نیز باید از hipri (همچنین شناخته‌شده به عنوان iopoll و mq_poll) پشتیبانی کند. درایور MegaRAID نمونه‌ای از یک SCSI LLD است. پیش‌فرض: غیرفعال (0) که ورودی/خروجی معمولی (مبتنی بر وقفه) را انجام می‌دهد. .TP .BI (sg, io_uring_cmd)readfua \fR=\fPbool با تنظیم گزینه readfua بر روی 1، عملیات‌های خواندن شامل پرچم دسترسی اجباری به واحد (fua) خواهند بود. پیش‌فرض: 0. .TP .BI (sg, io_uring_cmd)writefua \fR=\fPbool با تنظیم گزینه writefua بر روی 1، عملیات‌های نوشتن شامل پرچم دسترسی اجباری به واحد (fua) خواهند بود. پیش‌فرض: 0. .TP .BI (io_uring_cmd)write_mode \fR=\fPstr نوع عملیات نوشتن را مشخص می‌کند. پیش‌فرض 'write' است. .RS .RS.TP .B write استفاده از دستورهای Write برای عملیات‌های نوشتن .TP .B uncor استفاده از دستورهای Write Uncorrectable برای عملیات‌های نوشتن .TP .B zeroes استفاده از دستورهای Write Zeroes برای عملیات‌های نوشتن .TP .B verify استفاده از دستورهای Verify برای عملیات‌های نوشتن .RE .RE .TP .BI (io_uring_cmd)verify_mode \fR=\fPstr نوع دستوری که قرار است در فاز اعتبارسنجی استفاده شود را مشخص می‌کند. پیش‌فرض \(lqread\(rq است. .RS .RS .TP .B read استفاده از دستورهای Read برای اعتبارسنجی داده‌ها .TP .B compare استفاده از دستورهای Compare برای اعتبارسنجی داده‌ها. این گزینه تنها با الگو(های) مشخصی معتبر است، به این معنی که *باید* همراه با `verify=pattern` و `verify_pattern=` ارائه شود. .RE .RE .TP .BI (sg)sg_write_mode \fR=\fPstr نوع دستورهای نوشتن ارسالی را مشخص می‌کند. این گزینه می‌تواند مقادیر چندگانه‌ای بپذیرد: .RS .RS .TP .B write (default) کدهای دستوری (opcodeهای) Write طبق معمول صادر می‌شوند .TP .B write_and_verify دستورهای WRITE AND VERIFY را صادر می‌کند. بیت BYTCHK روی 00b تنظیم می‌شود. این کار به دستگاه دستور می‌دهد تا بدون مقایسه داده‌ها، اعتبارسنجی رسانه را برای داده‌های نوشته‌شده انجام دهد. گزینه writefua با این انتخاب نادیده گرفته می‌شود. .TP .B verify این گزینه منسوخ شده است. به جای آن از write_and_verify استفاده کنید. .TP .B write_same دستورهای WRITE SAME را صادر می‌کند. این کار یک بلوک منفرد را به دستگاه منتقل کرده و همان بلوک داده را در دنباله‌ای پیوسته از LBAها که از آفست مشخص‌شده شروع می‌شود، می‌نویسد. پارامتر اندازه بلوک fio، حجم داده‌های نوشته‌شده با هر دستور را تعیین می‌کند. با این حال، مقدار داده‌ای که در واقع به دستگاه منتقل می‌شود برابر با اندازه بلوک (سکتور) دستگاه است. برای دستگاهی با سکتورهای ۵۱۲ بایتی، blocksize=8k با هر دستور ۱۶ سکتور را می‌نویسد. fio همچنان برای هر دستور ۸ کیلوبایت داده تولید می‌کند، اما تنها ۵۱۲ بایت اول استفاده شده و به دستگاه منتقل خواهد شد. گزینه writefua با این انتخاب نادیده گرفته می‌شود. .TP .B same این گزینه منسوخ شده است. به جای آن از write_same استفاده کنید. .TP .B write_same_ndob دستورهای WRITE SAME(16) را مشابه بالا اما با تنظیم بودن بیت No Data Output Buffer (NDOB) صادر می‌کند. با تنظیم بودن این بیت، هیچ داده‌ای به دستگاه منتقل نخواهد شد. داده‌های نوشته‌شده الگویی از پیش تعیین‌شده مانند تماماً صفر خواهند بود. .TP .B write_stream دستورهای WRITE STREAM(16) را صادر می‌کند. از گزینه stream_id برای تعیین شناسه جریان استفاده کنید. .TP .B verify_bytchk_00 دستورهای VERIFY را با تنظیم BYTCHK روی 00 صادر می‌کند. این کار دستگاه را هدایت می‌کند تا اعتبارسنجی رسانه را بدون مقایسه داده انجام دهد. .TP .B verify_bytchk_01 دستورهای VERIFY را با تنظیم BYTCHK روی 01 صادر می‌کند. این کار دستگاه را هدایت می‌کند تا داده‌های موجود روی دستگاه را با داده‌های منتقل‌شده به دستگاه مقایسه کند. .TP .B verify_bytchk_11 دستورهای VERIFY را با تنظیم BYTCHK روی 11 صادر می‌کند. این کار یک بلوک منفرد را به دستگاه منتقل کرده و محتوای این بلوک را با داده‌های روی دستگاه که از آفست مشخص‌شده شروع می‌شوند مقایسه می‌کند. پارامتر اندازه بلوک fio، مقدار کل داده‌های مقایسه‌شده با این دستور را تعیین می‌کند. با این حال، تنها داده‌های به اندازه یک بلوک (سکتور) به دستگاه منتقل می‌شود. این مشابه دستور WRITE SAME است، با این تفاوت که داده‌ها به جای نوشته‌شدن، مقایسه می‌شوند. .RE .RE .TP .BI (sg)stream_id \fR=\fPint شناسه جریان را برای دستورهای WRITE STREAM تنظیم می‌کند. اگر این گزینه روی 0 (که یک شناسه معتبر نیست) تنظیم شود، fio یک جریان را باز کرده و پس از اتمام کار آن را می‌بندد. پیش‌فرض 0 است. .TP .BI (nbd)uri \fR=\fPstr شناسه NBD URI سرور مورد آزمایش را مشخص می‌کند. این رشته یک NBD URI استاندارد است (ببینید: \fIhttps://github.com/NetworkBlockDevice/nbd/tree/master/doc\fR). نمونه‌های URI: .RS .RS .TP \fInbd://localhost:10809\fR .TP \fInbd+unix:///?socket=/tmp/socket\fR .TP \fInbds://tlshost/exportname\fR .RE .RE .TP .BI (libcufile)gpu_dev_ids\fR=\fPstr شناسه‌های GPU را برای استفاده با CUDA مشخص می‌کند. این یک فهرست از اعداد صحیح است که با دو‌نقطه از هم جدا شده‌اند. GPUها به صورت چرخشی (roundrobin) به workerها تخصیص داده می‌شوند. پیش‌فرض 0 است. .TP .BI (libcufile)cuda_io\fR=\fPstr نوع I/O مورد استفاده با CUDA را مشخص می‌کند. این گزینه مقادیر زیر را می‌پذیرد: .RS .RS .TP .B cufile (default) استفاده از libcufile و nvidia-fs. این گزینه I/O را مستقیماً بین یک سیستم‌فایل GPUDirect Storage و بافرهای GPU انجام می‌دهد و از استفاده از بافر جهشی (bounce buffer) جلوگیری می‌کند. اگر \fBverify\fR تنظیم شده باشد، از cudaMemcpy برای کپی کردن داده‌های اعتبارسنجی بین RAM و GPU(ها) استفاده می‌شود. داده‌های اعتبارسنجی پیش از نوشتن از RAM به GPU و پس از خواندن از GPU به RAM کپی می‌شوند. مقدار \fBdirect\fR باید 1 باشد. .TP .BI posix استفاده از POSIX برای انجام I/O با بافر RAM، و استفاده از cudaMemcpy برای انتقال داده‌ها بین RAM و GPU(ها). داده‌ها پیش از نوشتن از GPU به RAM کپی شده و پس از خواندن از RAM به GPU کپی می‌شوند. مقدار \fBverify\fR تأثیری بر استفاده از cudaMemcpy ندارد. .RE .RE .TP .BI (dfs)pool برچسب یا UUID استخر DAOS را برای اتصال مشخص می‌کند. .TP .BI (dfs)cont برچسب یا UUID کانتینر DAOS را برای باز کردن مشخص می‌کند. .TP .BI (dfs)chunk_size اندازه تکه (chunk size) متفاوتی (به بایت) برای فایل dfs مشخص می‌کند. به طور پیش‌فرض از اندازه تکه کانتینر DAOS استفاده می‌شود. .TP .BI (dfs)object_class کلاس شیء متفاوتی برای فایل dfs مشخص می‌کند. به طور پیش‌فرض از کلاس شیء کانتینر DAOS استفاده می‌شود. .TP .BI (nfs)nfs_url یک URL در قالب libnfs، مانند nfs:///path[?arg=val[&arg=val]*] برای جزئیات بیشتر به فایل README در libnfs مراجعه کنید. .TP .BI (exec)program\fR=\fPstr برنامه مورد نظر برای اجرا را مشخص می‌کند. توجه داشته باشید که برنامه زمانی که کار به محدودیت زمانی برسد، یک سیگنال SIGTERM دریافت خواهد کرد. پس از پایان زمان کار، یک SIGKILL ارسال می‌شود. تأخیر بین این دو سیگنال توسط گزینه \fBgrace_time\fR تعریف می‌شود. .TP .BI (exec)arguments\fR=\fPstr آرگومان‌هایی را برای ارسال به برنامه مشخص می‌کند. برخی از متغیرهای ویژه را می‌توان گسترش داد تا جزئیات کار fio به برنامه ارسال شود: .RS .RS .TP .B %r با مدت‌زمان کار بر حسب ثانیه جایگزین می‌شود .TP .BI %n با نام کار جایگزین می‌شود .RE .RE .TP .BI (exec)grace_time\fR=\fPint زمان بین سیگنال‌های SIGTERM و SIGKILL را مشخص می‌کند. پیش‌فرض ۱ ثانیه است. .TP .BI (exec)std_redirect\fR=\fPbool در صورت تنظیم، جریان‌های stdout و stderr به فایل‌هایی که بر اساس نام کار نام‌گذاری شده‌اند هدایت می‌شوند. پیش‌فرض true است. .TP .BI (xnvme)xnvme_async\fR=\fPstr رابط دستورهای ناهمگام xnvme را انتخاب می‌کند. این گزینه می‌تواند مقادیر زیر را بپذیرد: .RS .RS .TP .B emu این مقدار پیش‌فرض است و برای شبیه‌سازی I/O ناهمگام با استفاده از یک رشته (thread) واحد به کار می‌رود تا با استفاده از IOCTL درایور NVMe، یک جفت‌صف (queue pair) روی یک رابط I/O همگام ایجاد کند. .TP .BI thrpool یک رابط I/O ناهمگام را با استخری از رشته‌های فضای کاربری روی یک رابط I/O همگام با استفاده از IOCTL درایور NVMe شبیه‌سازی می‌کند. به طور پیش‌فرض از چهار رشته استفاده می‌شود. .TP .BI io_uring رابط بومی I/O ناهمگام لینوکس که هم از I/O مستقیم (direct) و هم بافری (buffered) پشتیبانی می‌کند..TP .BI libaio استفاده از aio لینوکس برای I/O ناهمگام (Asynchronous I/O). .TP .BI posix استفاده از رابط I/O ناهمگام posix برای اجرای یک یا چند عملیات I/O به‌صورت ناهمگام. .TP .BI vfio استفاده از پیشانه (backend) مبتنی بر VFIO در فضای کاربر، پیاده‌سازی‌شده با libvfn به‌جای SPDK. .TP .BI nil داده‌ای منتقل نشود؛ صرفاً تظاهر به انتقال انجام گیرد. این گزینه عمدتاً برای ارزیابی عملکرد و بررسی‌های درونی استفاده می‌شود. .RE .RE .TP .BI (xnvme)xnvme_sync\fR=\fPstr انتخاب رابط دستور همگام xnvme. این گزینه می‌تواند مقادیر زیر را بپذیرد. .RS .RS .TP .B nvme این مقدار پیش‌فرض است و از ()ioctl درایور NVMe لینوکس برای I/O همگام استفاده می‌کند. .TP .BI psync از دستورهای معمولی و همچنین برداری ()pread و ()pwrite پشتیبانی می‌کند. .TP .BI block مشابه psync است، با این تفاوت که از دستورهای مدیریت ناحیه (zone management) با استفاده از IOCTLهای لایه بلوکی لینوکس نیز پشتیبانی می‌کند. .RE .RE .TP .BI (xnvme)xnvme_admin\fR=\fPstr انتخاب رابط دستور مدیریتی (admin) برای xnvme. این گزینه می‌تواند مقادیر زیر را بپذیرد. .RS .RS .TP .B nvme این مقدار پیش‌فرض است و از ()ioctl درایور NVMe لینوکس برای دستورهای مدیریتی استفاده می‌کند. .TP .BI block استفاده از ()ioctl لایه بلوکی لینوکس و sysfs برای دستورهای مدیریتی. .RE .RE .TP .BI (xnvme)xnvme_dev_nsid\fR=\fPint شناسه فضای نام (namespace) در xnvme برای درایورهای NVMe فضای کاربر مانند SPDK یا vfio. .TP .BI (xnvme)xnvme_dev_subnqn\fR=\fPstr تنظیم NQN زیرسیستم برای fabrics. این گزینه برای استفادهٔ xNVMe از یک هدف fabrics با چندین سیستم کاربرد دارد. .TP .BI (xnvme)xnvme_mem\fR=\fPstr انتخاب پیشانه (backend) حافظه xnvme. این گزینه می‌تواند مقادیر زیر را بپذیرد. .RS .RS .TP .B posix این مقدار پیش‌فرضِ پیشانه حافظه posix برای درایور NVMe لینوکس است. .TP .BI hugepage استفاده از hugepageها به‌جای پیشانه حافظه موجود posix. این پیشانه حافظه از hugetlbfs استفاده می‌کند. این امر نیازمند تخصیص hugepageها توسط کاربر، سوار کردن (mount) hugetlbfs و تنظیم متغیر محیطی XNVME_HUGETLB_PATH است. .TP .BI spdk از تخصیص‌دهنده حافظه SPDK استفاده می‌کند. .TP .BI vfio از تخصیص‌دهنده حافظه libvfn استفاده می‌کند. همچنین استفاده از پیشانه libvfn را به‌جای SPDK مشخص می‌سازد. .RE .RE .TP .BI (xnvme)xnvme_iovec اگر این گزینه تنظیم شود، xnvme از دستورهای خواندن/نوشتن برداری (vectored) استفاده خواهد کرد. .TP .BI (libblkio)libblkio_driver \fR=\fPstr درایور libblkio جهت استفاده. درایورهای مختلف از طریق رابط‌های زیرساختی متفاوتی به دستگاه‌ها دسترسی پیدا می‌کنند. درایورهای موجود به نسخه libblkio مورد استفاده بستگی دارند و در \fIhttps://libblkio.gitlab.io/libblkio/blkio.html#drivers\fR فهرست شده‌اند. .TP .BI (libblkio)libblkio_path \fR=\fPstr مقدار ویژگی مختص درایور "path" را پیش از اتصال نمونهٔ libblkio تنظیم می‌کند، که دستگاه یا فایل هدف را برای انجام I/O مشخص می‌سازد. مفهوم دقیق آن وابسته به درایور است و ممکن است همه درایورها از آن پشتیبانی نکنند؛ ببینید: \fIhttps://libblkio.gitlab.io/libblkio/blkio.html#drivers\fR .TP .BI (libblkio)libblkio_pre_connect_props \fR=\fPstr فهرستی از ویژگی‌های اضافی libblkio جداشده با دونقطه (:) که پس از ایجاد و پیش از اتصال نمونهٔ libblkio تنظیم می‌شوند. هر ویژگی باید دارای قالب \fB=\fR باشد. دونقطه‌ها را می‌توان به‌صورت \fB\\:\fR گریز داد. این موارد پس از تنظیم سایر ویژگی‌ها توسط موتور اعمال می‌شوند، بنابراین می‌توان مقادیر پیشین را با آن‌ها بازنویسی کرد. ویژگی‌های موجود به نسخه libblkio مورد استفاده بستگی دارند و در \fIhttps://libblkio.gitlab.io/libblkio/blkio.html#properties\fR فهرست شده‌اند. .TP .BI (libblkio)libblkio_num_entries \fR=\fPint مقدار ویژگی مختص درایور "num-entries" را پیش از شروع نمونهٔ libblkio تنظیم می‌کند. مفهوم دقیق آن وابسته به درایور است و ممکن است همه درایورها از آن پشتیبانی نکنند؛ ببینید: \fIhttps://libblkio.gitlab.io/libblkio/blkio.html#drivers\fR .TP .BI (libblkio)libblkio_queue_size \fR=\fPint مقدار ویژگی مختص درایور "queue-size" را پیش از شروع نمونهٔ libblkio تنظیم می‌کند. مفهوم دقیق آن وابسته به درایور است و ممکن است همه درایورها از آن پشتیبانی نکنند؛ ببینید: \fIhttps://libblkio.gitlab.io/libblkio/blkio.html#drivers\fR .TP .BI (libblkio)libblkio_pre_start_props \fR=\fPstr فهرستی از ویژگی‌های اضافی libblkio جداشده با دونقطه (:) که پس از اتصال و پیش از شروع نمونهٔ libblkio تنظیم می‌شوند. هر ویژگی باید دارای قالب \fB=\fR باشد. دونقطه‌ها را می‌توان به‌صورت \fB\\:\fR گریز داد. این موارد پس از تنظیم سایر ویژگی‌ها توسط موتور اعمال می‌شوند، بنابراین می‌توان مقادیر پیشین را با آن‌ها بازنویسی کرد. ویژگی‌های موجود به نسخه libblkio مورد استفاده بستگی دارند و در \fIhttps://libblkio.gitlab.io/libblkio/blkio.html#properties\fR فهرست شده‌اند. .TP .BI (libblkio)hipri استفاده از صف‌های مبتنی بر نظرسنجی (poll queues). این گزینه با \fBlibblkio_wait_mode=eventfd\fR و \fBlibblkio_force_enable_completion_eventfd\fR ناسازگار است. .TP .BI (libblkio)libblkio_vectored ارسال درخواست‌های خواندن و نوشتن برداری (vectored). .TP .BI (libblkio)libblkio_write_zeroes_on_trim ارسال درخواست‌های trim به‌صورت درخواست‌های "write zeroes" به‌جای درخواست‌های discard. .TP .BI (libblkio)libblkio_wait_mode \fR=\fPstr نحوه انتظار برای تکمیل عملیات: .RS .RS .TP .B block \fR(پیش‌فرض)\fP استفاده از فراخوانی مسدودکننده برای \fBblkioq_do_io()\fR. .TP .B eventfd استفاده از فراخوانی مسدودکننده برای ()read روی eventfd تکمیل عملیات. .TP .B loop استفاده از حلقه مشغول (busy loop) همراه با فراخوانی غیرمسدودکننده به \fBblkioq_do_io()\fR. .RE .RE .TP .BI (libblkio)libblkio_force_enable_completion_eventfd فعال‌سازی eventfd تکمیل صف حتی در صورتی که استفاده نشود. این امر ممکن است بر عملکرد تأثیر بگذارد. پیش‌فرض فعال‌سازی آن تنها در صورت \fBlibblkio_wait_mode=eventfd\fR است. .TP .BI (windowsaio)no_completion_thread اجتناب از استفاده از یک رشتهٔ (thread) مجزا برای نظرسنجی تکمیل عملیات (completion polling)..SS "عمق ورودی/خروجی (I/O depth)" .TP .BI iodepth \fR=\fPint تعداد واحدهای I/O که به‌طور هم‌زمان در جریان پردازش (in flight) بر روی فایل نگه‌داشته می‌شوند. توجه داشته باشید که افزایش \fBiodepth\fR به بیش از ۱، تأثیری بر ioengineهای همگام نخواهد داشت (مگر در موارد جزئی هنگامی که \fBverify_async\fR در حال استفاده باشد). حتی موتورهای ناهمگام (async) نیز ممکن است به دلیل محدودیت‌های سیستم‌عامل نتوانند به عمق مورد نظر دست یابند. این موضوع ممکن است در لینوکس هنگام استفاده از libaio و عدم تنظیم `direct=1' رخ دهد، زیرا در این سیستم‌عامل ورودی/خروجی بافری ناهمگام نیست. توزیع عمق I/O را در خروجی fio بررسی کنید تا مطمئن شوید عمق حاصل‌شده همان مقدار مورد انتظار است. پیش‌فرض: 1. .TP .BI iodepth_batch_submit \fR=\fPint "\fR,\fP iodepth_batch" \fR=\fPint مشخص می‌کند که چه تعداد I/O به یک‌باره ارسال شوند. مقدار پیش‌فرض ۱ است، به این معنی که هر I/O به محض آماده شدن ارسال می‌شود، اما می‌توان آن را افزایش داد تا دسته‌های بزرگ‌تری از I/O در هر نوبت ارسال شوند. اگر روی 0 تنظیم شود، مقدار \fBiodepth\fR استفاده خواهد شد. .TP .BI iodepth_batch_complete_min \fR=\fPint "\fR,\fP iodepth_batch_complete" \fR=\fPint مشخص می‌کند که چه تعداد I/O در هر نوبت دریافت شوند. مقدار پیش‌فرض ۱ است، به این معنی که در فرایند دریافت از هسته، حداقل ۱ درخواست I/O مطالبه خواهد شد. دریافت I/O تا زمانی ادامه می‌یابد که به حد تعیین‌شده توسط \fBiodepth_low\fR برسد. اگر این متغیر روی 0 تنظیم شود، fio پیش از صف‌بندی I/Oهای بیشتر، همواره رویدادهای تکمیل‌شده را بررسی می‌کند. این کار به کاهش تاخیر I/O کمک می‌کند، اما به بهای فراخوانی‌های سیستمی بیشتر برای دریافت. .TP .BI iodepth_batch_complete_max \fR=\fPint حداکثر تعداد I/Oهای قابل دریافت در هر نوبت را مشخص می‌کند. این متغیر باید به همراه متغیر \fBiodepth_batch_complete_min\fR=\fIint\fR استفاده شود که محدوده حداقل و حداکثر مقدار I/O قابل دریافت را مشخص می‌سازد. به‌طور پیش‌فرض، برابر با مقدار \fBiodepth_batch_complete_min\fR است. مثال ۱: .RS .RS .P .PD 0 iodepth_batch_complete_min=1 .P iodepth_batch_complete_max= .PD .RE .P بدین معنی که ما حداقل ۱ ورودی/خروجی و حداکثر تا کل عمق صفِ ارسال‌شده را دریافت خواهیم کرد. اگر هیچ I/O هنوز کامل نشده باشد، منتظر خواهیم ماند. مثال ۲: .RS .P .PD 0 iodepth_batch_complete_min=0 .P iodepth_batch_complete_max= .PD .RE .P بدین معنی که ما می‌توانیم تا سقف کل عمق صفِ ارسال‌شده را دریافت کنیم، اما اگر هنوز هیچ I/O کامل نشده باشد، منتظر نخواهیم ماند و فوراً از فراخوانی سیستمی خارج می‌شویم. در این مثال، ما صرفاً عمل سرکشی (polling) را انجام می‌دهیم. .RE .TP .BI iodepth_low \fR=\fPint حد آستانه پایین (low water mark) که مشخص می‌کند چه زمانی باید دوباره پر کردن صف آغاز شود. مقدار پیش‌فرض آن همانند \fBiodepth\fR است، به این معنی که fio همواره سعی خواهد کرد صف را پر نگه دارد. اگر برای مثال \fBiodepth\fR روی 16 و \fBiodepth_low\fR روی 4 تنظیم شود، پس از این‌که fio صف را با ۱۶ درخواست پر کرد، اجازه می‌دهد تا عمق آن تخلیه شده و به ۴ برسد، سپس دوباره شروع به پر کردن آن می‌کند. .TP .BI serialize_overlap \fR=\fPbool سری‌سازی I/Oهای در حال انجام که در غیر این صورت ممکن است باعث ایجاد وضعیت رقابتی داده‌ها (data races) شوند یا از آن آسیب ببینند. هنگامی که دو یا چند I/O به صورت هم‌زمان ارسال می‌شوند، هیچ تضمینی وجود ندارد که این I/Oها به همان ترتیب ارسال، پردازش یا تکمیل شوند. علاوه بر این، اگر دو یا چند مورد از این I/Oها از نوع نوشتن باشند، هر ناحیه هم‌پوشان میان آن‌ها می‌تواند روی ذخیره‌سازهای مشخصی نامعین یا تعریف‌نشده شود. این مسائل می‌توانند در صورتی که حداقل یکی از I/Oهای در حال رقابت داده‌ها را تغییر دهد و ناحیه هم‌پوشان اندازه‌ای غیرصفر داشته باشد، باعث شکست‌های نامنظم در اعتبارسنجی شوند. تنظیم \fBserialize_overlap\fR به fio می‌گوید تا با سری‌سازی صریح I/Oهای در حال انجامی که هم‌پوشانی غیرصفر دارند، از بروز این رفتار جلوگیری کند. توجه داشته باشید که فعال کردن این گزینه می‌تواند هم کارایی و هم \fBiodepth\fR به‌دست‌آمده را کاهش دهد. .RS .P این گزینه فقط برای I/Oهای صادرشده برای یک کار تکی اعمال می‌شود، مگر این‌که به همراه \fBio_submit_mode\fR=offload فعال شده باشد. در حالت offload، ابزار fio هم‌پوشانی را در بین تمام I/Oهای ارسال‌شده توسط کارهای offload که \fBserialize_overlap\fR در آن‌ها فعال است بررسی می‌کند. .P پیش‌فرض: false. .RE .TP .BI io_submit_mode \fR=\fPstr این گزینه نحوه ارسال I/O توسط fio به موتور ورودی/خروجی را کنترل می‌کند. مقدار پیش‌فرض `inline' است، بدین معنی که ریسه‌های کار fio مستقیماً I/O را ارسال کرده و دریافت می‌کنند. اگر روی `offload' تنظیم شود، ریسه‌های کار فرایند ارسال I/O را به یک استخر اختصاصی از ریسه‌های I/O واگذار می‌کنند. این کار نیازمند مقداری هماهنگی است و در نتیجه بار اضافی اندکی به همراه دارد، به‌ویژه برای I/Oهایی با عمق صف پایین‌تر که می‌تواند باعث افزایش تاخیرها شود. مزیت این روش آن است که fio می‌تواند نرخ ارسال را مستقل از نرخ تکمیل دستگاه مدیریت کند. این امر مانع از گزارش نادقیق تاخیر در صورت انباشته شدن I/O در سمت دستگاه می‌شود (مشکل omission هماهنگ‌شده). توجه داشته باشید که این گزینه را نمی‌توان به طور قابل اطمینان با موتورهای I/O ناهمگام به کار برد. .SS "نرخ ورودی/خروجی (I/O rate)" .TP .BI thinkcycles \fR=\fPint کار را پس از تکمیل یک I/O و پیش از صدور درخواست بعدی، به تعداد چرخه‌های مشخص‌شده متوقف می‌کند. می‌تواند برای شبیه‌سازی پردازش‌های انجام‌شده توسط یک برنامه کاربردی به کار رود. این مقدار در زمان محاسبه‌شده برای توقف \fBthinktime\fR لحاظ نمی‌شود. ممکن است بر روی برخی پلتفرم‌ها تأثیری نداشته باشد؛ این موضوع را می‌توان با تنظیم مقداری به اندازه کافی بزرگ برای thinkcycles بررسی کرد. .TP .BI thinktime \fR=\fPtime کار را پس از تکمیل یک I/O و پیش از صدور درخواست بعدی، برای مدت زمان مشخص‌شده متوقف می‌کند. می‌تواند برای شبیه‌سازی پردازش انجام‌شده توسط یک برنامه کاربردی استفاده شود. در صورت عدم ذکر واحد، مقدار بر حسب میکروثانیه تفسیر می‌شود. گزینه‌های \fBthinktime_blocks\fR، \fBthinktime_iotime\fR و \fBthinktime_spin\fR را ببینید. .TP .BI thinktime_spin \fR=\fPtime تنها در صورتی معتبر است که \fBthinktime\fR تنظیم شده باشد \- وانمود کردن به صرف زمان پردازنده (CPU) برای انجام عملیاتی بر روی داده‌های دریافت‌شده، پیش از رفتن به حالت خواب برای باقی‌مانده مدت مشخص‌شده با \fBthinktime\fR. هنگامی که واحد ذکر نشود، مقدار به عنوان میکروثانیه تفسیر می‌شود. .TP .BI thinktime_blocks \fR=\fPint تنها در صورتی معتبر است که \fBthinktime\fR تنظیم شده باشد \- کنترل می‌کند که چه تعداد بلوک صادر شوند، پیش از آن‌که به اندازه \fBthinktime\fR میکروثانیه توقف انجام شود. در صورت عدم تنظیم، مقدار پیش‌فرض ۱ است که باعث می‌شود fio پس از هر بلوک، به اندازه \fBthinktime\fR میکروثانیه منتظر بماند. این کار عملاً هرگونه تنظیم عمق صف را بی‌اثر می‌کند، زیرا تا پیش از تکمیل درخواست و سپری شدن \fBthinktime\fR، بیش از ۱ درخواست I/O در صف قرار نخواهد گرفت. به عبارت دیگر، این تنظیم اگر عمق صف بزرگ‌تر باشد، عملاً سقفی بر آن اعمال می‌کند. .TP .BI thinktime_blocks_type \fR=\fPstr تنها در صورتی معتبر است که \fBthinktime\fR تنظیم شده باشد \- نحوه فعال‌سازی \fBthinktime_blocks\fR را کنترل می‌کند. مقدار پیش‌فرض `complete' است که وقتی fio به تعداد بلوک‌های \fBthinktime_blocks\fR را تکمیل کند، \fBthinktime\fR را فعال می‌سازد. اگر روی `issue' تنظیم شود، این فعال‌سازی در سمت صدور رخ می‌دهد. .TP .BI thinktime_iotime \fR=\fPtime تنها در صورتی معتبر است که \fBthinktime\fR تنظیم شده باشد \- بازه زمانی \fBthinktime\fR را بر اساس زمان کنترل می‌کند. توقف \fBthinktime\fR پس از اجرای IOها به مدت زمان \fBthinktime_iotime\fR تکرار می‌شود. برای مثال، `\-\-thinktime_iotime=9s \-\-thinktime=1s' یک چرخه ۱۰ ثانیه‌ای را تکرار می‌کند که شامل ۹ ثانیه IO و ۱ ثانیه توقف است. اگر واحد ذکر نشود، \fBthinktime_iotime\fR بر حسب ثانیه تفسیر می‌شود. اگر این گزینه همراه با \fBthinktime_blocks\fR استفاده شود، توقف \fBthinktime\fR پس از گذشت زمان \fBthinktime_iotime\fR یا پردازش تعداد بلوک‌های \fBthinktime_blocks\fR تکرار خواهد شد، هر کدام که زودتر رخ دهد. .TP .BI rate \fR=\fPint[,int][,int] پهنای باند مصرفی توسط این کار را محدود می‌کند. مقدار بر حسب بایت بر ثانیه (bytes/sec) است و قوانین معمول پسوندها اعمال می‌شوند. مقادیر جداشده با کاما می‌توانند برای خواندن، نوشتن و trimها همان‌طور که در \fBblocksize\fR توضیح داده شده مشخص شوند. .RS .P برای مثال، استفاده از `rate=1m,500k' خواندن را به 1MiB/sec و نوشتن را به 500KiB/sec محدود می‌کند. محدود کردن صرف خواندن یا نوشتن می‌تواند با `rate=,500k' یا `rate=500k,' انجام شود، که در اولی فقط نوشتن (به 500KiB/sec) و در دومی فقط خواندن محدود می‌شود. .RE .TP .BI rate_min \fR=\fPint[,int][,int] به fio اعلام می‌کند که تمام تلاش خود را برای حفظ حداقل این پهنای باند به کار گیرد. ناتوانی در برآورده کردن این نیازمندی باعث خروج کار خواهد شد. مقادیر جداشده با کاما می‌توانند برای خواندن، نوشتن و trimها مطابق با توضیحات \fBblocksize\fR مشخص شوند. .TP .BI rate_iops \fR=\fPint[,int][,int] پهنای باند را به این تعداد از IOPS محدود می‌کند. اساساً مشابه \fBrate\fR است، با این تفاوت که مستقل از پهنای باند مشخص می‌شود. اگر به جای یک مقدار ثابت، محدوده‌ای از اندازه بلوک به کار داده شده باشد، کوچک‌ترین اندازه بلوک به عنوان معیار سنجش استفاده می‌شود. مقادیر جداشده با کاما می‌توانند برای خواندن، نوشتن و trimها همان‌طور که در \fBblocksize\fR توضیح داده شده مشخص شوند. .TP .BI rate_iops_min \fR=\fPint[,int][,int] اگر fio نتواند به این نرخ I/O برسد، باعث خروج کار می‌شود. مقادیر جداشده با کاما می‌توانند برای خواندن، نوشتن و trimها همان‌طور که در \fBblocksize\fR شرح داده شده مشخص شوند. .TP .BI rate_process \fR=\fPstr این گزینه نحوه مدیریت ارسال‌های دارای نرخ مشخص I/O را توسط fio کنترل می‌کند. پیش‌فرض `linear' است که I/O را به صورت خطی با تاخیرهای ثابت بین I/Oها ارسال می‌کند و این تاخیرها بر اساس نرخ‌های تکمیل I/O تنظیم می‌شوند. اگر این گزینه روی `poisson' تنظیم شود، fio ورودی/خروجی را بر اساس جریان تصادفی درخواست‌های واقعی‌تر، موسوم به فرایند پواسون (\fIhttps://en.wikipedia.org/wiki/Poisson_point_process\fR) ارسال می‌کند. مقدار لاندا برای بار کاری داده‌شده برابر با 10^6 / IOPS خواهد بود. .TP .BI rate_ignore_thinktime \fR=\fPbool به‌طور پیش‌فرض، اگر هر نوع تنظیمی از thinktime استفاده شده باشد، fio تلاش می‌کند تا به تنظیم نرخ مشخص‌شده برسد (آن را جبران کند). اگر این گزینه فعال شود، fio زمان thinktime را نادیده گرفته و به جای ورود به حالت جبران پس از اتمام thinktime، به انجام IO با همان نرخ مشخص‌شده ادامه می‌دهد. .TP .BI rate_cycle \fR=\fPint میانگین پهنای باند را برای \fBrate_min\fR و \fBrate_iops_min\fR در این تعداد میلی‌ثانیه محاسبه می‌کند. پیش‌فرض: 1000..SS "تأخیر ورودی/خروجی (I/O latency)" .TP .BI latency_target \fR=\fPtime در صورت تنظیم، fio تلاش خواهد کرد بیشترین نقطه کارایی را بیابد که حجم کاری مشخص‌شده می‌تواند در آن اجرا شود در حالی که تأخیر را زیر این هدف حفظ می‌کند. در صورت عدم ذکر واحد، مقدار بر حسب میکروثانیه تفسیر می‌شود. \fBlatency_window\fR و \fBlatency_percentile\fR را ببینید. .TP .BI latency_window \fR=\fPtime به همراه \fBlatency_target\fR برای تعیین پنجره نمونه‌برداری استفاده می‌شود که کار در آن در عمق‌های صف متغیر برای آزمودن کارایی اجرا می‌شود. در صورت عدم ذکر واحد، مقدار بر حسب میکروثانیه تفسیر می‌شود. .TP .BI latency_percentile \fR=\fPfloat درصد I/Oهایی که باید در محدوده معیارهای مشخص‌شده توسط \fBlatency_target\fR و \fBlatency_window\fR قرار گیرند. در صورت عدم تنظیم، مقدار پیش‌فرض آن 100.0 است؛ به این معنی که تمام I/Oها باید برابر یا کمتر از مقدار تعیین‌شده توسط \fBlatency_target\fR باشند. .TP .BI latency_run \fR=\fPbool به همراه \fBlatency_target\fR استفاده می‌شود. اگر false (پیش‌فرض) باشد، fio بالاترین عمق صفی را که \fBlatency_target\fR را برآورده می‌کند پیدا کرده و خارج می‌شود. اگر true باشد، fio به اجرا ادامه داده و تلاش می‌کند با تنظیم عمق صف، \fBlatency_target\fR را برآورده سازد. .TP .BI max_latency \fR=\fPtime[,time][,time] در صورت تنظیم، اگر کار از این حداکثر تأخیر فراتر رود، fio با خطای ETIMEDOUT از آن خارج می‌شود. در صورت عدم ذکر واحد، مقدار بر حسب میکروثانیه تفسیر می‌شود. مقادیر جداشده با کاما می‌توانند برای خواندن‌ها، نوشتن‌ها و trimها مطابق با توضیحات \fBblocksize\fR مشخص شوند. .SS "بازپخش ورودی/خروجی (I/O replay)" .TP .BI write_iolog \fR=\fPstr الگوهای I/O صادرشده را در فایل مشخص‌شده می‌نویسد. \fBread_iolog\fR را ببینید. برای هر کار یک فایل جداگانه مشخص کنید، در غیر این صورت iologها با هم تداخل پیدا کرده و ممکن است فایل خراب شود. این فایل در حالت الحاق (append mode) باز خواهد شد. .TP .BI read_iolog \fR=\fPstr یک iolog با نام فایل مشخص‌شده را باز کرده و الگوهای I/O موجود در آن را بازپخش می‌کند. این گزینه می‌تواند برای ذخیره یک حجم کاری و بازپخش آن در زمانی دیگر استفاده شود. iolog ارائه‌شده همچنین می‌تواند یک فایل باینری blktrace باشد که به fio اجازه می‌دهد حجم کاری ثبت‌شده توسط blktrace را بازپخش کند. برای چگونگی ثبت این‌گونه داده‌های لاگ، \fBblktrace\fR\|(8) را ببینید. برای بازپخش blktrace، ابتدا باید فایل به یک فایل داده باینری blkparse تبدیل شود (\(lqblkparse \-o /dev/null \-d file_for_fio.bin\(rq). می‌توانید با جدا کردن نام‌ها توسط نویسه \(aq:\(aq چندین فایل را مشخص کنید. برای اطلاعات در مورد چگونگی گریز (escape) دادن نویسه‌های \(aq:\(aq درون نام فایل‌ها، گزینه \fBfilename\fR را ببینید. این فایل‌ها به ترتیب به کلون‌های کاری ایجاد شده توسط \fBnumjobs\fR اختصاص می‌یابند. \(aq\-\(aq یک نام رزرو شده به معنای خواندن از stdin است؛ به ویژه اگر \fBfilename\fR نیز روی \(aq\-\(aq (که آن هم به معنای stdin است) تنظیم شده باشد، این پرچم نمی‌تواند روی \(aq\-\(aq تنظیم شود. .TP .BI read_iolog_chunked \fR=\fPbool نحوه خواندن iolog را تعیین می‌کند. اگر false (پیش‌فرض) باشد، تمام \fBread_iolog\fR به یکباره خوانده می‌شود. در صورت انتخاب true، ورودی از iolog به صورت تدریجی خوانده خواهد شد. زمانی مفید است که iolog بسیار بزرگ باشد یا به صورت پویا تولید شود. .TP .BI merge_blktrace_file \fR=\fPstr در صورت تعیین، به جای بازپخش لاگ‌های ارسال‌شده به \fBread_iolog\fR، لاگ‌ها از یک مرحله ادغام عبور می‌کنند که آن‌ها را در یک فایل blktrace واحد تجمیع می‌کند. سپس فایل حاصل به عنوان پارامتر \fBread_iolog\fR ارسال می‌شود. هدف از این کار، یکپارچه و سازگار کردن ترتیب رویدادها است. این امر در مقایسه با بازپخش چندین blktrace از طریق کارهای همزمان، تأثیر زمان‌بند (scheduler) را محدود می‌کند. .TP .BI merge_blktrace_scalars \fR=\fPfloat_list این یک گزینه بر پایه درصد است که بر اساس نمایه با فهرست فایل‌های ارائه‌شده به \fBread_iolog\fR جفت می‌شود. هنگام انجام ادغام، زمان هر رویداد با مقدار مربوطه مقیاس‌بندی می‌شود. به عنوان مثال، \(lq\-\-merge_blktrace_scalars="50:100"\(rq رد اول را در نیم‌زمان (halftime) و رد دوم را در زمان واقعی (realtime) اجرا می‌کند. این تنظیم جدا از \fBreplay_time_scale\fR قابل تنظیم است؛ گزینه‌ای که رد را در حین زمان اجرا مقیاس‌بندی کرده و برخلاف این گزینه، خروجی ادغام را تغییر نمی‌دهد. .TP .BI merge_blktrace_iters \fR=\fPfloat_list این یک گزینه با عدد صحیح است که بر اساس نمایه با فهرست فایل‌های ارائه‌شده به \fBread_iolog\fR جفت می‌شود. هنگام انجام ادغام، هر رد به تعداد دفعات تکرار مشخص‌شده اجرا می‌شود. به عنوان مثال، \(lq\-\-merge_blktrace_iters="2:1"\(rq رد اول را برای دو تکرار و رد دوم را برای یک تکرار اجرا می‌کند. .TP .BI replay_no_stall \fR=\fPbool هنگام بازپخش I/O با \fBread_iolog\fR، رفتار پیش‌فرض تلاش برای رعایت برچسب‌های زمانی درون لاگ و بازپخش آن‌ها با تأخیر مناسب بین IOPS است. با تنظیم این متغیر، fio برچسب‌های زمانی را نادیده گرفته و تلاش می‌کند در عین حفظ ترتیب رویدادها، آن‌ها را با حداکثر سرعت ممکن بازپخش کند. نتیجه، همان الگوی I/O روی یک دستگاه معین اما با زمان‌بندی‌های متفاوت خواهد بود. .TP .BI replay_time_scale \fR=\fPint هنگام بازپخش I/O با \fBread_iolog\fR، ابزار fio زمان‌بندی اصلی در رد را رعایت خواهد کرد. با این گزینه، امکان مقیاس‌بندی زمان وجود دارد. این گزینه درصدی است؛ اگر روی 50 تنظیم شود، به معنای اجرا با 50% نرخ I/O اصلی در رد است. اگر روی 200 تنظیم شود، با دو برابر نرخ I/O اصلی اجرا می‌شود. مقدار پیش‌فرض 100 است. .TP .BI replay_redirect \fR=\fPstr هنگام بازپخش الگوهای I/O با استفاده از \fBread_iolog\fR، رفتار پیش‌فرض بازپخش IOPS روی دستگاه major/minor است که هر IOP از آن ضبط شده بود. این رفتار گاهی نامطلوب است زیرا در یک ماشین دیگر این شماره‌های major/minor ممکن است به دستگاه متفاوتی نگاشت شوند. تغییر سخت‌افزار در همان سیستم نیز می‌تواند به نگاشت major/minor متفاوتی منجر شود. گزینه \fBreplay_redirect\fR باعث می‌شود تمام I/Oها بدون در نظر گرفتن دستگاهی که از آن ضبط شده‌اند، روی یک دستگاه مشخص‌شده واحد بازپخش شوند؛ مثلاً \(lqreplay_redirect=/dev/sdc\(rq باعث می‌شود تمام I/Oها در blktrace یا iolog روی \(lq/dev/sdc\(rq بازپخش شوند. این بدان معناست که اگر رد شامل چندین دستگاه باشد، چندین دستگاه روی یک دستگاه واحد بازپخش خواهند شد. اگر می‌خواهید چندین دستگاه به طور همزمان روی چندین دستگاه هدایت‌شده بازپخش شوند، باید رد خود را با blkparse به ردهای جداگانه تقسیم کرده و آن‌ها را با فراخوانی‌های مستقل fio بازپخش کنید. متأسفانه این کار همچنین ترتیب زمانی دقیق بین دسترسی به چندین دستگاه را از بین می‌برد. .TP .BI replay_align \fR=\fPint تراز آفست‌های بایتی در یک رد را به این مقدار تحمیل می‌کند. مقدار باید توانی از 2 باشد. .TP .BI replay_scale \fR=\fPint هنگام بازپخش ردها، آفست‌های بایتی را با این ضریب کاهش می‌دهد. به احتمال زیاد باید از \fBreplay_align\fR نیز استفاده شود. .SS "نخ‌ها، فرایندها و همگام‌سازی کار (Threads, processes and job synchronization)" .TP .BI replay_skip \fR=\fPstr گاهی اوقات رد کردن برخی از انواع I/O در یک رد بازپخش مفید است. این کار می‌تواند برای نمونه حذف نوشتن‌ها در رد باشد، یا بازپخش نکردن trim/discardها در صورتی که به دستگاهی بازهدایت می‌کنید که از آن‌ها پشتیبانی نمی‌کند. این گزینه فهرستی جداشده با کاما از مقادیر read، write، trim و sync می‌پذیرد. .TP .BI thread ابزار fio به طور پیش‌فرض کارها را با استفاده از fork ایجاد می‌کند، با این حال اگر این گزینه داده شود، fio در عوض کارها را با استفاده از تابع رشته‌های پازیکس (POSIX Threads) یعنی \fBpthread_create\fR\|(3) به عنوان نخ ایجاد خواهد کرد. .TP .BI wait_for \fR=\fPstr در صورت تنظیم، کار جاری تا زمانی که تمام کارگران (workers) کار مشخص‌شده در waitee به پایان نرسند، آغاز نخواهد شد. .\" ignore blank line here from HOWTO as it looks normal without it گزینه \fBwait_for\fR بر اساس نام کار عمل می‌کند، بنابراین چند محدودیت وجود دارد: نخست، کار مورد انتظار (waitee) باید پیش از کار منتظر (waiter) تعریف شده باشد (به این معنی که ارجاع رو به جلو مجاز نیست). دوم، اگر کاری به عنوان waitee ارجاع داده می‌شود، باید یک نام یکتا داشته باشد (فاقد waiteeهای تکراری). .TP .BI comm \fR=\fPstr مقدار comm فرایند کار را روی رشته مشخص‌شده تنظیم می‌کند. راهنمای \fBprctrl\fR\|(2) را ببینید. توجه: این گزینه در حال حاضر تنها در لینوکس پشتیبانی می‌شود. .TP .BI nice \fR=\fPint کار را با مقدار nice داده‌شده اجرا می‌کند. راهنمای \fBnice\fR\|(2) را ببینید. .\" ignore blank line here from HOWTO as it looks normal without it در ویندوز، مقادیر کمتر از \-15 رده اولویت فرایند را روی \(lqHigh\(rq، مقادیر \-1 تا \-15 روی \(lqAbove Normal\(rq، مقادیر 1 تا 15 روی \(lqBelow Normal\(rq و بالاتر از 15 روی رده اولویت \(lqIdle\(rq تنظیم می‌کنند. .TP .BI prio \fR=\fPint مقدار اولویت I/O این کار را تعیین می‌کند. لینوکس کاربر را به یک مقدار مثبت بین 0 و 7 محدود می‌کند که 0 بالاترین اولویت است. راهنمای \fBionice\fR\|(1) را ببینید. برای سایر سیستم‌های عامل به صفحه راهنمای مربوطه مراجعه کنید چرا که مفهوم اولویت ممکن است متفاوت باشد. برای تنظیم اولویت به ازای هر دستور، گزینه‌های مختص موتور I/O یعنی `cmdprio_percentage` و `cmdprio` را ببینید. .TP .BI prioclass \fR=\fPint رده اولویت I/O را تعیین می‌کند. راهنمای \fBionice\fR\|(1) را ببینید. برای تنظیم اولویت به ازای هر دستور، گزینه‌های مختص موتور I/O یعنی `cmdprio_percentage` و `cmdprio_class` را ببینید. .TP .BI priohint \fR=\fPint راهنمای اولویت I/O را تعیین می‌کند. این گزینه تنها در پلتفرم‌هایی که از رده‌های اولویت I/O پشتیبانی می‌کنند و برای دستگاه‌هایی با ویژگی‌های کنترل‌شده از طریق hintهای اولویت کاربرد دارد؛ مانند دستگاه‌های بلوکی که از محدودیت‌های مدت دستور یا CDL پشتیبانی می‌کنند. CDL روشی برای نشان دادن حداکثر تأخیر مطلوب I/Oها است تا دستگاه بتواند زمان‌بندی دستورات داخلی خود را با توجه به محدودیت‌های تأخیر مشخص‌شده توسط کاربر بهینه‌سازی کند. برای تنظیم راهنمای اولویت به ازای هر I/O، گزینه مختص موتور I/O یعنی \fBcmdprio_hint\fR را ببینید. .TP .BI cpus_allowed \fR=\fPstr همان گزینه‌های \fBcpumask\fR را کنترل می‌کند، اما در عوض مشخصات متنی پردازنده‌های مجاز را می‌پذیرد و پردازنده‌ها از 0 شماره‌گذاری می‌شوند. بنابراین برای استفاده از پردازنده‌های 0 و 5، مقدار `cpus_allowed=0,5` را مشخص می‌کنید. این گزینه همچنین اجازه می‌دهد محدوده‌ای از پردازنده‌ها مشخص شود \-\- مثلاً اگر می‌خواستید وابستگی (binding) به پردازنده‌های 0، 5 و 8 تا 15 ایجاد کنید، `cpus_allowed=0,5,8\-15` را تنظیم می‌کردید. .RS .P در ویندوز، هنگامی که `cpus_allowed` تنظیم نشده باشد، تنها پردازنده‌های گروه پردازنده فعلی fio استفاده خواهند شد و تنظیمات وابستگی (affinity) از سیستم به ارث می‌رسد. ساخت fio که برای ویندوز 7 پیکربندی شده باشد، گزینه‌های تنظیم‌کننده پردازنده‌ها را نسبت به گروه پردازنده آگاه می‌کند و مقادیر، هم گروه پردازنده و هم پردازنده‌ای از درون آن گروه را تنظیم می‌کنند. به عنوان مثال، در سیستمی که گروه پردازنده 0 دارای 40 پردازنده و گروه پردازنده 1 دارای 32 پردازنده است، مقادیر `cpus_allowed` بین 0 و 39 پردازنده‌های گروه پردازنده 0 را پیوند داده و مقادیر `cpus_allowed` بین 40 و 71 پردازنده‌های گروه پردازنده 1 را پیوند می‌دهند. هنگام استفاده از `cpus_allowed_policy=shared` تمام پردازنده‌های مشخص‌شده با یک گزینه واحد `cpus_allowed` باید از همان گروه پردازنده باشند. برای ساخت‌های ویندوز fio که برای ویندوز 7 ساخته نشده‌اند، پردازنده‌ها فقط از هر گروه پردازنده‌ای که fio تصادفاً در آن اجرا می‌شود انتخاب خواهند شد (و نسبت به آن سنجیده می‌شوند) و پردازنده‌های سایر گروه‌های پردازنده قابل استفاده نیستند. .RE .TP .BI cpus_allowed_policy \fR=\fPstr سیاست نحوه توزیع پردازنده‌های مشخص‌شده توسط \fBcpus_allowed\fR یا \fBcpumask\fR توسط fio را تعیین می‌کند. دو سیاست پشتیبانی می‌شوند: .RS .RS.TP .B shared همهٔ jobها از مجموعهٔ CPU مشخص‌شده به‌صورت اشتراکی استفاده خواهند کرد. .TP .B split هر job یک CPU اختصاصی از مجموعهٔ CPU دریافت خواهد کرد. .RE .P در صورتی که گزینه‌ای تعیین نشود، \fBshared\fR رفتار پیش‌فرض است. اگر \fBsplit\fR مشخص شده باشد، آن‌گاه fio به هر job یک CPU تخصیص می‌دهد. اگر تعداد CPUهای ارائه‌شده برای jobهای فهرست‌شده کافی نباشد، fio پردازنده‌های موجود در مجموعه را به‌صورت نوبت‌گردشی (roundrobin) تخصیص می‌دهد. .RE .TP .BI cpumask \fR=\fPint وابستگی پردازنده‌ای (CPU affinity) این job را تنظیم می‌کند. پارامتر ارائه‌شده یک ماسک بیتی از پردازنده‌های مجاز است که job می‌تواند روی آن‌ها اجرا شود. بنابراین اگر می‌خواهید پردازنده‌های مجاز ۱ و ۵ باشند، باید مقدار ده‌دهی (1 << 1 | 1 << 5) یا 34 را ارسال کنید. به صفحهٔ راهنمای \fBsched_setaffinity\fR\|(2) مراجعه کنید. این گزینه ممکن است روی همهٔ سیستم‌عامل‌ها یا نسخه‌های کرنل پشتیبانی‌شده کار نکند. این گزینه برای تعداد پردازنده‌های بیشتر از آنچه بتوان در یک ماسک عدد صحیح ذخیره کرد به‌خوبی کار نمی‌کند، بنابراین تنها می‌تواند پردازنده‌های 1\-32 را کنترل کند. برای سیستم‌هایی با تعداد CPU بیشتر، از \fBcpus_allowed\fR استفاده کنید. .TP .BI numa_cpu_nodes \fR=\fPstr اجرای این job را روی پردازنده‌های گره‌های NUMA مشخص‌شده تنظیم می‌کند. آرگومان‌ها شامل فهرستی از شماره‌های پردازنده جداشده با کاما، بازه‌های A\-B، یا `all' هستند. توجه داشته باشید که برای فعال‌سازی پشتیبانی از گزینه‌های NUMA، برنامهٔ fio باید روی سیستمی ساخته (کامپایل) شود که libnuma\-dev(el) روی آن نصب باشد. .TP .BI numa_mem_policy \fR=\fPstr سیاست حافظهٔ این job و گره‌های NUMA متناظر آن را مشخص می‌کند. قالب آرگومان‌ها: .RS .RS .P [:] .RE .P مقدار `mode' یکی از سیاست‌های حافظهٔ زیر است: `default'، `prefer'، `bind'، `interleave' یا `local'. برای سیاست‌های حافظهٔ `default' و `local'، نیازی به تعیین هیچ گره‌ای نیست. برای `prefer'، تنها یک گره مجاز است. برای `bind' و `interleave'، مقدار `nodelist' می‌تواند به‌صورت زیر باشد: فهرستی از اعداد جداشده با کاما، بازه‌های A\-B، یا `all'. .RE .TP .BI cgroup \fR=\fPstr این job را به این گروه کنترلی (cgroup) اضافه می‌کند. اگر وجود نداشته باشد، ایجاد خواهد شد. برای کارکرد این گزینه، سیستم باید یک نقطهٔ اتصال سوارشدهٔ cgroup blkio داشته باشد. اگر سیستم شما آن را سوار نکرده است، می‌توانید با دستور زیر این کار را انجام دهید: .RS .RS .P # mount \-t cgroup \-o blkio none /cgroup .RE .RE .TP .BI cgroup_weight \fR=\fPint وزن cgroup را روی این مقدار تنظیم می‌کند. مستندات ارائه‌شده همراه با کرنل را ببینید؛ مقادیر مجاز در بازهٔ 100..1000 هستند. .TP .BI cgroup_nodelete \fR=\fPbool به‌طور معمول fio پس از تکمیل job، گروه‌های کنترلی (cgroups) ایجادشده را حذف می‌کند. برای نادیده‌گرفتن این رفتار و باقی گذاشتن cgroupها پس از تکمیل job، مقدار `cgroup_nodelete=1' را تنظیم کنید. این گزینه می‌تواند زمانی مفید باشد که بخواهید فایل‌های مختلف cgroup را پس از اتمام job بررسی کنید. پیش‌فرض: false. .TP .BI flow_id \fR=\fPint شناسهٔ جریان (flow). اگر مشخص نشود، مقدار پیش‌فرض آن یک جریان سراسری (global) خواهد بود. به \fBflow\fR مراجعه کنید. .TP .BI flow \fR=\fPint وزن در کنترل جریان مبتنی بر توکن (token-based flow control). اگر از این مقدار استفاده شود، آن‌گاه fio فعالیت بین دو یا چند job را که flow_id یکسانی را به اشتراک می‌گذارند تنظیم می‌کند. برنامهٔ fio تلاش می‌کند تا فعالیت هر job را متناسب با فعالیت سایر jobهای همان گروه flow_id، با در نظر گرفتن وزن درخواستی هر job نگه دارد. به این معنی که اگر یک job دارای `flow=3'، دیگری دارای `flow=2' و دیگری دارای `flow=1` باشد، تقریباً نسبتی ۳:۲:۱ در میزان اجرای یکی در مقایسه با دیگری برقرار خواهد بود. .TP .BI flow_sleep \fR=\fPint مدت زمان، به میکروثانیه، برای انتظار پس از اینکه شمارندهٔ جریان از نسبت خود فراتر رفت، پیش از تلاش مجدد برای عملیات. .TP .BI stonewall "\fR,\fB wait_for_previous" پیش از شروع این job، منتظر خروج jobهای قبلی در فایل job می‌ماند. می‌توان از آن برای درج نقاط ترتیبی‌سازی (serialization points) در فایل job استفاده کرد. یک دیوار سنگی (stone wall) همچنین به معنای شروع یک گروه گزارش‌دهی جدید است؛ به \fBgroup_reporting\fR مراجعه کنید. به‌طور اختیاری می‌توانید از `stonewall=0` برای غیرفعال‌سازی یا `stonewall=1` برای فعال‌سازی آن استفاده کنید. .TP .BI exitall به‌طور پیش‌فرض، هنگامی که یک job به پایان می‌رسد، fio به اجرای تمام jobهای دیگر ادامه می‌دهد. گاهی این رفتار مطلوب نیست. تنظیم \fBexitall\fR در عوض باعث می‌شود fio به محض پایان یافتن یکی از jobهای آن گروه، تمام jobهای همان گروه را متوقف کند. .TP .BI exit_what \fR=\fPstr به‌طور پیش‌فرض، هنگامی که یک job پایان می‌یابد، fio به اجرای تمام jobهای دیگر ادامه می‌دهد. گاهی اوقات این رفتار مطلوب نیست. تنظیم \fBexitall\fR در عوض باعث می‌شود fio تمام jobهای همان گروه را خاتمه دهد. گزینهٔ \fBexit_what\fR به شما امکان می‌دهد کنترل کنید کدام jobها هنگام فعال بودن \fBexitall\fR متوقف شوند. مقدار پیش‌فرض \fBgroup\fR است. مقادیر مجاز عبارتند از: .RS .RS .TP .B all تمام jobها را متوقف می‌کند. .TP .B group پیش‌فرض است و رفتار \fBexitall\fR را تغییر نمی‌دهد. .TP .B stonewall تمام jobهای در حال اجرای فعلی را در تمام گروه‌ها خاتمه می‌دهد و اجرا را با گروه stonewall بعدی ادامه می‌دهد. .RE .RE .TP .BI exec_prerun \fR=\fPstr پیش از اجرای این job، دستور مشخص‌شده را از طریق \fBsystem\fR\|(3) صادر می‌کند. خروجی به فایلی به نام `jobname.prerun.txt' هدایت می‌شود. .TP .BI exec_postrun \fR=\fPstr پس از تکمیل job، دستور مشخص‌شده را از طریق \fBsystem\fR\|(3) صادر می‌کند. خروجی به فایلی به نام `jobname.postrun.txt' هدایت می‌شود. .TP .BI uid \fR=\fPint به جای اجرا به عنوان کاربری که دستور را فراخوانی کرده، شناسهٔ کاربر (user ID) را قبل از اینکه نخ/فرایند (thread/process) کاری انجام دهد روی این مقدار تنظیم می‌کند. .TP .BI gid \fR=\fPint شناسهٔ گروه (group ID) را تنظیم می‌کند، \fBuid\fR را ببینید..SS "اعتبارسنجی (Verification)" .TP .BI verify_only بار کاری مشخص‌شده را انجام نده، فقط اعتبارسنجی کن که آیا داده‌ها همچنان با اجرای قبلی این بار کاری مطابقت دارند یا خیر. این گزینه امکان بررسی چندبارهٔ داده‌ها را در تاریخی دیگر بدون بازنویسی آن فراهم می‌کند. این گزینه تنها برای بارهای کاری که داده می‌نویسند معنی دارد و از بارهای کاری با گزینهٔ فعال \fBtime_based\fR پشتیبانی نمی‌کند. گزینه‌های \fBverify_write_sequence\fR و \fBverify_header_seed\fR در این حالت غیرفعال خواهند بود، مگر اینکه صراحتاً فعال شوند. نوشتن‌های گزارش‌شده در خروجی هنگام تعیین این گزینه، نوشتن‌های ساختگی (phantom writes) هستند، زیرا در عمل هیچ عملیات نوشتنی صادر نمی‌شود. .TP .BI do_verify \fR=\fPbool مرحلهٔ اعتبارسنجی را پس از مرحلهٔ نوشتن اجرا کن. تنها در صورتی معتبر است که \fBverify\fR تنظیم شده باشد. پیش‌فرض: true. .TP .BI verify \fR=\fPstr هنگام نوشتن در یک فایل، fio می‌تواند محتویات فایل را پس از هر تکرار از کار اعتبارسنجی کند. هر روش اعتبارسنجی همچنین شامل اعتبارسنجی سرایند (header) ویژه‌ای است که در ابتدای هر بلوک نوشته می‌شود. این سرایند همچنین شامل فراداده‌هایی مانند آفست بلوک، شمارهٔ بلوک، برچسب زمانی نوشتن بلوک، مقدار اولیهٔ بذر (seed) مورد استفاده برای تولید محتویات بافر، و غیره است. \fBverify\fR می‌تواند با گزینهٔ \fBverify_pattern\fR ترکیب شود. مقادیر مجاز عبارتند از: .RS .RS .TP .B md5 استفاده از جمع کنترلی md5 برای ناحیهٔ داده و ذخیرهٔ آن در سرایند هر بلوک. .TP .B crc64 استفاده از جمع کنترلی آزمایشی crc64 برای ناحیهٔ داده و ذخیرهٔ آن در سرایند هر بلوک. .TP .B crc32c استفاده از جمع کنترلی crc32c برای ناحیهٔ داده و ذخیرهٔ آن در سرایند هر بلوک. این گزینه به طور خودکار از شتاب‌دهندهٔ سخت‌افزاری (مانند SSE4.2 در x86 یا افزونه‌های رمزنگاری CRC در ARM64) بهره خواهد برد، اما در صورت عدم وجود به crc32c نرم‌افزاری بازمی‌گردد. در صورت شتاب‌دهی سخت‌افزاری، معمولاً سریع‌ترین جمع کنترلی پشتیبانی‌شده در fio است. .TP .B crc32c\-intel مترادفی برای crc32c. .TP .B crc32 استفاده از جمع کنترلی crc32 برای ناحیهٔ داده و ذخیرهٔ آن در سرایند هر بلوک. .TP .B crc16 استفاده از جمع کنترلی crc16 برای ناحیهٔ داده و ذخیرهٔ آن در سرایند هر بلوک. .TP .B crc7 استفاده از جمع کنترلی crc7 برای ناحیهٔ داده و ذخیرهٔ آن در سرایند هر بلوک. .TP .B xxhash استفاده از xxhash به عنوان تابع جمع کنترلی. به طور کلی سریع‌ترین جمع کنترلی نرم‌افزاری است که fio پشتیبانی می‌کند. .TP .B sha512 استفاده از sha512 به عنوان تابع جمع کنترلی. .TP .B sha256 استفاده از sha256 به عنوان تابع جمع کنترلی. .TP .B sha1 استفاده از sha1 بهینه‌سازی‌شده به عنوان تابع جمع کنترلی. .TP .B sha3\-224 استفاده از sha3\-224 بهینه‌سازی‌شده به عنوان تابع جمع کنترلی. .TP .B sha3\-256 استفاده از sha3\-256 بهینه‌سازی‌شده به عنوان تابع جمع کنترلی. .TP .B sha3\-384 استفاده از sha3\-384 بهینه‌سازی‌شده به عنوان تابع جمع کنترلی. .TP .B sha3\-512 استفاده از sha3\-512 بهینه‌سازی‌شده به عنوان تابع جمع کنترلی. .TP .B meta این گزینه منسوخ شده است، زیرا اکنون فراداده در سرایند اعتبارسنجی عمومی گنجانده شده و اعتبارسنجی فراداده به صورت پیش‌فرض انجام می‌شود. برای اطلاعات دقیق به توضیحات تنظیمات \fBverify\fR مراجعه کنید. این گزینه صرفاً برای حفظ سازگاری با پیکربندی‌های قدیمی نگه داشته شده است. از آن استفاده نکنید. .TP .B pattern اعتبارسنجی یک الگوی دقیق. به طور معمول fio سرایندی شامل برخی اطلاعات پایه و جمع کنترلی را لحاظ می‌کند، اما در صورت تنظیم این گزینه، تنها الگوی خاص تعیین‌شده با \fBverify_pattern\fR اعتبارسنجی می‌شود. .TP .B pattern_hdr اعتبارسنجی یک الگو در ترکیب با یک سرایند. .TP .B null تنها وانمود به اعتبارسنجی کن. برای آزمایش بخش‌های درونی با \(aqioengine=null\(aq مفید است، نه برای کاری دیگر. .RE .P از این گزینه می‌توان برای آزمون‌های پایداری مکرر (burn\-in tests) یک سیستم استفاده کرد تا اطمینان حاصل شود که داده‌های نوشته‌شده به درستی بازخوانی می‌شوند. .P اگر جهت دادهٔ مشخص‌شده خواندن (read) یا خواندن تصادفی (random read) باشد، fio فرض خواهد کرد که باید فایلی را که قبلاً نوشته شده است اعتبارسنجی کند. در این سناریو fio شمارهٔ بلوک نوشته‌شده در سرایند را اعتبارسنجی نمی‌کند. بذر سرایند اعتبارسنجی نخواهد شد، مگر اینکه با تنظیم گزینهٔ \fBverify_header_seed\fR صراحتاً درخواست شود. توجه داشته باشید در این سناریو، بررسی بذر سرایند تنها در صورتی کار خواهد کرد که اجرای خواندن دقیقاً با اجرای نوشتن اولیه مطابقت داشته باشد. .P اگر جهت داده شامل هر شکلی از نوشتن باشد، اعتبارسنجی بر روی داده‌های تازه نوشته‌شده انجام خواهد شد. .P برای جلوگیری از خطاهای اعتبارسنجی کاذب، هنگام اعتبارسنجی داده‌ها با موتورهای I/O ناهمگام و عمق I/O بیشتر از ۱ (I/O depths > 1) از گزینهٔ norandommap استفاده نکنید؛ یا گزینهٔ norandommap و مولد تصادفی lfsr را با هم به کار ببرید تا از نوشتن در همان آفست با چند I/O در حال تعلیق جلوگیری شود. .RE .TP .BI verify_offset \fR=\fPint جابه‌جایی سرایند اعتبارسنجی با داده‌ها در مکان دیگری از بلوک پیش از نوشتن. این سرایند پیش از اعتبارسنجی مجدداً به جای خود بازگردانده می‌شود. این مقدار باید در محدودهٔ \fBverify_interval\fR باشد. .TP .BI verify_interval \fR=\fPint نوشتن سرایند اعتبارسنجی با دانه‌بندی دقیق‌تر از \fBblocksize\fR. این سرایند برای تکه‌هایی به اندازهٔ \fBverify_interval\fR نوشته خواهد شد. مقدار \fBblocksize\fR باید بخش‌پذیر بر این مقدار باشد. .TP .BI verify_pattern \fR=\fPstr در صورت تنظیم، fio بافرهای I/O را با این الگو پر می‌کند. پیش‌فرض fio پر کردن با بایت‌های کاملاً تصادفی است، اما گاهی اوقات پر کردن با یک الگوی مشخص به منظور اعتبارسنجی I/O مطلوب است. بسته به طول الگو، fio در هر بار ۱/۲/۳/۴ بایت از بافر را پر می‌کند (می‌تواند یک عدد ده‌دهی یا هگزادسیمال باشد). اگر مقدار \fBverify_pattern\fR بزرگتر از یک کمیت ۳۲ بیتی باشد، باید یک عدد هگزادسیمال باشد که با \(lq0x\(rq یا \(lq0X\(rq آغاز می‌شود. همراه با \fBverify\fR استفاده شود. همچنین، \fBverify_pattern\fR از قالب %o پشتیبانی می‌کند، به این معنی که برای هر بلوک، آفست نوشته شده و سپس اعتبارسنجی می‌شود، برای مثال: .RS .RS .P verify_pattern=%o .RE .P یا استفاده از ترکیبی از همه‌چیز: .RS .P verify_pattern=0xff%o"abcd"\-12 .RE .RE .TP .BI verify_pattern_interval \fR=\fPbool ایجاد مجدد یک نمونه از \fBverify_pattern\fR به ازای هر \fBverify_pattern_interval\fR بایت. این مورد تنها زمانی مفید است که \fBverify_pattern\fR حاوی مشخصهٔ قالب %o باشد و می‌تواند برای سرعت بخشیدن به فرایند نوشتن هر بلوک روی دستگاه به همراه آفست آن استفاده شود. پیش‌فرض: 0 (غیرفعال). .TP .BI verify_fatal \fR=\fPbool به طور معمول fio هنگام بروز شکست در اعتبارسنجی یک بلوک، پیش از خروج کل محتویات را بررسی می‌کند. اگر این گزینه تنظیم شود، fio در اولین شکست مشاهده‌شده از کار خارج خواهد شد. پیش‌فرض: false. .TP .BI verify_dump \fR=\fPbool در صورت تنظیم، محتویات هر دو بلوک دادهٔ اصلی و بلوک داده‌ای که از دیسک خوانده شده است را در فایل‌ها ذخیره (dump) می‌کند. این کار امکان تحلیل‌های بعدی را برای بررسی دقیق نوع خرابی رخ‌داده در داده‌ها فراهم می‌سازد. به طور پیش‌فرض غیرفعال است. .TP .BI verify_async \fR=\fPint به طور معمول fio عملیات اعتبارسنجی I/O را به صورت درون‌خطی (inline) از طریق ریسهٔ ارسال‌کننده انجام می‌دهد. این گزینه یک عدد صحیح دریافت می‌کند که مشخص‌کنندهٔ تعداد ریسه‌های برون‌سپاری ناهمگام است که باید برای اعتبارسنجی I/O ایجاد شوند؛ در نتیجه fio وظیفهٔ اعتبارسنجی محتویات I/O را به یک یا چند ریسهٔ جداگانه واگذار می‌کند. در صورت استفاده از این گزینهٔ برون‌سپاری، حتی موتورهای I/O همگام نیز می‌توانند از تنظیم مقدار \fBiodepth\fR بیشتر از ۱ بهره‌مند شوند، زیرا به آن‌ها اجازه می‌دهد هم‌زمان با اجرای عملیات اعتبارسنجی، I/O در جریان داشته باشند. پیش‌فرض: 0 ریسهٔ ناهمگام، یعنی اعتبارسنجی به صورت ناهمگام نیست. .TP .BI verify_async_cpus \fR=\fPstr به fio اعلام می‌کند که وابستگی پردازندهٔ (CPU affinity) تعیین‌شده را روی ریسه‌های اعتبارسنجی I/O ناهمگام اعمال کند. برای قالب مورد استفاده، \fBcpus_allowed\fR را ببینید. .TP .BI verify_backlog \fR=\fPint به طور معمول fio محتویات نوشته‌شدهٔ کاری را که از اعتبارسنجی استفاده می‌کند، پس از اتمام آن کار اعتبارسنجی خواهد کرد. به عبارت دیگر، همه چیز نوشته می‌شود، سپس همه چیز بازخوانی و اعتبارسنجی می‌گردد. ممکن است به دلایل گوناگون ترجیح دهید اعتبارسنجی به طور پیوسته انجام شود. fio فراداده‌های مربوط به یک بلوک I/O را در حافظه ذخیره می‌کند، بنابراین برای بارهای کاری اعتبارسنجی بزرگ، مقدار زیادی حافظه صرف نگهداری این فراداده‌ها خواهد شد. اگر این گزینه فعال باشد، fio پیش از اعتبارسنجی این بلوک‌ها، تنها N بلوک می‌نویسد. .TP .BI verify_backlog_batch \fR=\fPint کنترل می‌کند که در صورت تنظیم \fBverify_backlog\fR، fio چه تعداد بلوک را اعتبارسنجی کند. اگر تنظیم نشود، پیش‌فرض آن مقدار \fBverify_backlog\fR خواهد بود (به این معنی که کل صف بازخوانی و اعتبارسنجی می‌شود). اگر \fBverify_backlog_batch\fR کمتر از \fBverify_backlog\fR باشد، همهٔ بلوک‌ها اعتبارسنجی نخواهند شد؛ اگر \fBverify_backlog_batch\fR بزرگتر از \fBverify_backlog\fR باشد، برخی از بلوک‌ها بیش از یک بار اعتبارسنجی خواهند شد..TP .BI verify_state_save \fR=\fPbool هنگامی که یک شغل در طول فاز نوشتنِ یک بار کاری اعتبارسنجی خارج می‌شود، وضعیت جاری آن را ذخیره می‌کند. این ویژگی به fio اجازه می‌دهد در صورتی که وضعیت اعتبارسنجی برای فاز خواندن اعتبارسنجی بارگذاری شود، عملیات را تا همان نقطه بازپخش (replay) کند. قالب نام فایل تقریباً به این صورت است: .RS .RS .P \-\-\-verify.state. .RE .P مقدار برای اجرای محلی برابر با "local"، برای اتصال سوکت کلاینت/سرور برابر با "sock"، و برای یک اتصال شبکه‌ای کلاینت/سرور برابر با "ip" (برای نمونه 192.168.0.1) است. پیش‌فرض true است. .RE .TP .BI verify_state_load \fR=\fPbool اگر از یک محرک خاتمه اعتبارسنجی استفاده شده باشد، fio وضعیت نوشتن جاری هر ریسه (thread) را ذخیره می‌کند. این مورد می‌تواند در زمان اعتبارسنجی استفاده شود تا fio بداند تا چه میزانی باید اعتبارسنجی را انجام دهد. بدون این اطلاعات، fio بر اساس تنظیمات موجود در فایل شغل استفاده‌شده، یک دور کامل اعتبارسنجی را اجرا خواهد کرد. پیش‌فرض false است. .TP .BI experimental_verify \fR=\fPbool فعال‌سازی اعتبارسنجی تجربی. اعتبارسنجی استاندارد، فراداده‌های I/O را برای استفاده بعدی در طول فاز اعتبارسنجی ثبت می‌کند. در مقابل، اعتبارسنجی تجربی پس از فاز نوشتن فایل را بازنشانی کرده و سپس I/Oها را برای فاز اعتبارسنجی بازپخش می‌کند. .TP .BI verify_write_sequence \fR=\fPbool اعتبارسنجی شماره توالی نوشتن (write sequence number) در سرآیند. در سناریویی با چند شغل، ممکن است اعتبارسنجی شماره توالی نوشتن با شکست مواجه شود. غیرفعال کردن این گزینه به این معنی است که از بررسی شماره توالی نوشتن صرف‌نظر می‌شود. این کار می‌تواند برای آزمودن نوشتن‌های اتمیک (atomic writes) مفید باشد، چرا که به این معنی است که بررسی checksum همچنان می‌تواند انجام شود. هنگامی که \fBatomic\fR فعال باشد، انتظار می‌رود که اعتبارسنجی checksum موفقیت‌آمیز باشد (در حالی که بررسی توالی نوشتن ممکن است همچنان با شکست مواجه شود). .TP .BI verify_header_seed \fR=\fPbool اعتبارسنجی مقدار seed سرآیند که برای تولید محتوای بافر استفاده شده است. در سناریوهای خاص با بارهای کاری صرفاً خواندن / اعتبارسنجی، هنگامی که \fBnorandommap\fR همراه با اصلاح‌کننده‌های آفست (به گزینه‌های \fBreadwrite\fR و \fBrw_sequencer\fR مراجعه کنید) و غیره فعال است، ممکن است اعتبارسنجی seed سرآیند ناموفق باشد. غیرفعال کردن این گزینه موجب صرف‌نظر از بررسی seed سرآیند می‌شود. پیش‌فرض true است. .TP .BI trim_percentage \fR=\fPint تعداد بلوک‌های اعتبارسنجی برای دور انداختن/trim کردن. .TP .BI trim_verify_zero \fR=\fPbool اعتبارسنجی اینکه آیا بلوک‌های trim/دور انداخته شده به صورت صفر برگردانده می‌شوند یا خیر. .TP .BI trim_backlog \fR=\fPint اعتبارسنجی اینکه آیا بلوک‌های trim/دور انداخته شده به صورت صفر برگردانده می‌شوند یا خیر. .TP .BI trim_backlog_batch \fR=\fPint این تعداد از بلوک‌های I/O را trim کن. .SS "وضعیت پایدار (Steady state)" .TP .BI steadystate \fR=\fPstr:float "\fR,\fP ss" \fR=\fPstr:float معیار و حد آستانه را برای ارزیابی عملکرد وضعیت پایدار تعریف می‌کند. پارامتر اول معیار را مشخص کرده در حالی که پارامتر دوم آستانه را تعیین می‌کند. هنگامی که معیار برای مدت زمان مشخص‌شده به زیر آستانه سقوط کند، شغل متوقف خواهد شد. برای نمونه، `iops_slope:0.1%' به fio دستور می‌دهد که وقتی شیب رگرسیون حداقل مربعات به کمتر از ۰٫۱٪ میانگین IOPS رسید، شغل را متوقف کند. اگر \fBgroup_reporting\fR فعال باشد، این مورد بر همه شغل‌های گروه اعمال خواهد شد. در زیر فهرستی از معیارهای موجود برای ارزیابی وضعیت پایدار آمده است. تمام ارزیابی‌ها صرفاً با استفاده از داده‌های پنجره جمع‌آوری متحرک انجام می‌شوند. حدود آستانه می‌توانند به صورت یک مقدار ثابت یا به صورت درصدی از میانگین در پنجره جمع‌آوری بیان شوند. .RS .P هنگام استفاده از این ویژگی، اغلب شغل‌ها باید شامل گزینه‌های \fBtime_based\fR و \fBruntime\fR یا گزینه \fBloops\fR باشند تا fio پس از پوشش دادن کل اندازه فایل(ها) یا دستگاه(های) مشخص‌شده، متوقف نشود. .RS .RS .TP .B iops جمع‌آوری داده‌های IOPS. اگر تمام اندازه‌گیری‌های تکی IOPS در محدوده مشخص‌شده از میانگین IOPS باشند، شغل را متوقف می‌کند (برای نمونه، `iops:2' به این معنی است که تمام مقادیر تکی IOPS باید حداکثر ۲ واحد با میانگین اختلاف داشته باشند، در حالی که `iops:0.2%' یعنی تمام مقادیر تکی IOPS برای خاتمه شغل باید در محدوده ۰٫۲٪ میانگین IOPS قرار گیرند). .TP .B iops_slope جمع‌آوری داده‌های IOPS و محاسبه شیب رگرسیون حداقل مربعات. اگر شیب به زیر حد مشخص‌شده سقوط کند، شغل متوقف می‌شود. .TP .B bw جمع‌آوری داده‌های پهنای باند. اگر تمام اندازه‌گیری‌های تکی پهنای باند در حد مشخص‌شده نسبت به میانگین پهنای باند باشند، شغل متوقف می‌شود. .TP .B bw_slope جمع‌آوری داده‌های پهنای باند و محاسبه شیب رگرسیون حداقل مربعات. اگر شیب به زیر حد مشخص‌شده سقوط کند، شغل متوقف می‌شود. .RE .RE .TP .BI steadystate_duration \fR=\fPtime "\fR,\fP ss_dur" \fR=\fPtime یک پنجره متحرک با این مدت زمان برای سنجش رسیدن به وضعیت پایدار استفاده خواهد شد. داده‌ها در هر \fBss_interval\fR جمع‌آوری می‌شوند. پیش‌فرض 0 است که تشخیص وضعیت پایدار را غیرفعال می‌کند. در صورت عدم ذکر واحد، مقدار بر حسب ثانیه تفسیر می‌شود. .TP .BI steadystate_ramp_time \fR=\fPtime "\fR,\fP ss_ramp" \fR=\fPtime به شغل اجازه می‌دهد قبل از آغاز جمع‌آوری داده برای بررسی معیار خاتمه وضعیت پایدار، به مدت زمان مشخص‌شده اجرا شود. پیش‌فرض 0 است. در صورت عدم ذکر واحد، مقدار بر حسب ثانیه تفسیر می‌شود. .TP .BI steadystate_check_interval \fR=\fPtime "\fR,\fP ss_interval" \fR=\fPtime مقادیر در طول پنجره متحرک با دوره‌ای به اندازه این مقدار جمع‌آوری خواهند شد. اگر \fBss_interval\fR برابر 30s و \fBss_dur\fR برابر 300s باشد، ۱۰ اندازه‌گیری انجام خواهد شد. پیش‌فرض 1s است اما ممکن است همگرا نشود، به ویژه برای دستگاه‌های کندتر، بنابراین آن را متناسب با نیاز تنظیم کنید. در صورت عدم ذکر واحد، مقدار بر حسب ثانیه تفسیر می‌شود. .SS "اندازه‌گیری‌ها و گزارش‌دهی (Measurements and reporting)" .TP .BI per_job_logs \fR=\fPbool اگر روی true تنظیم شود، fio لاگ‌های bw/clat/iops را با نام‌های فایل منحصربه‌فرد برای هر شغل تولید می‌کند. اگر روی false تنظیم شود، شغل‌هایی با نام‌های یکسان از یک نام فایل لاگ مشترک استفاده خواهند کرد. توجه داشته باشید که با تنظیم این گزینه روی false، فایل‌های لاگ در حالت الحاق (append mode) باز می‌شوند و اگر فایل‌های لاگ از قبل وجود داشته باشند، محتویات قبلی رونویسی نخواهند شد. پیش‌فرض: true. .TP .BI group_reporting گاهی ممکن است نمایش آمار برای گروه‌هایی از شغل‌ها به صورت یکپارچه به جای هر شغل منفرد مفید باشد. این امر به ویژه هنگام استفاده از \fBnumjobs\fR صادق است؛ زیرا بررسی خروجی تک‌تک ریسه‌ها/فرایندها به سرعت دشوار و غیرقابل مدیریت می‌شود. برای مشاهده گزارش نهایی بر اساس گروه به جای هر شغل، از \fBgroup_reporting\fR استفاده کنید. شغل‌های موجود در یک فایل بخشی از همان گروه گزارش‌دهی خواهند بود، مگر اینکه توسط یک \fBstonewall\fR یا با استفاده از \fBnew_group\fR جدا شده باشند. .RS .P نکته: هنگامی که \fBgroup_reporting\fR همراه با خروجی \fBjson\fR استفاده می‌شود، ویژگی‌های خاصی مختص به هر شغل وجود دارد که ممکن است بین شغل‌ها متفاوت باشد اما معادل طبیعی در سطح گروه ندارد. نمونه‌ها شامل \fBkb_base\fR، \fBunit_base\fR، \fBsig_figs\fR، \fBthread_number\fR، \fBpid\fR و \fBjob_start\fR هستند. برای این ویژگی‌ها، مقادیر مربوط به شغل نخست برای کل گروه ثبت می‌شود. .P همچنین، گزینه‌هایی مانند \fBpercentile_list\fR و \fBunified_rw_reporting\fR باید میان شغل‌های یک گروه گزارش‌دهی یکسان باشند. متغیر بودن این گونه گزینه‌ها میان شغل‌های یک گروه گزارش‌دهی، پیکربندی پشتیبانی‌نشده‌ای است. .RE .TP .BI new_group یک گروه گزارش‌دهی جدید آغاز می‌کند. رجوع کنید به: \fBgroup_reporting\fR. در صورت تعیین نشدن، تمام شغل‌های درون یک فایل بخشی از همان گروه گزارش‌دهی خواهند بود، مگر اینکه با یک \fBstonewall\fR از هم جدا شوند. .TP .BI stats \fR=\fPbool به طور پیش‌فرض، fio نتایج خروجی نهایی را برای تمام شغل‌های اجرا شده جمع‌آوری کرده و نمایش می‌دهد. اگر این گزینه روی 0 تنظیم شود، fio آن را در خروجی آمار نهایی نادیده خواهد گرفت. .TP .BI write_bw_log \fR=\fPstr در صورت تعیین، یک لاگ پهنای باند برای این شغل می‌نویسد. می‌تواند برای ذخیره داده‌های پهنای باند شغل‌ها در طول دوره حیاتشان استفاده شود. .RS .P اگر هیچ آرگومان str تعیین نشود، نام پیش‌فرض `jobname_type.x.log' استفاده خواهد شد. حتی در صورت ارائه آرگومان، fio باز هم نوع لاگ را به آن الحاق می‌کند. بنابراین اگر مقدار زیر تعیین شود: .RS .P write_bw_log=foo .RE .P نام واقعی لاگ `foo_bw.x.log' خواهد بود که در آن `x' نمایه شغل است (1..N، که N تعداد شغل‌ها است). اگر \fBper_job_logs\fR برابر false باشد، نام فایل شامل نمایه شغل `.x` نخواهد بود. .P اسکریپت همراه \fBfio_generate_plots\fR از gnuplot برای تبدیل این فایل‌های متنی به نمودارهای مناسب استفاده می‌کند. برای مشاهده نحوه ساختار داده‌ها در داخل فایل، به بخش \fBLOG FILE FORMATS\fR مراجعه کنید. .RE .TP .BI write_lat_log \fR=\fPstr همانند \fBwrite_bw_log\fR است، با این تفاوت که این گزینه به جای آن فایل‌های تاخیر ارسال I/O (مثلاً `name_slat.x.log')، تکمیل (مثلاً `name_clat.x.log') و تاخیر کل (مثلاً `name_lat.x.log') ایجاد می‌کند. برای جزئیات قالب نام فایل به \fBwrite_bw_log\fR و برای نحوه ساختار داده‌ها در داخل فایل‌ها به بخش \fBLOG FILE FORMATS\fR مراجعه کنید. .TP .BI write_hist_log \fR=\fPstr همانند \fBwrite_bw_log\fR است، اما در عوض یک فایل هیستوگرام تاخیر تکمیل I/O (مثلاً `name_hist.x.log') می‌نویسد. توجه داشته باشید که این فایل خالی خواهد ماند مگر اینکه \fBlog_hist_msec\fR نیز تنظیم شده باشد. برای جزئیات قالب نام فایل به \fBwrite_bw_log\fR و برای نحوه ساختار داده‌ها در فایل به بخش \fBLOG FILE FORMATS\fR مراجعه کنید. .TP .BI write_iops_log \fR=\fPstr همانند \fBwrite_bw_log\fR است، اما در عوض یک فایل IOPS (مثلاً `name_iops.x.log`) می‌نویسد. به دلیل اینکه پیش‌فرض fio ثبت I/Oهای منفرد است، ورودی مقدار در لاگ IOPS برابر 1 خواهد بود مگر اینکه لاگ‌گیری پنجره‌ای (windowed logging - رجوع کنید به \fBlog_avg_msec\fR) فعال شده باشد. برای جزئیات در مورد قالب نام فایل به \fBwrite_bw_log\fR و برای نحوه ساختار داده در فایل به \fBLOG FILE FORMATS\fR مراجعه کنید..TP .BI log_entries \fR=\fPint به‌طور پیش‌فرض، fio برای هر I/O که تکمیل می‌شود، یک مدخل در گزارش iops، latency یا bw ثبت می‌کند. تعداد اولیه‌ی مدخل‌های گزارش I/O برابر ۱۰۲۴ است. هنگامی که تمام مدخل‌های گزارش پر شوند، مدخل‌های جدید به‌صورت پویا تخصیص می‌یابند. این تخصیص پویای مدخل‌های گزارش ممکن است تأثیر منفی بر آمارهای وابسته به زمان، مانند تأخیرهای انتهایی (tail latencies) در I/O (مثلاً صدک ۹۹٫۹ام تأخیر تکمیل) بگذارد. این گزینه امکان مشخص کردن تعداد اولیه‌ی بزرگ‌تری از مدخل‌های گزارش را فراهم می‌کند تا از تخصیص مدخل‌ها در زمان اجرا جلوگیری شود، که در نتیجه به آمارهای وابسته به زمان دقیق‌تری در I/O می‌انجامد. همچنین به \fBlog_avg_msec\fR مراجعه کنید. پیش‌فرض ۱۰۲۴ است. .TP .BI log_avg_msec \fR=\fPint به‌طور پیش‌فرض، fio برای هر I/O کامل‌شده یک مدخل در گزارش iops، latency یا bw ثبت می‌کند. هنگام نوشتن در گزارش دیسک، حجم آن می‌تواند به‌سرعت بسیار افزایش یابد. تنظیم این گزینه fio را هدایت می‌کند تا به‌جای آن، برای هر مدخل گزارش میانگین داده‌ها را در طول مدت‌زمان مشخص‌شده ثبت کند و بدین ترتیب تفکیک‌پذیری گزارش کاهش یابد. هنگامی که کار تکمیل می‌شود، fio داده‌های انباشته‌شده‌ی گزارش تأخیر را تخلیه (flush) می‌کند، بنابراین ممکن است بازهٔ زمانی آخرین گزارش با مقدار تعیین‌شده توسط این گزینه مطابقت نداشته باشد و حتی ممکن است برچسب‌های زمانی تکراری ثبت شوند. همچنین \fBlog_window_value\fR را ببینید. پیش‌فرض 0 است (ثبت مدخل برای تک‌تک I/Oها). همچنین به بخش \fBLOG FILE FORMATS\fR مراجعه کنید. .TP .BI log_hist_msec \fR=\fPint مشابه \fBlog_avg_msec\fR است، اما مدخل‌ها را برای هیستوگرام‌های تأخیر تکمیل ثبت می‌کند. محاسبه‌ی صدک‌های تأخیر از طریق میانگین‌گیری بازه‌ها با استفاده از \fBlog_avg_msec\fR نادقیق است. تنظیم این گزینه باعث می‌شود fio مدخل‌های هیستوگرام را در طول بازه زمانی مشخص‌شده ثبت کند و ضمن حفظ دقت صدک‌ها، حجم گزارش را برای دستگاه‌های با IOPS بالا کاهش دهد. همچنین \fBlog_hist_coarseness\fR و \fBwrite_hist_log\fR را ببینید. پیش‌فرض 0 است، به این معنی که ثبت گزارش هیستوگرام غیرفعال است. .TP .BI log_hist_coarseness \fR=\fPint عددی صحیح بین 0 تا 6 است که میزان درشتی (coarseness) تفکیک‌پذیری گزارش‌های هیستوگرامِ فعال‌شده با \fBlog_hist_msec\fR را تعیین می‌کند. با هر گام افزایش در میزان درشتی، fio تعداد بازه‌ها (bins) را به نصف کاهش می‌دهد. پیش‌فرض 0 است که در آن گزارش‌های هیستوگرام شامل 1216 بازه‌ی تأخیر هستند. بخش \fBLOG FILE FORMATS\fR را ببینید. .TP .BI log_window_value \fR=\fPstr "\fR,\fP log_max_value" \fR=\fPstr اگر \fBlog_avg_msec\fR تنظیم شده باشد، fio به‌طور پیش‌فرض میانگین را در طول آن پنجره ثبت می‌کند. این گزینه تعیین می‌کند که آیا fio مقدار میانگین، بیشینه یا هر دو مقدار را در طول پنجره ثبت کند. این گزینه فقط بر ثبت تأخیر اثر می‌گذارد، زیرا هر دو مقدار میانگین و بیشینه برای گزارش‌های iops یا bw یکسان خواهند بود. مقادیر پذیرفته‌شده عبارتند از: .RS .TP .B avg ثبت مقدار میانگین در طول پنجره؛ مقدار پیش‌فرض. .TP .B max ثبت مقدار بیشینه در طول پنجره. .TP .B both ثبت هر دو مقدار میانگین و بیشینه در طول پنجره. .TP .B 0 نام مستعار سازگار با گذشته برای \fBavg\fR. .TP .B 1 نام مستعار سازگار با گذشته برای \fBmax\fR. .RE .TP .BI log_offset \fR=\fPbool اگر این گزینه تنظیم شود، گزینه‌های iolog علاوه بر سایر مقادیر داده، آفست بایتی (byte offset) را نیز برای مدخل I/O شامل خواهند شد. پیش‌فرض 0 است، به این معنی که آفست‌ها در گزارش‌ها ثبت نمی‌شوند. همچنین بخش \fBLOG FILE FORMATS\fR را ببینید. .TP .BI log_prio \fR=\fPbool اگر تنظیم شود، فیلد `Command priority` در \fBLOG FILE FORMATS\fR مقدار اولویت و کلاس اولویت IO دستور را نشان می‌دهد. در غیر این صورت، این فیلد نشان می‌دهد که آیا دستور دارای بالاترین کلاس اولویت RT است یا خیر. همچنین بخش \fBLOG FILE FORMATS\fR را ببینید. .TP .BI log_issue_time \fR=\fPbool اگر تنظیم شود، گزینه‌های iolog زمان صدور دستور (command issue time) را علاوه بر سایر مقادیر داده برای مدخل I/O شامل خواهند شد. پیش‌فرض 0 است، به این معنی که زمان‌های صدور دستور در گزارش‌ها گنجانده نمی‌شوند. همچنین بخش \fBLOG FILE FORMATS\fR را ببینید. این گزینه باید همراه با \fBwrite_lat_log\fR و \fBlog_offset\fR تنظیم شود. .TP .BI log_compression \fR=\fPint اگر تنظیم شود، fio گزارش‌های I/O را در حین اجرا فشرده می‌کند تا ردپای مصرف حافظه را پایین نگه دارد. هنگامی که حجم یک گزارش به اندازه‌ی مشخص‌شده برسد، آن قطعه (chunk) برداشته شده و در پس‌زمینه فشرده می‌شود. با توجه به اینکه گزارش‌های I/O تا حد زیادی فشرده‌پذیر هستند، این کار برای اجراهای طولانی‌تر موجب صرفه‌جویی چشمگیری در حافظه می‌شود. جنبه‌ی منفی این است که فشرده‌سازی مقداری از چرخه‌های CPU را در پس‌زمینه مصرف می‌کند و ممکن است بر اجرای اصلی تأثیر بگذارد؛ هرچند مصرف شدن بخش اعظم حافظه توسط گزارش‌گیری نیز همین اثر را خواهد داشت. در پایان اجرا، گزارش‌های I/O با خارج کردن قطعه‌ها از حالت فشرده و ذخیره‌سازی آن‌ها در فایل گزارشِ مشخص‌شده، به‌صورت عادی ذخیره می‌شوند. این قابلیت به در دسترس بودن zlib وابسته است. .TP .BI log_compression_cpus \fR=\fPstr مجموعه‌ای از CPUها را مشخص می‌کند که مجاز به مدیریت فشرده‌سازی برخط گزارش برای کارهای I/O هستند. این گزینه می‌تواند تفکیک بهتری میان کارهای حساس به کارایی و عملیات فشرده‌سازی در پس‌زمینه ایجاد کند. برای قالب مورد استفاده به \fBcpus_allowed\fR مراجعه کنید. .TP .BI log_store_compressed \fR=\fPbool در صورت تنظیم، fio فایل‌های گزارش را با قالبی فشرده ذخیره می‌کند. این فایل‌ها با خود fio و با استفاده از پارامتر خط فرمان \fB\-\-inflate\-log\fR قابل بازگشایی هستند. فایل‌ها با پسوند `.fz' ذخیره خواهند شد. .TP .BI log_unix_epoch \fR=\fPbool نام مستعار سازگار با گذشته برای \fBlog_alternate_epoch\fR. .TP .BI log_alternate_epoch \fR=\fPbool در صورت تنظیم، fio برچسب‌های زمانی را در فایل‌های گزارش حاصل از فعال‌سازی write_type_log برای هر نوع گزارش، بر اساس مبدأ زمانی (epoch) ساعت مشخص‌شده در گزینه‌ی \fBlog_alternate_epoch_clock_id\fR ثبت می‌کند، به جای برچسب‌های زمانی پیش‌فرض که بر پایه‌ی صفر هستند. .TP .BI log_alternate_epoch_clock_id \fR=\fPint مشخص‌کننده‌ی clock_id مورد استفاده توسط clock_gettime برای دریافت مبدأ زمانی جایگزین در صورتی که \fBlog_alternate_epoch\fR برقرار باشد. در غیر این صورت بی‌اثر است. مقدار پیش‌فرض 0، یا CLOCK_REALTIME است. .TP .BI block_error_percentiles \fR=\fPbool اگر تنظیم شود، خطاها را در واحدهایی با اندازه بلوک trim حاصل از نوشتن‌ها و trimها ثبت می‌کند و هیستوگرامی از تعداد trimهای مورد نیاز تا رسیدن به خطا و همچنین نوع خطای رخ‌داده را در خروجی ارائه می‌دهد. .TP .BI bwavgtime \fR=\fPint پهنای باند محاسبه‌شده را در طول مدت زمان داده‌شده میانگین‌گیری می‌کند. مقدار بر حسب میلی‌ثانیه مشخص می‌شود. اگر کار مذکور ثبت پهنای باند را از طریق \fBwrite_bw_log\fR نیز انجام دهد، کمترین مقدار بین این گزینه و \fBlog_avg_msec\fR استفاده خواهد شد. پیش‌فرض: 500ms. .TP .BI iopsavgtime \fR=\fPint مقدار IOPS محاسبه‌شده را در طول مدت زمان داده‌شده میانگین‌گیری می‌کند. مقدار بر حسب میلی‌ثانیه مشخص می‌شود. اگر کار مذکور ثبت IOPS را از طریق \fBwrite_iops_log\fR نیز انجام دهد، کمترین مقدار بین این گزینه و \fBlog_avg_msec\fR استفاده خواهد شد. پیش‌فرض: 500ms. .TP .BI disk_util \fR=\fPbool در صورت پشتیبانی پلتفرم، آمارهای بهره‌وری دیسک (disk utilization) را تولید می‌کند. پیش‌فرض: true. .TP .BI disable_lat \fR=\fPbool اندازه‌گیری مقادیر تأخیر کل (total latency) را غیرفعال می‌کند. این گزینه فقط برای کاهش تعداد فراخوانی‌های \fBgettimeofday\fR\|(2) کاربرد دارد، زیرا این فراخوانی‌ها در نرخ‌های بسیار بالای IOPS بر کارایی تأثیر منفی می‌گذارند. توجه داشته باشید که برای رهایی واقعی از بخش عمده‌ای از این فراخوانی‌ها، این گزینه باید همراه با \fBdisable_slat\fR و \fBdisable_bw_measurement\fR استفاده شود. .TP .BI disable_clat \fR=\fPbool اندازه‌گیری مقادیر تأخیر تکمیل (completion latency) را غیرفعال می‌کند. به \fBdisable_lat\fR مراجعه کنید. .TP .BI disable_slat \fR=\fPbool اندازه‌گیری مقادیر تأخیر ارسال (submission latency) را غیرفعال می‌کند. به \fBdisable_lat\fR مراجعه کنید. .TP .BI disable_bw_measurement \fR=\fPbool "\fR,\fP disable_bw" \fR=\fPbool اندازه‌گیری مقادیر توان عملیاتی/پهنای باند را غیرفعال می‌کند. به \fBdisable_lat\fR مراجعه کنید. .TP .BI slat_percentiles \fR=\fPbool صدک‌های تأخیر ارسال را گزارش می‌دهد. تأخیر ارسال برای ioengineهای همگام (synchronous) ثبت نمی‌شود. .TP .BI clat_percentiles \fR=\fPbool صدک‌های تأخیر تکمیل را گزارش می‌دهد. .TP .BI lat_percentiles \fR=\fPbool صدک‌های تأخیر کل را گزارش می‌دهد. تأخیر کل حاصل جمع تأخیر ارسال و تأخیر تکمیل است. .TP .BI percentile_list \fR=\fPfloat_list فهرست پیش‌فرض صدک‌ها برای تأخیرها و هیستوگرام خطای بلوک را بازنویسی می‌کند. هر عدد یک مقدار ممیز شناور در بازه‌ی (0,100] است و حداکثر طول فهرست ۲۰ است. برای جداسازی اعداد از ':' استفاده کنید. برای مثال، `\-\-percentile_list=99.5:99.9' باعث می‌شود fio به ترتیب مدت‌زمان‌های تأخیری را گزارش کند که ۹۹٫۵٪ و ۹۹٫۹٪ از تأخیرهای مشاهده‌شده پایین‌تر از آن‌ها بوده‌اند. .TP .BI significant_figures \fR=\fPint در صورت استفاده از \fB\-\-output\-format\fR با مقدار `normal'، ارقام بامعنی (significant figures) را روی این مقدار تنظیم می‌کند. مقادیر بالاتر دقت بیشتری را در واحدهای IOPS و توان عملیاتی فراهم می‌کنند، در حالی که مقادیر پایین‌تر گرد خواهند شد. حداقل مقدار مجاز ۱ و حداکثر مقدار ۱۰ است. پیش‌فرض ۴ است..SS "مدیریت خطا" .TP .BI exitall_on_error هنگامی که یک کار با خطا پایان می‌یابد، بقیه را خاتمه بده. حالت پیش‌فرض، انتظار برای اتمام هر کار است. .TP .BI continue_on_error \fR=\fPstr به‌طور معمول fio در اولین شکست مشاهده‌شده از کار خارج می‌شود. اگر این گزینه تنظیم شده باشد، fio در صورت بروز یک «خطای غیرمهلک» (EIO یا EILSEQ) کار را تا زمانی که زمان اجرا به پایان برسد یا اندازه I/O مشخص‌شده کامل شود، ادامه می‌دهد. اگر از این گزینه استفاده شود، دو آمار دیگر ضمیمه می‌شوند: تعداد کل خطاها و اولین خطا. فیلد خطای ارائه‌شده در آمارها، اولین خطایی است که در طول اجرا رخ داده است. .RS .P نکته: هنگام استفاده از I/O میان‌گیرشده (بافری)، ممکن است خطای نوشتن از سوی دستگاه توسط fio متوجه نشود، زیرا فراخوانی سیستمی write()‎ (یا مشابه آن) صرفاً صفحات هسته را کثیف (dirty) می‌کند، مگر اینکه از `sync` یا `direct` استفاده شود. خطاهای I/O دستگاه زمانی رخ می‌دهند که داده‌های کثیف واقعاً بر روی دیسک نوشته شوند. اگر نوشتن‌های کاملاً همگام مطلوب نیستند، می‌توان از `fsync` یا `fdatasync` نیز استفاده کرد. این مورد مختص نوشتن‌ها است، زیرا خواندن‌ها همیشه همگام (synchronous) هستند. .RS .P مقادیر مجاز عبارتند از: .RS .RS .TP .B none خروج در صورت بروز هرگونه خطای I/O یا اعتبارسنجی (verify). .TP .B read ادامه دادن در خطاهای خواندن، خروج در سایر موارد. .TP .B write ادامه دادن در خطاهای نوشتن، خروج در سایر موارد. .TP .B io ادامه دادن در صورت بروز هرگونه خطای I/O، خروج در سایر موارد. .TP .B verify ادامه دادن در خطاهای اعتبارسنجی، خروج در سایر موارد. .TP .B all ادامه دادن در تمام خطاها. .TP .B 0 نام مستعار سازگار با گذشته برای 'none'. .TP .B 1 نام مستعار سازگار با گذشته برای 'all'. .RE .RE .TP .BI ignore_error \fR=\fPstr گاهی اوقات می‌خواهید در حین آزمایش برخی خطاها را نادیده بگیرید؛ در این حالت می‌توانید به‌جای اینکه تنها قادر به نادیده گرفتن «خطای غیرمهلک» پیش‌فرض با استفاده از \fBcontinue_on_error\fR باشید، فهرستی از خطاها را برای هر نوع خطا مشخص کنید. در `ignore_error=READ_ERR_LIST,WRITE_ERR_LIST,VERIFY_ERR_LIST`، خطاها برای یک نوع خطای داده‌شده با ':' از یکدیگر جدا می‌شوند. خطا می‌تواند یک نماد ('ENOSPC' ،'ENOMEM') یا یک عدد صحیح باشد. مثال: .RS .RS .P ignore_error=EAGAIN,ENOSPC:122 .RE .P این گزینه EAGAIN را از READ، و ENOSPC و 122(EDQUOT) را از WRITE نادیده خواهد گرفت. این گزینه با بازنویسی کردن \fBcontinue_on_error\fR با فهرست خطاها برای هر نوع خطا (در صورت وجود) کار می‌کند. .RE .TP .BI error_dump \fR=\fPbool در صورت تنظیم، تمام خطاها حتی اگر غیرمهلک باشند تخلیه (dump) می‌شوند؛ به‌طور پیش‌فرض true است. در صورت غیرفعال بودن، تنها خطاهای مهلک تخلیه خواهند شد. .SS "اجرای بارهای کاری از پیش تعریف‌شده" ابزار fio شامل نمایه‌های از پیش تعریف‌شده‌ای است که بارهای کاری I/O تولیدشده توسط سایر ابزارها را شبیه‌سازی می‌کنند. .TP .BI profile \fR=\fPstr بار کاری از پیش تعریف‌شده برای اجرا. نمایه‌های فعلی عبارتند از: .RS .RS .TP .B tiobench بار کاری شبیه به بنچمارک I/O چندنخی (tiotest/tiobench). .TP .B act بار کاری شبیه به ابزار Aerospike Certification Tool (ACT). .RE .RE .P برای مشاهده گزینه‌های تکمیلی یک نمایه، پس از مشخص کردن نمایه از \fB\-\-cmdhelp\fR استفاده کنید. برای مثال: .RS .TP $ fio \-\-profile=act \-\-cmdhelp .RE .SS "گزینه‌های نمایه Act" .TP .BI device\-names \fR=\fPstr دستگاه‌های مورد استفاده. .TP .BI load \fR=\fPint ضریب بار ACT. پیش‌فرض: 1. .TP .BI test\-duration\fR=\fPtime مدت زمان اجرای کل آزمایش. در صورت حذف واحد، مقدار برحسب ثانیه در نظر گرفته می‌شود. پیش‌فرض: 24h. .TP .BI threads\-per\-queue\fR=\fPint تعداد نخ‌های I/O خواندن به‌ازای هر دستگاه. پیش‌فرض: 8. .TP .BI read\-req\-num\-512\-blocks\fR=\fPint تعداد بلوک‌های 512 بایتی برای خواندن در هر نوبت. پیش‌فرض: 3. .TP .BI large\-block\-op\-kbytes\fR=\fPint اندازه عملیات‌های بلوک بزرگ برحسب KiB (نوشتن‌ها). پیش‌فرض: 131072. .TP .BI prep تنظیم برای اجرای فاز آماده‌سازی (prep) در ACT..SS "گزینه‌های پروفایل Tiobench" .TP .BI size\fR=\fPstr اندازه به مبی‌بایت (MiB). .TP .BI block\fR=\fPint اندازه بلوک به بایت. پیش‌فرض: 4096. .TP .BI numruns\fR=\fPint تعداد دفعات اجرا. .TP .BI dir\fR=\fPstr دایرکتوری آزمون. .TP .BI threads\fR=\fPint تعداد نخ‌ها. .SH "خروجی (OUTPUT)" دستور fio خروجی بسیار زیادی تولید می‌کند. در حین اجرا، fio وضعیت کارهای ایجادشده را نمایش خواهد داد. نمونه‌ای از آن بدین صورت است: .P .nf Jobs: 1 (f=1): [_(1),M(1)][24.8%][r=20.5MiB/s,w=23.5MiB/s][r=82,w=94 IOPS][eta 01m:31s] .fi .P نویسه‌های درون نخستین جفت قلاب، وضعیت فعلی هر نخ را مشخص می‌کنند. اولین نویسه، مربوط به اولین کار تعریف‌شده در فایل کار (job file) است، و به همین ترتیب ادامه می‌یابد. مقادیر ممکن (به ترتیب چرخه حیات معمول) عبارتند از: .RS .TP .PD 0 .B P نخ برپا شده، اما شروع نشده است. .TP .B C نخ ایجاد شد. .TP .B I نخ مقداردهی اولیه شده، در حال انتظار یا تولید داده‌های مورد نیاز است. .TP .B p نخ در حال اجرای پیش‌خوانش فایل(ها) است. .TP .B / نخ در دوره افزایش تدریجی بار (ramp period) است. .TP .B R در حال اجرا، انجام خواندن‌های متوالی. .TP .B r در حال اجرا، انجام خواندن‌های تصادفی. .TP .B W در حال اجرا، انجام نوشتن‌های متوالی. .TP .B w در حال اجرا، انجام نوشتن‌های تصادفی. .TP .B M در حال اجرا، انجام خواندن/نوشتن‌های متوالی ترکیبی. .TP .B m در حال اجرا، انجام خواندن/نوشتن‌های تصادفی ترکیبی. .TP .B D در حال اجرا، انجام trimهای متوالی. .TP .B d در حال اجرا، انجام trimهای تصادفی. .TP .B F در حال اجرا، در حال حاضر منتظر فراخوانی \fBfsync\fR\|(2). .TP .B V در حال اجرا، در حال بررسی صحت (verification) داده‌های نوشته‌شده. .TP .B f نخ در حال اتمام است. .TP .B E نخ پایان یافته، اما هنوز توسط نخ اصلی جمع‌آوری (reap) نشده است. .TP .B \- نخ جمع‌آوری شد. .TP .B X نخ جمع‌آوری شد، با خطا خاتمه یافته است. .TP .B K نخ جمع‌آوری شد، به دلیل دریافت سیگنال خاتمه یافته است. .PD .RE .P دستور fio رشته مربوط به وضعیت نخ‌ها را فشرده می‌کند تا فضای بیش از حد نیاز در خط فرمان اشغال نشود. برای نمونه، اگر ۱۰ خواننده و ۱۰ نویسنده در حال اجرا داشته باشید، خروجی به این صورت خواهد بود: .P .nf Jobs: 20 (f=20): [R(10),W(10)][4.0%][r=20.5MiB/s,w=23.5MiB/s][r=82,w=94 IOPS][eta 57m:36s] .fi .P توجه داشته باشید که رشته وضعیت به ترتیب نمایش داده می‌شود، بنابراین می‌توان دریافت کدام‌یک از کارها در حال حاضر چه کاری انجام می‌دهند. در مثال بالا، این بدان معناست که کارهای 1\-\-10 خواننده و 11\-\-20 نویسنده هستند. .P سایر مقادیر تا حد زیادی مشخص و واضح هستند \-\- تعداد نخ‌هایی که در حال حاضر در حال اجرا بوده و مشغول انجام I/O هستند، تعداد فایل‌های باز کنونی (f=)، درصد تخمینی تکمیل، نرخ I/O از زمان بررسی قبلی (ابتدا سرعت خواندن فهرست می‌شود، سپس سرعت نوشتن و در صورت وجود سرعت trim) از نظر پهنای باند و IOPS، و زمان باقی‌مانده تا تکمیل گروه در حال اجرای فعلی. تخمین زمان اجرای گروه‌های بعدی (در صورت وجود) غیرممکن است. .P هنگامی که اجرای fio به پایان برسد (یا توسط Ctrl\-C متوقف شود)، داده‌ها را به ترتیب برای هر نخ، گروهی از نخ‌ها و دیسک‌ها نشان خواهد داد. برای هر نخ کلی (یا گروه)، خروجی به این شکل خواهد بود: .P .nf Client1: (groupid=0, jobs=1): err= 0: pid=16109: Sat Jun 24 12:07:54 2017 write: IOPS=88, BW=623KiB/s (638kB/s)(30.4MiB/50032msec) slat (nsec): min=500, max=145500, avg=8318.00, stdev=4781.50 clat (usec): min=170, max=78367, avg=4019.02, stdev=8293.31 lat (usec): min=174, max=78375, avg=4027.34, stdev=8291.79 clat percentiles (usec): | 1.00th=[ 302], 5.00th=[ 326], 10.00th=[ 343], 20.00th=[ 363], | 30.00th=[ 392], 40.00th=[ 404], 50.00th=[ 416], 60.00th=[ 445], | 70.00th=[ 816], 80.00th=[ 6718], 90.00th=[12911], 95.00th=[21627], | 99.00th=[43779], 99.50th=[51643], 99.90th=[68682], 99.95th=[72877], | 99.99th=[78119] bw ( KiB/s): min= 532, max= 686, per=0.10%, avg=622.87, stdev=24.82, samples= 100 iops : min= 76, max= 98, avg=88.98, stdev= 3.54, samples= 100 lat (usec) : 250=0.04%, 500=64.11%, 750=4.81%, 1000=2.79% lat (msec) : 2=4.16%, 4=1.84%, 10=4.90%, 20=11.33%, 50=5.37% lat (msec) : 100=0.65% cpu : usr=0.27%, sys=0.18%, ctx=12072, majf=0, minf=21 IO depths : 1=85.0%, 2=13.1%, 4=1.8%, 8=0.1%, 16=0.0%, 32=0.0%, >=64=0.0% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% issued rwt: total=0,4450,0, short=0,0,0, dropped=0,0,0 latency : target=0, window=0, percentile=100.00%, depth=8 .fi .P نام کار (یا نام نخستین کار در هنگام استفاده از \fBgroup_reporting\fR) به همراه شناسه گروه (group id)، تعداد کارهای تجمیع‌شده، آخرین شناسه خطای مشاهده‌شده (که در صورت عدم وجود خطا 0 است)، pid/tid آن نخ و زمان تکمیل کار/گروه چاپ می‌شود. در ادامه آمار I/O برای هر جهت داده انجام‌شده آمده است (در مثال بالا نوشتن‌ها را نشان می‌دهد). به ترتیب فهرست‌شده، آن‌ها نمایانگر موارد زیر هستند: .RS .TP .B read/write/trim رشته قبل از دونقطه نشان می‌دهد آمار مربوط به کدام جهت I/O است. \fIIOPS\fR میانگین I/Oهای انجام‌شده در هر ثانیه است. \fIBW\fR نرخ میانگین پهنای باند است که به این صورت نشان داده می‌شود: مقدار در قالب توان ۲ (مقدار در قالب توان ۱۰). دو مقدار پایانی نشان‌دهنده: (کل I/O انجام‌شده در قالب توان ۲ / \fIruntime\fR آن نخ) است. .TP .B slat تأخیر ارسال (Submission latency) که در آن \fImin\fR کمترین، \fImax\fR بیشترین، \fIavg\fR میانگین و \fIstdev\fR انحراف معیار است. این مدت‌زمانی است که ارسال I/O به طول انجامیده است. برای I/O همگام (sync) این سطر نمایش داده نمی‌شود چرا که slat در واقع همان تأخیر تکمیل است (زیرا در آنجا صف‌بندی/تکمیل یک عملیات واحد است). این مقدار می‌تواند به نانوثانیه، میکروثانیه یا میلی‌ثانیه باشد \-\-\- fio مناسب‌ترین مبنا را انتخاب کرده و چاپ می‌کند (در مثال بالا نانوثانیه بهترین مقیاس بود). نکته: در حالت \fB\-\-minimal\fR تأخیرها همیشه بر حسب میکروثانیه بیان می‌شوند. .TP .B clat تأخیر تکمیل (Completion latency). با همان نام‌های موجود در slat، این مقدار نشان‌دهنده زمان از ارسال تا تکمیل بخش‌های I/O است. برای I/O همگام، clat معمولاً برابر (یا بسیار نزدیک به) 0 خواهد بود، زیرا زمان ارسال تا تکمیل اساساً فقط زمان پردازنده (CPU) است (I/O پیش از این انجام شده است، توضیح slat را ببینید). برای موتورهای عملیات فایل و دایرکتوری، \fBclat\fP نشان‌دهنده زمان لازم برای تکمیل یک عملیات روی فایل یا دایرکتوری است. .RS .TP \fBfilecreate engine\fP:\tهزینه زمانی برای ایجاد یک فایل جدید .TP \fBfilestat engine\fP:\tهزینه زمانی برای بررسی یک فایل موجود .TP \fBfiledelete engine\fP:\tهزینه زمانی برای حذف یک فایل .TP \fBdircreate engine\fP:\tهزینه زمانی برای ایجاد یک دایرکتوری جدید .TP \fBdirstat engine\fP:\tهزینه زمانی برای بررسی یک دایرکتوری موجود .TP \fBdirdelete engine\fP:\tهزینه زمانی برای حذف یک دایرکتوری .RE .TP .B lat تأخیر کل (Total latency). با همان نام‌های slat و clat، این مقدار نشان‌دهنده مدت‌زمان از هنگامی است که fio واحد I/O را ایجاد کرده تا تکمیل عملیات I/O. .TP .B bw آمار پهنای باند بر اساس اندازه‌گیری‌ها در بازه‌های زمانی گسسته. fio به‌طور پیوسته بایت‌های منتقل‌شده و عملیات‌های I/O تکمیل‌شده را پایش می‌کند. به‌طور پیش‌فرض fio پهنای باند را در هر بازه نیم‌ثانیه‌ای محاسبه کرده (به \fBbwavgtime\fR مراجعه کنید) و آمار توصیفی مربوط به اندازه‌گیری‌ها را در اینجا گزارش می‌دهد. این بخش نام‌هایی مشابه با آمارهای xlat دارد، اما تعداد نمونه‌های گرفته‌شده (\fIsamples\fR) و درصد تقریبی از کل پهنای باند تجمیعی را که این نخ در گروه خود دریافت کرده است (\fIper\fR) نیز شامل می‌شود. این مقدار آخر تنها زمانی واقعاً کاربردی است که نخ‌های این گروه روی یک دیسک باشند، زیرا در این حالت آن‌ها برای دسترسی به دیسک با یکدیگر رقابت می‌کنند. برای موتورهای عملیات فایل و دایرکتوری، \fBbw\fR بی‌معنی است..TP .B iops آمار IOPS بر اساس اندازه‌گیری‌ها در بازه‌های زمانی گسسته. برای جزئیات بیشتر به توضیحات \fBbw\fR در بالا مراجعه کنید. برای کنترل مدت‌زمان بازه‌ها \fBiopsavgtime\fR را ببینید. همان مقادیر گزارش‌شده برای \fBbw\fR در اینجا نیز به‌جز درصد گزارش می‌شوند. برای موتورهای عملیات فایل و دایرکتوری، \fBiops\fP اساسی‌ترین شاخص برای نشان دادن کارایی است. این شاخص بیانگر تعداد فایل‌ها یا دایرکتوری‌هایی است که در هر ثانیه می‌توان روی آن‌ها عملیات انجام داد. .RS .TP \fBfilecreate engine\fP:\tتعداد فایل‌هایی که می‌توان در هر ثانیه ایجاد کرد .TP \fBfilestat engine\fP:\tتعداد فایل‌هایی که می‌توان در هر ثانیه بررسی (look up) کرد .TP \fBfiledelete engine\fP:\tتعداد فایل‌هایی که می‌توان در هر ثانیه حذف کرد .TP \fBdircreate engine\fP:\tتعداد دایرکتوری‌هایی که می‌توان در هر ثانیه ایجاد کرد .TP \fBdirstat engine\fP:\tتعداد دایرکتوری‌هایی که می‌توان در هر ثانیه بررسی (look up) کرد .TP \fBdirdelete engine\fP:\tتعداد دایرکتوری‌هایی که می‌توان در هر ثانیه حذف کرد .RE .TP .B lat (nsec/usec/msec) توزیع تأخیرهای تکمیل I/O. این زمان از هنگامی که I/O از fio خارج می‌شود تا هنگامی که تکمیل می‌گردد را شامل می‌شود. بر خلاف بخش‌های جداگانه read/write/trim در بالا، داده‌های این بخش و بخش‌های باقی‌مانده برای تمام I/Oهای گروه گزارش اعمال می‌شوند. 250=0.04% بدان معناست که 0.04% از I/Oها در کمتر از 250us تکمیل شده‌اند. 500=64.11% بدان معناست که 64.11% از I/Oها برای تکمیل بین 250 تا 499us زمان برده‌اند. .TP .B cpu میزان استفاده از CPU. زمان کاربر (user) و سیستم (system)، به همراه تعداد تعویض‌های زمینه (context switches) که این رشته پشت سر گذاشته است، استفاده از زمان سیستم و کاربر، و در نهایت تعداد نقص‌های صفحه (page faults) بزرگ و کوچک. ارقام استفاده از CPU میانگین کارهای آن گروه گزارش هستند، در حالی که شمارنده‌های تعویض زمینه و نقص‌های صفحه جمع زده می‌شوند. .TP .B IO depths توزیع عمق‌های I/O در طول چرخه حیات کار (job). اعداد به توان‌هایی از ۲ تقسیم شده‌اند و هر مدخل، عمق‌ها را از آن مقدار تا مقادیر کمتر از مدخل بعدی پوشش می‌دهد \-\- به عنوان مثال، =16 عمق‌های ۱۶ تا ۳۱ را در بر می‌گیرد. توجه داشته باشید که بازه پوشش‌داده‌شده توسط یک مدخل توزیع عمق می‌تواند با بازه پوشش‌داده‌شده توسط مدخل توزیع معادل \fBsubmit\fR/\fBcomplete\fR متفاوت باشد. .TP .B IO submit چه تعداد بخش I/O در یک فراخوانی ثبت (submit call) منفرد ارسال شده‌اند. هر مدخل آن مقدار و کمتر از آن تا مدخل قبلی را نشان می‌دهد \-\- برای مثال، 16=100% به این معناست که در هر فراخوانی ثبت، هر رقمی بین ۹ تا ۱۶ مورد I/O ثبت شده است. توجه داشته باشید که بازه پوشش‌داده‌شده توسط یک مدخل توزیع \fBsubmit\fR می‌تواند با بازه پوشش‌داده‌شده توسط مدخل توزیع عمق معادل متفاوت باشد. .TP .B IO complete مشابه مقدار \fBsubmit\fR در بالا، اما در عوض برای تکمیل‌ها. .TP .B IO issued rwt تعداد درخواست‌های \fBread/write/trim\fR صادرشده، و این که چه تعداد از آن‌ها کوتاه بوده یا رها (dropped) شده‌اند. .TP .B IO latency این مقادیر برای \fBlatency_target\fR و گزینه‌های مرتبط هستند. هنگامی که این گزینه‌ها به کار گرفته شوند، این بخش عمق I/O مورد نیاز برای برآورده ساختن هدف تأخیر مشخص‌شده را توصیف می‌کند. .RE .P پس از فهرست شدن هر کلاینت، آمار گروه چاپ می‌شود. خروجی به این شکل خواهد بود: .P .nf Run status group 0 (all jobs): READ: bw=20.9MiB/s (21.9MB/s), 10.4MiB/s\-10.8MiB/s (10.9MB/s\-11.3MB/s), io=64.0MiB (67.1MB), run=2973\-3069msec WRITE: bw=1231KiB/s (1261kB/s), 616KiB/s\-621KiB/s (630kB/s\-636kB/s), io=64.0MiB (67.1MB), run=52747\-53223msec .fi .P برای هر جهت داده این موارد چاپ می‌شوند: .RS .TP .B bw پهنای باند تجمیعی رشته‌ها در این گروه و در ادامه کمترین و بیشترین پهنای باند تمام رشته‌ها در این گروه. مقادیر خارج از براکت در قالب توان ۲ و مقادیر داخل آن معادل همان مقدار در قالب توان ۱۰ هستند. .TP .B io مجموع کل I/O انجام‌شده توسط تمام رشته‌ها در این گروه. قالب خروجی مشابه \fBbw\fR است. .TP .B run کوتاه‌ترین و طولانی‌ترین زمان اجرای رشته‌ها در این گروه. .RE .P و در نهایت، آمار دیسک چاپ می‌شود. این ویژگی مخصوص لینوکس است. خروجی به این صورت خواهد بود: .P .nf Disk stats (read/write): sda: ios=16398/16511, sectors=32321/65472, merge=30/162, ticks=6853/819634, in_queue=826487, util=100.00% .fi .P هر مقدار برای هر دو عملیات خواندن و نوشتن چاپ می‌شود، که خواندن اول می‌آید. این اعداد بیانگر موارد زیر هستند: .RS .TP .B ios تعداد I/Oهای انجام‌شده توسط تمام گروه‌ها. .TP .B merge تعداد ادغام‌های انجام‌شده توسط زمان‌بند I/O. .TP .B ticks تعداد تیک‌هایی که دیسک را مشغول نگه داشته‌ایم. .TP .B in_queue کل زمان صرف‌شده در صف دیسک. .TP .B util میزان بهره‌وری از دیسک. مقدار 100% به این معنی است که دیسک را همواره مشغول نگه داشته‌ایم، 50% به معنای دیسکی است که نیمی از زمان بیکار بوده است. .RE .P همچنین این امکان وجود دارد که از fio بخواهید بدون متوقف کردن کار، خروجی فعلی را در حین اجرا تخلیه (dump) کند. برای این کار، سیگنال USR1 را به fio ارسال کنید. همچنین می‌توانید با استفاده از پارامتر \fB\-\-status\-interval\fR، یا با ایجاد فایلی در `/tmp' با نام `fio\-dump\-status'، خروجی‌های دوره‌ای دریافت کنید. اگر fio این فایل را ببیند، آن را حذف (unlink) کرده و وضعیت فعلی خروجی را تخلیه می‌کند..SH "خروجی موجز (TERSE OUTPUT)" برای کاربردهای اسکریپتی که در آن‌ها معمولاً مایلید جداول یا نمودارهایی از نتایج ایجاد کنید، fio می‌تواند نتایج را در قالبی جداشده با نقطه\-ویرگول خروجی دهد. این قالب یک خط طولانی از مقادیر است، مانند: .P .nf 2;card0;0;0;7139336;121836;60004;1;10109;27.932460;116.933948;220;126861;3495.446807;1085.368601;226;126864;3523.635629;1089.012448;24063;99944;50.275485%;59818.274627;5540.657370;7155060;122104;60004;1;8338;29.086342;117.839068;388;128077;5032.488518;1234.785715;391;128085;5061.839412;1236.909129;23436;100928;50.287926%;59964.832030;5644.844189;14.595833%;19.394167%;123706;0;7313;0.1%;0.1%;0.1%;0.1%;0.1%;0.1%;100.0%;0.00%;0.00%;0.00%;0.00%;0.00%;0.00%;0.01%;0.02%;0.05%;0.16%;6.04%;40.40%;52.68%;0.64%;0.01%;0.00%;0.01%;0.00%;0.00%;0.00%;0.00%;0.00% A description of this job goes here. .fi .P توضیحات کار (در صورت ارائه)، برای خروجی موجز نگارش ۲ (terse v2) در خط دوم می‌آید. در سایر نگارش‌های خروجی موجز، در همان خط قرار می‌گیرد. .P برای فعال کردن خروجی موجز، از گزینه‌های خط فرمان \fB\-\-minimal\fR یا \(aq\-\-output\-format=terse\(aq استفاده کنید. نخستین مقدار، نگارش قالب خروجی موجز است. اگر خروجی بنا به دلیلی مجبور به تغییر باشد، این عدد ۱ واحد افزایش می‌یابد تا بیانگر آن تغییر باشد. .P به صورت تفکیک‌شده، قالب به شرح زیر است (توضیحات درون براکت‌ها نشان می‌دهند که یک فیلد از چه زمانی اضافه شده یا اینکه مختص نگارش خاصی از خروجی موجز است): .P .nf نگارش موجز (terse version)، نگارش fio [v3]، نام کار (jobname)، شناسه گروه (groupid)، خطا (error) .fi .RS .P .B وضعیت خواندن (READ): .RE .P .nf کل IO (KiB)، پهنای باند (KiB/sec)، IOPS، مدت زمان اجرا (msec) تأخیر ارسال (Submission latency): min, max, mean, stdev (usec) تأخیر تکمیل (Completion latency): min, max, mean, stdev (usec) صدک‌های تأخیر تکمیل: ۲۰ فیلد (پایین را ببینید) تأخیر کل (Total latency): min, max, mean, stdev (usec) پهنای باند (KiB/s): min, max، درصد تجمیعی از کل، mean, stdev، تعداد نمونه‌ها [v5] IOPS [v5]: min, max, mean, stdev، تعداد نمونه‌ها .fi .RS .P .B وضعیت نوشتن (WRITE): .RE .P .nf کل IO (KiB)، پهنای باند (KiB/sec)، IOPS، مدت زمان اجرا (msec) تأخیر ارسال (Submission latency): min, max, mean, stdev (usec) تأخیر تکمیل (Completion latency): min, max, mean, stdev (usec) صدک‌های تأخیر تکمیل: ۲۰ فیلد (پایین را ببینید) تأخیر کل (Total latency): min, max, mean, stdev (usec) پهنای باند (KiB/s): min, max، درصد تجمیعی از کل، mean, stdev، تعداد نمونه‌ها [v5] IOPS [v5]: min, max, mean, stdev، تعداد نمونه‌ها .fi .RS .P .B وضعیت TRIM [همه نگارش‌ها به جز نگارش ۳]: .RE .P .nf فیلدها مشابه وضعیت \fBREAD/WRITE\fR هستند. .fi .RS .P .B مصرف پردازنده (CPU): .RE .P .nf کاربر (user)، سیستم (system)، تعویض‌های زمینه (context switches)، خطاهای عمده (major faults)، خطاهای جزئی (minor faults) .fi .RS .P .B عمق‌های I/O (I/O depths): .RE .P .nf <=1, 2, 4, 8, 16, 32, >=64 .fi .RS .P .B تأخیرهای I/O بر حسب میکروثانیه: .RE .P .nf <=2, 4, 10, 20, 50, 100, 250, 500, 750, 1000 .fi .RS .P .B تأخیرهای I/O بر حسب میلی‌ثانیه: .RE .P .nf <=2, 4, 10, 20, 50, 100, 250, 500, 750, 1000, 2000, >=2000 .fi .RS .P .B بهره‌وری دیسک [نگارش ۳]: .RE .P .nf نام دیسک، I/Oهای خواندن، I/Oهای نوشتن، ادغام‌های خواندن، ادغام‌های نوشتن، تیک‌های خواندن، تیک‌های نوشتن، زمان سپری‌شده در صف، درصد بهره‌وری دیسک .fi .RS .P .B اطلاعات تکمیلی (وابسته به continue_on_error، پیش‌فرض خاموش): .RE .P .nf تعداد کل خطاها، کد اولین خطا .fi .RS .P .B اطلاعات تکمیلی (وابسته به تنظیم بودن description): .RE .P .nf توضیحات متنی .fi .P صدک‌های تأخیر تکمیل می‌توانند دسته‌ای شامل حداکثر ۲۰ مجموعه باشند، بنابراین برای خروجی موجز، fio همه آن‌ها را می‌نویسد. هر فیلد به این شکل خواهد بود: .P .nf 1.00%=6112 .fi .P که نشان‌دهنده صدک Xاُم و تأخیر بر حسب \(aqusec\(aq مرتبط با آن است. .P برای \fBبهره‌وری دیسک (Disk utilization)\fR، تمام دیسک‌های استفاده‌شده توسط fio نشان داده می‌شوند. بنابراین برای هر دیسک، یک بخش بهره‌وری دیسک وجود خواهد داشت. .P در زیر یک خط منفرد حاوی نام‌های کوتاه برای هر یک از فیلدها در خروجی مختصر (minimal) نگارش ۳ آمده است که با نقطه\-ویرگول از یکدیگر جدا شده‌اند: .P .nf terse_version_3;fio_version;jobname;groupid;error;read_kb;read_bandwidth_kb;read_iops;read_runtime_ms;read_slat_min_us;read_slat_max_us;read_slat_mean_us;read_slat_dev_us;read_clat_min_us;read_clat_max_us;read_clat_mean_us;read_clat_dev_us;read_clat_pct01;read_clat_pct02;read_clat_pct03;read_clat_pct04;read_clat_pct05;read_clat_pct06;read_clat_pct07;read_clat_pct08;read_clat_pct09;read_clat_pct10;read_clat_pct11;read_clat_pct12;read_clat_pct13;read_clat_pct14;read_clat_pct15;read_clat_pct16;read_clat_pct17;read_clat_pct18;read_clat_pct19;read_clat_pct20;read_tlat_min_us;read_lat_max_us;read_lat_mean_us;read_lat_dev_us;read_bw_min_kb;read_bw_max_kb;read_bw_agg_pct;read_bw_mean_kb;read_bw_dev_kb;write_kb;write_bandwidth_kb;write_iops;write_runtime_ms;write_slat_min_us;write_slat_max_us;write_slat_mean_us;write_slat_dev_us;write_clat_min_us;write_clat_max_us;write_clat_mean_us;write_clat_dev_us;write_clat_pct01;write_clat_pct02;write_clat_pct03;write_clat_pct04;write_clat_pct05;write_clat_pct06;write_clat_pct07;write_clat_pct08;write_clat_pct09;write_clat_pct10;write_clat_pct11;write_clat_pct12;write_clat_pct13;write_clat_pct14;write_clat_pct15;write_clat_pct16;write_clat_pct17;write_clat_pct18;write_clat_pct19;write_clat_pct20;write_tlat_min_us;write_lat_max_us;write_lat_mean_us;write_lat_dev_us;write_bw_min_kb;write_bw_max_kb;write_bw_agg_pct;write_bw_mean_kb;write_bw_dev_kb;cpu_user;cpu_sys;cpu_csw;cpu_mjf;cpu_minf;iodepth_1;iodepth_2;iodepth_4;iodepth_8;iodepth_16;iodepth_32;iodepth_64;lat_2us;lat_4us;lat_10us;lat_20us;lat_50us;lat_100us;lat_250us;lat_500us;lat_750us;lat_1000us;lat_2ms;lat_4ms;lat_10ms;lat_20ms;lat_50ms;lat_100ms;lat_250ms;lat_500ms;lat_750ms;lat_1000ms;lat_2000ms;lat_over_2000ms;disk_name;disk_read_iops;disk_write_iops;disk_read_merges;disk_write_merges;disk_read_ticks;write_ticks;disk_queue_time;disk_util .fi .P در حالت کلاینت/سرور (کارخواه/کارساز)، خروجی موجز با آنچه هنگام اجرای محلی کارها نمایش می‌یابد متفاوت است. داده‌های بهره‌وری دیسک از خروجی موجز استاندارد حذف می‌شوند و در نگارش ۳ و بالاتر، در یک خط جداگانه در پایان هر چرخه گزارش‌دهی موجز ظاهر می‌شوند..SH "خروجی JSON (JSON OUTPUT)" قالب خروجی \fBjson\fR به‌گونه‌ای طراحی شده است که هم برای انسان خوانا باشد و هم برای تجزیه خودکار مناسب باشد. بخش‌های آن در بیشتر موارد همانند بخش‌های خروجی \fBnormal\fR هستند. مقدار \fBruntime\fR بر حسب میلی‌ثانیه گزارش می‌شود و مقدار \fBbw\fR بر حسب واحدهای ۱۰۲۴ بایت در ثانیه گزارش می‌گردد. .fi .SH "خروجی JSON+ (JSON+ OUTPUT)" قالب خروجی \fBjson+\fR همسان با قالب خروجی \fBjson\fR است، با این تفاوت که رونوشت کاملی از بازه‌های تاخیر تکمیل (completion latency bins) را می‌افزاید. هر شیء \fBbins\fR شامل مجموعه‌ای از جفت‌های (کلید، مقدار) است که در آن‌ها کلیدها مدت‌زمان‌های تاخیر هستند و مقادیر شمارش می‌کنند که چه تعداد I/O دارای تاخیر تکمیلی با آن مدت‌زمان متناظر بوده‌اند. برای نمونه، این مورد را در نظر بگیرید: .RS .P "bins" : { "87552" : 1, "89600" : 1, "94720" : 1, "96768" : 1, "97792" : 1, "99840" : 1, "100864" : 2, "103936" : 6, "104960" : 534, "105984" : 5995, "107008" : 7529, ... } .RE .P این داده‌ها نشان می‌دهند که یک I/O برای تکمیل به 87,552ns، دو I/O برای تکمیل به 100,864ns و ۷۵۲۹ مورد I/O برای تکمیل به 107,008ns زمان نیاز داشته‌اند. .P همچنین همراه با fio یک اسکریپت پایتون به نام \fBfio_jsonplus_clat2csv\fR ارائه شده است که خروجی json+ را دریافت کرده و داده‌های تاخیر را در قالب CSV و مناسب برای رسم نمودار تولید می‌کند. .P مدت‌زمان‌های تاخیر در واقع نشان‌دهنده نقاط میانی بازه‌های تاخیر هستند. برای جزئیات بیشتر به `stat.h' در سورس‌کد fio مراجعه کنید. .SH "قالب فایل ردگیری (TRACE FILE FORMAT)" دو قالب فایل ردگیری وجود دارد که ممکن است با آن‌ها مواجه شوید. قالب قدیمی‌تر (v1) از نسخه 1.20\-rc3 (مارس ۲۰۰۸) پشتیبانی نمی‌شود. با این حال در ادامه شرح داده خواهد شد تا در صورتی که با یک فایل ردگیری قدیمی مواجه شدید، بتوانید آن را درک کنید. .P در هر حال، فایل ردگیری یک فایل متنی ساده است که در هر خط آن یک عملیات منفرد قرار دارد. .TP .B قالب فایل ردگیری نسخه ۱ (Trace file format v1) هر خط نشان‌دهنده یک عملیات I/O منفرد در قالب زیر است: .RS .RS .P rw, offset, length .RE .P که در آن `rw=0/1' برای خواندن/نوشتن (read/write) بوده و مقادیر `offset' و `length' بر حسب بایت هستند. .P این قالب در نسخه‌های fio >= 1.20\-rc3 پشتیبانی نمی‌شود. .RE .TP .B قالب فایل ردگیری نسخه ۲ (Trace file format v2) نسخه دوم قالب فایل ردگیری در fio نسخه ۱.۱۷ اضافه شد. این نسخه امکان دسترسی به بیش از یک فایل در هر ردگیری را فراهم می‌سازد و مجموعه بزرگ‌تری از عملیات‌های ممکن روی فایل را در بر دارد. .RS .P خط نخست فایل ردگیری باید این باشد: .RS .P "fio version 2 iolog" .RE .P به دنبال آن خطوطی در دو قالب مختلف می‌توانند بیایند که در زیر شرح داده شده‌اند. .P .B قالب مدیریت فایل (The file management format): .RS filename action .P مقدار `filename' به صورت یک مسیر مطلق مشخص می‌شود. مقدار `action' می‌تواند یکی از این موارد باشد: .RS .TP .B add افزودن `filename' داده‌شده به ردگیری. .TP .B open باز کردن فایل با `filename' داده‌شده. مقدار `filename' باید پیش‌تر با عملیات \fBadd\fR اضافه شده باشد. .TP .B close بستن فایل با `filename' داده‌شده. این فایل باید پیش‌تر با \fBopen\fR باز شده باشد. .RE .RE .P .B قالب عملیات I/O فایل (The file I/O action format): .RS filename action offset length .P مقدار `filename' به صورت یک مسیر مطلق داده می‌شود، و پیش از آنکه بتوان از آن در این قالب استفاده کرد باید افزوده (\fBadd\fR) و باز (\fBopen\fR) شده باشد. مقادیر `offset' و `length' بر حسب بایت مشخص می‌شوند. مقدار `action' می‌تواند یکی از این موارد باشد: .RS .TP .B wait به مدت `offset' میکروثانیه منتظر می‌ماند. هر مقداری کمتر از ۱۰۰ نادیده گرفته می‌شود. زمان نسبت به عبارت `wait' قبلی سنجیده می‌شود. توجه داشته باشید که عملیات `wait` از نسخه ۳ به بعد مجاز نیست، چرا که رفتار مشابه را می‌توان با استفاده از برچسب‌های زمانی (timestamps) به دست آورد. .TP .B read خواندن `length' بایت با شروع از `offset'. .TP .B write نوشتن `length' بایت با شروع از `offset'. .TP .B sync اجرای \fBfsync\fR\|(2) روی فایل. .TP .B datasync اجرای \fBfdatasync\fR\|(2) روی فایل. .TP .B trim اعمال trim روی فایل داده‌شده از `offset' مشخص به میزان `length' بایت. .RE .RE .RE .TP .B قالب فایل ردگیری نسخه ۳ (Trace file format v3) نسخه سوم قالب فایل ردگیری در fio نسخه ۳.۳۱ اضافه شد. این نسخه اجبار می‌کند که هر عملیات یک برچسب زمانی (timestamp) مرتبط با خود داشته باشد. .RS .P خط نخست فایل ردگیری باید این باشد: .RS .P "fio version 3 iolog" .RE .P به دنبال آن خطوطی در دو قالب مختلف می‌توانند بیایند که در زیر شرح داده شده‌اند. .P .B قالب مدیریت فایل (The file management format): .RS timestamp filename action .RE .P .B قالب عملیات I/O فایل (The file I/O action format): .RS timestamp filename action offset length .RE .P مقدار `timestamp` نسبت به شروع اجرا است (یعنی از ۰ شروع می‌شود). مقادیر `filename`، `action`، `offset` و `length` همسان با نسخه ۲ هستند، به جز اینکه نسخه ۳ اجازه استفاده از عملیات `wait` را نمی‌دهد. .RE.SH "بازپخش ورودی/خروجی \- ادغام ردها (I/O REPLAY \- MERGING TRACES)" هم‌استقرایی (Colocation) رویکردی متداول برای بهره‌وری حداکثری از یک ماشین است. با این حال، تشخیص اینکه کدام بارهای کاری با یکدیگر سازگارند و کدام ناسازگار، وظیفه‌ای به مراتب دشوارتر است. اگرچه fio می‌تواند بارهای کاری را به صورت هم‌زمان از طریق چندین جاب (job) بازپخش کند، اما بخشی از متغیرها را به زمان‌بند (scheduler) واگذار می‌کند که این امر بازتولید نتایج را دشوارتر می‌سازد. ادغام کردن، روشی برای یکدست کردن ترتیب رویدادها است. .P ادغام در بازپخش I/O تعبیه شده است و هنگامی انجام می‌شود که \fBmerge_blktrace_file\fR مشخص شده باشد. فهرست فایل‌های ارائه‌شده به \fBread_iolog\fR فرایند ادغام را طی کرده و یک فایل واحد ذخیره‌شده در فایل مشخص‌شده را در خروجی تولید می‌کنند. فایل خروجی به‌گونه‌ای فرستاده می‌شود که گویی تنها فایل تحویل‌داده‌شده به \fBread_iolog\fR بوده است. یک مثال به شکل زیر خواهد بود: .RS .P $ fio \-\-read_iolog=":" \-\-merge_blktrace_file="" .RE .P تنها ایجاد فایل ادغام‌شده را می‌توان با ارسال آرگومان خط فرمان \fBmerge-blktrace-only\fR انجام داد. .P مقیاس‌بندی ردها (traces) می‌تواند برای مشاهدهٔ اثر نسبی کاهش یا افزایش سرعت یک رد خاص انجام شود. گزینهٔ \fBmerge_blktrace_scalars\fR فهرستی از ضرایب مقیاس درصدی جداشده با دونقطه را دریافت می‌کند. این مقادیر بر اساس اندیس با فایل‌های فرستاده‌شده به \fBread_iolog\fR جفت می‌شوند. .P با مقیاس‌بندی، ممکن است تطبیق زمان اجرای تمام ردها مطلوب باشد. این کار با \fBmerge_blktrace_iters\fR امکان‌پذیر است. این گزینه نیز دقیقاً مانند \fBmerge_blktrace_scalars\fR بر اساس اندیس با \fBread_iolog\fR جفت می‌شود. .P به عنوان مثال، با فرض دو رد A و B که هر کدام ۶۰ ثانیه هستند؛ اگر بخواهیم اثر صدور درخواست‌های I/O با سرعت دو برابر توسط رد A را بررسی کنیم و رد A را در طول زمان اجرای رد B تکرار نماییم، می‌توان دستور زیر را انجام داد: .RS .P $ fio \-\-read_iolog=":"" \-\-merge_blktrace_file"" \-\-merge_blktrace_scalars="50:100" \-\-merge_blktrace_iters="2:1" .RE .P این دستور رد A را با سرعت دو برابر و به تعداد ۲ بار اجرا می‌کند تا زمان اجرای تقریبی آن با یک بار اجرای رد B برابر شود. .SH "پروفایل‌سازی بیکاری پردازنده (CPU IDLENESS PROFILING)" در برخی موارد، می‌خواهیم بار اضافی پردازنده (CPU overhead) را در یک آزمون بسنجیم. برای مثال، وصله‌ها را به طور خاص برای بررسی اینکه آیا مصرف پردازنده را کاهش می‌دهند یا خیر، آزمایش می‌کنیم. برنامهٔ fio از یک رویکرد بالونی (balloon approach) برای ایجاد یک رشته (thread) به ازای هر CPU استفاده می‌کند که با اولویت بیکاری (idle) اجرا می‌شود، به این معنی که تنها زمانی اجرا می‌گردد که هیچ فرآیند دیگری به CPU نیاز نداشته باشد. با اندازه‌گیری مقدار کار تکمیل‌شده توسط این رشته، میزان بیکاری هر CPU بر این اساس قابل استخراج است. .P یک واحد کار به صورت دسترسی به یک صفحهٔ کامل از نویسه‌های بدون علامت (unsigned characters) تعریف می‌شود. میانگین و انحراف معیار زمان لازم برای تکمیل یک واحد کار، در بخش \(lqunit work\(rq گزارش می‌شود. گزینه‌ها را می‌توان برای گزارش جزئیات بیکاری به ازای هر CPU یا بیکاری کلی سیستم از طریق تجمیع آمارهای هر CPU انتخاب کرد. .SH "اعتبارسنجی و تریگرها (VERIFICATION AND TRIGGERS)" هنگام انجام اعتبارسنجی داده‌ها، fio معمولاً به یکی از دو روش اجرا می‌شود. روش نخست یک جاب نوشتن عادی با فعال بودن اعتبارسنجی (verify) است. هنگامی که مرحلهٔ نوشتن به پایان رسید، fio به خواندن تغییر وضعیت داده و تمام آنچه را که نوشته است اعتبارسنجی می‌کند. مدل دوم اجرای صرفاً مرحلهٔ نوشتن است، و سپس بعداً اجرای همان جاب (اما با عملیات خواندن به جای نوشتن) برای تکرار الگوهای مشابه I/O و اعتبارسنجی محتویات می‌باشد. هر دوی این روش‌ها به کامل شدن مرحلهٔ نوشتن وابسته هستند، چرا که در غیر این صورت fio نمی‌داند چه مقدار داده نوشته شده است. .P با تریگرهای اعتبارسنجی، fio از تخلیهٔ وضعیت جاری نوشتن در فایل‌های محلی پشتیبانی می‌کند. سپس یک بار کاری اعتبارسنجیِ خواندنِ بعدی می‌تواند این وضعیت را بارگذاری کرده و دقیقاً بداند کجا متوقف شود. این قابلیت به عنوان مثال برای آزمودن مواردی که در آن‌ها برق یک سرور به شکلی مدیریت‌شده قطع می‌شود، کاربرد دارد. .P یک تریگر اعتبارسنجی شامل دو مورد است: .RS .P ۱) ذخیره‌سازی وضعیت نوشتن هر جاب. .P ۲) اجرای یک دستور تریگر. .RE .P وضعیت نوشتن نسبتاً کم‌حجم است و در حدود چند صد بایت تا چند کیلوبایت می‌باشد. این وضعیت حاوی اطلاعاتی در مورد تعداد تکمیل‌های انجام‌شده، آخرین X تکمیل و غیره است. .P یک تریگر یا از طریق ایجاد (\(aqtouch\(aq) یک فایل مشخص در سیستم یا از طریق تنظیم یک مهلت زمانی (timeout) فراخوانی می‌شود. اگر fio با \(oq\-\-trigger\-file=/tmp/trigger\-file\(cq اجرا شود، به طور مداوم وجود \(oq/tmp/trigger\-file\(cq را بررسی می‌کند. با مشاهدهٔ این فایل، تریگر را فعال می‌سازد (در نتیجه وضعیت را ذخیره کرده و دستور تریگر را اجرا می‌کند). .P برای اجراهای کلاینت/سرور، هم تریگر محلی و هم تریگر راه دور وجود دارد. اگر fio به عنوان backend سرور در حال اجرا باشد، وضعیت جاب‌ها را برای ذخیره‌سازی امن به کلاینت بازمی‌گرداند و سپس در صورت تعیین، تریگر راه دور را اجرا می‌کند. اگر تریگر محلی مشخص شده باشد، سرور همچنان وضعیت نوشتن را بازمی‌گرداند، اما سپس کلاینت تریگر را اجرا خواهد کرد. .P .B "مثال تریگر اعتبارسنجی (Verification trigger example)" .RS فرض کنید می‌خواهیم یک آزمایش قطع برق روی ماشین لینوکس از راه دور \(aqserver\(aq اجرا کنیم. بار کاری نوشتن ما در \(oqwrite\-test.fio\(cq قرار دارد. می‌خواهیم برق \(aqserver\(aq را در نقطه‌ای حین اجرا قطع کنیم و این آزمایش را از روی ماشین محلی امن خود، یعنی \(aqlocalbox\(aq، اجرا خواهیم کرد. روی سرور، backend برنامهٔ fio را به صورت عادی اجرا می‌کنیم: .RS .P server# fio \-\-server .RE .P و روی کلاینت، بار کاری را شروع می‌کنیم: .RS .P localbox$ fio \-\-client=server \-\-trigger\-file=/tmp/my\-trigger \-\-trigger\-remote="bash \-c "echo b > /proc/sysrq\-triger"" .RE .P ما \(oq/tmp/my\-trigger\(cq را به عنوان فایل تریگر تنظیم می‌کنیم و به fio می‌گوییم دستور زیر را اجرا کند: .RS .P echo b > /proc/sysrq\-trigger .RE .P روی سرور، پس از دریافت تریگر و ارسال وضعیت نوشتن به ما اجرا شود. این روش کار خواهد کرد، اما در واقع برق سرور را قطع نمی‌کند، بلکه تنها آن را به طور ناگهانی بازراه‌اندازی (reboot) می‌کند. اگر روشی از راه دور برای قطع برق سرور از طریق IPMI یا موارد مشابه داشته باشیم، می‌توانیم به جای آن از یک دستور تریگر محلی استفاده کنیم. فرض کنید اسکریپتی به نام ipmi\-reboot داریم که بازراه‌اندازی از طریق IPMI را برای نام میزبان مشخصی انجام می‌دهد. در localbox، می‌توانستیم به جای آن fio را با یک تریگر محلی اجرا کنیم: .RS .P localbox$ fio \-\-client=server \-\-trigger\-file=/tmp/my\-trigger \-\-trigger="ipmi\-reboot server" .RE .P در این حالت، fio منتظر می‌ماند تا سرور وضعیت نوشتن را ارسال کند، و با وقوع آن، \(oqipmi\-reboot server\(cq را اجرا می‌نماید. .RE .P .B "بارگذاری وضعیت اعتبارسنجی (Loading verify state)" .RS برای بارگذاری وضعیت نوشتن ذخیره‌شده، فایل جاب اعتبارسنجی خواندن باید شامل گزینهٔ \fBverify_state_load\fR باشد. اگر این گزینه تنظیم شده باشد، fio وضعیت ذخیره‌شدهٔ قبلی را بارگذاری خواهد کرد. برای یک اجرای محلی fio این عمل با بارگذاری مستقیم فایل‌ها انجام می‌شود و در یک اجرای کلاینت/سرور، backend سرور از کلاینت می‌خواهد تا فایل‌ها را ارسال کرده و آن‌ها را از آنجا بارگذاری می‌کند. .RE.SH "قالب‌های فایل لاگ (LOG FILE FORMATS)" دستور fio از انواع قالب‌های فایل لاگ، جهت ثبت تأخیرها، پهنای باند و IOPS پشتیبانی می‌کند. لاگ‌ها از یک قالب مشترک پیروی می‌کنند که به این صورت است: .RS .P time (msec), value, data direction, block size (bytes), offset (bytes), command priority, issue time (nsec) .RE .P مقدار «Time» برای هر مدخل لاگ همیشه بر حسب میلی‌ثانیه است. مقدار «value» ثبت‌شده به نوع لاگ بستگی دارد و یکی از موارد زیر خواهد بود: .RS .TP .B لاگ تأخیر (Latency log) مقدار، میزان تأخیر بر حسب نانوثانیه (nsecs) است .TP .B لاگ پهنای باند (Bandwidth log) مقدار بر حسب KiB/sec است .TP .B لاگ IOPS مقدار برابر با IOPS است .RE .P «Data direction» (جهت داده) یکی از موارد زیر است: .RS .TP .B 0 عملیات I/O از نوع خواندن (READ) است .TP .B 1 عملیات I/O از نوع نوشتن (WRITE) است .TP .B 2 عملیات I/O از نوع پاک‌سازی (TRIM) است .RE .P مقدار «block size» در هر مدخل همیشه بر حسب بایت است. «offset» موقعیت بر حسب بایت از ابتدای فایل برای آن I/O خاص است. ثبت آفست را می‌توان با \fBlog_offset\fR فعال یا غیرفعال کرد. .P اگر \fBlog_prio\fR تنظیم نشده باشد، مقدار «Command priority» مدخل برای یک I/O که با بالاترین کلاس اولویت بلادرنگ (RT) اجرا شده باشد (\fBprioclass\fR=1 یا \fBcmdprio_class\fR=1) برابر با ۱ و در غیر این صورت ۰ خواهد بود. این مقدار توسط گزینهٔ \fBprioclass\fR و گزینه‌های ویژهٔ ioengine شامل \fBcmdprio_percentage\fR و \fBcmdprio_class\fR کنترل می‌شود. اگر \fBlog_prio\fR تنظیم شده باشد، مقدار «Command priority» مدخل همان اولویت تعیین‌شده برای I/O است، به‌صورت یک عدد هگزادسیمال ۱۶ بیتی که ۱۳ بیت کم‌ارزش‌تر آن نشان‌دهنده مقدار اولویت (گزینه‌های \fBprio\fR و \fBcmdprio\fR) و ۳ بیت پرارزش‌تر آن نشان‌دهنده کلاس اولویت I/O (گزینه‌های \fBprioclass\fR و \fBcmdprio_class\fR) هستند. .P مقدار «issue time» مدخل، زمان صدور دستور بر حسب نانوثانیه است. ثبت زمان صدور را می‌توان با \fBlog_issue_time\fR تغییر وضعیت داد. این فیلد در فایل لاگ تأخیر تکمیل (clat) یا فایل لاگ تأخیر ارسال (slat) دارای مقادیر معتبر است. در سایر فایل‌های لاگ، مقدار این فیلد ۰ است. .P به‌طور پیش‌فرض fio هر عملیات I/O را به‌صورت مجزا ثبت می‌کند، اما هنگامی که ثبت بازه‌ای/پنجره‌ای از طریق \fBlog_avg_msec\fR تنظیم شود، یا میانگین (به‌طور پیش‌فرض)، یا مقدار بیشینه («value») در طول بازهٔ زمانی مشخص‌شده (زمانی که \fBlog_window_value\fR برابر با max باشد)، و یا هر دو مقدار میانگین («value») و بیشینه («value1») (زمانی که \fBlog_window_value\fR برابر با both باشد) ثبت می‌گردد. ساختار فایل لاگ هنگامی که هر دو مقدار گزارش می‌شوند به این شکل خواهد بود: .RS .P time (msec), value, value1, data direction, block size (bytes), offset (bytes), command priority, issue time (nsec) .RE .P هر «data direction» مشاهده‌شده در بازه زمانی پنجره، مقادیر خود را در یک سطر جداگانه تجمیع خواهد کرد. علاوه بر این، هنگام استفاده از ثبت پنجره‌ای، مدخل‌های «block size»،‏ «offset» و «issue time» همواره حاوی 0 خواهند بود. .SH "کلاینت / سرور (CLIENT / SERVER)" به‌طور معمول fio به عنوان یک برنامهٔ مستقل روی ماشینی که قرار است بار کاری I/O در آن ایجاد شود اجرا می‌گردد. با این حال، بخش‌های backend و frontend ابزار fio می‌توانند جداگانه اجرا شوند؛ یعنی سرور fio می‌تواند بار کاری I/O را روی «دستگاه تحت آزمایش» (Device Under Test یا DUT) ایجاد کند، در حالی که از طریق یک کلاینت در ماشینی دیگر کنترل می‌شود. .P سرور را روی ماشینی که به فضای ذخیره‌سازی DUT دسترسی دارد اجرا کنید: .RS .P $ fio \-\-server=args .RE .P که در آن «args» مشخص می‌کند fio به چه چیزی گوش فرا دهد. آرگومان‌ها به شکل «type,hostname» یا «IP,port» هستند. مقدار «type» یا «ip» (یا ip4) برای TCP/IP v4 است، یا «ip6» برای TCP/IP v6، یا «sock» برای یک سوکت محلی دامنه یونیکس (unix domain socket). مقدار «hostname» می‌تواند نام میزبان یا آدرس IP باشد، و «port» درگاهی است که باید به آن گوش داده شود (فقط برای TCP/IP معتبر است، نه سوکت محلی). چند مثال: .RS .TP 1) \fBfio \-\-server\fR راه‌اندازی سرور fio و گوش دادن روی تمام رابط‌ها در درگاه پیش‌فرض (8765). .TP 2) \fBfio \-\-server=ip:hostname,4444\fR راه‌اندازی سرور fio و گوش دادن روی IP متعلق به hostname و درگاه 4444. .TP 3) \fBfio \-\-server=ip6:::1,4444\fR راه‌اندازی سرور fio و گوش دادن روی لوکال‌هاست IPv6 یعنی ::1 و درگاه 4444. .TP 4) \fBfio \-\-server=,4444\fR راه‌اندازی سرور fio و گوش دادن روی تمام رابط‌ها در درگاه 4444. .TP 5) \fBfio \-\-server=1.2.3.4\fR راه‌اندازی سرور fio و گوش دادن روی IP با مقدار 1.2.3.4 در درگاه پیش‌فرض. .TP 6) \fBfio \-\-server=sock:/tmp/fio.sock\fR راه‌اندازی سرور fio و گوش دادن روی سوکت محلی ‎/tmp/fio.sock‎. .RE .P هنگامی که سرور در حال اجراست، یک «کلاینت» می‌تواند با دستور زیر به سرور fio متصل شود: .RS .P $ fio \-\-client= .RE .P که در آن «local\-args» آرگومان‌های کلاینت در محل اجرای آن هستند، «server» رشتهٔ اتصال است، و «remote\-args» و «job file(s)» به سرور ارسال می‌شوند. رشتهٔ «server» از همان ساختار سمت سرور پیروی می‌کند تا امکان تعیین IP، نام میزبان، سوکت و درگاه وجود داشته باشد. .P توجه داشته باشید که هنگام اجرای fio به عنوان کلاینت، تمام گزینه‌های کار باید در فایل‌های کار تعریف شوند. هرگونه گزینهٔ کاری که در «remote\-args» مشخص شود نادیده گرفته خواهد شد. .P دستور fio می‌تواند به این روش به چندین سرور متصل شود: .RS .P $ fio \-\-client= \-\-client= .RE .P اگر فایل کار روی سرور fio قرار داشته باشد، می‌توانید به سرور بگویید که فایل محلی را نیز بارگذاری کند. این کار با استفاده از \fB\-\-remote\-config\fR انجام می‌شود: .RS .P $ fio \-\-client=server \-\-remote\-config /path/to/file.fio .RE .P در این صورت fio این فایل کار محلی (روی سرور) را باز می‌کند، به جای این‌که فایلی از کلاینت به آن ارسال شود. .P اگر سرورهای متعددی دارید (برای مثال: ۱۰۰ ماشین مجازی/کانتینر)، می‌توانید مسیر فایلی حاوی IPها یا نام‌های میزبان را به عنوان مقدار پارامتر گزینهٔ \fB\-\-client\fR وارد کنید. برای نمونه، در اینجا یک فایل فرضی «host.list» حاوی ۲ نام میزبان آورده شده است: .RS .P .PD 0 host1.your.dns.domain .P host2.your.dns.domain .PD .RE .P سپس دستور fio به این صورت خواهد بود: .RS .P $ fio \-\-client=host.list .RE .P در این حالت نمی‌توانید پارامترها یا فایل‌های کار مخصوص به هر سرور را وارد کنید \-\- تمامی سرورها فایل کار یکسانی را دریافت می‌کنند. .P به منظور فراهم کردن امکان استفاده از یک سیستم فایل مشترک از سوی چندین میزبان برای اجراهای «fio \-\-client»، این دستور اکنون آدرس IP سرور را به ابتدای نام فایل اضافه می‌کند. برای مثال، اگر fio از پوشهٔ «/mnt/nfs/fio» استفاده کند و در حال نوشتن روی نام فایل «fileio.tmp» باشد، همراه با یک «hostfile» در \fB\-\-client\fR شامل دو نام میزبان «h1» و «h2» با آدرس‌های IP به شماره‌های 192.168.10.120 و 192.168.10.121، آن‌گاه fio دو فایل زیر را ایجاد خواهد کرد: .RS .P .PD 0 /mnt/nfs/fio/192.168.10.120.fileio.tmp .P /mnt/nfs/fio/192.168.10.121.fileio.tmp .PD .RE .P این رفتار را می‌توان با استفاده از گزینهٔ \fBunique_filename\fR غیرفعال کرد. .P خروجی موجز (terse) در حالت کلاینت/سرور با خروجی تولیدشده در حالت اجرای مستقل fio کمی تفاوت خواهد داشت. برای اطلاعات بیشتر، بخش خروجی موجز را ببینید. .P همچنین، اگر با یک بار فراخوانی fio، بارهای کاری روی چندین سرور اجرا شوند، fio در انتها یک گزارش خلاصهٔ تجمیعی برای همه بارهای کاری ارائه خواهد داد. این گزارش خلاصهٔ تجمیعی فرض را بر این می‌گذارد که گزینه‌های موثر بر گزارش‌دهی مانند \fBunified_rw_reporting\fR و \fBpercentile_list\fR در تمام کارهای خلاصه شده یکسان هستند. داشتن مقادیر متفاوت برای این گزینه‌ها یک پیکربندی پشتیبانی‌نشده است..SH "نویسندگان (AUTHORS)" .B fio توسط Jens Axboe نوشته شده است. .br این صفحهٔ راهنما توسط Aaron Carroll بر اساس مستندات Jens Axboe نوشته شده است. .br این صفحهٔ راهنما توسط Tomohiro Kusumi بر اساس مستندات Jens Axboe بازنویسی شده است. .SH "گزارش باگ‌ها (REPORTING BUGS)" باگ‌ها را به فهرست پستی \fBfio\fR به نشانی گزارش دهید. .br \fBREPORTING\-BUGS\fR را ببینید. .P \fBREPORTING\-BUGS\fR: \fIhttps://git.kernel.org/pub/scm/linux/kernel/git/axboe/fio.git/tree/REPORTING\-BUGS\fR .SH "همچنین ببینید (SEE ALSO)" برای مستندات بیشتر، \fBHOWTO\fR و \fBREADME\fR را ببینید. .br فایل‌های نمونهٔ jobfile در دایرکتوری `examples/' در دسترس هستند. .br این فایل‌ها معمولاً در مسیر `/usr/share/doc/fio' قرار دارند. .P \fBHOWTO\fR: \fIhttps://git.kernel.org/pub/scm/linux/kernel/git/axboe/fio.git/tree/HOWTO\fR .br \fBREADME\fR: \fIhttps://git.kernel.org/pub/scm/linux/kernel/git/axboe/fio.git/tree/README.rst\fR