[Linux]cgroup 활용하여 cpu 활용량 제어하기 | dasfef

2023.11.20

개인 기록용 입니다 :) 오타, 수정 등 피드백 환영

AWS에 서버를 여는 과정(EC2)은 조금만 검색해도 많은 정보가 있어 생략토록 한다. SSH 접속 클라이언트는 다양하게 있는데 회사에서 putty를 활용해 보았다면 이번엔 vscode를 활용해보자. SSH 연결 vscode의 extension에 remote 혹은 ssh를 검색하면 [ Remote - SSH ] 라는 이름으로 Microsoft가 배포하는 extension이 존재한다. 해당 extension을 설치하면 vscode 좌측 메뉴에 새로운 메뉴가 생긴다. 그리고 해당 메뉴로 들어가보면 그림과 달리 alias 밖에 없을텐데 EC2를 생성하며 받은 키페어(.pem 파일)을 연동하여 ssh 접속을 연동해주는 것이다. 각 OS에는 SSH키 파일을 관리하는 공간이 있는것인지 모르겠으나 MacOS 에서는 '/Users/사용자명' 경로에 .ssh 폴더가 숨겨져 있다(Shift + Command + . 으로 볼 수 있음) 해당 폴더로 들어가서 본인이 AWS EC2를 개설하면서 받은 pem 파일에 대해 설정을 해주는데, config 파일을 열어 수정하면 된다. Host Name 에는 개설하면서 받은 퍼블릭 IPv4 주소 User 에는 인스턴스의 플랫폼 IdentifyFile 에는 본인의 pem 키 파일 경로를 넣어주면 된다. SSH로 서버 접속 SSH로 접속을 하기 위해선 config 에서 설정을 마치고 1) vscode Remote Explorer 에서 새로고침 2) 터미널을 통해 ssh 접속 명령 ① ssh 키 파일 있는 곳으로 경로 이동 ② pem 파일 확인 ③ ssh "플랫폼명"@"public ipv4 주소" -i "pem 파일명" 등의 방법이 있다. cgroup 활용하기 1) 방법을 활용했다면 vscode 에서 2) 방법을 활용했다면 터미널에서 이어서 진행할 수 있다 본인은 vscode 내에서 새로운 터미널을 열어 진행하였다. vscode에서 remote 연결을 해준 뒤 새로운 터미널을 열어보면 아래 그림과 같이 나온다. root 계정으로 접속한 뒤 다음 경로로 들어가본다. /sys/fs/cgroup/cpu 해당 경로에서 새로운 폴더를 만들어 하나의 프로세스를 생성해준다. 필자는 해당 경로에서 utils라는 폴더를 만들었고 utils 경로로 들어가 ls를 해보았더니 저절로 위와 같은 파일들이 생성되어 있는 것을 확인할 수 있다. 위 파일 중 cfs(Completely Fair Scheduler) 중 period, quota 에 대해서 알면 현재 위치하고 있는 프로세스에 대해서 얼마정도의 cpu를 점유할 것인지 제어할 수 있다. period 는 기본 100ms 의 길이를 가지고 있고, quota 를 활용해 프로세스의 전체 100ms 중 어느 길이만큼 활용할 수 있게 하는가를 제어할 수 있다. 우선 이해하기 어려우니 cat을 활용해 각각 무슨 값을 가지고 있는지 살펴보자. [ cpu.cfs_period_us ] [ cpu.cfs_quota_us ] 기본적으로 quota는 -1 값을 가지고 있어 제한이 없다. 각각의 값은 us 라는 이름으로 파악되듯이 micro seconds 값으로 표기되어 있고, 100000us = 100ms 이다. 해당 프로세스 경로 내에서 stress 를 활용해 cpu 가동을 높이고 (stress 가 없다면 sudo apt install -y stress 로 설치) 새로운 터미널을 열어 top 로 cpu 가동율을 확인해보면, cpu 가동율이 마구 치솟는 걸 확인할 수 있다. 다시 해당 프로세스에서 quota 값을 원하는 값으로 지정하면 ex: 10000us = 10ms = 10% 위와 같이 원하는 프로세스의 cpu 최대 가동률을 10%로 제한하는 것을 확인할 수 있다.