namespace دید را جدا می‌کند و cgroup بودجهٔ مصرف را. امشب process ساده را در scope محدود می‌گذاریم و مقدار controller واقعی را می‌خوانیم.

این جلسه بخشی از دورهٔ لینوکس ۳۰۵ در ۶۰ شب است.

جایگاه در دوره: هدف‌های 352.1 آزمون 305-300.

محیط: VM systemd با unified cgroup v2؛ فشار OOM عمدی اجرا نمی‌شود. cgroup v1 در واژگان آزمون باید شناخته شود، ولی نمونهٔ عملی v2 است.

stat -fc %T /sys/fs/cgroup
cat /sys/fs/cgroup/cgroup.controllers
cat /proc/self/cgroup

cgroup2fs نشانهٔ mount v2 است. مسیر معمول Linux /sys/fs/cgroup است؛ صورت plural در بعضی فهرست‌های سرفصل را مسیر آمادهٔ کپی فرض نکن.

در ترمینال اول:

sudo systemd-run --unit=lpic305-cg --scope \
  -p MemoryMax=128M -p CPUQuota=25% sleep 120

در ترمینال دوم:

systemctl show lpic305-cg.scope -p ControlGroup -p MemoryMax -p CPUQuotaPerSecUSec
LAB_CGROUP=$(systemctl show lpic305-cg.scope -p ControlGroup --value)
cat "/sys/fs/cgroup$LAB_CGROUP/memory.max"
cat "/sys/fs/cgroup$LAB_CGROUP/cpu.max"
cat "/sys/fs/cgroup$LAB_CGROUP/memory.events"

scope فقط هنگام اجرای sleep زنده است؛ اگر پایان یافته، مسیر را خالی فرض و به cgroup root رجوع نکن. memory.max سقف hard، memory.high throttling و cpu.max quota/period هستند. درصد quota نسبت به ظرفیت یک CPU تفسیر می‌شود، نه لزوماً درصد کل host چندcore.

systemd را مدیر cgroup نگه دار؛ روی hierarchy آن manual mkdir/chown گسترده انجام نده. delegation برای runtime/rootless باید محدود و معتبر باشد. swap و limits hierarchy نیز روی نتیجه اثر دارند.

آزمون و بازگشت: مقادیر controller با propertyها سازگار باشند و process زنده/محدود باشد. بعد از پایان یا stop scope همین object حذف می‌شود؛ daemonهای دیگر را متوقف نکن.

منبع: cgroup v2 ، systemd resource control .