ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Linux] cgroup cpu.max 설정 알아보기
    System 2024. 6. 20. 07:23
    반응형

    - 목차

     

    들어가며.

    이번 글에서는 Docker 와 Container 가상화 기술의 근간이 되는 cgroup 과 cpu.max 설정에 대해서 알아보도록 하겠습니다.

    cgroupControl Group 의 약자로 리눅스 커널에서 프로세스들의 리소스 사용을 제한, 추적, 관리하는 기능을 제공합니다.

    cgroup 을 사용하면 시스템의 CPU, 메모리, I/O 등을 프로세스 그룹 단위로 제한할 수 있으며, 이를 통해 서버 리소스를 효율적으로 분배하고 과도한 리소스 소비를 방지할 수 있습니다.

     

    cgroup은 기본적으로 cgroup v1cgroup v2 두 가지 버전으로 나뉩니다.

    cgroup v2는 구조가 단순하고 더 강력한 기능을 제공하는 방식으로 최신 리눅스 배포판에서 기본적으로 사용됩니다.

     

    /sys/fs/cgroup 디렉토리에 대해서.

    일반적으로 Linux 에서 mount 명령어를 실행하게 되면 아래와 같은 결과가 출력됩니다.

    mount 명령어는 특정 파일 시스템과 파일 시스템이 마운트된 디렉토리의 위치를 확인할 수 있는 명령어입니다.

    Linux 는 cgroup 을 제어하기 위해서 "cgroup2" 라는 이름의 파일시스템이 제공됩니다.

    그리고 cgroup2 파일시스템은 /sys/fs/cgroup 디렉토리에 마운트됩니다.

     

    cgroup on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime)

     

    그래서 cgroup 과 관련된 정보 및 파일들은 /sys/fs/cgroup 하위에서 확인할 수 있습니다.

    이번 글의 주제인 cpu.max 설정 또한 /sys/fs/cgroup/cpu.max 파일을 통해서 설정됩니다.

     

    cgroup.procs

    cgroup.procs 는 /sys/fs/cgroup 디렉토리 하위에 위치하는 파일입니다.

    cgroup.procs 는 현재 실행 중인 Process 의 id 들이 기록됩니다.

     

    일반적으로 아래와 같이 명령어가 사용되고, cgroup.procs 파일은 PID 를 저장하고 있습니다.

    아래의 케이스는 1, 415, 456, 466, 517 인 5개의 Process 가 실행 중이며, 이 Process 들이 cgroup 의 제어를 받습니다.

     

    cat /sys/fs/cgroup/cgroup.procs
    1
    415
    456
    466
    517

     

    일반적으로 단일 cgroup 이 존재합니다.

    그래서 생성되는 모든 Process 들은 Root cgroup 의 제어를 받게 됩니다.

     

    cpu.max 파일이란 ?

    cpu.max 파일은 cgroup v2 에서 CPU 리소스를 관리하는 중요한 파일입니다.

    이 파일을 통해 특정 cgroup 에 대해 CPU 시간의 최대 사용량을 제한할 수 있습니다.

    즉, cpu.max 는 주어진 시간 동안 cgroup 이 사용할 수 있는 최대 CPU 시간을 설정합니다.

    기본적으로 cpu.max 는 아래와 같이 max 100000 로 설정되어 있습니다.

    이 설정의 의미는 모든 CPU 를 100% 사용함을 의미합니다.

     

    cat /sys/fs/cgroup/cpu.max
    >> max 100000

     

    cpu.max 의 파일 형식은 아래와 같습니다.

     

    <max CPU time> <period>

     

     

    • max CPU time: cgroup 이 사용할 수 있는 최대 CPU 시간. 이 값은 마이크로초 단위로 설정됩니다.
    • period: 이 시간 내에서 CPU 사용을 제한할 주기. 보통 100ms(100,000 microseconds)로 설정되며, 기본적으로 100ms 주기가 적용됩니다.

    만약 cpu.max 가 50000 100000 로 설정된다면 50% 만큼의 CPU 를 사용할 수 있게 됩니다.

     

     

    cpu.max 제어해보기.

    아래의 명령어를 통해서 cpu.max 를 설정할 수 있습니다.

     

    echo "50000 100000" > /sys/fs/cgroup/cpu.max

     

     

     

    그리고 아래의 명령어를 통해서 Stress Test 를 수행합니다.

     

    start_time=$(date +%s); 
    for i in {1..10000000}; do :; done; 
    end_time=$(date +%s); 
    execution_time=$((end_time - start_time)); 
    echo "Execution Time: ${execution_time} seconds"

     

    이 경우에 위 명령어를 실행한 415 Process 는 최대 50% CPU 만을 사용할 수 있습니다.

     

     PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
      415 root      20   0 2816276   2.7g   2544 R  50.3   8.6   1:19.61 bash
        1 root      20   0    3884   2952   2568 S   0.0   0.0   0:00.36 bash
      456 root      20   0 2816276   2.7g   2584 S   0.0   8.6   0:29.48 bash
      466 root      20   0    3752   2972   2588 S   0.0   0.0   0:00.01 bash
      526 root      20   0    5720   2572   2188 R   0.0   0.0   0:00.00 top

     

    cpu.max 25000 100000

     

    또한 CPU 사용량을 25000 으로 변경하게 되면, 최대 CPU 사용량은 25% 로 낮아집니다.

     

    echo "25000 100000" > /sys/fs/cgroup/cpu.max

     

     

     

    cpu.max 25000 100000 & 2개의 Process

    그리고 cpu.max 의 설정값이 25000, 100000 인 상태에서 2개의 Process 가 실행되면,

    아래와 같이 각 Process 는 12.5% 의 CPU 를 사용할 수 있습니다.

     

     

     

    반응형
Designed by Tistory.