Bosh sahifa Wiki Control Group

Control Group

Control GroupLinux kernelida processlarni ierarxik guruhlarga birlashtirib, ularning CPU, xotira, I/O va boshqa resurslardan foydalanishini hisoblash hamda cheklash mexanizmi. Qisqa nomi cgroup. Namespace resurs ko‘rinishini ajratsa, cgroup sarf va scheduling siyosatini boshqaradi. Container va service managerlar process lifecycle’ini kuzatishda ham undan foydalanadi.

Ierarxiya

Cgroup daraxtida child parent limitlari ichida ishlaydi. Process ma’lum hierarchy nuqtasiga a’zo bo‘ladi, uning threadlari va childlari policyga ko‘ra shu guruhni meros qiladi. Cgroup v2 barcha asosiy controllerlarni yagona unified hierarchy’da boshqaradi.

Parent childlarga controller delegatsiya qiladi. Child parentdan ko‘proq resource kafolatlay olmaydi. Ichki node’da process saqlash va controller enable qilish bo‘yicha “no internal process” qoidasi resurs taqsimotining aniq bo‘lishiga xizmat qiladi.

CPU boshqaruvi

CPU controller weight orqali guruhlar orasida nisbiy ulush, quota orqali ma’lum perioddagi maksimal CPU vaqtini belgilaydi. Weight faqat contention paytida ma’no beradi; bo‘sh CPU mavjud bo‘lsa guruh ko‘proq ishlashi mumkin. Quota tugasa tasklar period yangilanguncha throttled bo‘ladi.

CPU affinity va cpuset qaysi CPU hamda NUMA memory node’lardan foydalanishni cheklaydi. Noto‘g‘ri kichik cpuset latency va imbalance keltiradi. Real-time bandwidth uchun alohida qoidalar mavjud.

Xotira

Memory controller current usage, high threshold va hard maxni kuzatadi. memory.high reclaim va throttling orqali bosim beradi, memory.maxdan oshib bo‘lmasa cgroup ichida OOM tanlovi yuz berishi mumkin. Page cache ham accountingga kiradi.

Limitni juda past qo‘yish doimiy reclaim va I/O thrashingga olib keladi. RSSni yolg‘iz ko‘rish yetarli emas; cache, swap, memory events va pressure stall metrikalari birga tahlil qilinadi.

I/O va PID

I/O controller block device bo‘yicha weight yoki bandwidth/IOPS limit qo‘llaydi. Virtual disk ortidagi haqiqiy device mappingni bilish zarur. PID controller process/thread yaratilishini cheklab fork bomb ta’sirini kamaytiradi.

Limitga yetganda fork xato qaytaradi. Ilova buni memory xatosi deb qabul qilmasdan resource exhaustion sifatida qayd etadi. Existing processlar ishlashda davom etishi mumkin.

Lifecycle va monitoring

Cgroup barcha descendant processlar tugaganini aniq ko‘rsatadi. Service manager faqat leader PIDga emas, butun cgroupga signal yuborishi mumkin. Daemon double-fork qilsa ham guruhdan qochib ketmaydi, agar ko‘chirish privilege’i bo‘lmasa.

Monitoring cpu.stat, memory.events, io.stat va pressure fayllarini o‘qiydi. Counterlar cumulative bo‘lgani uchun rate interval bo‘yicha hisoblanadi. Cgroup namespace pathni o‘zgartirishi mumkin; barqaror identity manager metadata’sidan olinadi.

Freezer va migratsiya

Cgroup freezer descendant processlarni kelishilgan frozen holatga olib keladi. Checkpoint yoki container migration state barqaror bo‘lishi uchun undan foydalanishi mumkin. Freeze signal stopidan farq qiladi va barcha tasklar kernelning xavfsiz nuqtasiga yetishini kutadi. Uninterruptible I/Odagi task darhol muzlamasligi mumkin. Frozen guruhdagi lock boshqa tashqi processga kerak bo‘lsa system-wide progress muammosi yuz beradi.

Delegation xavfsizligi

Subtree’ni userga delegatsiya qilishda cgroup directory ownershipi yetarli emas. Controller fayllari, process migration va ancestor policy qaysi amallarga ruxsat berishini belgilaydi. User boshqa tenant processini o‘z cgroupiga torta olmasligi kerak. Service manager API orqali unit yaratish ko‘pincha raw cgroupfs’ni keng writable qilishdan xavfsizroq.

Bog‘liq tushunchalar

cgroup v2, CPU quota, memory controller, OOM, pressure stall information, container resource limit