コンテナに「表示される」CPUとメモリを設定する方法は?

コンテナに「表示される」CPUとメモリを設定する方法は?

次のようにC言語で単純なコンテナを作成しました。この記事(アフィリエイトされていません)素晴らしい動作します。コンテナは、マウント、UTS、IPC、PID、および cgroup 名前空間を分離します (clone(2) 経由)。

まだ理解していない1つ:htopおよび同様のユーティリティに示されているように、コンテナの「表示されるCPUとメモリ」を制限したいと思います。現在の実装では、次の擬似コードに示すように、子(新しいPID名前空間のPID 1)を新しいcgroupに移動します。

pid_t pid = fork();
# Child goes other stuff
mkdir /sys/fs/cgroup/memory/example
echo $pid > /sys/fs/cgroup/memory/example/cgroup.procs
echo 1073741824 > /sys/fs/cgroup/memory/example/memory.limit_in_bytes  # 1 GiB

これで、子プロセスが1GiB以上のメモリを割り当てようとすると、そのプロセスは終了します。これは予想される動作です。ただし、このユーティリティはhtopまだホストの合計メモリ量(4 GBなど)を表示します。

同様に、子プロセスを新しいCPUサブグループに入れてCPU使用率を制限できますが、htopホストの合計CPU(およびその負荷)を表示できます。

コンテナの「表示される」メモリ量とCPUの優先度をどのように制限する必要がありますか? DockerとLXCの両方がこの点で良い役割を果たしているようです。

関連情報