TenForward

技術ブログ。はてなダイアリーから移転しました

cgroup ハマり道

cgroup での,知ってる人からすると当たり前かも知れないハマりポイント.

/etc/fstab で

cgroup  /cgroup  cgroup  defaults 0  0

とかやって,デフォルトでマウントしたりして,cgroup ファイルシステム上にグループを作って,そこに pid を登録しようとすると "write error: No space left on device" とか怒られたりすることがあります.

# mkdir /cgroup/test
# echo $$ > /cgroup/test/tasks

普通の操作です.

オンラインマニュアルの cpuset(7) にヒントがあります.

ENOSPC Attempted to write(2) the process ID (PID) of a
process to a cpuset tasks file when the cpuset had
an empty cpus or empty mems setting.

ENOSPC Attempted to write(2) an empty cpus or mems setting
to a cpuset that has tasks attached.

つまり

  • そもそも cpuset サブシステムを使わない.
  • グループ内の cpuset.mems と cpuset.cpus に適切な値を設定してから tasks を登録する.とりあえず何をしたら良いか分からない場合は,親グループと同じ値を書いておけば良いでしょう.
    # echo "0-1" > cpuset.cpus
    # echo 0 > cpuset.mems

のどちらかで解決.

この後 "echo $$ > /cgroup/test/tasks" とかやるとちゃんと書き込めます.