24.2. CPU 시간 배포를 위한 cgroup 준비
애플리케이션의 CPU 사용을 제어하려면 특정 CPU 컨트롤러를 활성화하고 전용 제어 그룹을 생성해야 합니다. cgroup 파일을 조직의 명확성을 유지하기 위해 /sys/fs/cgroup/ 루트 제어 그룹 내에 두 개 이상의 하위 제어 그룹을 생성하는 것이 좋습니다.
사전 요구 사항
- root 권한이 있습니다.
- 제어하려는 프로세스의 PID를 식별했습니다.
-
cgroups-v2파일 시스템을 마운트했습니다. 자세한 내용은 cgroups-v2 마운트 를 참조하십시오.
프로세스
CPU 사용을 제한하려는 애플리케이션의 PID(프로세스 ID)를 식별합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예제 출력에서는
PID 34578및34579(sha1sum의 2개의 예시 애플리케이션)에서 CPU라는 대량의 리소스를 사용한다는 것을 보여줍니다. 둘 다cgroups-v2기능 관리를 시연하는 데 사용되는 애플리케이션의 예입니다./sys/fs/cgroup/cgroup.controllers파일에서cpu및cpuset컨트롤러를 사용할 수 있는지 확인합니다.cat /sys/fs/cgroup/cgroup.controllers cpuset cpu io memory hugetlb pids rdma
# cat /sys/fs/cgroup/cgroup.controllers cpuset cpu io memory hugetlb pids rdmaCopy to Clipboard Copied! Toggle word wrap Toggle overflow CPU 관련 컨트롤러를 활성화합니다.
echo "+cpu" >> /sys/fs/cgroup/cgroup.subtree_control echo "+cpuset" >> /sys/fs/cgroup/cgroup.subtree_control
# echo "+cpu" >> /sys/fs/cgroup/cgroup.subtree_control # echo "+cpuset" >> /sys/fs/cgroup/cgroup.subtree_controlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이러한 명령은
/sys/fs/cgroup/root 제어 그룹의 즉시 하위 그룹에 대해cpu및cpuset컨트롤러를 활성화합니다. 하위 그룹은 기준을 기반으로 프로세스를 지정하고 각 프로세스에 제어 검사를 적용할 수 있는 위치입니다.모든 수준에서
cgroup.subtree_control파일을 검토하여 즉시 하위 그룹에서 활성화할 수 있는 컨트롤러를 식별할 수 있습니다.참고기본적으로 루트 제어 그룹의
/sys/fs/cgroup/cgroup.subtree_control파일에는메모리및pids컨트롤러가 포함되어 있습니다./sys/fs/cgroup/Example/디렉터리를 생성합니다.mkdir /sys/fs/cgroup/Example/
# mkdir /sys/fs/cgroup/Example/Copy to Clipboard Copied! Toggle word wrap Toggle overflow /sys/fs/cgroup/Example/디렉터리는 하위 그룹을 정의합니다. 또한 이전 단계에서 이 하위 그룹에 대해cpu및cpuset컨트롤러를 활성화했습니다./sys/fs/cgroup/Example/디렉터리를 생성하면 일부cgroups-v2인터페이스 파일과cpu및cpuset컨트롤러별 파일이 디렉터리에 자동으로 생성됩니다./sys/fs/cgroup/Example/디렉터리는메모리및pids컨트롤러에 대한 컨트롤러별 파일도 제공합니다.선택 사항: 새로 생성된 하위 제어 그룹을 검사합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예제 출력에는
cpuset.cpus및cpu.max와 같은 파일이 표시되어 있습니다. 이러한 파일은cpuset및cpu컨트롤러에 따라 다릅니다.cpuset및cpu컨트롤러는 /sys/fs/cgroup/cgroup_ control 파일을 사용하여 루트(/sys/fs/cgroup/cgroup/cgroup/cgroup/cgroup/cgroup/cgroup/cgroup/cgroup/cgroup_control)에 대해 수동으로 활성화됩니다.디렉터리에는 활성화된 컨트롤러와 관계없이 모든 제어 그룹에 공통인
또는cgroup.procscgroup.controllers와 같은 일반 cgroup 제어 인터페이스 파일도 포함되어 있습니다.memory.high및pids.max와 같은 파일은 루트 제어 그룹(/sys/fs/cgroup/)에 있는메모리및pids컨트롤러와 관련이 있으며 항상 기본적으로 활성화됩니다.기본적으로 새로 생성된 하위 그룹은 제한 없이 모든 시스템의 CPU 및 메모리 리소스에 대한 액세스를 상속합니다.
/sys/fs/cgroup/Example/에서 CPU 관련 컨트롤러를 활성화하여 CPU와 관련된 컨트롤러를 가져옵니다.echo "+cpu" >> /sys/fs/cgroup/Example/cgroup.subtree_control echo "+cpuset" >> /sys/fs/cgroup/Example/cgroup.subtree_control
# echo "+cpu" >> /sys/fs/cgroup/Example/cgroup.subtree_control # echo "+cpuset" >> /sys/fs/cgroup/Example/cgroup.subtree_controlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이러한 명령을 사용하면 즉시 하위 제어 그룹에
메모리또는 pid 컨트롤러가 아닌 CPU 시간 분배를 규제하는 컨트롤러 만 사용할수있습니다./sys/fs/cgroup/Example/tasks/디렉터리를 생성합니다.mkdir /sys/fs/cgroup/Example/tasks/
# mkdir /sys/fs/cgroup/Example/tasks/Copy to Clipboard Copied! Toggle word wrap Toggle overflow /sys/fs/cgroup/Example/tasks/디렉터리는cpu및cpuset컨트롤러와 순전히 관련된 파일이 있는 하위 그룹을 정의합니다.선택 사항: 다른 하위 제어 그룹을 검사합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 동일한 CPU에서 CPU 시간을 제어하려는 프로세스가 경쟁해야 합니다.
echo "1" > /sys/fs/cgroup/Example/tasks/cpuset.cpus
# echo "1" > /sys/fs/cgroup/Example/tasks/cpuset.cpusCopy to Clipboard Copied! Toggle word wrap Toggle overflow 이렇게 하면
Example/tasks하위 제어 그룹에 배치한 프로세스가 동일한 CPU에서 경쟁하게 됩니다. 이 설정은cpu컨트롤러가 활성화되는 데 중요합니다.중요cpu컨트롤러는 관련 하위 제어 그룹에 단일 CPU에서 시간 동안 경쟁할 최소 2개의 프로세스가 있는 경우에만 활성화됩니다.
검증
선택 사항: 즉시 하위 cgroup에 대해 CPU 관련 컨트롤러가 활성화되어 있는지 확인합니다.
cat /sys/fs/cgroup/cgroup.subtree_control /sys/fs/cgroup/Example/cgroup.subtree_control cpuset cpu memory pids cpuset cpu
# cat /sys/fs/cgroup/cgroup.subtree_control /sys/fs/cgroup/Example/cgroup.subtree_control cpuset cpu memory pids cpuset cpuCopy to Clipboard Copied! Toggle word wrap Toggle overflow 선택 사항: 동일한 CPU에서 CPU 시간을 제어하려는 프로세스가 경쟁해야 합니다.
cat /sys/fs/cgroup/Example/tasks/cpuset.cpus 1
# cat /sys/fs/cgroup/Example/tasks/cpuset.cpus 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow