13.2. CPU マネージャーの設定
CPU マネージャーを設定するには、以下を実行します。
オプションで、ノードにラベルを指定します。
oc label node perf-node.example.com cpumanager=true
# oc label node perf-node.example.com cpumanager=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ターゲットノードで CPU マネージャーのサポートを有効にします。
oc edit configmap <name> -n openshift-node
# oc edit configmap <name> -n openshift-node
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例を以下に示します。
oc edit cm node-config-compute -n openshift-node
# oc edit cm node-config-compute -n openshift-node
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow systemctl restart atomic-openshift-node
# systemctl restart atomic-openshift-node
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
system-reserved
は必須の設定です。この値は、環境に合わせて調整する必要がある場合があります。
コア 1 つまたは複数を要求する Pod を作成します。制限および要求の CPU の値は整数にする必要があります。これは、対象の Pod 専用のコア数です。
cat cpumanager.yaml
# cat cpumanager.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pod を作成します。
oc create -f cpumanager.yaml
# oc create -f cpumanager.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pod がラベル指定されたノードにスケジュールされていることを確認します。
oc describe pod cpumanager
# oc describe pod cpumanager
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cgroups
が正しく設定されていることを確認します。一時停止プロセスの PID を取得します。systemd-cgls -l
# systemd-cgls -l
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
├─1 /usr/lib/systemd/systemd --system --deserialize 20 ├─kubepods.slice │ ├─kubepods-pod0ec1ab8b_e1c4_11e7_bb22_027b30990a24.slice │ │ ├─docker-b24e29bc4021064057f941dc5f3538595c317d294f2c8e448b5e61a29c026d1c.scope │ │ │ └─44216 /pause
├─1 /usr/lib/systemd/systemd --system --deserialize 20 ├─kubepods.slice │ ├─kubepods-pod0ec1ab8b_e1c4_11e7_bb22_027b30990a24.slice │ │ ├─docker-b24e29bc4021064057f941dc5f3538595c317d294f2c8e448b5e61a29c026d1c.scope │ │ │ └─44216 /pause
Copy to Clipboard Copied! Toggle word wrap Toggle overflow QoS 階層
Guaranteed
の Pod は、kubepods.slice
に配置されます。他の QoS の Pod は、kubepods
の子であるcgroups
に配置されます。cd /sys/fs/cgroup/cpuset/kubepods.slice/kubepods-pod0ec1ab8b_e1c4_11e7_bb22_027b30990a24.slice/docker-b24e29bc4021064057f941dc5f3538595c317d294f2c8e448b5e61a29c026d1c.scope for i in `ls cpuset.cpus tasks` ; do echo -n "$i "; cat $i ; done
# cd /sys/fs/cgroup/cpuset/kubepods.slice/kubepods-pod0ec1ab8b_e1c4_11e7_bb22_027b30990a24.slice/docker-b24e29bc4021064057f941dc5f3538595c317d294f2c8e448b5e61a29c026d1c.scope # for i in `ls cpuset.cpus tasks` ; do echo -n "$i "; cat $i ; done
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
cpuset.cpus 2 tasks 44216
cpuset.cpus 2 tasks 44216
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 対象のタスクで許可される CPU 一覧を確認します。
grep ^Cpus_allowed_list /proc/44216/status
# grep ^Cpus_allowed_list /proc/44216/status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Cpus_allowed_list: 2
Cpus_allowed_list: 2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow システム上の別の Pod (この場合は
burstable
QoS 階層にある Pod) が、Guaranteed
Pod に割り当てられたコアで実行できないことを確認します。cat /sys/fs/cgroup/cpuset/kubepods.slice/kubepods-burstable.slice/kubepods-burstable-podbe76ff22_dead_11e7_b99e_027b30990a24.slice/docker-da621bea7569704fc39f84385a179923309ab9d832f6360cccbff102e73f9557.scope/cpuset.cpus 0-1,3
# cat /sys/fs/cgroup/cpuset/kubepods.slice/kubepods-burstable.slice/kubepods-burstable-podbe76ff22_dead_11e7_b99e_027b30990a24.slice/docker-da621bea7569704fc39f84385a179923309ab9d832f6360cccbff102e73f9557.scope/cpuset.cpus 0-1,3
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc describe node perf-node.example.com
# oc describe node perf-node.example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この仮想マシンには、CPU コアが 4 基あります。
system-reserved
は 500 ミリコアに設定して、Node Allocatable
の数になるようにノードの全容量からコアの半分を引きます。Allocatable CPU
が 3500 ミリコアであることを確認できます。これは、それぞれがコアを 1 つ受け入れるので、CPU マネージャー Pod の内 3 つを実行できるという意味になります。1 つのコア全体は 1000 ミリコアに相当します。4 つ目の Pod をスケジュールしようとすると、システムは Pod を受け入れますが、スケジュールはされません。
oc get pods --all-namespaces |grep test
# oc get pods --all-namespaces |grep test
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
test cpumanager-4gdtn 1/1 Running 0 8m test cpumanager-hczts 1/1 Running 0 8m test cpumanager-nb9d5 0/1 Pending 0 8m test cpumanager-r9wrq 1/1 Running 0 8m
test cpumanager-4gdtn 1/1 Running 0 8m test cpumanager-hczts 1/1 Running 0 8m test cpumanager-nb9d5 0/1 Pending 0 8m test cpumanager-r9wrq 1/1 Running 0 8m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow