CGROUP은 커널의 기본 기능으로 시스템의 자원(CPU,MEMORY등)을 관리하고 할당하는 기능 임.
RHEL 7 버전까지는 CGROUP V1 버전.
RHEL 8은 CGROUP V1과 CGROUP V2 두가지 버전을 제공하고 있습니다.
RHEL 8의 기본사용은 CGROUP V1입니다.
RHEL 8은 CGROUP V1 이 기본으로 되어있으나, 향후 SYSTEMD의 버전이 241 버전 이상으로 업데이트될 경우 CGROUP V2를 기본으로 사용할 예정입니다.
RHEL 8 버전에서 CPU와 같은 자원을 사용자별 혹은 특정사용자에게 사용 제한을 두려고 할 경우에는
CGROUP V2을 기본으로 사용하게끔 설정을 바꾸어주고 몇가지의 설정이 이루어져야 합니다.
- 테스트 환경
실행 환경 : Vmware
O/S : RHEL 8.4
1. Grub 설정
grub2 부트파라미터 내용 추가후 Rebuilding 실행 (CGROUP V1의 비활성화와 CGROUP V2의 활성화)
- Legacy 환경에서 리눅스가 설치된 경우)
# vi /etc/default/grub
GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet systemd.unified_cgroup_hierarchy=1 cgroup_no_v1=all"
# grub2-mkconfig -o /boot/grub2/grub..cfg
# reboot
- UEFI 환경에서 리눅스가 설치된 경우)
# vi /etc/default/grub
GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet systemd.unified_cgroup_hierarchy=1 cgroup_no_v1=all"
# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
# reboot
2. rtkit 비 활성화
rtkit-daemon 비활성화 (rtkit-daemon이 활성화 되어 있을 경우 CGROUP 속성 Write error 발생)
# systemctl stop rtkit-daemon
# systemctl disable rtkit-daemon
# systemctl mask rtkit-daemon
3. Cgroup 속성 관련 스크립트
CGROUP V2 마운트 및 속성값 설정 내용이 포함된 스크립트 생성 (guest 사용자에 대해 cpu 30% 사용제한의 예)
# vi /usr/bin/configure_cgroups.sh
#!/bin/bash
touch /var/tmp/configure_cgroups.sh.ok
mkdir -p /mnt/cgroupv2
if [ ! -f /mnt/cgroupv2/cgroup.subtree_control ]
then
mount -t cgroup2 none /mnt/cgroupv2
echo "+cpu" > /mnt/cgroupv2/cgroup.subtree_control
fi
mkdir -p /mnt/cgroupv2/user.guest
echo "30000 100000" > /mnt/cgroupv2/user.guest/cpu.max
for pid in $(ps -ef | grep -i "^guest" | awk '{print $2}')
do
grep $pid /mnt/cgroupv2/user.guest/cgroup.procs >/dev/null
if [ $? != 0 ]
then
echo $pid > /mnt/cgroupv2/user.guest/cgroup.procs
fi
done
4. 작성한 스크립트 퍼미션 변경
# chmod 755 /usr/bin/configure_cgroups.sh
5. 서비스 등록 작업
작성한 스크립트를 시스템 부팅시 실행되어 영구적/실시간 적용될수 있도록 SYSTEMD 서비스에 2개의 실행 서비스 등록
# vi /usr/lib/systemd/system/configure-cgroupsv2.service
[Unit]
Description=Configure CGroups V2
[Service]
Type=oneshot
ExecStart=/usr/bin/configure_cgroups.sh
# vi /usr/lib/systemd/system/configure-cgroupsv2.timer
[Unit]
Description=Configure CGroups V2 Timer
[Timer]
OnUnitActiveSec=10s ## Timer 가 동작하는 시간 (추후 변경 할것)
OnBootSec=10s
[Install]
WantedBy=timers.target
6. 서비스 시작 및 확인
최종 서비스 상태 확인시 configure-cgroupsv2.timer는 Active (running)이며,
configure-cgroupsv2.timer 서비스는 configure-cgroupsv2.timer에서 설정된 시간 10초마다 acvating과 inactive로
변환됩니다. 이러한 동작을 통해 설정 내용을 점검하고 변경된점이 있을 경우 재적용합니다.)
# systemctl daemon-reload
# systemctl enable configure-cgroupsv2.timer
# systemctl start configure-cgroupsv2.timer
# systemctl list-timers --all| grep configure
# systemctl start configure-cgroupsv2.service
# systemctl status configure-cgroupsv2.service
# journalctl -xe
7. guest 사용자의 cpu 사용제한을 30%에서 50%로 변경하기
# cd /mnt/cgroupv2/user.guest
# cat cpu.max
# vi /usr/bin/configure_cgroups.sh
.
.
echo "50000 100000" > /mnt/cgroupv2/user.guest/cpu.max
.
.
# systemctl restart configure-cgroupsv2.service
configure-cgroupsv2.timer 서비스로부터 10초간 기다리면 configure-cgroupsv2.service 자동 재시작
'Linux Tech ' 카테고리의 다른 글
RedHat/Rocky/Centos local repository Srv 구축 방법 (0) | 2022.01.28 |
---|---|
Virtualbmc(vbmc) 완벽 설치 - RedHat 계열 (0) | 2021.12.15 |
iscsi 구성 후 reboot 시 볼륨이 보이지 않을때는 (0) | 2021.12.14 |
etc/fstab 설명 - 작성 중 (0) | 2021.12.14 |
Linux 에서 Intel CPU 버그 관련 (0) | 2021.12.14 |