| cgroup.conf(5) | Slurm Configuration File | cgroup.conf(5) |
نام (NAME)
cgroup.conf - پرونده پیکربندی Slurm برای پشتیبانی از cgroup
شرح (DESCRIPTION)
cgroup.conf یک پرونده متنی اسکی (ASCII) است که پارامترهای مورد استفاده توسط پلاگینهای مرتبط با cgroup لینوکس در Slurm را تعریف میکند. این پرونده همیشه در همان دایرکتوری slurm.conf قرار دارد.
نامهای پارامترها به حروف بزرگ و کوچک حساس نیستند (case insensitive). هر متنی که پس از یک «#» در پرونده پیکربندی بیاید، تا انتهای همان خط به عنوان یادداشت (کامنت) در نظر گرفته میشود. تغییرات در پرونده پیکربندی با راهاندازی مجدد دیمنهای Slurm، دریافت سیگنال SIGHUP توسط دیمن، یا اجرای دستور «scontrol reconfigure» اعمال میشوند، مگر اینکه خلاف آن ذکر شده باشد.
برای اطلاعات عمومی درباره Slurm cgroups، به راهنمای Cgroups در https://slurm.schedmd.com/cgroups.html مراجعه کنید.
پارامترهای زیر در cgroup.conf برای کنترل رفتار عمومی پلاگینهای cgroup در Slurm تعریف شدهاند.
- CgroupMountpoint=PATH
- فقط برای توسعه و آزمون در نظر گرفته شده است. PATH را که کنترلکنندههای cgroup باید تحت آن متصل (mount) شوند مشخص میکند. PATH پیشفرض /sys/fs/cgroup است.
- CgroupPlugin=<cgroup/v1|cgroup/v2|autodetect|disabled>
- پلاگین
مورد
استفاده
هنگام
تعامل با
زیرسیستم cgroup
را مشخص
میکند.
مقادیر
پشتیبانیشده
عبارتند از
«disabled»، برای
غیرفعالسازی
کامل
هرگونه
تعامل با
cgroupها، «cgroup/v1» که
از رابط
قدیمی cgroup v1
پشتیبانی
میکند،
«cgroup/v2» برای
معماری
یکپارچه cgroup2،
و «autodetect» که
سعی میکند
نسخه cgroup
ارائهشده
توسط سیستم
شما را
تشخیص دهد.
«autodetect» برای
داشتن یک
پیکربندی
واحد در
خوشههایی
که نودهای
آنها
میتوانند
نسخههای
مختلف cgroup
داشته
باشند مفید
است. مقدار
پیشفرض در
لینوکس
«autodetect» است،
در غیر این
صورت
پیشفرض
«disabled» است.
نکته: پلاگین cgroup/v1 منسوخ شده است و ویژگی جدیدی به آن اضافه نخواهد شد. توصیه میشود در اولین فرصت به cgroup/v2 مهاجرت کنید.
- CgroupSlice=SLICE_NAME
- دیمن slurmd و محدوده (scope) مربوط به slurmstepd را در برش (slice) مشخصشده شروع میکند. اگر slurmd را با systemd راهاندازی میکنید، باید ویژگی =Slice را نیز در بخش [Service] پرونده slurmd.service اضافه کنید. تغییر این پارامتر نیازمند متوقف کردن تمام محدودههای slurmstepd در نود و راهاندازی مجدد slurmd است. فقط برای cgroup v2 اعمال میشود. پیشفرض system.slice است.
- CgroupJobIdPaths=<yes|no>
- اگر روی «yes» تنظیم شود، دایرکتوریهای cgroup در سطح کار (job-level) با شناسه عددی کار (job ID) بهجای SLUID نامگذاری میشوند (به عنوان مثال «/sys/fs/cgroup/system.slice/slurmstepd.scope/job_123/» بهجای «/sys/fs/cgroup/system.slice/slurmstepd.scope/sEKNKTV3WPV500/»). این چینش مسیر cgroup/v2 پیش از نسخه ۲۶.۰۵ را بازمیگرداند و ممکن است برای مراکزی با ابزارهای خارجی متکی بر شناسههای کار مفید باشد. فقط برای cgroup/v2 اعمال میشود. مقدار پیشفرض no است.
- SystemdTimeout=<number>
- در سیستمهای کُند مانند ماشینهای مجازی یا زمانی که systemd مشغول است، راهاندازی و آمادهسازی محدوده (scope) برای slurmd هنگام شروع به کار ممکن است زمان زیادی ببرد. Slurm حداکثر این مقدار زمان (برحسب میلیثانیه) را قبل از اعلام شکست منتظر آماده شدن محدوده میماند. فقط برای cgroup/v2 اعمال میشود. پیشفرض 1000 میلیثانیه است.
- IgnoreSystemd=<yes|no>
- فقط برای cgroup/v2 و جهت توسعه و آزمون. این گزینه از هرگونه فراخوانی به dbus و تماس با systemd جلوگیری میکند، و در عوض تمام سلسلهمراتب cgroup را بهصورت دستی آماده میسازد. این گزینه در سیستمهای دارای systemd خطرناک است زیرا cgroup میتواند توسط systemd تغییر یابد و برای کارها مشکل ایجاد کند.
- IgnoreSystemdOnFailure=<yes|no>
- فقط برای cgroup/v2 و جهت توسعه و آزمون. عملکردی مشابه با IgnoreSystemd دارد اما فقط در صورتی که فراخوانی dbus موفقیتآمیز نباشد.
- EnableControllers=<yes|no>
- فقط برای cgroup/v2 و عموماً برای توسعه، آزمون، هنگام اجرا روی هستههای قدیمی و/یا نسخههای قدیمی systemd (مانند RHEL8 و systemd < 244) که در آنها تمام کنترلکنندهها در درخت cgroup فعال نشدهاند. با این پارامتر، slurmd کنترلکنندههای موجود را از پرونده cgroup.controllers ریشه (CgroupMountPoint، بهطور پیشفرض /sys/fs/cgroup/cgroup.controllers) دریافت کرده و آنها را در تمام سطوح درخت cgroup تا رسیدن به برگ cgroup مربوط به Slurm در دسترس قرار میدهد.
- EnableExtraControllers=<all|controller1[,controller2,...]>
- کنترلکنندههای اضافی را که بهطور بومی توسط Slurm استفاده نمیشوند در زیردرخت cgroup کار فعال میکند. اگر با EnableControllers ترکیب شود، آنها را در تمام سطوح درخت cgroup از ریشه cgroup سیستمعامل فعال میسازد. کنترلکنندههایی که میتوانند فعال شوند عبارتند از io، pids، rdma، hugetlb و misc یا all. اگر در سیستم وجود نداشته باشند، خطا ثبت میشود. فقط برای cgroup/v2.
پلاگین TASK/CGROUP (TASK/CGROUP PLUGIN)
پارامترهای زیر در cgroup.conf برای کنترل رفتار این پلاگین خاص تعریف شدهاند:
- AllowedRAMSpace=<number>
- حافظه رم cgroup کار/گام را به این درصد از حافظه تخصیصیافته محدود میکند. درصد ارائهشده میتواند به صورت یک عدد اعشاری بیان شود، مانند 101.5. حد نرم حافظه cgroup را برابر اندازه حافظه تخصیصیافته قرار میدهد و سپس حد سخت حافظه کار/گام را روی (AllowedRAMSpace/100) * حافظه تخصیصیافته تنظیم میکند. اگر کار/گام از حد سخت فراتر رود، ممکن است رخدادهای کمبود حافظه (OOM) (از جمله oom-kill) رخ دهد که در بافر حلقهای لاگ هسته ثبت میشوند (dmesg در لینوکس). تنظیم AllowedRAMSpace بالای ۱۰۰ ممکن است موجب رخدادهای کمبود حافظه (OOM) سیستم شود زیرا به کار/گام اجازه میدهد حافظهای بیشتر از مقدار پیکربندیشده برای نودها تخصیص دهد. کاهش حافظه در دسترس پیکربندیشده نود برای جلوگیری از رخدادهای OOM سیستم پیشنهاد میشود. تنظیم AllowedRAMSpace کمتر از ۱۰۰ منجر میشود کارها حافظهای کمتر از مقدار تخصیصیافته دریافت کنند و حد نرم حافظه برابر همان مقدار حد سخت تنظیم خواهد شد. همچنین ببینید: ConstrainRAMSpace. مقدار پیشفرض ۱۰۰ است.
- AllowedSwapSpace=<number>
- فضای swap کار در cgroup را به این درصد از حافظه تخصیصیافته محدود میکند. مقدار پیشفرض 0 است، به این معنی که مجموع RAM+Swap محدود به AllowedRAMSpace خواهد بود. درصد ارائهشده میتواند به صورت یک عدد اعشاری بیان شود، مانند 50.5. اگر از حد فراتر رود، گامهای کار کشته میشوند و یک پیام هشدار در خروجی خطای استاندارد نوشته میشود. همچنین ببینید: ConstrainSwapSpace. نکته: تنظیم AllowedSwapSpace روی 0 هسته لینوکس را از استفاده از فضای swap منع نمیکند. برای کنترل نحوه استفاده هسته از فضای swap، ببینید: MemorySwappiness.
- ConstrainCores=<yes|no>
- اگر روی «yes» تنظیم شود، هستههای مجاز را به زیرمجموعهای از منابع تخصیصیافته محدود میکند. این عملکرد از زیرسیستم cpuset استفاده میکند. به دلیل باگی که در نسخه 1.11.5 کتابخانه HWLOC برطرف شد، ممکن است علاوه بر task/cgroup به پلاگین task/affinity نیز نیاز باشد تا این قابلیت به درستی کار کند. مقدار پیشفرض «no» است.
- ConstrainDevices=<yes|no>
- اگر روی «yes» تنظیم شود، دستگاههای مجاز برای کار را بر اساس منابع تخصیصیافته GRES محدود میکند. برای این کار از زیرسیستم devices استفاده میکند. مقدار پیشفرض «no» است.
- ConstrainRAMSpace=<yes|no>
- اگر روی «yes»
تنظیم شود،
مصرف رم کار
را با قرار
دادن حد نرم
حافظه روی
حافظه
تخصیصیافته
و حد سخت
روی حافظه
تخصیصیافته
* AllowedRAMSpace محدود
میکند.
مقدار
پیشفرض
«no» است، در
این حالت
اگر ConstrainSwapSpace
روی «yes»
تنظیم شده
باشد، حد رم
کار روی حد
فضای swap آن
تنظیم
خواهد شد.
برای این که
این
پارامتر
هرگونه
تاثیری
داشته
باشد، باید
CR_*_Memory در slurm.conf
تنظیم شده
باشد.
همچنین
ببینید:
AllowedSwapSpace، AllowedRAMSpace و
ConstrainSwapSpace.
نکته: هنگام استفاده از ConstrainRAMSpace، اگر مجموع حافظه مصرفی توسط تمام فرآیندهای یک گام از حد مجاز بیشتر شود، هسته یک رخداد OOM ایجاد کرده و یک یا چند فرآیند درون گام را میکشد. وضعیت گام به عنوان OOM علامتگذاری میشود، اما خود گام به اجرا ادامه میدهد و سایر فرآیندهای درون گام نیز ممکن است به کار خود ادامه دهند. این با رفتار OverMemoryKill تفاوت دارد که در آن کل گام کشته/لغو میشود.
نکته: در صورت فعال بودن، ConstrainRAMSpace میتواند منجر به افت محسوس در توان عملیاتی کارها در هر نود شود. مراکزی با نیازمندیهای توان عملیاتی بالا باید موازنه بین توان عملیاتی هر نود در برابر مشکلات بالقوه ناشی از مصرف نامحدود حافظه روی نود را به دقت بسنجند. برای توضیحات بیشتر به https://slurm.schedmd.com/high_throughput.html مراجعه کنید.
- ConstrainSwapSpace=<yes|no>
- اگر روی «yes» تنظیم شود، مصرف فضای swap کار را محدود میکند. مقدار پیشفرض «no» است. توجه داشته باشید که وقتی روی «yes» تنظیم شده و ConstrainRAMSpace روی «no» باشد، AllowedRAMSpace بهطور خودکار روی ۱۰۰٪ تنظیم میشود تا مقدار RAM+Swap به ۱۰۰٪ نیازمندی کار به علاوه درصد فضای swap مجاز محدود شود. بنابراین این مقدار هم به عنوان حد RAM و هم حد RAM+Swap تنظیم میشود. این بدان معناست که در این حالت خاص، ConstrainRAMSpace بهطور خودکار با همان حدی که برای محدود کردن فضای swap استفاده شده فعال میگردد. برای اینکه این پارامتر تاثیرگذار باشد باید CR_*_Memory در slurm.conf تنظیم شده باشد. همچنین ببینید: AllowedSwapSpace.
- MaxRAMPercent=PERCENT
- یک کران بالا برحسب درصد از کل حافظه رم (RealMemory پیکربندیشده برای نود) روی محدودیت رم یک کار تنظیم میکند. این محدودیت حافظهای خواهد بود که برای کارهایی که حافظه صریحاً توسط Slurm به آنها تخصیص نیافته اعمال میشود (یعنی پلاگین select در Slurm برای مدیریت تخصیص حافظه پیکربندی نشده است). PERCENT میتواند یک عدد اعشاری دلخواه باشد. مقدار پیشفرض ۱۰۰ است.
- MaxSwapPercent=PERCENT
- یک کران بالا (برحسب درصد از کل حافظه رم، RealMemory پیکربندیشده برای نود) روی مقدار RAM+Swap که ممکن است برای یک کار استفاده شود تنظیم میکند. این حد swap اعمالشده بر کارهایی در سیستمهایی خواهد بود که در آنها حافظه بهطور صریح به کار تخصیص داده نمیشود. PERCENT میتواند یک عدد اعشاری دلخواه بین 0 و ۱۰۰ باشد. مقدار پیشفرض ۱۰۰ است.
- MemorySwappiness=<number>
- فقط برای cgroup/v1. اولویت هسته برای انتقال صفحات ناشناس به swap (مانند دادههای برنامه) در برابر صفحات کش پرونده را برای cgroup کار پیکربندی میکند. مقادیر معتبر بین 0 تا ۱۰۰ (شامل خود آنها) هستند. مقدار 0 هسته را از انتقال دادههای برنامه به swap بازمیدارد. مقدار ۱۰۰ اولویت برابری به تخلیه حافظه کش پرونده یا صفحات ناشناس میدهد. اگر تنظیم نشود، مقدار swappiness پیشفرض هسته استفاده خواهد شد. برای اعمال این پارامتر، ConstrainSwapSpace باید روی yes تنظیم شده باشد.
- MinRAMSpace=<number>
- یک کران پایین (برحسب مبیبایت - MiB) روی حدود حافظه تعریفشده توسط AllowedRAMSpace و AllowedSwapSpace تعیین میکند. این کار از ایجاد تصادفی یک cgroup حافظه با حدی چنان پایین که slurmstepd بلافاصله به دلیل کمبود رم کشته شود جلوگیری میکند. اگر این اتفاق بیفتد، پاکسازی انجام نخواهد شد و پروندههای موقت، سوکتها و دایرکتوریها میتوانند در نود باقی بمانند. حد پیشفرض 30M است.
پلاگین PROCTRACK/CGROUP (PROCTRACK/CGROUP PLUGIN)
پارامترهای زیر در cgroup.conf برای کنترل رفتار این پلاگین خاص تعریف شدهاند:
- SignalChildrenProcesses=<yes|no>
- اگر روی «yes» تنظیم شود، سیگنالها (جهت لغو، تعلیق، ازسرگیری و غیره) به تمام فرآیندهای فرزند در یک کار/گام ارسال میشوند. در غیر این صورت، سیگنالها فقط به فرآیند والد یک کار/گام فرستاده میشوند. تنظیم پیشفرض «no» است.
نکات ویژه توزیعها (DISTRIBUTION-SPECIFIC NOTES)
دبیان و مشتقات آن (مانند اوبونتو) معمولاً cgroupهای memory و memsw (swap) را بهطور پیشفرض حذف میکنند. برای گنجاندن آنها، پارامترهای زیر را به خط فرمان هسته اضافه کنید: cgroup_enable=memory swapaccount=1
این مورد معمولاً میتواند در /etc/default/grub درون متغیر GRUB_CMDLINE_LINUX قرار داده شود. پس از بهروزرسانی این پرونده، دستوری مانند update-grub باید اجرا شود.
مثال (EXAMPLE)
- /etc/slurm/cgroup.conf:
- این پرونده نمونه cgroup.conf پیکربندیای را نشان میدهد که سازوکارهای اجرایی متداولتر cgroup را فعال میکند.
-
### # Slurm cgroup support configuration file. ### ConstrainCores=yes ConstrainDevices=yes ConstrainRAMSpace=yes ConstrainSwapSpace=yes
- /etc/slurm/slurm.conf:
- اینها ورودیهای لازم در slurm.conf برای فعالسازی سازوکارهای اجرایی cgroup هستند. اطمینان حاصل کنید که تعاریف نود در slurm.conf شما کاملاً با پیکربندی نمایشدادهشده توسط «slurmd -C» مطابقت داشته باشد. یا باید MemSpecLimit تنظیم شود یا RealMemory با مقداری کمتر از مقدار واقعی حافظه نود تعریف شود تا اطمینان حاصل شود که تمام فرآیندهای سیستمی/غیر مربوط به کار همیشه حافظه کافی در اختیار خواهند داشت. همچنین سایتها باید pam_slurm_adopt را پیکربندی کنند تا مطمئن شوند کاربران نمیتوانند از طریق ssh از cgroupها بگریزند.
-
### # Slurm configuration entries for cgroups ### ProctrackType=proctrack/cgroup TaskPlugin=task/cgroup,task/affinity JobAcctGatherType=jobacct_gather/cgroup #optional for gathering metrics PrologFlags=Contain #X11 flag is also suggested
حق نشر (COPYING)
Copyright (C) 2010-2012 Lawrence Livermore National Security.
Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
Copyright (C) 2010-2022 SchedMD LLC.
این پرونده بخشی از Slurm، یک برنامه مدیریت منابع است. برای جزئیات، ببینید: https://slurm.schedmd.com.
نرمافزار Slurm یک نرمافزار آزاد است؛ شما میتوانید آن را تحت شرایط مجوز عمومی همگانی گنو (GNU General Public License) همانطور که توسط بنیاد نرمافزارهای آزاد منتشر شده بازتوزیع کرده و/یا تغییر دهید؛ چه نسخه ۲ مجوز، و یا (به انتخاب خودتان) هر نسخه پس از آن.
نرمافزار Slurm با این امید که مفید واقع شود توزیع شده است، اما بدون هرگونه ضمانت؛ حتی بدون ضمانت ضمنی قابل فروش بودن یا مناسب بودن برای یک هدف خاص. برای جزئیات بیشتر به مجوز عمومی همگانی گنو مراجعه فرمایید.
همچنین ببینید (SEE ALSO)
| Slurm Configuration File | Slurm 26.05 |