![컨테이너에 "표시되는" CPU와 메모리를 설정하는 방법은 무엇입니까?](https://linux55.com/image/171640/%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EC%97%90%20%22%ED%91%9C%EC%8B%9C%EB%90%98%EB%8A%94%22%20CPU%EC%99%80%20%EB%A9%94%EB%AA%A8%EB%A6%AC%EB%A5%BC%20%EC%84%A4%EC%A0%95%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
다음과 같이 C 언어로 간단한 컨테이너를 작성했습니다.이 기사(제휴되지 않음) 훌륭하게 작동합니다. 컨테이너는 마운트, UTS, IPC, PID 및 cgroup 네임스페이스를 분리합니다(clone(2)를 통해).
아직 파악하지 못한 한 가지: 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
여전히 호스트의 전체 메모리 양(예: 4GB)을 표시합니다.
마찬가지로 하위 프로세스를 새 CPU 하위 그룹에 넣고 CPU 사용량을 제한할 수 있지만 htop
호스트의 총 CPU(및 해당 로드)를 표시할 수 있습니다.
컨테이너의 "표시되는" 메모리 양과 CPU 선호도를 어떻게 제한해야 합니까? Docker와 LXC 모두 이 점에서 좋은 역할을 하는 것 같습니다.