実行時間を安定させる
yosupo06 opened this issue · 0 comments
yosupo06 commented
(そもそもGCEで動いているし限界はあるんだけど…)実行時間のブレを減らせると嬉しそう
とりあえずコンテナがCPUをできる限り専有できると良さそう
調べた限り
- nice値をいい感じにする
- isolcpusを使う
- cgroupを巧みに扱う
という選択肢が見つかった とりあえずcgroupについて調べた、以下のように動きそう?
環境: 2023/01/24時点のGCEのubuntu 22.04のデフォルトイメージ cgroup v2を使っている
- 新しくcgroupを作り、
cpuset.cpus.partition
を設定する
mkdir /sys/fs/cgroup/test.slice/
echo '0,1' > /sys/fs/cgroup/test.slice/cpuset.cpus
echo 'root' > /sys/fs/cgroup/test.slice/cpuset.cpus.partition
どうやらrootよりisolatedのほうが良さそうっぽいが、まだ使えなそう https://lore.kernel.org/linux-rt-users/20211112163707.GA315388@lothringen/T/
この設定をした時点で、test.sliceがcpu 0,1 (= physical core 0)を専有、兄弟のcgroup (= すべてのプロセス)がcpu 0,1以外を使えなくなる という認識
- dockerのコンテナをこのcgroup以下につくる
stress --cpu 3 --timeout 1m # cpu 2,3のみを使う
docker run --rm -it --cgroup-parent=test.slice makocchi/alpine-stress --cpu 3 --timeout 1m # cpu 0,1のみを使う
なお--cpuset=0,1
を引数に足すとdocker: Error response from daemon: Requested CPUs are not available - requested 0,1, available: 2-3
と怒られる ワンチャンdockerのバグかも