자치 Linux에서의 압력 정지 정보

9509 단어 pressurelinuxpsi
일반적으로 성능 모니터링과 고장 제거에 사용되는 Linux 지표는 많은 단점이 있고 오해를 많이 받는다.최근의 커널은 PSI(압력 정지 정보)를 제공했는데 이것은 Oracle Linux의'견고불파'커널에서 기본적으로 사용되지 않는다.그러나 내부 핵은 그것으로 컴파일된 것이다.새로 만든 자치 Linux 실례에서 어떻게 사용하는지 (OEL 7.9 기반의 Oracle Cloud Linux, 정지 수리 필요 없음)

PSI 가용성 확인


[opc@sillymetrics ~]$ tail /proc/pressure/*

==> /proc/pressure/cpu  /proc/pressure/io  /proc/pressure/memory <==
tail: error reading ‘/proc/pressure/memory’: Operation not supported
PSI(스트레스 속도 저하 정보)를 사용할 수 없음

[opc@sillymetrics ~]$ uname --kernel-release

5.4.17-2036.101.2.el7uek.x86_64
코어 >= 4.20 일반

[opc@sillymetrics ~]$ grep PSI /boot/config-$(uname --kernel-release)

CONFIG_PSI=y
CONFIG_PSI_DEFAULT_DISABLED=y
커널은 PSI로 컴파일되지만 기본적으로 비활성화됩니다.

[opc@sillymetrics ~]$ cat /proc/cmdline

BOOT_IMAGE=/boot/vmlinuz-5.4.17-2036.101.2.el7uek.x86_64 root=UUID=53da1572-8973-42e7-965b-fa6c46efb805 ro crashkernel=auto LANG=en_US.UTF-8 console=tty0 console=ttyS0,9600 rd.luks=0 rd.lvm=0 rd.md=0 rd.dm=0 rd.iscsi.bypass=1 netroot=iscsi:169.254.0.2:::1:iqn.2015-02.oracle.boot:uefi iscsi_param=node.session.timeo.replacement_timeout=6000 net.ifnames=1 nvme_core.shutdown_timeout=10 ipmi_si.tryacpi=0 ipmi_si.trydmi=0 ipmi_si.trydefaults=0 libiscsi.debug_libiscsi_eh=1 loglevel=4 ip=single-dhcp crash_kexec_post_notifiers
커널 안내 명령줄에 "psi=1"을 추가해야 합니다.

시작 명령줄 옵션 추가


[opc@sillymetrics ~]$ tuned-adm active

Current active profile: oci-rps-xps oci-busy-polling oci-cpu-power oci-nic
이 시스템은tuned에서 관리합니다. 사용자 정의 안내 명령줄 설정 파일을 추가할 것입니다

[opc@sillymetrics ~]$ sudo su -
[root@sillymetrics ~]# mkdir /etc/tuned/my_bootcmdline && cat > /etc/tuned/my_bootcmdline/tuned.conf <<'TAC'

[main]
summary=Enable Pressure Stall Information as in https://blog.dbi-services.com/psi-pressure-stall-information/
[bootloader]
cmdline=psi=1

TAC
bootloader 명령줄 옵션에 새 프로필을 만들었습니다

[root@sillymetrics ~]# tuned-adm profile oci-rps-xps oci-busy-polling oci-cpu-power oci-nic my_bootcmdline
이 프로필로 전환

[root@sillymetrics ~]# systemctl reboot
Connection to 129.213.62.243 closed by remote host.
Connection to 129.213.62.243 closed.

[opc@a pmm]$ ssh 129.213.62.243
Last login: Wed Jan  6 14:07:18 2021
Welcome to Autonomous Linux
Effective kernel version is 5.4.17-2036.101.2.el7uek.x86_64
시스템을 재부팅했습니다.

[opc@sillymetrics ~]$ cat /proc/cmdline

BOOT_IMAGE=/boot/vmlinuz-5.4.17-2036.101.2.el7uek.x86_64 root=UUID=53da1572-8973-42e7-965b-fa6c46efb805 ro crashkernel=auto LANG=en_US.UTF-8 console=tty0 console=ttyS0,9600 rd.luks=0 rd.lvm=0 rd.md=0 rd.dm=0 rd.iscsi.bypass=1 netroot=iscsi:169.254.0.2:::1:iqn.2015-02.oracle.boot:uefi iscsi_param=node.session.timeo.replacement_timeout=6000 net.ifnames=1 nvme_core.shutdown_timeout=10 ipmi_si.tryacpi=0 ipmi_si.trydmi=0 ipmi_si.trydefaults=0 libiscsi.debug_libiscsi_eh=1 loglevel=4 ip=single-dhcp crash_kexec_post_notifiers psi=1
내 시작 명령줄 옵션이 거기에 있습니다 (psi=1)

[opc@sillymetrics ~]$ sudo tail /proc/pressure/*

[root@psi log]# sudo tail /proc/pressure/*
==> /proc/pressure/cpu  /proc/pressure/io  /proc/pressure/memory <<==
some avg10=0.00 avg60=0.00 avg300=0.00 total=0
full avg10=0.00 avg60=0.00 avg300=0.00 total=0

현재 압력 실속 정보를 사용할 수 있습니다.

CPU 자원 테스트


PSI는 압력 소스의 "압력"을 측정합니다.만약 자원이 필요할 때 즉시 사용할 수 있다면 압력이 없을 것이다. 삼키는 양은 최대에 달할 수 있고, 지연은 최소에 달할 수 있다.자원 사용 분쟁이 발생하면 압력이 증가하여 지연, 줄 서기, 정지를 초래할 수 있다.압력이 최대치에 도달했을 때 IO와 RAM 액세스는 모든 프로세스를 차단하고 PSI는 이를'만'압력으로 표시하며 모든 작업을 기다려야 한다. 그리고 CPU는 이 기간 동안 비어 있어 모든 CPU 주기를 낭비한다. 모든 실행 가능한 작업이 실행될 수 없기 때문이다.그러나 이 블로그에서 나는 CPU의 압력만 테스트할 것이다. 우리는 이런 '꽉 찬' 상태를 영원히 보지 못할 것이다. 왜냐하면 PSI의 기선은 CPU가 임무를 수행할 수 있는 시간이기 때문이다.PSI 측정은 CPU 부족으로 인해 낭비되는 가동 시간을 측정합니다.PSI는 자원 압력으로 인해 모든 작업이 지연되지 않는 시간 (일부 작업) 을 계산하는 데 사용되는 카운터가 있습니다. 최소한 실행 가능한 작업이 지연될 때 실행 대기열에서 대기합니다.중요한 점은 PSI는 작업 지연을 나타내는 괘종시계 시간입니다.그러나 이 시간은 표준화되어 압력의 표면적을 설명한다.평균적으로, 실행 중인 많은 작업 앞에서 작업을 기다리는 것은 실행 중인 작업 앞에서 작업을 기다리는 것보다 압력이 적다.그래서 이 괘종시계는 CPU의 수량으로 나눈다.
다음은 제가 2vCPU 실례(Oracle 클라우드의 무료 tier one)에서 실행하는 내용입니다.

uptime ; cat /proc/pressure/cpu
for i in {1..1} ; do timeout 60 yes & done > /dev/null ; wait ; uptime ; cat /proc/pressure/cpu
for i in {1..2} ; do timeout 60 yes & done > /dev/null ; wait ; uptime ; cat /proc/pressure/cpu
for i in {1..3} ; do timeout 60 yes & done > /dev/null ; wait ; uptime ; cat /proc/pressure/cpu
for i in {1..4} ; do timeout 60 yes & done > /dev/null ; wait ; uptime ; cat /proc/pressure/cpu
for i in {1..5} ; do timeout 60 yes & done > /dev/null ; wait ; uptime ; cat /proc/pressure/cpu
for i in {1..6} ; do timeout 60 yes & done > /dev/null ; wait ; uptime ; cat /proc/pressure/cpu
sleep 10 ; uptime ; cat /proc/pressure/cpu
sleep 10 ; uptime ; cat /proc/pressure/cpu
sleep 10 ; uptime ; cat /proc/pressure/cpu
sleep 10 ; uptime ; cat /proc/pressure/cpu
sleep 10 ; uptime ; cat /proc/pressure/cpu
sleep 10 ; uptime ; cat /proc/pressure/cpu
sleep 10 ; uptime ; cat /proc/pressure/cpu
나는 매 줄(60초 운행)의 결과를 상세하게 설명할 것이다. 이 줄에서 나는 운행 프로세스를 축소할 것이다.

 14:53:24 up 46 min,  1 user,  load average: 0.00, 0.10, 0.21
some avg10=0.24 avg60=0.45 avg300=2.01 total=124839977
5분 이상 비활성 상태이면 모든 카운터가 0이 됩니다.

 14:54:24 up 47 min,  1 user,  load average: 0.63, 0.27, 0.26
some avg10=0.46 avg60=0.54 avg300=1.74 total=125243785
R상태에서 1회 처리를 60초 동안 한 후에 압력은 무시할 수 있다. 왜냐하면 여기에 두 개의 VCPU가 있기 때문이다.PSI는 평균 로드보다 훨씬 쉽습니다. vCPU와 비교할 필요가 없습니다.실행 중인 작업이 CPU 스레드 수보다 적으면 압력이 없습니다.

 14:55:24 up 48 min,  1 user,  load average: 1.70, 0.65, 0.39
some avg10=2.87 avg60=2.05 avg300=1.95 total=127191314
R 상태에서 60초 동안 두 번 처리한 후에도 압력은 무시할 수 있다.왜냐하면 나의 실례는 OCPU의 8분의 1이기 때문이다.여기에는 25퍼센트의 CPU만 사용할 수 있다. (나머지는 가상 컴퓨터 모니터에서%steal로 간주된다.)그러나 압력실속 정보는 물리 프로세서에 주목하지 않는다.베이스라인은 각 vCPU에 대해 사용 가능한 클럭 시간입니다.PSI는 감속이 아니라 압력을 측정한다는 사실을 잊지 말아야 한다.2 - vCPU에서 작업을 실행하면 압력을 받지 않습니다. 왜냐하면 항상 vCPU의 최대 잠재력으로 실행할 수 있기 때문입니다.

 14:56:24 up 49 min,  1 user,  load average: 2.52, 1.08, 0.56
some avg10=51.43 avg60=33.01 avg300=11.04 total=158241805
3개의 프로세스가 100% R 상태인 지 60초 만에 CPU 부족 문제가 발생했습니다.3개의 실행 가능한 작업이 있고 2개의 vCPU만 사용할 수 있으며 초당 1개의 작업이 일시 중지됩니다.특정 상태의 괘종시계는 60초입니다.그러나 PSI는 vCPU의 수량으로 작업 배고픔의 압력을 구분한다.모든 vCPU에 작업이 대기 중인 경우에만 압력이 100%에 달합니다.따라서 두 개의 바쁜 라인 앞에서 평균 한 개의 임무가 지연되고 초당 0.5초의 압력만 증가한다.이것이 바로 총 실속 시간(미초 단위)이 이 60초 안에 나타나는 이유(158241805-127191314)/1e6=31초이다.60초간 평균은 51%로 지난 10초간 평균이다.60초 평균은 즉시 업데이트되지 않고 33%만 표시됩니다.그러나'총계'는 실시간이다. 이것이 바로 PSI의 장점이다. 속도를 잃는 상황의 세립도 가시화이다.이것은 평균 부하보다 큰 장점이다. 평균 부하 상황에서 당신은 반드시 1분을 기다려야만 전체 상황을 이해할 수 있다.

 14:57:24 up 50 min,  1 user,  load average: 3.43, 1.60, 0.77
some avg10=95.91 avg60=72.92 avg300=26.86 total=216575324
R 상태에서 4개의 프로세스를 60초 동안 실행하면 각 프로세스는 CPU에서 절반만 실행할 수 있습니다.일시 정지 시간은 (216575324-158241805)/1e6=58초(두 작업이 두 CPU 앞에서 기다리는 시간은 정초)입니다.스트레스가 심하다.

 14:58:24 up 51 min,  1 user,  load average: 4.47, 2.22, 1.04
some avg10=99.86 avg60=89.92 avg300=40.43 total=276578094

 14:59:24 up 52 min,  1 user,  load average: 5.52, 2.94, 1.36
some avg10=99.93 avg60=96.20 avg300=51.49 total=336583746
R상태에서 5회 처리한 뒤 60초 뒤 6회 처리하면 스트레스가 매우 높다.그것은 영원히 100%에 이르지 못할 것이다. 왜냐하면 당신은 항상 실행하고 싶은 새로운 작업을 추가할 수 있기 때문이다.그러나 압력은 운행 대기열과 대기 시간이 증가함에 따라 증가한다.

 14:59:34 up 52 min,  1 user,  load average: 4.75, 2.86, 1.35
some avg10=39.88 avg60=82.54 avg300=50.00 total=336584509
 14:59:44 up 53 min,  1 user,  load average: 4.02, 2.77, 1.34
some avg10=14.68 avg60=69.89 avg300=48.32 total=336584773
 14:59:54 up 53 min,  1 user,  load average: 3.40, 2.67, 1.32
some avg10=6.34 avg60=59.45 avg300=46.75 total=336782396
 15:00:04 up 53 min,  1 user,  load average: 2.88, 2.59, 1.31
some avg10=2.33 avg60=50.34 avg300=45.17 total=336787339
 15:00:14 up 53 min,  1 user,  load average: 2.44, 2.50, 1.30
some avg10=0.85 avg60=42.63 avg300=43.64 total=336791024
 15:00:24 up 53 min,  1 user,  load average: 2.65, 2.55, 1.32
some avg10=1.90 avg60=36.57 avg300=42.28 total=337114177
 15:00:34 up 53 min,  1 user,  load average: 2.32, 2.48, 1.31
some avg10=0.70 avg60=30.96 avg300=40.85 total=337114942
이것은 1분 내의 냉각 시간이다.누적 총수의 차이를 보면 배고픔이 이미 사라졌다는 것을 알 수 있다. (337114942-336583746)/1e6=0.5초.10초와 60초 동안 창 카운터를 줄이는 데 시간이 걸립니다.PSI는 실시간이며 알림을 실행할 수도 있습니다.이로써 서버의 탄력성이 없는 자동 신축 서비스를 감시하는 것이 매우 흥미로운 지표가 되었다.
나는 서로 다른 형태의 가상 기기에 대해 같은 테스트를 진행했는데, 각각 2, 4, 8개의 vCPU였다.다음 그림에서 X축은 실행 중인 프로세스 수이고 Y축은 실행 20초 후의 PSI avg10입니다.평균 부하와 실행 중인 프로세스 수는 선형 관계가 있습니다. (그러나 최소한 1분은 실행해야 그것을 얻을 수 있습니다.)여기서 우리는 실행 프로세스의 수량이 각 CPU에서 두 개 사이일 때 PSI가 선형인 것을 보았다.그러나 일부 CPU가 유휴 상태일 경우 PSI는 거의 0%의 압력을 받습니다.모든 CPU에 하나의 작업이 일시 중지되면 PSI는 100%에 가깝습니다.
위에서 수행한 테스트는 2vCPU 모양의 빨간색 선과 유사합니다.

노란색 선은 4vCPU, 녹색 선은 8vCPU에 있습니다.결론적으로 스트레스 과속 정보는 CPU 로드를
  • 일부 CPU가 유휴 상태일 때 압력 없음
  • 모든 CPU가 특정 작업에 바쁠 때 스트레스가 증가합니다. 일시 중지

  • 실속 임무가 운행
  • 보다 많을 때 압력이 가장 크다

    좋은 웹페이지 즐겨찾기