둘 다 그렇게 낮은 CPU 사용률을 top/htop
보고하는 이유는 무엇입니까 ? /proc/stat
프로세스 CPU 사용률 수치(스크린샷에서는 67.5%)가 올바른 것으로 보입니다.
일부 세부정보:
Linux(커널 버전 4.19.0)는 Zynq 7z010(듀얼 코어 ARM Cortex-A9 프로세서)에서 실행됩니다. 신호 처리 응용 프로그램( server.elf
스크린샷 참조)은 대부분의 리소스를 소비합니다. 대부분의 처리는 두 개의 스레드에서 발생합니다. 하나는 Receiver_0
10밀리초마다 깨어나는 스레드이고 다른 하나는 Spectrum_0
17밀리초마다 깨어나는 스레드입니다. 이러한 스레드는 SCHED_FIFO 스케줄러를 사용하여 예약됩니다.
답변1
나는 무슨 일이 일어나고 있는지 발견했습니다. Linux 커널 문서(https://www.kernel.org/doc/html/latest/admin-guide/cpu-load.html/proc/stat
)은 ( top
/ 이 데이터를 사용하여) htop
에 표시된 데이터가 수집된 방법을 설명합니다.
타이머 인터럽트가 신호를 받을 때마다 커널은 그 순간에 어떤 유형의 작업이 실행되고 있는지 확인하고 해당 작업 유형/상태에 해당하는 카운터를 증가시킵니다. 이에 대한 문제는 시스템이 두 타이머 인터럽트 사이에 다양한 상태 사이를 여러 번 전환할 수 있지만 카운터는 마지막 상태에 대해서만 증가한다는 것입니다.
앞서 말했듯이 내 경우 대부분의 데이터 처리는 짧은 버스트(2..4ms이면 청크 처리를 완료하는 데 충분함)로 주기적으로(10ms마다) 발생합니다. 동작은 예제(https://www.kernel.org/doc/html/latest/admin-guide/cpu-load.html#example) - 모든 처리는 시스템 상태 샘플 간에 수행되므로 시스템은 항상 유휴 상태라고 생각합니다.
system state sampled in timer interrupt (10ms period on my system)
| |
v 10ms v
...--|----------------------------------------|-------------------------...
^ 3ms ^ 7ms ^ 3ms ^
sleep | active | sleep | active | sleep
...------> | <------> | <-------------------------> | <------> | <------...
/proc/[pid]/stat
다른 프로세스도 CPU를 사용하기 때문에 데이터 처리를 처리하는 프로세스(열에 표시된 것과 동일한 정보)의 CPU 사용률을 계산하기 위해 카운터를 사용하여 top
이 문제를 해결했지만 제 경우에는 CPU 사용률이 무시할 수 있습니다.%CPU