BPF를 활용한 리눅스 시스템 트레이싱

시스템의 가시성 확보와 성능 최적화, 트러블슈팅을 위한

리눅스 시스템에서 발생하는 문제를 찾고 해결하기 위한 방법을 알려드립니다!

이 책은 리눅스 시스템을 관찰하기 위한 도구로 BPF를 소개합니다. BPF를 활용하면 코드의 변경 없이 애플리케이션의 동작과 상태를 깊게 분석할 수 있습니다. BPF는 시스템의 부하를 최소화하면서 프로그래밍 가능한 유연한 트레이싱 환경을 제공함으로써 리눅스 환경에서 서비스를 개발하고 운영하는 소프트웨어 엔지니어에게 트러블슈팅과 디버깅에 필요한, 커널과 사용자 영역을 포함한 전체 시스템을 관통하는 시각을 제공합니다.

★ 이 책에서 다루는 내용 ★

  • 트레이싱 도구로서의 BPF 소개
  • BCC 및 bpftrace 프로그래밍
  • BPF 기반 트레이싱 도구 소개와 활용
  • 시스템 리소스, 프로그래밍 언어별 BPF 활용법
  • 분석 결과의 가시화
  • 컨테이너 및 쿠버네티스 환경에서의 BPF 사용법

 

도서 상세 이미지

정찬훈

올해로 10년 차가 된 소프트웨어 엔지니어입니다. 임베디드 환경에서 DRM 개발을 시작으로 컨테이너 기반 아키텍처 리서치를 거쳐, 지금은 통합검색 엣지 플랫폼을 개발하고 있습니다. 시스템의 성능 개선과 컨테이너 관련 기술에 관심이 많고 개발환경과 키보드를 꾸미는 걸 좋아합니다.

  • ▣ 01장: 들어가며
    •  
  • ▣ 02장: BPF란?
    • 2.1 cBPF
    • 2.2 eBPF
    • 2.3 BCC, bpftrace, 그리고 IO Visor
    • 2.4 트레이싱과 샘플링
    •  
  • ▣ 03장: BPF의 개념
    • 3.1 BPF 아키텍처
    • 3.2 BPF 프로그램 타입
    • 3.3 맵과 오브젝트 피닝
      • 3.3.1 맵
      • 3.3.2 오브젝트 피닝
    • 3.4 BTF와 CO-RE
    • 3.5 테일 콜과 BPF to BPF 콜
    • 3.6 JIT
    • 3.7 XDP와 하드웨어 오프로드
    • 3.8 헬퍼 함수
    • 3.9 검사기
    • 3.10 제약사항
    • 3.11 다른 방법과 비교
      • 3.11.1 커널 모듈
      • 3.11.2 시스템 탭
      • 3.11.3 LTTng
      • 3.11.4 Perf
      • 3.11.5 {f,l,s,uf}trace
    •  
  • ▣ 04장: 이벤트
    • 4.1 kprobe
    • 4.2 uprobe
    • 4.3 트레이스포인트
    • 4.4 USDT
    • 4.5 소프트웨어 및 하드웨어 이벤트
    •  
  • ▣ 05장: 스택 트레이스
    • 5.1 스택 트레이스 종류
      • 5.1.1 프레임포인터
      • 5.1.2 DWARF
      • 5.1.3 LBR
      • 5.1.4 ORC
    • 5.2 스택 정보 수집
    • 5.3 가시화
      • 5.3.1 플레임그래프
      • 5.3.2 플레임스코프
    •  
  • ▣ 06장: BPF 다루기
    • 6.1 환경 설정
      • 6.1.1 리눅스 머신
      • 6.1.2 커널과 커널 헤더
      • 6.1.3 배포판별 패키지
      • 6.1.4 도커
    • 6.2 BCC tools
    • 6.3 bpftrace
      • 6.3.1 예제로 살펴보기
      • 6.3.2 기본 문법
      • 6.3.3 프루브
      • 6.3.4 필터
      • 6.3.5 액션
      • 6.3.6 변수
      • 6.3.7 함수
      • 6.3.8 복잡한 구조체 확인
      • 6.3.9 플레임스코프
    •  
  • ▣ 07장: BCC 프로그래밍
    • 7.1 예제로 살펴보기
    • 7.2 BPF 초기화
    • 7.3 이벤트
      • 7.3.1 kprobe와 kretprobe
      • 7.3.2 트레이스포인트
      • 7.3.3 kfunc와 kretfunc
      • 7.3.4 uprobe와 uretprobe
      • 7.3.5 USDT
    • 7.4 맵
      • 7.4.1 파이썬에서 맵 다루기
    • 7.5 커널 및 사용자 영역의 데이터
    • 7.6 출력 채널
    • 7.7 심벌 처리
    • 7.8 스택 트레이스
    • 7.9 TC와 XDP
    • 7.10 오브젝트 피닝
    • 7.11 테일 콜
    •  
  • ▣ 08장: BPF tool과 BTF
    • 8.1 BPF tool
    • 8.2 BTF
    •  
  • ▣ 09장: 시스템과 애플리케이션
    • 9.1 시스템
      • 9.1.1 CPU
      • 9.1.2 메모리
      • 9.1.3 파일 시스템
      • 9.1.4 블록 I/O
      • 9.1.5 네트워크
    • 9.2 애플리케이션
      • 9.2.1 C/C++
      • 9.2.2 고랭
      • 9.2.3 러스트
      • 9.2.4 자바
      • 9.2.5 파이썬
      • 9.2.6 노드
      • 9.2.7 루비
      • 9.2.8 펄
      • 9.2.9 PHP
      • 9.2.10 Bash
    •  
  • ▣ 10장: 컨테이너 및 클러스터 환경
    • 10.1 컨테이너
      • 10.1.1 cgroup
      • 10.1.2 네임스페이스
      • 10.1.3 컨테이너 필터링
      • 10.1.4 USDT, UPROBE
    • 10.2 쿠버네티스
      • 10.2.1 kubectl Trace
      • 10.2.2 Inspektor Gadget
    •  
  • ▣ 11장: 모니터링
    • 11.1 ebpf exporter
    • 11.2 tracee
    •  
  • ▣ 부록A: 트러블슈팅
    •  
  • ▣ 부록B: 저수준 BPF 프로그래밍
    • B.1 libbpf 프로그래밍
    • B.2 커널의 BPF 예제
    •  
  • ▣ 부록C: 결함 주입
    •  
  • ▣ 부록D: 실습 환경 구축