찾았어요둘 기사PSI와 관련하여 그들은 모두 CPU에 "일부" 측정항목만 있다고 말합니다. atop
또한 "cpu some"만 표시됩니다.
하지만 내 시스템에는 "cpu full" 표시가 있습니다.
$ cat /proc/pressure/cpu
some avg10=0.05 avg60=0.33 avg300=0.33 total=5815043711
full avg10=0.00 avg60=0.02 avg300=0.06 total=1288113602
CPU에 의해 모든 작업이 중지될 때까지의 시간을 측정해야 하는데, 이런 일이 발생하는 원인은 무엇입니까? 실제로 무엇을 측정합니까?
답변1
나는 같은 일을 헤매고 있었지만 작동하는 설명을 찾지 못했습니다. cgroup PSI 파일을 볼 때 상황이 약간 다릅니다.
그래서 리눅스 커널 소스코드를 살펴봤습니다.
psi.c
[psi.c]
물론 CPU 리소스의 FULL 상태는 시스템 수준이 아니라 cgroup 수준에 존재합니다. cgroup 수준에서 FULL은 cgroup의 모든 비유휴 작업이 cgroup 외부의 다른 작업에서 사용 중인 CPU 리소스로 인해 지연되거나 cgroup cpu.max 구성에 의해 제한됨을 의미합니다.
full
에서 제공하면 안 됩니다 /proc/pressure/cpu
. 그것은 말이 되지 않습니다. 호스트에서는 CPU 리소스가 부족하여 모든 작업을 동시에 차단하는 것이 불가능합니다. CPU 수와 동일한 수는 언제든지 실행될 수 있습니다(메모리나 IO에 의해 차단되지 않는 한, 이는 다른 파일에 반영됩니다). 이 값은
특정 워크로드에 대한 최대 리소스를 제한하기 위해 가상화(컨테이너) 또는 cgroup을 사용하는 경우 full
존재할 수 있습니다 . /sys/fs/cgroup/<cgroup_name>/cpu.pressure
숫자가 0보다 크면 모든 CPU가 cgroup 외부 작업에 사용된다는 의미이므로 해당 그룹 내의 모든 CPU가 사용됩니다. cgroup CPU 리소스 부족으로 인해 cgroup 내에서 작업이 차단되었습니다.
RAM 또는 IO로 인한 일시 중지는 CPU 부담이 아닌 해당 파일에 반영됩니다.
시스템이 이를 표시한다면 full
일종의 /proc/pressure/cpu
이상한 구성이거나 가상화된 시스템이 cgroup 값으로 파일을 덮어쓰는 것일 수 있습니다.
답변2
출처를 검색해 보세요, 루크. 커널 문서에서 커널 트리에 있습니다 Documentation/accounting/psi.rst
.
The "some" line indicates the share of time in which at least some
tasks are stalled on a given resource.
The "full" line indicates the share of time in which all non-idle
tasks are stalled on a given resource simultaneously. In this state
actual CPU cycles are going to waste, and a workload that spends
extended time in this state is considered to be thrashing. This has
severe impact on performance, and it's useful to distinguish this
situation from a state where some tasks are stalled but the CPU is
still doing productive work. As such, time spent in this subset of the
stall state is tracked separately and exported in the "full" averages.
답변3
도구를 사용하여 시스템에 수동으로 스트레스를 가하고 stress-ng
CPU 로드를 모니터링할 수 있습니다.
./stress-ng --cpu 5 --aggressive -a 0 --timeout 5m & watch -n 1 'cat /proc/pressure/cpu'
이는 다음과 같은 측정항목을 제공할 수 있습니다.
some avg10=31.57 avg60=8.96 avg300=2.02 total=6285744
full avg10=0.77 avg60=0.22 avg300=0.05 total=235866
여기서는 전체 로드도 업데이트되었음을 명확하게 확인할 수 있습니다.