docker cpu是什么,讓我們一起了解一下?
當(dāng)我們?cè)谝慌_(tái)設(shè)備上運(yùn)行多個(gè)Docker時(shí),我們會(huì)對(duì)一個(gè)Docker容器的使用進(jìn)行限制,避免其使用過多的系統(tǒng)硬件資源,而造成其他的容器“餓死”的現(xiàn)象。在Docker的使用中,我們通過使用cgroup來對(duì)Docker的容器資源使用進(jìn)行限制。
Docker對(duì)容器CPU的限制可以分為三種,即相對(duì)份額限制、絕對(duì)使用限制以及CPU核心控制。
CPU相對(duì)份額限制:
所謂CPU相對(duì)份額限制,指的是給Docker的鏡像分配一個(gè)“份額”,使得當(dāng)CPU資源緊張時(shí),不同的Docker鏡像之間對(duì)CPU資源的競(jìng)爭(zhēng)大致上是按照這個(gè)份額的比例來進(jìn)行使用的。
CPU絕對(duì)使用限制:
不同與CPU的份額相對(duì)限制,Docker還支持一種“硬性”的對(duì)CPU資源的限制。我們都知道,現(xiàn)代操作系統(tǒng)為了保證多程序多任務(wù)的運(yùn)行,對(duì)CPU的使用采取了分片的策略,CPU在使用時(shí)會(huì)不斷的從一個(gè)任務(wù)切換到另一個(gè)任務(wù),每次獲得CPU資源的進(jìn)程實(shí)際上就是獲得了CPU的使用權(quán),或者說獲得了CPU分片。
CPU核心控制:
除了上述對(duì)CPU的使用限制外,現(xiàn)代的計(jì)算機(jī)一般是多核CPU,因此,我們有時(shí)還希望一個(gè)Docker容器能夠固定在一個(gè)CPU上運(yùn)行。這對(duì)于NUMA(即非一致存儲(chǔ)訪問結(jié)構(gòu))的服務(wù)器尤為有用,而對(duì)于簡(jiǎn)單的單核服務(wù)器則沒有任何作用。
在Docker容器運(yùn)行時(shí),我們可以使用參數(shù)–cpuset來綁定CPU,使得該Docker容器只在固定的CPU上運(yùn)行。
容器CPU設(shè)置
默認(rèn)設(shè)置下,所有容器可以平等地使用主機(jī) CPU 資源并且沒有限制。docker?可以通過-c或–cpu-shares設(shè)置容器使用 CPU 的權(quán)重。如果不指定,默認(rèn)值為 1024。
與內(nèi)存限額不同,通過-c設(shè)置的 cpu share 并不是 CPU 資源的絕對(duì)數(shù)量,而是一個(gè)相對(duì)的權(quán)重值。某個(gè)容器最終能分配到的 CPU 資源取決于它的 cpu share 占所有容器 cpu share 總和的比例。通過 cpu share 可以設(shè)置容器使用 CPU 的優(yōu)先級(jí)。
比如在 host 中啟動(dòng)了兩個(gè)容器:
docker?run?--name?"container_A"?-c?1024?ubuntu docker?run?--name?"container_B"?-c?512?ubuntu
container_A 的 cpu share 1024,是 container_B 的兩倍。當(dāng)兩個(gè)容器都需要 CPU 資源時(shí),container_A 可以得到的 CPU 是 container_B 的兩倍。
需要注意的是,這種按權(quán)重分配 CPU只會(huì)發(fā)生在 CPU資源緊張的情況下。如果 container_A 處于空閑狀態(tài),為了充分利用 CPU資源,container_B 也可以分配到全部可用的 CPU。
以上就是小編的分享,希望可以幫助到大家。