<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های amir ghazanfari</title><link>https://virgool.ir/feed/@a.m.ghazanfari76</link><description></description><language>fa</language><pubDate>2026-11-11 14:26:08</pubDate><image><url>https://files.virgool.ir/upload/users/178362/avatar/3Arh6M.jpg</url><title>amir ghazanfari</title><link>https://virgool.ir/@a.m.ghazanfari76</link></image><item><title>زیر پوست داکر ۳، تفاوت cgroup v1 و cgroup v2</title><link>https://virgool.ir/@a.m.ghazanfari76/زیر-پوست-داکر-۳-ofbroowb1wl7</link><description>توی بخش دوم از زیر پوست داکر نگاهی به 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 هم هست که در آینده به اون هم پرداخته می‌شه). </description><category>amir ghazanfari</category><author>amir ghazanfari</author><pubDate>Sat, 25 Nov 2023 21:59:23 +0330</pubDate></item><item><title>زیر پوست داکر ۲، نگاه دقیق‌تر به hierarchy</title><link>https://virgool.ir/@a.m.ghazanfari76/زیر-پوست-داکر-۲-agcs3sxnq7vi</link><description>سلام به بخش دوم زیر پوست داکر خوش اومدید تو قسمت اول cgroup v1 رو معرفی کردیم و سه جز اصلی اون رو نام بردیم و کمی دربارشون حرف زدیم. تو این بخش کاربرد cgroup رو با مثال می‌بینیم و می‌فهمیم چرا hierarchy وجود داره.در گذشته تلاش‌های متعددی شد تا بشه پروسه‌های سیستم رو گروه‌بندی کرد، مهم‌ترین دلیلش هم بررسی منابع مصرفی پروسه‌ها بود، پروژه‌هایی مثل cpusets و UserBeanCounters ساخته شدن که منابع مصرفی رو بررسی کنن، این پروژه‌ها و مشابهشون نیاز داشتن یک گروه‌بندی برای پروسه‌ها وجود داشته باشه که اگه فورکی هم از این پروژه‌ها ساخته شد توی همون گروه قرار بگیره.اینجوری شد که cgroup ساخته شد تا با کمترین تاثیر روی سرعت اجرای برنامه‌ها، نیازهای اساسی‌ای که این پروژه‌ها(همون subsystem که تو بخش یک دربارشون حرف زدیم) داشتن رو برآورده کنه(اینکه چجوری این کار رو می‌کنه برای بخش بعدیه) و بهشون این اجازه رو می‌ده تا به گروه‌ها دسترسی داشته باشن و کارشون رو بکنن.از طرفی اجازه داده شد که سیستم چند تا hierarchy داشته باشه، که اگه نیاز بود یک یا چند subsystem خاص یک hierarchy داشته باشه. در کل ما می‌تونیم کل تسک‌های سیستم رو با یه hierarchy تقسیم‌بندی کنیم و تمام subsystemها از همون یه دونه استفاده کنن، اما طبق چیزی که دولوپرهای لینوکس مدنظر داشتن این کار زیادی پیچیدگی ایجاد می‌کرد و داشتن چند hierarchy کار رو خیلی ساده می‌کرد مثلا مثال زیر رو در نظر بگیریدفرض کنید توی یه دانشگاه افراد برای کار کردن به یه سیستم لینوکسی مشترک وصل می‌شن ما یه hierarchy برای cpuset داریم که کاربرها رو جدا می‌کنه و برای استادها و دانشجوها محدودیت می‌ذارهتسک‌های مربوط به سیستم توی گروه top cpuset اجرا می‌شه تا محدودیت کمتری داشته باشهاز طرفی برای مصرف مموری، دیسک، و شبکه hierarchyهای جداگانه تعریف می‌کنیم و hierarchy شبکه به شکل زیرهطبق این hierarchy استفاده از شبکه‌ی وب می‌تونه تا بیست درصد پهنای باند موجود رو استفاده کنه شصت درصدش برای nfs(برای اشتراک فایل توی دانشگاه) و بیست درصد کارهای دیگه استفاده می‌شه. حالا فرض کنید شب شده و اساتید دیگه نیستن، و می‌شه دانشجوها اینترنت بیشتری استفاده کنن. برای تغییر محدودیت‌ها فقط کافیه میزان اینترنت گروه دانشجوها رو بیشتر کرد و بدون اینکه محدودیت‌های دیگه مثل دیسک یا مموری تغییر کنه ما مصرف اینترنت دانشجوها رو افزایش دادیم.حالا دو تا نکته رو در نظر داشته باشید، اولین نکته اینکه این موضوع برای cgroup v1 هست پس اگه سیستم جدیدی داشته باشید این احتمال وجود داره که cgroup و hierarchy به این شکل روی سیستم شما نباشه که بعدا به اون می‌پردازیم. و موضوع دوم اگه دقت کرده باشید ما چهار تا hierarchy داریم هر کدوم از این مستطیل‌ها و دایره‌ها خودشون یه گروه هستن و این گروه‌ها با هم دیگه تداخلی ندارن. درسته که شما می‌تونین برای هر hierarchy یک یا چند subsystem بذارید، اما هر subsystem فقط توی یه hierarchy می‌تونه باشه پس نمی‌تونید دو تا hierarchy داشته باشید که تو جفتش cpuset کار کنه.توی این بخش تلاش کردیم یخورده بیشتر با مفهوم hierarchy آشنا شید اگه سوالی دارید خوشحال می‌شم بپرسید تا جواب بدم.</description><category>amir ghazanfari</category><author>amir ghazanfari</author><pubDate>Wed, 01 Nov 2023 21:47:05 +0330</pubDate></item><item><title>زیر پوست داکر ۱، معرفی cgroup v1</title><link>https://virgool.ir/@a.m.ghazanfari76/زیر-پوست-داکر-۱-k8ghrko24guk</link><description>به مجموعه‌ی زیر پوست داکر خوش اومدید تو این مجموعه یه نگاهی به یه سری فیچرای لینوکسی می‌ندازیم که با استفاده از اون‌ها ابزارهایی مثل داکر می‌تونن کار کنن. تو اولین بخش از این مجموعه به 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 چجوری گروه‌بندی و محدودیت‌گذاری روی تسک‌ها رو راحت‌تر می‌کنه.</description><category>amir ghazanfari</category><author>amir ghazanfari</author><pubDate>Mon, 30 Oct 2023 16:55:17 +0330</pubDate></item></channel></rss>