목차

  1. Linux cgroups에 대해 알아보자 1
  2. Linux cgroups에 대해 알아보자 2

지난 포스트에서 cgroups이 어떤 것이고 기본적으로 어떻게 사용하면 되는지 알아보았습니다. 이번 글에서는 실제로 어떻게 적용할 수 있는지 알아보도록 하겠습니다.


systemd

cgroups는 기본적으로 systemd에 적용할 수 있습니다. 하지만 제가 필요했던 제한은 유저에게 가해지는 제한이었기 때문에 systemd 유닛에 제한을 가하는 방법은 사용해보지 않았습니다. 자세한 방법은 redhat 7의 관련 문서 혹은 아래의 reference에서 redhat7 부분을 참고하시면 좋을 듯합니다.


libcgroup

이 친구는 따로 설치를 해줘야 합니다. OS에 맞게 설치를 진행하시면 됩니다. 저의 경우

  • centos: yum install libcgroup libcgroup-tools
  • ubuntu: apt-get install cgroup-bin cgroup-lite libcgroup1

로 설치했습니다. libcgroup은 다양한 기능이 있지만 이번에 살펴볼 것은 cgconfig.conf 작성법입니다. 이 파일은 /etc/cgconfig.conf에 있으며 이 파일을 보고 libcgroup이 cgroup을 생성하는 방식입니다. 파일 작성법은 다음과 같습니다.

<controller>부분은 subsystem을 적어주면 됩니다. RHEL 7 기준 default subsystem들은 이미 /sys/fs/cgroup/<controller_name>에 마운트 되어 있습니다. 따라서 맨 윗 블록인 mount블록은 작성을 하지 않아도 됩니다.
perm부분은 name이라는 cgroup의 권한을 설정하는 부분입니다. 생략해도 상관없으며 task에 있는 유저들은 task를 추가, 삭제할 수 있고 admin에 있는 유저들은 cgroup설정을 변경 가능합니다.
마지막으로 원하는 subsystem을 적어준 뒤 이곳에 있는 subsystem들의 parameter를 원하는 것만 설정해주면 됩니다.
마지막으로 수정 후에는 cgconfig service를 재시작 해야 합니다.(systemctl restart <서비스 이름="">). 서비스 이름은 OS별로 다를 수 있습니다. 실제 예시는 다음과 같습니다.


cgred

cgred는 만들어진 제한 정책을 유저, 혹은 유저그룹단위로 적용할 수 있게 합니다. 즉, 특정 유저그룹의 모든 혹은 특정 프로세스를 원하는 cgroup에 속하도록 하는 것입니다. /etc/cgrules.conf에 configure파일을 작성해주면 됩니다.

앞에서부터 user / subsystems / cgroup 순으로 작성하면 되고 매칭은 맨 윗줄부터 매칭해서 할당됩니다. user자리의 경우 앞에 @가 붙으면 user group이 됩니다. subsystem에서 *의 경우 모든 subsystem을 의미합니다. %는 윗 줄의 item과 똑같다를 의미합니다. 마찬가지로 수정 후 cgred service를 재시작해야 합니다.


Reference