• 프로세스 스케줄러 관련된 모니터링 툴
• 기존 도구
• uptime, top, mpstat, perf
• BPF(eBPF)
• 스케줄러 관련 툴
• execsnoop, exitsnoop, cpudist, runqlat, runqlen, offcputime
• softirqs, smpcalls, llcstat, cpufreq, hardirqs
• 제대로 사용하고자 하면 커널 컴파일 필요
• load average 출력
• 실행 가능 상태 + 인터럽트 불가 대기 상태 태스크(TASK_UNINTERRUPTIBLE)의
CPU 부하
• 예
• #uptime (4 core)
20:14:58 up 3 days, 10:50, 1 user, load average: 2.62, 3.08, 3.18
• 마지막 3개 숫자는 1분, 5분, 15분의 load average
• 문제점
•인터럽트 불가한 시간(디스크 I/O나 뮤텍스와 같은 락 대기) 포함
• 해결책
BPF의 offcputime 툴 이용?
CPU별 지표 검사
• sudo apt install sysstat
• 초당 출력
• CPU 밸런싱 체크
• 버클리 패킷 필터(Berkeley Packet Filter)
• 커널 컴파일 필요
• sudo apt install bpfcc-tools
• sudo apt install bpftrace
• 새로운 프로세스 실행을 시스템 전역에 걸쳐 트레이싱
• CPU 리소스를 소모하는 짧은 시간 동안만 동작한 프로세스 분
석
• top의 문제점
• 샘플링 기반
• 짧게 동작한 프로세스 찾지 못함
• execve 시스템 콜을 트레이싱
==> top로 잠깐 생성되는 프로세스를 잡지 못할 때
• execsnoop 와 반대
• exit 트레이싱
• sudo exitsnoop-bpfcc
• CPU 스케줄러 지연을 측정하는 도구. 런큐 지연.
• 대부분 2~64us 지연
• CPU는 30% 사용하는 PC
• 시스템 설정이 이상하면?
• 정해진 간격으로 스택 트레이스를 샘플링
• 스택 트레이스 빈도수 집계를 리포트
• CPU FlameGraph와 사용하면 막강
sudo profile-bpfcc
• off-CPU가 된 스레드들에 의해 소모된 시간을 요약
• 왜? 스레드가 CPU에서 동작 중이지 않는 이유를 알려줌
• sudo offcputime-bpfcc 5
• 역시 FlameGraph과 사용하면 막강
• 시스템 콜을 집계
• CPU 시간이 높은 이유를 조사
• syscount -Pi 1 <~ 프로세스 ID 별 집계
• 이벤트를 원하는 방법으로 검토
• sudo argdist-bpfcc -H 't:syscalls:sys_enter_read():int:args- >count'
• sudo funccount-perf 'tcp_*'
• 이벤트 발생 빈도를 집계
• 소프트웨어 IRQ별 시간
• sudo softirqs-bpfcc 10 1
• 하드 IRQ를 처리하는 데 소모하는 시간
• sudo hardirqs-bpfcc 10 1
• LLC 캐스 미스율과 히트율 표시
• sudo llcstat-bpfcc