Futásidejű opciók memóriával, CPU-kkal és GPU-kkal
Becsült olvasási idő: 16 perc
Alapértelmezés szerint a tárolónak nincsenek erőforrás-korlátai, és annyit használhat fel egy adott erőforrásból, amennyit a gazdagép kernelütemezője megenged. A Docker lehetőséget nyújt a tároló által felhasználható memória vagy CPU használatának ellenőrzésére, beállítva a docker run parancs futásidejű konfigurációs zászlóit. Ez a szakasz részleteket tartalmaz arról, hogy mikor kell beállítania az ilyen határértékeket, és azok meghatározásának lehetséges következményeit.
Ezen funkciók sokaságához a rendszermag szükséges a Linux képességeinek támogatásához. A támogatás ellenőrzéséhez használhatja a docker info parancsot. Ha a kernelben le van tiltva egy képesség, akkor a kimenet végén figyelmeztetést láthat, mint például:
Az engedélyezéshez olvassa el az operációs rendszer dokumentációját. Tudj meg többet.
memória
Értse meg a memória elfogyásának kockázatát
Fontos, hogy ne engedje, hogy egy futó tároló túl sokat használjon fel a gazdagép memóriájából. Linux-gazdagépeken, ha a rendszermag azt észleli, hogy nincs elegendő memória a fontos rendszerfunkciók végrehajtásához, OOME-ot, vagy Elfogyott a memória kivételét dobja, és megöli a folyamatokat a memória felszabadítása érdekében. Bármely folyamat megölhető, beleértve a Dockert és más fontos alkalmazásokat is. Ez hatékonyan leronthatja az egész rendszert, ha rossz folyamatot ölnek meg.
A Docker megkísérli enyhíteni ezeket a kockázatokat azáltal, hogy úgy módosítja az OOM prioritást a Docker démonon, hogy kevésbé valószínű, hogy elpusztul, mint a rendszer többi folyamata. A tárolók OOM prioritása nincs módosítva. Ez valószínűbbé teszi egy egyedi konténer megölését, mint a Docker démon vagy más rendszerfolyamatok megölését. Ne próbálja megkerülni ezeket a biztosítékokat úgy, hogy manuálisan beállítja a --oom-score-adj értéket egy rendkívül negatív számra a démonon vagy a tárolón, vagy a --oom-kill-disable beállítást egy tárolón.
A Linux kernel OOM kezelésével kapcsolatos további információkért lásd: Elfogyott a memóriakezelés.
Csökkentheti a rendszer instabilitásának kockázatát az OOME miatt:
- A gyártásba helyezés előtt végezzen teszteket az alkalmazás memóriaigényének megértése érdekében.
- Győződjön meg arról, hogy az alkalmazás csak megfelelő erőforrásokkal rendelkező gazdagépeken fut.
- Korlátozza a tároló által felhasználható memória mennyiségét az alábbiak szerint.
- Legyen körültekintő, amikor konfigurálja a cserét a Docker gazdagépeken. A csere lassabb és kevésbé teljesít, mint a memória, de puffert nyújthat a rendszermemória elfogyása ellen.
- Fontolja meg a konténer szolgáltatásgá alakítását, valamint a szolgáltatási szintű korlátozások és csomópontcímkék használatát annak biztosítására, hogy az alkalmazás csak elegendő memóriával rendelkező gazdagépeken futjon
Korlátozza a tároló memóriához való hozzáférését
A Docker kikényszerítheti a merevlemez-korlátozásokat, amelyek lehetővé teszik a tároló számára, hogy egy adott felhasználói vagy rendszermemória-mennyiségnél többet használjon, vagy a soft limiteket, amelyek lehetővé teszik a tároló számára a szükséges memória használatát, hacsak bizonyos feltételek nem teljesülnek, például a kern kevés memóriát vagy versenyt észlel a gazdagépen. Ezen opciók némelyikének eltérő hatása van, ha önmagában használja, vagy ha egynél több opció van beállítva.
Ezen opciók többsége pozitív egész számot vesz fel, amelyet egy b, k, m, g utótag követ, a bájt, kilobájt, megabájt vagy gigabájt jelzésére.
A c-csoportokról és általában a memóriáról további információkat a Memory Resource Controller dokumentációjában talál.
--memóriacsere részletek
--A memory-swap egy módosító zászló, amelynek csak akkor van jelentése, ha a --memory is be van állítva. A csere használata lehetővé teszi a tároló számára, hogy a memóriaigényeket lemezre írja, amikor a tároló kimerítette az összes rendelkezésre álló RAM-ot. Teljesítménybüntetés vonatkozik azokra az alkalmazásokra, amelyek gyakran memóriát cserélnek lemezre.
Beállításának bonyolult hatásai lehetnek:
Ha a --memory-swap pozitív egész számra van állítva, akkor mind a --memory, mind a --memory-swap értéket be kell állítani. --memory-swap a felhasználható memória és swap teljes mennyiségét jelöli, a --memory pedig a nem swap memória által használt mennyiséget szabályozza. Tehát ha --memory = "300m" és --memory-swap = "1g", akkor a tároló 300m memóriát és 700m (1g - 300m) cserét használhat.
Ha a --memory-swap értéke 0, akkor a beállítást figyelmen kívül hagyjuk, és az értéket nem beállítottként kezeljük.
Ha a --memory-swap azonos értékre van állítva, mint a --memory, és a --memory pozitív egész számra van állítva, a tárolónak nincs hozzáférése a cseréhez. Lásd: A tároló cseréjének megakadályozása.
Ha a --memory-swap nincs beállítva, és a --memory be van állítva, akkor a tároló annyi cserét használhat, mint a --memory beállítás, ha a gazdagép tárolóban swap memória van konfigurálva. Például, ha a --memory = "300m" és a --memory-swap nincs beállítva, akkor a tároló összesen 600 m memóriát és cserét használhat.
Ha a --memory-swap kifejezetten -1 értékre van állítva, akkor a tároló korlátlan cserét használhat, a gazdagépen elérhető mennyiség erejéig.
A tároló belsejében az olyan eszközök, mint az ingyenes, nem a tároló belsejében elérhető, hanem a gazdagép elérhető cseréjét jelentik. Ne támaszkodjon ingyenes vagy hasonló eszközök kimenetére annak megállapításához, hogy van-e csereügylet.
Akadályozza meg, hogy egy konténer cseréljen
Ha a --memory és a --memory-swap azonos értékre van állítva, ez megakadályozza, hogy a tárolók bármilyen cserét használhassanak. Ez azért van, mert a --memory-swap a kombinált memória és a swap használható mennyisége, míg a --memory csak a felhasználható fizikai memória mennyisége.
--memória-swappiness részletek
- A 0 érték kikapcsolja az anonim oldalcserét.
- A 100 érték az összes névtelen oldalt felcserélhetővé teszi.
- Alapértelmezés szerint, ha nem állítja be a --memory-swappiness beállítást, akkor az értéket a gazdagép örökli.
--kernel-memória részletei
A kernelmemória korlátai az összes tároló számára lefoglalt memóriában vannak kifejezve. Vegye figyelembe a következő forgatókönyveket:
- Korlátlan memória, korlátlan kernelmemória: Ez az alapértelmezett viselkedés.
- Korlátlan memória, korlátozott kernelmemória: Ez akkor megfelelő, ha az összes csoport számára szükséges memória mennyisége nagyobb, mint a gazdagépen ténylegesen létező memória mennyisége. Beállíthatja a kernelmemóriát úgy, hogy soha ne lépje át a gazdagépen elérhetőeket, és a több memóriát igénylő tárolóknak meg kell várniuk.
- Korlátozott memória, korlátlan kernelmemória: A teljes memória korlátozott, de a kernelmemória nem.
- Korlátozott memória, korlátozott kernelmemória: A felhasználói és a kern memória korlátozása egyaránt hasznos lehet a memóriával kapcsolatos problémák hibakeresésében. Ha egy tároló váratlan mennyiségű memóriát használ, akkor elfogy a memória anélkül, hogy más tárolókat vagy a gazdagépet érintené. Ezen a beállításon belül, ha a rendszermag memóriakorlátja alacsonyabb, mint a felhasználói memóriakorlát, a kernelmemória elfogyása OOM hibát okoz a tárolónak. Ha a kernel memória korlátja meghaladja a felhasználói memória korlátját, akkor a kernel korlátozása nem okozza a tároló OOM tapasztalatát.
Ha bekapcsol bármely kernelmemória-korlátot, a gazdagép folyamatonként követi a „magas vízjel” statisztikákat, így nyomon követheti, hogy mely folyamatok (ebben az esetben a konténerek) használnak felesleges memóriát. Ez folyamatonként látható a/proc/megtekintésével
/ állapot a gazdagépen.
Alapértelmezés szerint minden tároló korlátlan hozzáférést biztosít a gazdagép CPU-ciklusaihoz. Különböző korlátozásokkal állíthatja be, hogy korlátozzák az adott tároló hozzáférését a gazdagép CPU-ciklusaihoz. A legtöbb felhasználó az alapértelmezett CFS ütemezőt használja és konfigurálja. Beállíthatja a valós idejű ütemezőt is.
Konfigurálja az alapértelmezett CFS ütemezőt
A CFS a Linux kernel CPU ütemezője a normál Linux folyamatokhoz. Számos futásidejű jelző lehetővé teszi a tároló CPU-erőforrásaihoz való hozzáférés konfigurálását. Ha ezeket a beállításokat használja, a Docker módosítja a tároló cgroupjának beállításait a gazdagépen.
Ha 1 processzora van, az alábbi parancsok mindegyike másodpercenként a CPU legfeljebb 50% -át garantálja a tároló számára.
Ami egyenértékű a --cpu-period és --cpu-quota manuális megadásával;
Konfigurálja a valós idejű ütemezőt
Konfigurálhatja a tárolót a valós idejű ütemező használatára olyan feladatokhoz, amelyek nem használhatják a CFS ütemezőjét. A Docker démon vagy az egyes tárolók konfigurálása előtt meg kell győződnie arról, hogy a gazdagép rendszermagja megfelelően van-e konfigurálva.
A CPU ütemezése és a prioritások kiemelt kernel szintű szolgáltatások. A legtöbb felhasználónak nem kell megváltoztatnia ezeket az értékeket az alapértelmezett értékektől. Ha ezeket az értékeket helytelenül állítja be, akkor a gazdarendszere instabillá vagy használhatatlanná válhat.
Konfigurálja a gazdagép kerneljét
A zcat /proc/config.gz | futtatásával ellenőrizze, hogy a CONFIG_RT_GROUP_SCHED engedélyezve van-e a Linux kernelben. grep CONFIG_RT_GROUP_SCHED vagy a /sys/fs/cgroup/cpu.rt_runtime_us fájl létezésének ellenőrzésével. A kernel valós idejű ütemezőjének konfigurálásához olvassa el az operációs rendszer dokumentációját.
Konfigurálja a Docker démont
Ha a tárolókat a valós idejű ütemező segítségével szeretné futtatni, futtassa a Docker démonot úgy, hogy a --cpu-rt-runtime jelző a valós idejű feladatokhoz futtatott futásidőnként maximálisan fenntartott mikroszekundumszámra van beállítva. Például az alapértelmezett 1000000 mikroszekundum (1 másodperc) periódus mellett a --cpu-rt-runtime = 950000 beállítás biztosítja, hogy a valós idejű ütemezőt használó konténerek 950000 mikroszekundumot tudnak futtatni minden 1000000-mikroszekundumos periódus alatt, és legalább 50000 mikroszekundum maradjon elérhető nem valós idejű feladatokhoz. Ennek a konfigurációnak a systemd-t használó rendszereken való állandóvá tételéhez lásd: A Docker vezérlése és beállítása a systemd-vel.
Konfigurálja az egyes tárolókat
Több tárcsa átadásával szabályozhatja a tároló CPU-prioritását, amikor a tárolót dokkolófuttatással indítja. A megfelelő értékekről az operációs rendszer dokumentációjában vagy az ulimit parancsban tájékozódhat.
--cap-add = sys_nice | Megadja a tárolónak a CAP_SYS_NICE képességet, amely lehetővé teszi a tároló számára a folyamat szép értékeinek emelését, a valós idejű ütemezési házirendek, a CPU-affinitás és egyéb műveletek megadását. |
--cpu-rt-futásidejű = | A tároló futtatásának maximális száma mikroszekundumokat valós idejű prioritással a Docker démon valós idejű ütemezőjének időszakában. Szüksége van a --cap-add = sys_nice zászlóra is. |
--ulimit rtprio = | A tároló maximális valós idejű prioritása. Szüksége van a --cap-add = sys_nice zászlóra is. |
A következő példa parancs e három zászló mindegyikét beállítja egy debianban: jessie container.
Ha a kernel vagy a Docker démon nincs megfelelően konfigurálva, hiba lép fel.
Nyissa meg az NVIDIA GPU-t
Előfeltételek
Látogasson el a hivatalos NVIDIA illesztőprogramok oldalára a megfelelő illesztőprogramok letöltéséhez és telepítéséhez. Indítsa újra a rendszert, miután ezt megtette.
Ellenőrizze, hogy a GPU fut-e és elérhető-e.
Telepítse az nvidia-container-runtime alkalmazást
Kövesse az alábbi utasításokat: (https://nvidia.github.io/nvidia-container-runtime/), majd futtassa a következő parancsot:
Győződjön meg arról, hogy az nvidia-container-runtime-hook elérhető a $ PATH-ról .
Indítsa újra a Docker démont.
Tegye ki a GPU-kat használatra
Tartalmazza a --gpus jelzőt, amikor tárolót indít a GPU erőforrások eléréséhez. Adja meg, hogy hány GPU-t használjon. Például:
Az összes rendelkezésre álló GPU-t kiteszi, és a következőhöz hasonló eredményt ad vissza:
Az eszköz opcióval adja meg a GPU-kat. Például:
Kiteszi azt a konkrét GPU-t.
Kiteszi az első és a harmadik GPU-t.
Az NVIDIA GPU-khoz csak egyetlen motort futtató rendszerek férhetnek hozzá.
Állítsa be az NVIDIA képességeit
A képességeket manuálisan is beállíthatja. Például az Ubuntuban a következőket futtathatja:
Ez lehetővé teszi a segédprogram-illesztőprogram képességét, amely hozzáadja az nvidia-smi eszközt a tárolóhoz.
A képességek és egyéb konfigurációk a környezeti változókon keresztül állíthatók be a képeken. Az érvényes változókról további információt az nvidia-container-runtime GitHub oldalon talál. Ezek a változók beállíthatók egy Dockerfile-ban.
CUDA képeket is felhasználhat, amelyek automatikusan beállítják ezeket a változókat. További információt a CUDA images GitHub oldalon talál.
- Az inzulinrezisztencia kezelésének lehetőségei
- Az acanthosis Nigricans kezelésének lehetőségei
- Lehetőségek a karcsúbb arcra - Buccal Fat vs Jaw Line Contouring Dr
- Feliratkozási lehetőségek - fogyás források
- Sebészeti és sebészeti lehetőségek a nyújtófák számára