Docker CPU 資源限制——CPU固定核功能測試

振宇要低調發表於2015-12-20

    Docker使用Linux cgroup來實現資源的限制,對於CPU的限制有兩種方法:

1.cpuset

    CPU Set限定容器使用某個固定的CPU核。使用預設的libcontainer引擎時,可以通過--cpuset來指定程式/docker容器在執行時使用某幾個固定的CPU。比如0-3或以逗號分割如0,3,4(0是第一個CPU)。

 

2.cpu.shares
    CPU shares是相對權重, 設定為一個正整數,代表所分配的相對CPU資源比。在Docker中,使用預設的libcontainer引擎時,可以指定在docker run時指定-c或--cpu-shares=0。當DockerDaemon中增加新的容器時,CPU shares的權重相應減小,當刪除容器時CPU shares的權重相應增加。

    由於第二種方式理解上有些繞,且容器真正分到的CPU資源會隨著容器數及其他容器權重而改變,個人建議並不太適合應用到生產場景中。本文主要分析第一種方式,即cpuset。

 

測試步驟

    1、下載CPU測試image。agileek/cpuset-test給出了一種用於測試CPU的image,功能就是將指定的CPU資源用滿

$ docker pull agileek/cpuset-test

    2、測試容器佔用單獨CPU

$ docker run -it --rm --cpuset=4 agileek/cpuset-test

    3、另開終端視窗,觀察CPU佔用情況

[root@zhenyunode ~]# mpstat -P ALL 5 10
Linux 3.10.0-123.el7.x86_64 (zhenyunode)     2015年12月20日     _x86_64_    (8 CPU)

21時25分17秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
21時25分22秒  all   12.68    0.00    0.05    0.00    0.00    0.00    0.00    0.00    0.00   87.27
21時25分22秒    0    0.40    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.60
21時25分22秒    1    0.40    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.60
21時25分22秒    2    0.20    0.00    0.20    0.00    0.00    0.00    0.00    0.00    0.00   99.60
21時25分22秒    3    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
21時25分22秒    4  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
21時25分22秒    5    0.20    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.80
21時25分22秒    6    0.40    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.60
21時25分22秒    7    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

    4、測試容器佔用多個CPU

$ docker run -it --rm --cpuset=0,2,4,5 agileek/cpuset-test /cpus 4

    5、另開終端視窗,觀察CPU佔用情況

[root@zhenyunode ~]# mpstat -P ALL 5 10
Linux 3.10.0-123.el7.x86_64 (zhenyunode)     2015年12月20日     _x86_64_    (8 CPU)

21時26分34秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
21時26分39秒  all   50.24    0.00    0.05    0.00    0.00    0.00    0.00    0.00    0.00   49.71
21時26分39秒    0  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
21時26分39秒    1    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
21時26分39秒    2  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
21時26分39秒    3    0.40    0.00    0.20    0.00    0.00    0.00    0.00    0.00    0.00   99.40
21時26分39秒    4  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
21時26分39秒    5  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
21時26分39秒    6    0.60    0.00    0.20    0.00    0.00    0.00    0.00    0.00    0.00   99.20
21時26分39秒    7    0.40    0.00    0.20    0.00    0.00    0.00    0.00    0.00    0.00   99.40

 

    經過以上的測試步驟,可以看到,當為容器配置某個CPU時,該CPU被佔滿,但其餘的CPU並沒有受到影響。

 

相關文章