گزینه های زمان اجرا با حافظه ، CPU و GPU

ساخت وبلاگ

به طور پیش فرض ، یک کانتینر محدودیت منابع ندارد و می تواند به همان اندازه از منبع معین استفاده کند همانطور که برنامه ریز هسته میزبان اجازه می دهد. Docker روش هایی برای کنترل میزان حافظه یا CPU یک ظرف می تواند استفاده کند ، و پرچم های پیکربندی زمان اجرای دستور Docker Run را تنظیم می کند. در این بخش جزئیات در مورد زمان تنظیم چنین محدودیت ها و پیامدهای احتمالی تنظیم آنها ارائه شده است.

بسیاری از این ویژگی ها برای پشتیبانی از قابلیت های لینوکس به هسته شما نیاز دارند. برای بررسی پشتیبانی ، می توانید از دستور Docker Info استفاده کنید. اگر قابلیت در هسته شما غیرفعال است ، ممکن است در پایان خروجی مانند موارد زیر هشدار دهید:

برای فعال کردن آنها با مستندات سیستم عامل خود مشورت کنید. برای اطلاعات بیشتر به راهنمای عیب یابی Docker Engine نیز مراجعه کنید.

خاطره

خطرات اتمام حافظه را درک کنید

مهم است که اجازه ندهید یک ظرف در حال اجرا بیش از حد حافظه دستگاه میزبان را مصرف کند. در میزبان لینوکس ، اگر هسته تشخیص دهد که حافظه کافی برای انجام عملکردهای مهم سیستم وجود ندارد ، یک استثناء یا از استثناء حافظه را پرتاب می کند و برای آزاد کردن حافظه شروع به کشتن فرآیندها می کند. هر فرآیند منوط به قتل ، از جمله داکر و سایر برنامه های مهم است. در صورت کشته شدن روند اشتباه ، این می تواند به طور مؤثر کل سیستم را پایین بیاورد.

Docker سعی می کند با تنظیم اولویت OOM در Daomon Docker این خطرات را کاهش دهد تا نسبت به سایر فرآیندهای موجود در سیستم کشته شود. اولویت OOM روی ظروف تنظیم نمی شود. این امر باعث می شود کشته شدن یک ظرف فردی بیشتر از آن باشد که Daocker Daemon یا سایر فرآیندهای سیستم کشته شود. شما نباید سعی کنید با تنظیم دستی-ADJ-ADJ به یک عدد منفی شدید روی Daemon یا یک ظرف ، یا با تنظیم-OOM-KILL-DISABLE روی یک ظرف ، این حفاظت ها را دور بزنید.

برای کسب اطلاعات بیشتر در مورد مدیریت OOM هسته لینوکس ، از مدیریت حافظه دیدن کنید.

شما می توانید خطر بی ثباتی سیستم را به دلیل Oome توسط: کاهش دهید:

  • قبل از قرار دادن آن در تولید ، تست ها را انجام دهید تا نیازهای حافظه برنامه خود را درک کنید.
  • اطمینان حاصل کنید که برنامه شما فقط در میزبان های دارای منابع کافی اجرا می شود.
  • همانطور که در زیر توضیح داده شده است ، مقدار حافظه ای که ظرف شما می تواند از آن استفاده کند ، محدود کنید.
  • هنگام پیکربندی مبادله روی میزبان Docker خود ، توجه داشته باشید. مبادله کندتر و عملکرد کمتری نسبت به حافظه دارد اما می تواند بافر در برابر اجرای حافظه سیستم ایجاد کند.
  • در نظر بگیرید که ظرف خود را به یک سرویس تبدیل کنید و با استفاده از ذرت و برچسب های گره ای در سطح سرویس استفاده کنید تا اطمینان حاصل شود که برنامه فقط روی میزبان هایی با حافظه کافی اجرا می شود

دسترسی یک ظرف به حافظه را محدود کنید

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 تنظیم شده باشد ، ظرف مجاز به استفاده از مبادله نامحدود ، تا مقدار موجود در سیستم میزبان است.

در داخل کانتینر ، ابزارهایی مانند رایگان مبادله میزبان را گزارش می دهند ، نه آنچه در داخل کانتینر موجود است. برای تعیین اینکه آیا مبادله وجود دارد ، به خروجی ابزارهای رایگان یا مشابه اعتماد نکنید.

از استفاده از مبادله جلوگیری کنید

اگر-حافظه و حافظه-جابجایی با همان مقدار تنظیم شده باشد ، این مانع از استفاده از ظروف از هرگونه مبادله می شود. این امر به این دلیل است که-حافظه-جابجایی مقدار حافظه ترکیبی و مبادله ای است که می توان از آن استفاده کرد ، در حالی که حافظه فقط مقدار حافظه فیزیکی است که می توان از آن استفاده کرد.

-جزئیات جاسوسی حافظه

  • مقدار 0 تعویض صفحه ناشناس را خاموش می کند.
  • مقدار 100 همه صفحات ناشناس را به صورت قابل تعویض تنظیم می کند.
  • به طور پیش فرض ، اگر-حافظه-تعویض را تنظیم نکنید ، مقدار از دستگاه میزبان به ارث می رسد.

-جزئیات حافظه کرنل

محدودیت حافظه هسته از نظر حافظه کلی اختصاص داده شده به یک ظرف بیان شده است. سناریوهای زیر را در نظر بگیرید:

  • حافظه نامحدود ، حافظه هسته نامحدود: این رفتار پیش فرض است.
  • حافظه نامحدود ، حافظه هسته محدود: این مناسب است که مقدار حافظه مورد نیاز همه گروههای CGROUP بیشتر از میزان حافظه ای باشد که در واقع در دستگاه میزبان وجود دارد. شما می توانید حافظه هسته را پیکربندی کنید تا هرگز به آنچه در دستگاه میزبان موجود است ، نروید و ظروف که به حافظه بیشتری نیاز دارند برای انتظار برای آن نیاز دارند.
  • حافظه محدود ، حافظه هسته نامحدود: حافظه کلی محدود است ، اما حافظه هسته نیست.
  • حافظه محدود ، حافظه هسته محدود: محدود کردن حافظه کاربر و هسته می تواند برای اشکال زدایی مشکلات مربوط به حافظه مفید باشد. اگر یک ظرف از مقدار غیر منتظره ای از هر نوع حافظه استفاده می کند ، بدون اینکه روی سایر ظروف یا دستگاه میزبان تأثیر بگذارد ، از حافظه خارج می شود. در این تنظیم ، اگر حد حافظه هسته پایین تر از حد حافظه کاربر باشد ، تمام حافظه هسته باعث می شود ظرف خطای OOM را تجربه کند. اگر حد حافظه هسته از حد حافظه کاربر بالاتر باشد ، حد هسته باعث نمی شود که ظرف یک OOM را تجربه کند.

هنگامی که هر محدوده حافظه هسته را روشن می کنید ، دستگاه میزبان آمار "علامت آب بالا" را بر اساس هر فرآیند ردیابی می کند ، بنابراین می توانید پیگیری کنید که کدام فرآیندها (در این حالت ، ظروف) از حافظه اضافی استفاده می کنند. این می تواند در هر فرآیند با مشاهده/PROC // وضعیت در دستگاه میزبان مشاهده شود.

به طور پیش فرض ، دسترسی هر ظرف به چرخه های CPU دستگاه میزبان نامحدود است. شما می توانید محدودیت های مختلفی را برای محدود کردن دسترسی یک ظرف خاص به چرخه CPU دستگاه میزبان تنظیم کنید. بیشتر کاربران از برنامه ریزی پیش فرض CFS استفاده و پیکربندی می کنند. همچنین می توانید برنامه ریز RealTime را پیکربندی کنید.

برنامه ریزی پیش فرض CFS را پیکربندی کنید

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 هسته ، با اسناد مربوط به سیستم عامل خود مشورت کنید.

daemon docker را پیکربندی کنید

برای اجرای ظروف با استفاده از برنامه زمانبندی 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 به درستی پیکربندی نشده باشد ، خطایی رخ می دهد.

به یک GPU NVIDIA دسترسی پیدا کنید

پیش نیازها

برای بارگیری و نصب درایورهای مناسب به صفحه رسمی درایور NVIDIA مراجعه کنید. پس از انجام این کار ، سیستم خود را دوباره راه اندازی کنید.

تأیید کنید که GPU شما در حال اجرا و در دسترس است.

Nvidia-container-runtime را نصب کنید

دستورالعمل ها را در (https://nvidia. github. io/nvidia-container-runtime/) دنبال کنید و سپس این دستور را اجرا کنید:

اطمینان حاصل کنید که قلاب NVIDIA-CONTAINER-RUNTIME از مسیر $ قابل دسترسی است.

Daemon Docker را مجدداً راه اندازی کنید.

GPU ها را برای استفاده در معرض دید قرار دهید

هنگامی که یک ظرف را برای دسترسی به منابع GPU شروع می کنید ، پرچ م-gpus را وارد کنید. مشخص کنید که چند GPU استفاده کنید. مثلا:

تمام GPU های موجود را در معرض دید قرار می دهد و نتیجه ای را به موارد زیر باز می گرداند:

برای مشخص کردن GPU از گزینه دستگاه استفاده کنید. مثلا:

آن GPU خاص را در معرض دید قرار می دهد.

GPU های اول و سوم را در معرض دید قرار می دهد.

توجه داشته باشید

GPU های NVIDIA فقط توسط سیستم هایی که دارای یک موتور واحد هستند قابل دسترسی است.

قابلیت های NVIDIA را تنظیم کنید

شما می توانید قابلیت ها را به صورت دستی تنظیم کنید. به عنوان مثال ، در اوبونتو می توانید موارد زیر را اجرا کنید:

این امکان قابلیت درایور ابزار را فراهم می کند که ابزار NVIDIA-SMI را به ظرف اضافه می کند.

قابلیت ها و همچنین تنظیمات دیگر را می توان از طریق متغیرهای محیط در تصاویر تنظیم کرد. اطلاعات بیشتر در مورد متغیرهای معتبر را می توان در صفحه Nvidia-Container-Runtime GitHub یافت. این متغیرها را می توان در یک dockerfile تنظیم کرد.

همچنین می توانید از تصاویر CUDA استفاده کنید که این متغیرها را به صورت خودکار تنظیم می کند. برای اطلاعات بیشتر به صفحه GitHub تصاویر CUDA مراجعه کنید.

منصة التداول الأكثر ثقة...
ما را در سایت منصة التداول الأكثر ثقة دنبال می کنید

برچسب : نویسنده : احمد نجفی بازدید : <-PostHit-> تاريخ : يکشنبه 1 مرداد 1402 ساعت: 21:28