IOCOST.CONF(5) iocost.conf IOCOST.CONF(5)

iocost.conf - فایل پیکربندی کنترلکننده هزینه ورودی/خروجی (I/O Cost)

/etc/systemd/iocost.conf /etc/systemd/iocost.conf.d/*.conf

این فایل رفتار "iocost" را پیکربندی می‌کند، ابزاری که بیشتر توسط قوانین systemd-udevd(8) استفاده می‌شود تا راهکارهای هزینه ورودی/خروجی (I/O cost) را به‌طور خودکار بر روی /sys/fs/cgroup/io.cost.* اعمال کند.

مقادیر qos و model بر اساس بنچمارک‌های جمع‌آوری‌شده در پروژه iocost-benchmark[1] محاسبه شده و به مجموعه‌ای از راهکارها تبدیل می‌شوند که از بیشترین تا کمترین حد جداسازی مرتب شده‌اند. جداسازی به سیستم امکان می‌دهد در مواجهه با بار سنگین ورودی/خروجی همچنان پاسخگو بماند. این‌که کدام راهکارها برای یک دستگاه در دسترس هستند را می‌توان از فراداده‌های (متادیتای) udev متصل به آن استعلام کرد. به‌طور پیش‌فرض از راهکار ساده (naive) استفاده می‌شود که بیشترین پهنای باند را فراهم می‌کند.

پیکربندی پیش‌فرض در زمان کامپایل تنظیم می‌شود، بنابراین پیکربندی تنها زمانی مورد نیاز است که انحراف از آن مقادیر پیش‌فرض ضروری باشد. فایل پیکربندی اصلی از یکی از دایرکتوری‌های فهرست‌شده به ترتیب اولویت بارگذاری می‌شود و تنها از اولین فایل یافت‌شده استفاده می‌گردد: /etc/systemd/، /run/systemd/، /usr/local/lib/systemd/ [2]، /usr/lib/systemd/. نسخه ارائه‌شده توسط توزیع‌کننده شامل ورودی‌های کامنت‌شده‌ای است که مقادیر پیش‌فرض را به عنوان راهنمای مدیر سیستم نشان می‌دهد. بازنویسی‌های محلی را نیز می‌توان با ایجاد فایل‌های تکمیلی (drop-in) مطابق توضیحات زیر انجام داد. فایل پیکربندی اصلی را نیز می‌توان برای این منظور ویرایش کرد (یا یک رونوشت در /etc/ اگر در /usr/ عرضه شده باشد)، با این حال استفاده از فایل‌های تکمیلی برای پیکربندی محلی نسبت به تغییر دادن فایل پیکربندی اصلی توصیه می‌شود.

علاوه بر فایل پیکربندی اصلی، قطعه‌کدهای پیکربندی تکمیلی (drop-in) از دایرکتوری‌های /usr/lib/systemd/*.conf.d/، /usr/local/lib/systemd/*.conf.d/ و /etc/systemd/*.conf.d/ خوانده می‌شوند. این فایل‌های تکمیلی اولویت بالاتری دارند و فایل پیکربندی اصلی را بازنویسی می‌کنند. فایل‌های موجود در زیردایرکتوری‌های پیکربندی *.conf.d/ صرف‌نظر از این‌که در کدام زیردایرکتوری قرار دارند، بر اساس نام فایل خود به ترتیب واژه‌نگاری (lexicographic) مرتب می‌شوند. هنگامی که چندین فایل یک گزینه یکسان را تعیین می‌کنند، برای گزینه‌هایی که فقط یک مقدار واحد را می‌پذیرند، ورودی موجود در فایلی که نام آن در آخرین جایگاه قرار می‌گیرد اولویت دارد، و برای گزینه‌هایی که فهرستی از مقادیر را می‌پذیرند، ورودی‌ها به همان ترتیبی که در فایل‌های مرتب‌شده ظاهر می‌شوند جمع‌آوری می‌گردند.

هنگامی که بسته‌ها نیاز به سفارشی‌سازی پیکربندی دارند، می‌توانند فایل‌های تکمیلی را در /usr/ نصب کنند. فایل‌های موجود در /etc/ برای مدیر سیستم محلی رزرو شده‌اند، که می‌تواند از این منطق برای بازنویسی فایل‌های پیکربندی نصب‌شده توسط بسته‌های توزیع‌کننده استفاده کند. برای بازنویسی قطعات تکمیلی بسته، باید از فایل‌های تکمیلی استفاده شود، زیرا فایل پیکربندی اصلی اولویت پایین‌تری دارد. توصیه می‌شود نام تمام فایل‌ها در این زیردایرکتوری‌ها با یک عدد دو رقمی و یک خط تیره پیشوندگذاری شود تا ترتیب آن‌ها ساده‌تر شود. این کار همچنین مفهوم اولویت‌های تکمیلی را تعریف می‌کند تا به توزیع‌کنندگان سیستم‌عامل اجازه دهد فایل‌های تکمیلی را در محدوده خاصی پایین‌تر از محدوده مورد استفاده کاربران عرضه کنند. این امر خطر بازنویسی تصادفی فایل‌های تکمیلی تعریف‌شده توسط کاربران را توسط فایل‌های تکمیلی بسته‌ها کاهش می‌دهد. توصیه می‌شود از محدوده 10-40 برای فایل‌های تکمیلی در /usr/ و از محدوده 60-90 برای فایل‌های تکمیلی در /etc/ و /run/ استفاده شود، تا اطمینان حاصل گردد که فایل‌های تکمیلی محلی و موقت بر فایل‌های تکمیلی عرضه‌شده توسط توزیع‌کننده سیستم‌عامل اولویت دارند.

برای غیرفعال کردن یک فایل پیکربندی ارائه‌شده توسط توزیع‌کننده، روش توصیه‌شده قرار دادن یک پیوند نمادین (symlink) به /dev/null در دایرکتوری پیکربندی در /etc/، با همان نام فایل پیکربندی توزیع‌کننده است.

تمام گزینه‌ها در بخش [IOCost] پیکربندی می‌شوند:

TargetSolution=

مشخص می‌کند که کدام راهکار هزینه ورودی/خروجی (مشخص‌شده با رشته نام‌گذاری‌شده) باید برای دستگاه‌های موجود در این سیستم استفاده شود. راهکارهای شناخته‌شده را می‌توان از فراداده‌های (متادیتای) udev متصل به دستگاه‌ها استعلام کرد. اگر دستگاهی راهکار تعیین‌شده را نداشته باشد، اولین راهکار فهرست‌شده در IOCOST_SOLUTIONS به‌جای آن استفاده می‌شود.

به‌عنوان مثال: "TargetSolution=isolated-bandwidth".

در نگارش 254 اضافه شد.

udevadm(8)، پروژه گیت‌هاب iocost-benchmarks[1]، مستندات resctl-bench درباره نحوه به‌دست آمدن مقادیر[3]

1.
iocost-benchmark
2.
💣💥🧨💥💥💣 لطفاً توجه داشته باشید که این فایل‌های پیکربندی باید همیشه در دسترس باشند. اگر /usr/local/ یک پارتیشن جداگانه باشد، ممکن است در مراحل اولیه بوت در دسترس نباشد و نباید برای پیکربندی استفاده شود.
3.
مستندات resctl-bench درباره نحوه به‌دست آمدن مقادیر
systemd 261.2