hwwwi
휘블로그
hwwwi
전체 방문자
오늘
어제
  • CATEGORIES (13)
    • 일상 (5)
      • ICT학점연계 인턴십 (5)
    • 개발 (8)
      • Tech (1)
      • Linux (6)
      • golang (0)
      • 디자인패턴 (1)

인기 글

최근 글

최근 댓글

태그

  • ICT인턴십
  • IOT
  • Linux
  • MQTT
  • ubuntu
  • 디자인패턴
  • 인턴
  • 해외인턴십

티스토리

블로그 메뉴

  • 홈
  • 태그
hELLO · Designed By 정상우.
hwwwi

휘블로그

개발/Linux

cgroups

2018. 2. 19. 21:10

 

"cgroups"

Control groups의 약자로

프로세스들이 사용할 수 있는 컴퓨팅 자원들을 제한하고 격리시킬 수 있는

 리눅스 커널의 막강한 기능이다. 

 

지난번 포스팅에서 작성한 namespace와 함께

컨테이너 기술의 기반이 되는 중요한 기능이다.

 

cgroups를 이용하게 되면 다음의 자원들을 제한 할 수 있다.

Memory

CPU

Network

Device

I/O

 

 

cgroups를 관리하는 방법에는 여러가지가 있다.

cgroup 파일 시스템에 직접 접근

cgmanager 이용

cgroup-tools 이용

이번 포스팅에서는  

cgroup-tools을 이용해서 간단한 실습을 해보겠다.

 

먼저 cgroup-tools를 패키지 관리자를 이용하여 설치를 하면,

cgcreate와 cgdelete등의 명령어나 cgconfig.conf와 cgrules.conf 파일을 이용한

관리가 가능해진다.

 

1. cgroups생성 (CPU 제한용)

hwi@testcom:~$ sudo cgcreate -a hwi -g cpu:mycgroup hwi@testcom:~$ ls -al /sys/fs/cgroup/cpu/ | grep mycgroup drwxr-xr-x  2 hwi  root   0  2월 19 20:08 mycgroup 

 

 

mycgroup이라는 cpu를 제한 할 수 있는

cgroup을 생성하였다. 
추가로, a옵션을 이용하여 hwi라는 사용자가 소유하도록 하였다.

cgroup을 생성하게 되면 ,

/sys/fs/cgroup 디렉토리 내부에 제한하는 자원에 따라 

각자의 디렉토리 내부에 새로 디렉토리가 생성되는 것을 확인할 수 있다.

 

2. CPU 제한하기

hwi@testcom:~$ stress -c 1 stress: info: [13503] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd  hwi@testcom:~$ top   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                  13504 hwi       20   0    7476     92      0 R  100  0.0   0:18.68 stress  

 

CPU제한 차이를 확인하기 위해서 

stress 명령어를 이용하여 과부하를 시켜보았다. 
CPU를 100%까지 사용하는 것을 확인할 수 있다.

hwi@testcom:~$ sudo cgset -r cpu.cfs_quota_us=30000 mycgroup hwi@testcom:~$ sudo cgexec -g cpu:mycgroup stress -c 1 stress: info: [14028] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd  hwi@testcom:~$ top   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                  14029 root      20   0    7476     92      0 R  29.9  0.0   0:22.70 stress  

 

/sys/fs/cgroup/cpu/mycgroup 내부의 파일들을 수정해서 

제한하는 정도를 쉽게 수정할 수 있지만.

cgset 명령어를 이용해서도 간편하게 제한할 수 있다.

 

cgset명령어를 이용하여 CPU사용량을 30%로 제한하고

cgexec 명령어를 통해서 mycgroup환경에서 다시 stress 명령어를 실행하였다.

 CPU를 30%만 사용하고 있는 것을 확인할 수 있다.

 

3. cgroups 삭제

hwi@testcom:~$ sudo cgdelete cpu:mycgroup hwi@testcom:~$ ls -al /sys/fs/cgroup/cpu/ | grep mycgroup hwi@testcom:~$ 

 

만들었던 cgroups는 직접 디렉토리를 삭제해도 되고

cgdelete명령어를 통해서 쉽게 삭제할 수 있다.

 

 

이번 포스팅에서는 간단하게 CPU만을 제한했지만

여러 자원을 동시에 제한하거나, 

cgget등의 명령어를 이용하여 여러가지 응용이 가능하다. 

 

참고로, nice나 cpulimit을 이용한 CPU제한은

하나의 프로세스에 대해서만 제한 할 수 있지만, 
cgroups을 사용하면 프로세스를 그룹지어 제한할 수 있다 .

그리고,

nice와 cpulimit은 CPU사용량만을 제한할 수 있지만

cgroups을 사용하면 cpushare속성을 조절하여 

다른 프로세스의 자원을 제한할 수도 있다.

(더 디테일한 제한이 가능하다는 것!)

'개발 > Linux' 카테고리의 다른 글

우분투 블루투스 스피커 설정  (0) 2018.09.09
[Linux] 리눅스 복사&붙여넣기  (2) 2018.03.06
APT 403에러  (0) 2018.03.06
Route table  (0) 2018.02.20
Linux namespace  (0) 2018.02.17
    '개발/Linux' 카테고리의 다른 글
    • [Linux] 리눅스 복사&붙여넣기
    • APT 403에러
    • Route table
    • Linux namespace
    hwwwi
    hwwwi
    휘뚜루마뚜루 개발하기

    티스토리툴바