ZRAM-GENERATOR.CONF(5) File Formats Manual ZRAM-GENERATOR.CONF(5)

zram-generator.conf - پیکربندی تولیدکننده واحدهای systemd برای دستگاه‌های حافظه مجازی zram

/usr/lib/systemd/zram-generator.conf
/usr/local/lib/systemd/zram-generator.conf
/etc/systemd/zram-generator.conf
/run/systemd/zram-generator.conf

/usr/lib/systemd/zram-generator.conf.d/*.conf
/usr/local/lib/systemd/zram-generator.conf.d/*.conf
/etc/systemd/zram-generator.conf.d/*.conf
/run/systemd/zram-generator.conf.d/*.conf

این فایل‌ها دستگاه‌های ایجادشده توسط zram-generator(8) را پیکربندی می‌کنند. برای توضیحات کلی درباره ساختار نحوی به systemd.syntax(5) مراجعه کنید.

پیکربندی پیش‌فرض هیچ دستگاهی را تعیین نمی‌کند. برای مشاهده یک نمونه فایل پیکربندی به /usr/share/zram-generator/zram-generator.conf.example مراجعه کنید.

هنگامی که بسته‌ها نیاز به سفارشی‌سازی پیکربندی داشته باشند، می‌توانند قطعه‌های پیکربندی را در /usr/lib/systemd/zram-generator.conf.d/ نصب کنند. فایل‌های موجود در /etc/ برای مدیر سیستم محلی رزرو شده‌اند که می‌تواند از این منطق برای لغو یا بازنویسی فایل‌های پیکربندی ارائه‌شده توسط بسته‌های توزیع استفاده کند. فایل پیکربندی اصلی پیش از هر یک از دایرکتوری‌های پیکربندی خوانده می‌شود و کمترین اولویت را دارد؛ مدخل‌های موجود در یک فایل در هر دایرکتوری پیکربندی، مدخل‌های موجود در فایل پیکربندی منفرد را بازنویسی می‌کنند. فایل‌های موجود در زیردایرکتوری‌های پیکربندی *.conf.d/ بدون در نظر گرفتن این‌که در کدام زیردایرکتوری قرار دارند، بر اساس نام فایلشان به ترتیب حروف الفبا مرتب می‌شوند. هنگامی که چندین فایل یک گزینه مشترک را تعیین کنند، برای گزینه‌هایی که تنها یک مقدار می‌پذیرند، مدخل موجود در فایلی که نام آن از نظر الفبایی دیرتر می‌آید اولویت خواهد داشت. توصیه می‌شود نام تمام فایل‌ها در این زیردایرکتوری‌ها با یک عدد دو رقمی و یک خط تیره آغاز شود تا ترتیب اولویت فایل‌ها ساده‌تر گردد.

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

این تولیدکننده گزینه زیر را در خط فرمان هسته تشخیص می‌دهد: systemd.zram[=0|1]. هنگامی که با مقدار درست (یا بدون آرگومان) مشخص شود، دستگاه zram0 ایجاد خواهد شد. گزینه‌های پیش‌فرض اعمال می‌شوند، اما در صورت وجود پیکربندی روی دیسک ممکن است بازنویسی شوند. هنگامی که با مقدار نادرست مشخص شود، هیچ دستگاه zram توسط تولیدکننده ایجاد نخواهد شد. بنابراین این گزینه اولویتی بالاتر از فایل‌های پیکربندی دارد.

هر دستگاه به طور مستقل در بخش [zramN] خود پیکربندی می‌شود، که در آن N یک عدد صحیح غیرمنفی است. بخش سراسری ممکن است شامل DIRECTIVES باشد. سایر بخش‌ها نادیده گرفته می‌شوند.

دستگاه‌هایی با اندازه نهایی 0 کنار گذاشته می‌شوند.

•
host-memory-limit=
حد بالایی را برای کل حافظه رم قابل استفاده (تعریف‌شده توسط MemTotal در /proc/meminfo، مطابق proc(5)) تعیین می‌کند که فراتر از آن، دستگاه ایجاد نخواهد شد.
این گزینه یک عدد غیرمنفی که نشان‌دهنده حد برحسب مگابایت است، یا رشته حرفی none را می‌پذیرد که می‌تواند برای لغو حدی که قبلاً تنظیم شده به کار رود.
پیش‌فرض none است.
•
zram-size=
اندازه دستگاه zram را به عنوان تابعی از MemTotal (در دسترس به عنوان متغیر ram) تعیین می‌کند. متغیرهای اضافی ممکن است توسط DIRECTIVES ارائه شوند.
عملگرهای ریاضی (^%/*-+)، عدد e، عدد π، پسوندهای SI، توابع مثلثاتی و توابع ()log()، int()، ceil()، floor()، round()، abs()، min()، max پشتیبانی می‌شوند.
پیش‌فرض min(ram / 2, 4096) است.
•
zram-resident-limit=
حداکثر حد حافظه مقیم دستگاه zram (یا 0 برای عدم وجود محدودیت) را به عنوان تابعی از MemTotal (در دسترس به عنوان متغیر ram) تنظیم می‌کند.
قالب یکسانی با zram-size دارد. پیش‌فرض 0 است.
•
compression-algorithm=
الگوریتم مورد استفاده برای فشرده‌سازی دستگاه zram را مشخص می‌کند.
یک رشته فهرست جداشده با فاصله را می‌پذیرد که نشان‌دهنده الگوریتم‌های مورد استفاده و پارامترهای درون پرانتز است.
برای فهرستی از الگوریتم‌های فشرده‌سازی بارگذاری‌شده فعلی به /sys/block/zram0/comp_algorithm (و .../recomp_algorithm) مراجعه کنید، اما توجه داشته باشید که الگوریتم‌های اضافی ممکن است بر حسب تقاضا بارگذاری شوند.
در صورت تنظیم نشدن، هیچ الگوریتمی پیکربندی نمی‌شود و از پیش‌فرض هسته استفاده خواهد شد.
اگر بیش از یک مورد مشخص شود و فشرده‌سازی مجدد (recompression) در هسته فعال باشد، موارد بعدی به عنوان الگوریتم‌های فشرده‌سازی مجدد با اولویت کاهشی تنظیم می‌شوند.
اگر پس از یک الگوریتم فشرده‌سازی، فهرستی از پارامترها درون پرانتز و جداشده با کاما بیاید، آن پارامترها به .../algorithm_params (و .../recompress) داده می‌شوند. یک فهرست پارامتر درون پرانتز بدون نام الگوریتم فشرده‌سازی، به عنوان پارامترهای سراسری فشرده‌سازی مجدد تنظیم خواهد شد.
•
writeback-device=
صفحات غیرقابل‌فشرده‌سازی را که سودی از فشرده‌سازی نبرده‌اند، در شرایط کمبود حافظه به دستگاه مشخص‌شده منتقل می‌کند (writeback). این متناظر با پارامتر /sys/block/zramX/backing_dev است.
مسیری به یک دستگاه بلوکی مانند /dev/disk/by-partuuid/2d54ffa0-01 یا /dev/zvol/tarta-zoot/swap-writeback را می‌پذیرد.
در صورت عدم تنظیم، از هیچ دستگاهی استفاده نمی‌شود و صفحات غیرقابل‌فشرده‌سازی در RAM نگه داشته می‌شوند.
•
swap-priority=
اولویت نسبی فضای تعویض (swap) را کنترل می‌کند، مقداری بین -1 و 32767. اعداد بالاتر نشان‌دهنده اولویت بیشتر هستند.
در صورت عدم تعیین، مقدار 100 استفاده می‌شود.
•
mount-point=
دستگاه را با یک سیستم‌فایل قالب‌بندی کرده (نه به عنوان سواپ) و این سیستم‌فایل را روی دایرکتوری مشخص‌شده سوار (mount) می‌کند. هنگامی که نه این گزینه و نه fs-type= مشخص نشده باشند، دستگاه به عنوان سواپ قالب‌بندی می‌شود.
توجه داشته باشید که این دستگاه موقتی است: پس از پیاده شدن (unmount) سیستم‌فایل، محتویات آن به صورت خودکار نابود می‌شود (تا حافظه پشتیبان آزاد گردد).
•
fs-type=
نحوه قالب‌بندی دستگاه را مشخص می‌کند. در صورتی که mount-point مشخص شده باشد پیش‌فرض ext2 و در غیر این صورت swap است. (در عمل، اگر نه fs-type= و نه mount-point= مشخص نشوند، دستگاه به صورت سواپ قالب‌بندی خواهد شد.)
توجه داشته باشید که این دستگاه موقتی است: پس از پیاده شدن سیستم‌فایل، محتویات به صورت خودکار نابود می‌شوند (تا حافظه آزاد گردد).
همچنین systemd-makefs(8) را مشاهده کنید.
•
options=
گزینه‌های mount یا swapon را تعیین می‌کند. در دسترس بودن گزینه‌ها به fs-type بستگی دارد.
پیش‌فرض discard است.

بخش سراسری (پیش از هر هدر بخش) ممکن است شامل دستورالعمل‌هایی به شکل زیر باشد:

•
set!variable=program
برنامه program توسط شل همانند تابع (3)system اجرا شده، جریان خروجی استاندارد آن به عنوان یک عبارت محاسباتی (مانند zram-size/zram-resident-limit) پردازش می‌شود، سپس نتیجه در متغیر variable ذخیره شده و در دستورات بعدی !set و گزینه‌های zram-size / zram-resident-limit قابل استفاده خواهد بود.

تنظیم متغیر ZRAM_GENERATOR_ROOT هنگام پردازش سبب می‌شود فایل /proc/meminfo از مسیر $ZRAM_GENERATOR_ROOT/proc/meminfo خوانده شود و مسیرهای پیکربندی {/usr/lib,/usr/local/lib,/etc,/run}/systemd/zram-generator.conf از مسیر $ZRAM_GENERATOR_ROOT/{/usr/lib,/usr/local/lib,/etc,/run}/systemd/zram-generator.conf بارگذاری گردند.

پیکربندی پیش‌فرض نتیجه زیر را به همراه خواهد داشت:

 zram device size
     ^
     │
  4G>│               ooooooooooooo
     │             o
     │           o
     │         o
  2G>│       o
     │     o
     │   o
512M>│ o
     0───────────────────────> total usable RAM
       ^     ^       ^
       1G    4G      8G

یک اندازه خطی تکه‌ای ۱:۱ برای اولین ۴ گیگابایت، و سپس ۱:۲ برای مقادیر بالاتر، تا حداکثر ۳۲ گیگابایت:
  zram-size = min(min(ram, 4096) + max(ram - 4096, 0) / 2, 32 * 1024)

zram device size
    ^
32G>|                                                oooooooooooooo
    |                                            o
30G>|                                        o
    |
   /=/
    |
 8G>│                           o
    │                       o
    │                   o
    │               o
    │           o
 4G>│       o
    │     o
    │   o
 1G>│ o
    0───────────────────────────────────||──────────────────────> total usable RAM
      ^     ^       ^               ^        ^       ^       ^
      1G    4G      8G             12G      56G     60G     64G

•
memory-limit=
نام مستعار سازگاری برای host-memory-limit.
•
zram-fraction=
ضریب مقیاس اندازه دستگاه zram را نسبت به کل رم قابل استفاده تعیین می‌کند.
یک عدد اعشاری غیرمنفی را که نشان‌دهنده آن ضریب است می‌پذیرد.
پیش‌فرض قبلی 0.5 بود. تنظیم این گزینه یا max-zram-size باعث لغو و نادیده گرفتن zram-size می‌شود.
•
max-zram-size=
حداکثر اندازه دستگاه zram حاصل از zram-fraction را تنظیم می‌کند.
این گزینه یک عدد غیرمنفی که نشان‌دهنده آن حد برحسب مگابایت است، یا رشته حرفی none را می‌پذیرد که می‌تواند برای لغو حدی که قبلاً تعیین شده بود استفاده شود.
پیش‌فرض قبلی 4096 بود. تنظیم این گزینه یا zram-fraction باعث نادیده گرفتن zram-size می‌شود.

https://github.com/systemd/zram-generator/issues

zram-generator(8), systemd.syntax(5), proc(5)

https://github.com/systemd/zram-generator

مستندات لینوکس درباره zram: https://kernel.org/doc/html/latest/admin-guide/blockdev/zram.html
و مشخصات sysfs ABI مربوط به zram: https://kernel.org/doc/Documentation/ABI/testing/sysfs-block-zram

مستندات fasteval برای کل زبان اختصاصی محاسباتی zram-size: https://docs.rs/fasteval/0.2.4/fasteval/#the-fasteval-expression-mini-language

December 2024 zram-generator developers