문서유형ㅣ장애해결
분야ㅣ관리/환경설정
적용제품버전ㅣ7FS02PS
문서번호ㅣTADTS074
Linux 환경에서 TAS 설치 후 systemd-udevd 프로세스의 지속적인 CPU 사용이 발생 되는 현상에 대한 원인 및 해결 방법을 설명합니다.
현상
TAS로 구성된 모든 서버가 아닌 한 서버에서만 3초 간격으로 /usr/lib/systemd/systemd-udevd 프로세스의 지속적인 CPU 사용이 발생됩니다.
# top -p $(pgrep -d, systemd-udevd) -d 0.5
top - 18:40:54 up 132 days, 7:05, 2 users, load average: 0.89, 1.89, 2.04
Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.0 us, 2.2 sy, 0.0 ni, 91.0 id, 5.2 wa, 0.2 hi, 0.2 si, 0.0 st
MiB Mem : 24062.5 total, 8846.5 free, 10483.1 used, 4732.9 buff/cache
MiB Swap: 32764.0 total, 28402.4 free, 4361.6 used. 9410.7 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
112580 root 20 0 118780 11520 5336 S 2.0 0.0 0:04.40 systemd-udevdudevadm 모니터링 시 반복적인 change 이벤트가 발생됩니다.
# udevadm monitor --kernel --udev --property
UDEV [11431041.072503] change /devices/.../block/sdc (block)
ACTION=change
DEVPATH=/devices/.../block/sdc
DEVNAME=sdc
DEVTYPE=disk
MAJOR=8
MINOR=32
SEQNUM=3140620
SUBSYSTEM=block
--반복적인 이벤트 발생
원인
TAS 인스턴스들 중 한 곳에서 DMON thread가 3초마다 DISK들의 상태를 확인하기 위해 AS_DISKSTRING에 매칭 되는 모든 DISK들을 OPEN/CLOSE 합니다.
DMON thread에 의해 DISK의 OPEN/CLOSE 이벤트가 UDEV의 inotify에 감지되어 TAS DISK 구성 시 작성한 UDEV 설정이 매번 동일한 내용으로 반영 되며, 이 과정에서 불필요한 CPU 사용이 발생 됩니다.
--TAS tip
AS_DISKSTRING="/dev/tasdisks/tas-redo-disk-*,/dev/tasdisks/tas-data-disk-*,/dev/tasdisks/tas-arch-disk-*"
# cat /etc/udev/rules.d/60-tas-disk.rules
KERNEL=="sd?", SUBSYSTEM=="block", PROGRAM=="/lib/udev/scsi_id -g -u -d %N", RESULT=="36000c291fdc9305ae0861208f4d56c8e", SYMLINK+="tasdisks/tas-redo-disk-1", OWNER="tibero", GROUP="dba", MODE="0660"
KERNEL=="sd?", SUBSYSTEM=="block", PROGRAM=="/lib/udev/scsi_id -g -u -d %N", RESULT=="36000c29faed404a64023aa2c053948f7", SYMLINK+="tasdisks/tas-redo-disk-2", OWNER="tibero", GROUP="dba", MODE="0660"
KERNEL=="sd?", SUBSYSTEM=="block", PROGRAM=="/lib/udev/scsi_id -g -u -d %N", RESULT=="36000c29bf5e3c2f05f4df7eaef5eccb6", SYMLINK+="tasdisks/tas-data-disk-1", OWNER="tibero", GROUP="dba", MODE="0660"
KERNEL=="sd?", SUBSYSTEM=="block", PROGRAM=="/lib/udev/scsi_id -g -u -d %N", RESULT=="36000c291aa08cea3f427ce13b9ced0d3", SYMLINK+="tasdisks/tas-data-disk-2", OWNER="tibero", GROUP="dba", MODE="0660"
KERNEL=="sd?", SUBSYSTEM=="block", PROGRAM=="/lib/udev/scsi_id -g -u -d %N", RESULT=="36000c29e4695b6bd1efc13eed3fbd9b7", SYMLINK+="tasdisks/tas-arch-disk-1", OWNER="tibero", GROUP="dba", MODE="0660"
KERNEL=="sd?", SUBSYSTEM=="block", PROGRAM=="/lib/udev/scsi_id -g -u -d %N", RESULT=="36000c29774499ea5a03ee60625ee250d", SYMLINK+="tasdisks/tas-arch-disk-2", OWNER="tibero", GROUP="dba", MODE="0660"
참고DMON(Disk Monitor): 일정 주기마다 TAS가 관리하고 있는 DISK들의 상태를 체크하며 장애 및 복구 작업을 실행
해결
TAS DISK 설정을 위한 UDEV RULES 설정에 OPTIONS:="nowatch" 구문을 추가하여 변경 사항이 없는 DISK들에 대하여 UDEV의 inotify watch를 비활성화 합니다.
# cat /etc/udev/rules.d/60-tas-disk.rules
KERNEL=="sd?", SUBSYSTEM=="block", PROGRAM=="/lib/udev/scsi_id -g -u -d %N", RESULT=="36000c291fdc9305ae0861208f4d56c8e", SYMLINK+="tasdisks/tas-redo-disk-1", OWNER="tibero", GROUP="dba", MODE="0660", OPTIONS:="nowatch"
KERNEL=="sd?", SUBSYSTEM=="block", PROGRAM=="/lib/udev/scsi_id -g -u -d %N", RESULT=="36000c29faed404a64023aa2c053948f7", SYMLINK+="tasdisks/tas-redo-disk-2", OWNER="tibero", GROUP="dba", MODE="0660", OPTIONS:="nowatch"
KERNEL=="sd?", SUBSYSTEM=="block", PROGRAM=="/lib/udev/scsi_id -g -u -d %N", RESULT=="36000c29bf5e3c2f05f4df7eaef5eccb6", SYMLINK+="tasdisks/tas-data-disk-1", OWNER="tibero", GROUP="dba", MODE="0660", OPTIONS:="nowatch"
KERNEL=="sd?", SUBSYSTEM=="block", PROGRAM=="/lib/udev/scsi_id -g -u -d %N", RESULT=="36000c291aa08cea3f427ce13b9ced0d3", SYMLINK+="tasdisks/tas-data-disk-2", OWNER="tibero", GROUP="dba", MODE="0660", OPTIONS:="nowatch"
KERNEL=="sd?", SUBSYSTEM=="block", PROGRAM=="/lib/udev/scsi_id -g -u -d %N", RESULT=="36000c29e4695b6bd1efc13eed3fbd9b7", SYMLINK+="tasdisks/tas-arch-disk-1", OWNER="tibero", GROUP="dba", MODE="0660", OPTIONS:="nowatch"
KERNEL=="sd?", SUBSYSTEM=="block", PROGRAM=="/lib/udev/scsi_id -g -u -d %N", RESULT=="36000c29774499ea5a03ee60625ee250d", SYMLINK+="tasdisks/tas-arch-disk-2", OWNER="tibero", GROUP="dba", MODE="0660", OPTIONS:="nowatch"systemd-udevd 프로세스의 CPU 사용률 감소와 udevadm 모니터링 시 반복적인 change 이벤트가 없음을 확인 합니다.
# top -p $(pgrep -d, systemd-udevd) -d 0.5
top - 20:11:35 up 132 days, 8:36, 2 users, load average: 1.66, 1.47, 1.41
Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.2 us, 0.5 sy, 0.0 ni, 91.5 id, 7.5 wa, 0.2 hi, 0.0 si, 0.0 st
MiB Mem : 24062.5 total, 9255.0 free, 10546.2 used, 4261.3 buff/cache
MiB Swap: 32764.0 total, 28358.2 free, 4405.8 used. 9390.6 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
112580 root 20 0 118780 11660 5476 S 0.0 0.0 0:10.17 systemd-udevd
# udevadm monitor --kernel --udev --property
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
KERNEL - the kernel uevent
--반복적인 이벤트 없음