به طور پیش فرض ، یک کانتینر محدودیت منابع ندارد و می تواند به همان اندازه از منبع معین استفاده کند همانطور که برنامه ریز هسته میزبان اجازه می دهد. Docker روش هایی برای کنترل میزان حافظه یا CPU یک ظرف می تواند استفاده کند ، و پرچم های پیکربندی زمان اجرای دستور Docker Run را تنظیم می کند. در این بخش جزئیات در مورد زمان تنظیم چنین محدودیت ها و پیامدهای احتمالی تنظیم آنها ارائه شده است.
بسیاری از این ویژگی ها برای پشتیبانی از قابلیت های لینوکس به هسته شما نیاز دارند. برای بررسی پشتیبانی ، می توانید از دستور Docker Info استفاده کنید. اگر قابلیت در هسته شما غیرفعال است ، ممکن است در پایان خروجی مانند موارد زیر هشدار دهید:
برای فعال کردن آنها با مستندات سیستم عامل خود مشورت کنید. برای اطلاعات بیشتر به راهنمای عیب یابی Docker Engine نیز مراجعه کنید.
مهم است که اجازه ندهید یک ظرف در حال اجرا بیش از حد حافظه دستگاه میزبان را مصرف کند. در میزبان لینوکس ، اگر هسته تشخیص دهد که حافظه کافی برای انجام عملکردهای مهم سیستم وجود ندارد ، یک استثناء یا از استثناء حافظه را پرتاب می کند و برای آزاد کردن حافظه شروع به کشتن فرآیندها می کند. هر فرآیند منوط به قتل ، از جمله داکر و سایر برنامه های مهم است. در صورت کشته شدن روند اشتباه ، این می تواند به طور مؤثر کل سیستم را پایین بیاورد.
Docker سعی می کند با تنظیم اولویت OOM در Daomon Docker این خطرات را کاهش دهد تا نسبت به سایر فرآیندهای موجود در سیستم کشته شود. اولویت OOM روی ظروف تنظیم نمی شود. این امر باعث می شود کشته شدن یک ظرف فردی بیشتر از آن باشد که Daocker Daemon یا سایر فرآیندهای سیستم کشته شود. شما نباید سعی کنید با تنظیم دستی-ADJ-ADJ به یک عدد منفی شدید روی Daemon یا یک ظرف ، یا با تنظیم-OOM-KILL-DISABLE روی یک ظرف ، این حفاظت ها را دور بزنید.
برای کسب اطلاعات بیشتر در مورد مدیریت OOM هسته لینوکس ، از مدیریت حافظه دیدن کنید.
شما می توانید خطر بی ثباتی سیستم را به دلیل Oome توسط: کاهش دهید:
Docker می تواند محدودیت های حافظه سخت را اجرا کند ، که به ظرف اجازه می دهد بیش از مقدار مشخصی از حافظه کاربر یا سیستم یا محدودیت های نرم استفاده کند ، که به ظرف اجازه می دهد تا به همان اندازه از حافظه استفاده کند ، مگر اینکه شرایط خاصی برآورده شود ، مانند زمانهسته حافظه یا مشاجره کم در دستگاه میزبان را تشخیص می دهد. برخی از این گزینه ها در صورت استفاده به تنهایی یا وقتی بیش از یک گزینه تنظیم شده اند ، اثرات متفاوتی دارند.
بسیاری از این گزینه ها یک عدد صحیح مثبت را می گیرند و به دنبال آن پسوند B ، K ، M ، G ، برای نشان دادن بایت ، کیلوبایت ، مگابایت یا گیگابایت نشان می دهند.
| گزینه | شرح |
|---|---|
| -m ی ا-حافظه = | حداکثر حافظه ای که ظرف می تواند از آن استفاده کند. اگر این گزینه را تنظیم کنید ، حداقل مقدار مجاز 6 متر (6 مگابایت) است. یعنی شما باید ارزش را حداقل 6 مگابایت تنظیم کنید. |
| -حافظه-جابجایی * | مقدار حافظه این ظرف برای تعویض دیسک مجاز است. به جزئیات-حافظه-جابجایی مراجعه کنید. |
| -جاسوسی حافظه | به طور پیش فرض ، هسته میزبان می تواند درصدی از صفحات ناشناس استفاده شده توسط یک ظرف را تغییر دهد. برای تنظیم این درصد می توانید-حافظه را به مقدار بین 0 تا 100 تنظیم کنید. به جزئیات-حافظه-تغییر مراجعه کنید. |
| -حفظ حافظه | به شما امکان می دهد یک حد نرم کوچکتر از حافظه را مشخص کنید که هنگام Docker مشاجره یا حافظه کم در دستگاه میزبان فعال می شود. اگر از رزرو حافظه استفاده می کنید ، باید از حافظه پایین تر تنظیم شود تا از آن استفاده کند. از آنجا که این یک حد نرم است ، تضمین نمی کند که ظرف از حد مجاز نباشد. |
| -حافظه کرنل | حداکثر مقدار حافظه هسته ای که ظرف می تواند از آن استفاده کند. حداقل مقدار مجاز 4 متر است. از آنجا که حافظه هسته نمی تواند تعویض شود ، ظرفی که از حافظه هسته گرسنه است ممکن است منابع دستگاه میزبان را مسدود کند ، که می تواند عوارض جانبی در دستگاه میزبان و سایر ظروف داشته باشد. به جزئیات-کورنل حافظه مراجعه کنید. |
| -بستر کشتار | به طور پیش فرض ، اگر یک خطای خارج از حافظه (OOM) رخ دهد ، هسته فرآیندهای موجود در یک ظرف را می کشد. برای تغییر این رفتار ، از گزینه-kill-isisable استفاده کنید. فقط قاتل OOM را روی ظروف غیرفعال کنید که در آن گزینه حافظ ه-M/-را نیز تنظیم کرده اید. اگر پرچ م-m تنظیم نشده باشد ، میزبان می تواند از حافظه خارج شود و هسته ممکن است نیاز به کشتن فرآیندهای سیستم میزبان برای حافظه آزاد داشته باشد. |
برای اطلاعات بیشتر در مورد CGroups و حافظه به طور کلی ، به اسناد مربوط به کنترل کننده منابع حافظه مراجعه کنید.
-حافظه-سوپ یک پرچم اصلاح کننده است که فقط در صورت تنظیم-حافظه نیز معنی دارد. استفاده از مبادله به ظرف اجازه می دهد تا در صورت خسته شدن تمام رم موجود در آن ، نیازهای حافظه اضافی را روی دیسک بنویسد. مجازات عملکردی برای برنامه هایی وجود دارد که اغلب حافظه را به دیسک مبادله می کنند.
تنظیم آن می تواند اثرات پیچیده ای داشته باشد:
اگر-حافظه-جابجایی روی یک عدد صحیح مثبت تنظیم شده باشد ، باید هر دو حافظه-حافظه و حافظه تنظیم شود.-حافظه-SWAP نشان دهنده کل حافظه و مبادله ای است که می تواند مورد استفاده قرار گیرد و-حافظه مقدار مورد استفاده توسط حافظه غیر SWAP را کنترل می کند. بنابراین اگر - -memory = "300m" و-حافظ ه-swap = "1g" ، ظرف می تواند از 300 متر حافظه و 700 متر (1 G-300 متر) استفاده کند.
اگر-حافظه-جابجایی روی 0 تنظیم شده باشد ، تنظیمات نادیده گرفته می شود و مقدار آن به صورت غیرقانونی رفتار می شود.
اگر-حافظه-جابجایی بر روی همان مقدار-حافظه تنظیم شده باشد ، و-حافظه روی یک عدد صحیح مثبت تنظیم شده است ، ظرف دسترسی به مبادله ندارد. به جلوگیری از استفاده از یک ظرف جلوگیری کنید.
اگر-حافظه-جابجایی غیرقانونی است و-حافظه تنظیم شده است ، اگر ظرف میزبان حافظه مبادله ای را تنظیم کند ، می تواند به همان اندازه تنظیم حافظه از تعویض استفاده کند. به عنوان مثال ، اگر-حافظه = "300m" و-حافظه-جابجایی تنظیم نشده باشد ، ظرف می تواند در کل حافظه و مبادله از 600 متر استفاده کند.
اگ ر-حافظ ه-جابجایی صریحاً بر رو ی-1 تنظیم شده باشد ، ظرف مجاز به استفاده از مبادله نامحدود ، تا مقدار موجود در سیستم میزبان است.
در داخل کانتینر ، ابزارهایی مانند رایگان مبادله میزبان را گزارش می دهند ، نه آنچه در داخل کانتینر موجود است. برای تعیین اینکه آیا مبادله وجود دارد ، به خروجی ابزارهای رایگان یا مشابه اعتماد نکنید.
اگر-حافظه و حافظه-جابجایی با همان مقدار تنظیم شده باشد ، این مانع از استفاده از ظروف از هرگونه مبادله می شود. این امر به این دلیل است که-حافظه-جابجایی مقدار حافظه ترکیبی و مبادله ای است که می توان از آن استفاده کرد ، در حالی که حافظه فقط مقدار حافظه فیزیکی است که می توان از آن استفاده کرد.
محدودیت حافظه هسته از نظر حافظه کلی اختصاص داده شده به یک ظرف بیان شده است. سناریوهای زیر را در نظر بگیرید:
هنگامی که هر محدوده حافظه هسته را روشن می کنید ، دستگاه میزبان آمار "علامت آب بالا" را بر اساس هر فرآیند ردیابی می کند ، بنابراین می توانید پیگیری کنید که کدام فرآیندها (در این حالت ، ظروف) از حافظه اضافی استفاده می کنند. این می تواند در هر فرآیند با مشاهده/PROC // وضعیت در دستگاه میزبان مشاهده شود.
به طور پیش فرض ، دسترسی هر ظرف به چرخه های CPU دستگاه میزبان نامحدود است. شما می توانید محدودیت های مختلفی را برای محدود کردن دسترسی یک ظرف خاص به چرخه CPU دستگاه میزبان تنظیم کنید. بیشتر کاربران از برنامه ریزی پیش فرض CFS استفاده و پیکربندی می کنند. همچنین می توانید برنامه ریز RealTime را پیکربندی کنید.
CFS برنامه ریزی CPU هسته لینوکس برای فرآیندهای طبیعی لینوکس است. چندین پرچم زمان اجرا به شما امکان می دهد میزان دسترسی به منابع CPU را که ظرف شما دارد پیکربندی کنید. هنگامی که از این تنظیمات استفاده می کنید ، Docker تنظیمات مربوط به CGROUP کانتینر را در دستگاه میزبان اصلاح می کند.
| گزینه | شرح |
|---|---|
| -cpus = | مشخص کنید که چه مقدار از منابع CPU موجود می تواند از آن استفاده کند. به عنوان مثال ، اگر دستگاه میزبان دارای دو CPU باشد و شم ا-CPUS = "1. 5" را تنظیم کنید ، ظرف حداکثر یک و نیم از CPU ها تضمین می شود. این معادل تنظیم-cpu-period = "100000" و-cpu-quota = "150000" است. |
| -cpu-period = | دوره برنامه ریزی CPU CFS را که در کنار-CPU-Quota استفاده می شود ، مشخص کنید. پیش فرض به 100000 میکرو ثانیه (100 میلی ثانیه). بیشتر کاربران این کار را از پیش فرض تغییر نمی دهند. برای اکثر موارد استفاده ،-CPU یک جایگزین راحت تر است. |
| -cpu-quota = | سهمیه CPU CFS را روی ظرف تحمیل کنید. تعداد میکرو ثانیه ها در هر دوره-CPU که ظرف قبل از پرتاب محدود است ، محدود می شود. به همین ترتیب به عنوان سقف مؤثر عمل می کند. برای اکثر موارد استفاده ،-CPU یک جایگزین راحت تر است. |
| -cpuset-cpus | CPU های خاص یا هسته هایی را که یک ظرف می تواند از آن استفاده کند محدود کنید. اگر بیش از یک پردازنده داشته باشید ، یک لیست جدا از کاما یا دامنه جدا شده از Hyphen از CPU ها می تواند از آن استفاده کند. CPU اول شماره 0 است. یک مقدار معتبر ممکن است 0-3 (برای استفاده از CPU اول ، دوم ، سوم و چهارم) یا 1،3 (برای استفاده از CPU دوم و چهارم) باشد. |
| -سهام CPU | این پرچم را روی یک مقدار بیشتر یا کمتر از پیش فرض 1024 تنظیم کنید تا وزن کانتینر را افزایش یا کاهش دهید و به آن دسترسی پیدا کنید تا به نسبت بیشتر یا کمتر از چرخه های CPU دستگاه میزبان دسترسی پیدا کنید. این تنها زمانی اجرا می شود که چرخه CPU محدود شود. هنگامی که تعداد زیادی چرخه CPU در دسترس است ، تمام ظروف به همان اندازه که نیاز دارند از CPU استفاده می کنند. از این طریق ، این یک حد نرم است.-سهام CPU مانع از برنامه ریزی ظروف در حالت Swarm نمی شود. این منابع CPU کانتینر را برای چرخه های CPU موجود در اولویت قرار می دهد. این دسترسی به CPU خاص را تضمین یا رزرو نمی کند. |
اگر 1 CPU دارید ، هر یک از دستورات زیر ظرف حداکثر 50 ٪ CPU را در هر ثانیه تضمین می کند.
که معادل مشخص کردن دستی-CPU-PerioD و-CPU-Quota است.
برای انجام کارهایی که نمی توانند از برنامه ریزی CFS استفاده کنند ، می توانید ظرف خود را برای استفاده از برنامه ریزی Realtime پیکربندی کنید. قبل از اینکه بتوانید Daocker Daemon را پیکربندی کنید یا ظروف جداگانه را پیکربندی کنید ، باید اطمینان حاصل کنید که هسته دستگاه میزبان به درستی پیکربندی شده است.
هشدار
برنامه ریزی CPU و اولویت بندی ویژگی های پیشرفته سطح هسته است. بیشتر کاربران نیازی به تغییر این مقادیر از پیش فرض خود ندارند. تنظیم نادرست این مقادیر می تواند باعث شود سیستم میزبان شما ناپایدار یا غیرقابل استفاده شود.
تأیید کنید که config_rt_group_sched با اجرای zcat /proc/config. gz در هسته لینوکس فعال می شود |grep config_rt_group_sched یا با بررسی وجود پرونده /sys/fs/cgroup/cpu. rt_runtime_us. برای راهنمایی در مورد پیکربندی برنامه زمانبندی Realtime هسته ، با اسناد مربوط به سیستم عامل خود مشورت کنید.
برای اجرای ظروف با استفاده از برنامه زمانبندی Realtime ، Docker Daemon را با پرچم-CPU-RT-Runtime تنظیم کنید تا حداکثر تعداد میکرو ثانیه ها برای کارهای زمان واقعی در هر دوره اجرا رزرو شود. به عنوان مثال ، با دوره پیش فرض 1000000 میکرو ثانیه (1 ثانیه) ، تنظیم-CPU-RT-RUNTIME = 950000 تضمین می کند که ظروف با استفاده از برنامه ریز زمان واقعی می توانند برای هر دوره 1000000 میکروس ثانیه 950000 کار کنند و حداقل 50000 میکرو ثانیه در دسترس باشدبرای کارهای غیر واقعی. برای دائمی این پیکربندی در سیستم هایی که از SystemD استفاده می کنند ، به کنترل و پیکربندی Docker با SystemD مراجعه کنید.
می توانید چندین پرچم را برای کنترل اولویت CPU یک ظرف هنگام شروع کانتینر با استفاده از Docker Run عبور دهید. برای کسب اطلاعات در مورد مقادیر مناسب ، با مستندات سیستم عامل خود یا دستور ULIMIT مشورت کنید.
| گزینه | شرح |
|---|---|
| -cap-add = sys_nice | ظرفیت CAP_SYS_NICE را به ظرف اعطا می کند ، که به ظرف اجازه می دهد مقادیر خوب فرآیند را بالا ببرد ، سیاست های برنامه ریزی در زمان واقعی را تنظیم کند ، تمایل CPU و سایر عملیات را تنظیم کند. |
| -cpu-rt-runtime = | حداکثر تعداد میکرو ثانیه هایی که ظرف می تواند در اولویت زمان واقعی در دوره زمانبندی Realtime Docker Daemon اجرا شود. شما همچنین به پرچم-cap-add = sys_nice نیاز دارید. |
| -Ulimit rtprio = | حداکثر اولویت زمان واقعی برای ظرف مجاز است. شما همچنین به پرچم-cap-add = sys_nice نیاز دارید. |
دستور مثال زیر هر یک از این سه پرچم را بر روی یک دبیان تنظیم می کند: جسی کانتینر.
اگر Daemon هسته یا Docker به درستی پیکربندی نشده باشد ، خطایی رخ می دهد.
برای بارگیری و نصب درایورهای مناسب به صفحه رسمی درایور NVIDIA مراجعه کنید. پس از انجام این کار ، سیستم خود را دوباره راه اندازی کنید.
تأیید کنید که GPU شما در حال اجرا و در دسترس است.
دستورالعمل ها را در (https://nvidia. github. io/nvidia-container-runtime/) دنبال کنید و سپس این دستور را اجرا کنید:
اطمینان حاصل کنید که قلاب NVIDIA-CONTAINER-RUNTIME از مسیر $ قابل دسترسی است.
Daemon Docker را مجدداً راه اندازی کنید.
هنگامی که یک ظرف را برای دسترسی به منابع GPU شروع می کنید ، پرچ م-gpus را وارد کنید. مشخص کنید که چند GPU استفاده کنید. مثلا:
تمام GPU های موجود را در معرض دید قرار می دهد و نتیجه ای را به موارد زیر باز می گرداند:
برای مشخص کردن GPU از گزینه دستگاه استفاده کنید. مثلا:
آن GPU خاص را در معرض دید قرار می دهد.
GPU های اول و سوم را در معرض دید قرار می دهد.
توجه داشته باشید
GPU های NVIDIA فقط توسط سیستم هایی که دارای یک موتور واحد هستند قابل دسترسی است.
شما می توانید قابلیت ها را به صورت دستی تنظیم کنید. به عنوان مثال ، در اوبونتو می توانید موارد زیر را اجرا کنید:
این امکان قابلیت درایور ابزار را فراهم می کند که ابزار NVIDIA-SMI را به ظرف اضافه می کند.
قابلیت ها و همچنین تنظیمات دیگر را می توان از طریق متغیرهای محیط در تصاویر تنظیم کرد. اطلاعات بیشتر در مورد متغیرهای معتبر را می توان در صفحه Nvidia-Container-Runtime GitHub یافت. این متغیرها را می توان در یک dockerfile تنظیم کرد.
همچنین می توانید از تصاویر CUDA استفاده کنید که این متغیرها را به صورت خودکار تنظیم می کند. برای اطلاعات بیشتر به صفحه GitHub تصاویر CUDA مراجعه کنید.
منصة التداول الأكثر ثقة...
برچسب :
نویسنده : احمد نجفی
بازدید : <-PostHit->