GPIO 입력에 의해 트리거되는 간단한 인터럽트가 있습니다. IRQ는 단순히 변수를 증가시키고 반환합니다. 인터럽트 주파수를 약 10-20kHz로 조정하면 시스템이 응답하지 않게 됩니다. 주파수를 높이면서 CPU 로드를 측정했지만 top
해당 명령에 대한 측정 항목에는 큰 변화가 없었습니다 top
.
그래서 프로세서 CPU가 로드되었지만 사용할 수 없습니다 top
!
top
어떻게 측정되나요? 매우 빈번한 인터럽트가 표시되지 않는 이유는 무엇입니까?
전체 시스템 성능에 대한 인터럽트의 영향을 측정하는 방법은 무엇입니까?
편집하다
CPU 주파수 거버너를 "성능"으로 설정하고 주파수를 정적 1GHz로 설정함으로써 프로세서가 충돌하기 전에 인터럽트 주파수를 150kHz로 높일 수 있었습니다.
답변1
"top"은 커널 인터럽트를 고려합니까?
커널에 따라 다릅니다. 활성화하지 않으면 IRQ_TIME_ACCOUNTING
인터럽트 처리에 소요된 시간이 계산되지 않을 수 있습니다.
config IRQ_TIME_ACCOUNTING
bool "Fine granularity task level IRQ time accounting"
depends on HAVE_IRQ_TIME_ACCOUNTING && !VIRT_CPU_ACCOUNTING_NATIVE
help
Select this option to enable fine granularity task irq time
accounting. This is done by reading a timestamp on each
transitions between softirq and hardirq state, so there can be a
small performance impact.
커널 구성 파일에서 검색해 볼 수 있습니다. 많은 시스템에서 커널 구성은 /boot/config-*
.
이에 대해서는 원본 패치 시리즈에서 자세히 설명합니다.올바른 커널 irq 타이밍 통계-v4.
세부 사항은 CPU 아키텍처에 따라 다릅니다. 예를 들어, TSC가 없는 고대 x86 CPU에서는 이 기능이 활성화되지 않습니다. 일부 Linux 아키텍처에서는 이를 전혀 구현하지 않습니다 HAVE_IRQ_TIME_ACCOUNTING
.
일부 Linux 아키텍처는 VIRTUAL_CPU_ACCOUNTING_NATIVE
대안의 일부로 이 기능을 제공합니다. 현재 이러한 아키텍처는 S390, IA64 및 PowerPC입니다. 내 생각에 당신은 이들 중 어떤 것도 사용하지 않고 있는 것 같습니다(부분적으로 "GPIO" :-P 사용에 기반함).