قابلیت Cgroup
(مخفف Control Group)، یک ویژگی کرنل لینوکس می باشد که امکان جدا و محدود سازی منابع سیستم (CPU, memory, disk I/O, network و...) برای مجموعه ای از پردازش ها را می دهد.
این قابلیت در سال ۲۰۰۶ توسط دو نفر از مهندسان گوگل به نام های primarily Paul Menage و Rohit Seth این قابلیت ایجاد و آن را در سال ۲۰۰۷ control groups
نامیدند. این قابلیت از نسخه ۲.۶.۲۴ در سال ۲۰۰۸ به کرنل اضافه شده است.
قابلیت CGroup ویژگی های زیر را فراهم می کند:
- محدودسازی منابع: می توان استفاده از میزان رم، یا تعداد CPU-Core، یا هر سخت افزاری دیگری را محدود و مشخص نمود.
- اولویت بندی: گروه یا چندین گروه پردازش امکان تنظیم برای استفاده از میزان کمتر یا بیشتر ورودی/خروجی یا CPU را می دهد.
- کنترل استفاده: اجازه کنترل و اندازهگیری میزان استفاده از منابع را فراهم می کند.
- کنترل: می توان گروهی از پردازش ها را ثابت یا متوقف و یا راه اندازی مجدد نمود.
به مجموعه ای از پردازش ها که با شرایط همسان با هم مرتبط می شوند را یک گروه کنترل یا cgroup
می نامند. این گروه ها می توانند به صورت سلسله مراتبی شرایط و محدودیت ها را اعمال کنند.
گروهایی کنترل به روش های زیر قابل استفاده هستند:
- بوسیله دسترسی
cgroup
به سیستم مدیریت فایل به صورت مجازی. - بوسیله ایجاد و مدییت گروهها توسط ابزاهایی همانند
cgcreate
،cgexec
وcgclassify
(از طریق کتابخانهlibcgroup
) - بوسیله سرویس موتور قوانین که به طور خودکارپردازش های کاربران، گروه ها یا دستورات را به
cgroups
پیرو تنظیمات انجام شده منتقل می کند. - به طور مستقیم، بوسیله دیگر برنامه هایی که از
cgroups
استفاده می کنند، همانندDocker
،Firejail
،libvirt
،systemd
،Open Grid Scheduler/Grid Engine
و برنامه درحال توسعه گوگلlmctfy
.
جداسازی فضای نام
زمانی که بخشی از cgroups به صورت تکنیکی کار نمی کرد، یک ویژگی مرتبط با کرنل لینوکس جداساز فضای نام (namespace isolation)
هست، جایی که گروهی از پردازش ها طوری از جدا می شوند که امکان استفاده و مشاهده منابع دیگر گروه ها را ندارند. برای مثال یک فضای نام PID
یک تعداد شناسه پردازش مجزا برای هر فضای نام تأمین می کند. همچنین فضای نام برای mount
، کاربران، UTS
، شبکه و SysV IPC
قابل ایجاد می باشد.
- فضای نام
PID
شناسه پردازش های مجزا، لیستی از پردازش ها و جزئیات آنها را مجزا می کند. مادامی که یک فضای نام جدید از دیگر پردازش های والدش جداسازی شده است، امکان مشاهده تمامی پردازش های موجود در فضای نام فرزندانش حتی باPID
متفاوت باشند را دارد. - فضای نام شبکه، کنترلر کارت شبکه را (مجازی یا فیزیکی)، قوانینفایروال
iptables
، جدولrouting
و غیره را جداسازی می کند. امکان دستیابی به فضای نام شبکه به دیگران با استفاده از کارت شبکه مجازیveth
می باشد. - فضای نام
UTS
امکان تغییر 'hostname' را می دهد. - فضای نام
Mount
امکان ایجاد یک لایه سیستم فایل متفاوت یا بارگزاری نقطه بارگزادری فقط خواندنی ا می دهد. - فضای نام
IPC
پردازش ورودی یا ابتدایی سیستمSystem V
را برای - فضای نام کاربری شناسه های کاربری بین فضاهای نام را جداسازی می کند.
- فضای نام
Cgroup
فضای نام با دستور unshare
یا syscall
یا با یک علامت جدید در یک syscall
کپی گرفته شده، ایجاد می شود.
محصولات این ویژگی
پروژه های مختلفی از جمله پروژه های زیر، از ویژگی cgroup
به عنوان مبنای خود استفاده می کنند:
- CoreOS
- Docker (in 2013)
- Hadoop
- Jelastic
- Kubernetes
- lmctfy (Let Me Contain That For You)
- LXC (LinuX Containers)
- systemd
- Mesos and Mesosphere
- HTCondor
در پایان، سعی شد تا در این نوشته آشنایی مختصری پیرامون ویژگی کاربردیی که در کرنل لینوکس ایجاد شده و باعث رخدادن انقلابی در حوزه مجازی سازی و DevOps
بوده است، ارائه گردد. امیدوارم که مفید بوده باشد.