2014-09-16 1 views
1

일부 cgroups 관리 서비스가 있습니다 (실제로 도커에서 실행 중입니다). 리소스 요구 사항이 많은 작업을 공정하게 계획하기 위해 컨테이너 화 된 서비스는 정확한 (가능한 한) 리소스 사용을 알아야합니다. cgroup에서이 메트릭을 읽기로 결정했습니다.마운트하지 않고 cgroups 데이터 읽기

하지만 문제가 있습니다. 도커 컨테이너에서 cgroup 데이터에 액세스하는 두 가지 방법을 알고있었습니다.

  1. 컨테이너 내부에서 직접 cgroup을 마운트하십시오. 이를 위해 컨테이너에 CAP_SYS_ADMIN 기능을 제공해야합니다. 나는 이것이 리소스 사용량 메트릭을 읽는 것만으로도 힘든 방법이라고 생각한다.

  2. 호스트 cgroups mountpoint를 가리키는 도커 볼륨을 사용하십시오. 이 솔루션은 다소 적절하지만, 나는 좀 더 우아한 방법을 찾는다.

나는 "커널 - 사람"이 아니며 커널 소스 및 문서에 익숙하지 않으므로 noob의 질문을 할 수 있습니다.

cgroups 파일 시스템을 마운트하지 않고도 cgroups 메트릭을 읽을 수있는 커널 인터페이스가 있습니까?

+1

사용자 공간에서 얻을 수있는 유일한 인터페이스는 cgroup을 마운트하거나 '/ proc//cgourp /'(프로세스가 속한 cgroup으로 제한됨)에서 마운트하는 것입니다. cgroups 데이터를 읽는 시스템 콜을 찾고 있다면 사용할 수없는 IMU입니다. Docker는 cgroups 서비스 (cgconfig, cgred 등)가 실행 중이어야하므로 cgroup을 마운트해야합니다. – askb

+0

나는 docker 메일 링리스트에서이 질문을했다. 그들은 나를 https://groups.google.com/d/msg/docker-user/0l6qyYTKXnI/UREl7tFDgr0J로 안내합니다. 이것은 질문에서 내 두 번째 옵션입니다. 내 생각에, 귀하의 의견은 상당히 포괄적 인 내용이므로 답변으로 받아 드리고 싶습니다. –

+0

답변이 아니라 주석이 추가됩니다. – askb

답변

2

사용자 공간에서 얻을 수있는 유일한 인터페이스는 cgroup을 마운트하거나 /proc/<pid>/cgourps (프로세스가 속한 cgroup으로 만 제한됨)입니다. cgroups 데이터를 읽는 syscall()을 찾고 있다면 사용할 수없는 IMU입니다. Docker는 cgroups 서비스 (cgconfig, cgred 등)가 실행 중이어야하므로 cgroup을 마운트해야합니다.

관련 문제