توی بخش دوم از زیر پوست داکر نگاهی به hierarchy انداختیم حالا توی این بخش یه نگاهی میندازیم به یه سری تفاوت بین دو تا ورژن cgroup.
اولین مشکل این بود که cgroup تسکها رو گروهبندی میکرد نه پروسهها رو، قبلا گفته بودیم به تفاوت این دو تا میرسیم. پروسه اون کدی هست که شما اجرا میکنید، حالا این کد ممکنه یک یا چند ترد داشته باشه. هر کدوم از اون تردها یه تسک محسوب میشن. تو cgroup v1 این امکان به شما داده میشد که تسکهاتون رو گروهبندی کنید، مثلا روی یه ترد nginx محدودیت نتورک بذارید رو یکی دیگهاش نذارید که این پیادهسازی ممکنه مشکلآفرین بشه. اولین و مهمترین تفاوت دو تا ورژن cgroup اینه که توی ورژن دو شما پروسهها رو گروهبندی میکنید.
دومین تفاوت اینه که توی ورژن دو شما فقط یه hierarchy دارید و تمام sub systemهای مورد نظرتون با همون یه دونه کار میکنه.
سومین تفاوت باز هم مربوط به hierarchy هستش توی cgroup v1 شما یه تسک رو روی هر نود درخت میتونستید بذارید اما تو cgroup v2 پروسهها فقط میتونن توی نودهای برگ بیفتن(به استثنای ریشهی درخت)
از اونجا که cgroup v2 با پروسهها سر و کار داره جایی نداره که تسکها بهش معرفی شن و هر چی تسکه تو گروه پروسهاش میره
این چهار تفاوت مهمترین تفاوتهای این دو تا ورژن بودن، یه نکتهای که میمونه اینه backward compatibility توی لینوکس خیلی مهمه بخاطر همین لینوکس این امکان رو میده که از هر دو تا ورژن همزمان استفاده کنید، فقط نکتهای که هستش اینه که یه sub system باید فقط تو یکی از دو تا ورژن باشه و نمیتونه تو هر دو تا ورژن باشه
تصویر بالا یه شهود بهتری از تفاوت این دو تا ورژن بهتون میده. توی ورژن یک اول sub systemها جدا میشن و به ازای هر کدومشون یه hierarchy درست میشه(blkio, memory, pids هر کدومشون یه sub system هستن) و توی هر کدوم تسکها گروهبندی میشن(یه تسک باید تو تمام hierarchyها بیاد) و در آخر روی گروهها محدودیتها اعمال میشه.
توی ورژن دو ما کلا یه hierarchy داریم و پروسهها یا باید توی برگها قرار بگیرن یا توی ریشه(اما حتما باید باشن) بعد رو هر کدوم از گروهها محدودیتها اعمال میشه، و این محدودیتها مربوط به یه sub system نیست مربوط به کل sub systemهایی که از ورژن دو استفاده میکنن هستش.(یه cgroup.subtree_control هم هست که در آینده به اون هم پرداخته میشه).