به مجموعهی زیر پوست داکر خوش اومدید تو این مجموعه یه نگاهی به یه سری فیچرای لینوکسی میندازیم که با استفاده از اونها ابزارهایی مثل داکر میتونن کار کنن. تو اولین بخش از این مجموعه به cgroup نگاه میکنیم، اون رو معرفی میکنیم و توضیح میدیم چجوری cgroup یه سری از مشکلات کاربرای لینوکس رو حل کرد.
مشکل از جایی شروع شد که برنامهها و کاربرای لینوکس میتونستن بدون هیچ محدودیتی تمام منابع کامپیوتر رو مصرف کنن، مثلا در نظر بگیرید که ما دو تا کاربر داریم، کاربر یک میخواد بازی کنه و بازیش هم آنلاینه، از طرفی کاربر دو داره فیلم دانلود میکنه، کاربر یک نمیتونه بازی کنه چون تمام اینترنت رو کاربر دو داره مصرف میکنه. برای مشکلات این دستی نیاز بود که سیستم عامل بتونه تَسکها (دقت داشته باشید که ننوشتم پروسهها چون این دو تا با هم فرق دارن تو قسمتهای بعدی فرق اینا گفته میشه ولی فعلا یکی در نظرشون بگیرید) رو محدود کنه و راه حلی که براش استفاده کردن controller group یا cgroup بود.
خود cgroup به تنهایی یه ویژگی هست که با استفاده از اون میشه تسکها رو گروهبندی کرد و کار خاص دیگهای انجام نمیده، چیزی که cgroup رو قوی میکنه دو تا ویژگی دیگه هستن که در کنار cgroup میآن.
یکی از اون ویژگیها اسمش subsystem هست، subsystem یه controller هست و کاری که میکنه اینه میره توی هر گروه(منظورم همون گروههایی هست که cgroup ساخته) و میتونه تسکهای اون گروه رو بررسی کنه. مثلا ببینه cpu مصرفی این تسکها چقدره و اگه تسکهای توی اون گروه بیشتر از محدودهی cpuشون نیاز به پردازنده دارن این اجازه رو بهشون نده. از اونجا که نیاز اصلی برای گروهبندی تسکها مصرف منابع سیستم بوده subsystemها معمولا کارشون اینه که منابع سیستم رو کنترل کنن.
ویژگی دیگهای که cgroup رو قدرتمند میکنه hierarchy هستش، hierarchy یه درخت از گروهها هستش و توی این درخت تمام تسکهای سیستم قرار گرفتن و هر تسک دقیقا توی یک گروه قرار داره(توی بخش بعدی مفصل بهش میپردازیم).
توی ورژن یک cgroup ما میتونیم چند تا hierarchy داشته باشیم(ورژن دو رو توی بخشهای بعدی توضیح میدم) و توی هر hierarchy کل تسکها اومده، وقتی کاربر گروه میسازه، گروه رو حذف میکنه، تسکهای یه گروه رو لیست میکنه، و کوئری میزنه روی یه گروه، این hierarchy هستش که تغییر میکنه.
در حالت کلی کار cgroup اینه تسکها رو گروهبندی کنه و کارای دیگه مثل محدود کردن منابع، برعهدهی subsystemها هستش، به عنوان مثال cpusets که یکی از subsystemها هستش میبینه تسکی که cpu میخواد توی کدوم گروه هست، و بر اساس گروه ممکنه اجازه نده از یه سری cpuها استفاده کنه (مثلا میگه تسکهای این گروه فقط به cpu0 و cpu2 دسترسی دارن).
این بخش اول زیر پوست داکر بود که توش یه معرفی از cgroup v1 و اجزاش کردیم توی بخش بعدی توضیح میدیم hierarchy چجوری گروهبندی و محدودیتگذاری روی تسکها رو راحتتر میکنه.