리눅스 시스템에서 발생하는 문제를 찾고 해결하기 위한 방법을 알려드립니다!
이 책은 리눅스 시스템을 관찰하기 위한 도구로 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 플레임스코프
- 5.1 스택 트레이스 종류
- ▣ 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 플레임스코프
- 6.1 환경 설정
- ▣ 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
- 9.1 시스템
- ▣ 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
- 10.1 컨테이너
- ▣ 11장: 모니터링
- 11.1 ebpf exporter
- 11.2 tracee
- ▣ 부록A: 트러블슈팅
- ▣ 부록B: 저수준 BPF 프로그래밍
- B.1 libbpf 프로그래밍
- B.2 커널의 BPF 예제
- ▣ 부록C: 결함 주입
- ▣ 부록D: 실습 환경 구축
- GitHub 저장소: https://github.com/wikibook/bpf
- ZIP 형식으로 다운로드: https://github.com/wikibook/bpf/archive/master.zip