학습 목표

• 프로세스 스케줄러 관련된 모니터링 툴
• 기존 도구
• uptime, top, mpstat, perf
• BPF(eBPF)
• 스케줄러 관련 툴
• execsnoop, exitsnoop, cpudist, runqlat, runqlen, offcputime
• softirqs, smpcalls, llcstat, cpufreq, hardirqs
• 제대로 사용하고자 하면 커널 컴파일 필요

uptime

• 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 툴 이용?

top 또는 htop

  • top

  • htop
    • VIRT : 버츄얼 메모리 사이즈
    • S : 슬립 상태

mpstat

CPU별 지표 검사
• sudo apt install sysstat
• 초당 출력
• CPU 밸런싱 체크

BPF

• 버클리 패킷 필터(Berkeley Packet Filter)
• 커널 컴파일 필요

• sudo apt install bpfcc-tools
• sudo apt install bpftrace

  • 메모리 ,네트워크, 파일시스템

execsnoop: trace new processes

• 새로운 프로세스 실행을 시스템 전역에 걸쳐 트레이싱
• CPU 리소스를 소모하는 짧은 시간 동안만 동작한 프로세스 분

• top의 문제점
• 샘플링 기반
• 짧게 동작한 프로세스 찾지 못함

• execve 시스템 콜을 트레이싱

==> top로 잠깐 생성되는 프로세스를 잡지 못할 때

exitsnoop: trace exit process

• execsnoop 와 반대
• exit 트레이싱
• sudo exitsnoop-bpfcc

runqlat

• CPU 스케줄러 지연을 측정하는 도구. 런큐 지연.
• 대부분 2~64us 지연
• CPU는 30% 사용하는 PC
• 시스템 설정이 이상하면?

profile

• 정해진 간격으로 스택 트레이스를 샘플링
• 스택 트레이스 빈도수 집계를 리포트
• CPU FlameGraph와 사용하면 막강

sudo profile-bpfcc

offcputime

• off-CPU가 된 스레드들에 의해 소모된 시간을 요약
• 왜? 스레드가 CPU에서 동작 중이지 않는 이유를 알려줌
• sudo offcputime-bpfcc 5
• 역시 FlameGraph과 사용하면 막강

syscount

• 시스템 콜을 집계
• CPU 시간이 높은 이유를 조사
• syscount -Pi 1 <~ 프로세스 ID 별 집계

argdist

• 이벤트를 원하는 방법으로 검토
• sudo argdist-bpfcc -H 't:syscalls:sys_enter_read():int:args- >count'

  • 시스템콜을 카운팅뿐만아니라 콜의 arg의 count size 분석

funccount

• sudo funccount-perf 'tcp_*'
• 이벤트 발생 빈도를 집계

softirqs

• 소프트웨어 IRQ별 시간
• sudo softirqs-bpfcc 10 1

hardirqs

• 하드 IRQ를 처리하는 데 소모하는 시간
• sudo hardirqs-bpfcc 10 1

llcstat

• LLC 캐스 미스율과 히트율 표시
• sudo llcstat-bpfcc

0개의 댓글