시스템 성능 엔지니어링 (시스템 성능 분석과 문제 해결을 위해 알아야 할 거의 모든 것)

시스템 성능 엔지니어링 (시스템 성능 분석과 문제 해결을 위해 알아야 할 거의 모든 것)

$62.00
Description
《시스템 성능 엔지니어링》은 운영 체제와 애플리케이션의 성능을 이해하고 최적화하기 위한 개념, 전략, 도구 및 튜닝 기법을 종합적으로 다룹니다. 개발자에게 이러한 도구와 기법에 대한 깊은 이해는 필수적이며, 이 책에서 제시하는 전략은 사용자 경험 향상과 비용 절감으로 직결됩니다. 특히 인스턴스 단위로 과금되는 클라우드 환경에서는 이러한 개선 효과가 더 크게 나타납니다. 저자는 운영 체제, 하드웨어, 애플리케이션 이론을 간결하게 정리하여 성능 분석 경험이 없는 독자라도 빠르게 핵심을 이해할 수 있도록 안내합니다. 확장 BPF(eBPF)를 포함한 최신 분석 도구와 기법을 심도 있게 설명하며, 클라우드·웹·엔터프라이즈 시스템에서 최상의 성능을 이끌어내는 실질적인 방법을 제시합니다.
저자

브렌던 그레그

컴퓨팅 성능과 클라우드 컴퓨팅 분야의 세계적인 전문가입니다. 현재 인텔 펠로우(Intel Fellow)로서 AI·클라우드 성능 엔지니어링을 이끌고 있으며, 이전에는 넷플릭스의 시니어 성능 아키텍트로 성능 설계·평가·분석·튜닝을 총괄했습니다. ≪BPF 성능 분석 도구≫(인사이트, 2021)를 비롯해 여러 기술서를 집필했으며, USENIX LISA 공로상을 받았습니다. 또한 커널 엔지니어와 성능 책임자로 활동했으며, USENIX LISA 2018 컨퍼런스의 프로그램 공동 의장을 맡은 바 있습니다.플레임 그래프(flame graph)를 비롯해 여러 운영 체제에 포함된 성능 도구와 시각화 기법을 고안해 보급한 성과로도 널리 인정받고 있습니다.

목차

1장 소개
1.1 시스템 성능
1.2 역할
1.3 활동
1.4 관점
1.5 성능 분석의 어려움
__1.5.1 주관성
__1.5.2 복잡성
__1.5.3 복합 원인
__1.5.4 여러 성능 문제
1.6 지연시간
1.7 관측가능성
__1.7.1 카운터, 통계, 지표
__1.7.2 프로파일링
__1.7.3 트레이싱
1.8 실험
1.9 클라우드 컴퓨팅
1.10 방법론
__1.10.1 60초 리눅스 성능 분석
1.11 사례 연구
__1.11.1 느린 디스크
__1.11.2 소프트웨어 변경
__1.11.3 추가 자료
1.12 참고 자료

2장 방법론
2.1 용어
2.2 모델
__2.2.1 테스트 중인 시스템
__2.2.2 큐 시스템
2.3 개념
__2.3.1 지연시간
__2.3.2 시간 스케일
__2.3.3 트레이드오프
__2.3.4 튜닝을 위한 노력
__2.3.5 적합성의 수준
__2.3.6 분석을 언제 중단할 것인가
__2.3.7 성능 개선의 한시성
__2.3.8 부하 vs. 아키텍처
__2.3.9 규모 확장성
__2.3.10 지표
__2.3.11 사용률
__2.3.12 포화도
__2.3.13 프로파일링
__2.3.14 캐싱
__2.3.15 모른다는 것을 아는 것들
2.4 관점
__2.4.1 자원 분석
__2.4.2 워크로드 분석
2.5 방법론
__2.5.1 가로등 반방법론
__2.5.2 임의 변경 반방법론
__2.5.3 다른 사람 비난 반방법론
__2.5.4 전용 체크리스트 방법론
__2.5.5 문제 내역서
__2.5.6 과학적 방법론
__2.5.7 진단 사이클
__2.5.8 도구 방법론
__2.5.9 USE 방법론
__2.5.10 RED 방법론
__2.5.11 워크로드 특성화
__2.5.12 드릴다운 분석
__2.5.13 지연시간 분석
__2.5.14 R 방법론
__2.5.15 이벤트 트레이싱
__2.5.16 기준 통계
__2.5.17 정적 성능 튜닝
__2.5.18 캐시 튜닝
__2.5.19 마이크로 벤치마킹
__2.5.20 성능 최적화를 위한 지침
2.6 모델링
__2.6.1 엔터프라이즈 환경 vs. 클라우드 환경
__2.6.2 시각적 성능 식별
__2.6.3 암달의 확장성 법칙
__2.6.4 일반 확장성 법칙
__2.6.5 큐 이론
2.7 수용량 계획
__2.7.1 리소스 한계
__2.7.2 요인 분석
__2.7.3 스케일링 솔루션
2.8 통계
__2.8.1 성능 향상 정량화
__2.8.2 평균
__2.8.3 표준 편차, 백분위, 중앙값
__2.8.4 변동 계수
__2.8.5 다봉 분포
__2.8.6 극단값
2.9 모니터링
__2.9.1 시간에 따른 패턴
__2.9.2 모니터링 제품
__2.9.3 부팅 시점부터의 요약
2.10 시각화
__2.10.1 꺾은선 차트
__2.10.2 산점도
__2.10.3 히트맵
__2.10.4 타임라인 차트
__2.10.5 표면도
__2.10.6 시각화 도구
2.11 연습 문제
2.12 참고 자료

3장 운영 체제
3.1 용어
3.2 배경지식
__3.2.1 커널
__3.2.2 커널 및 사용자 모드
__3.2.3 시스템 콜
__3.2.4 인터럽트
__3.2.5 클럭과 유휴 상태
__3.2.6 프로세스
__3.2.7 스택
__3.2.8 가상 메모리
__3.2.9 스케줄러
__3.2.10 파일 시스템
__3.2.11 캐싱
__3.2.12 네트워킹
__3.2.13 장치 드라이버
__3.2.14 멀티프로세서
__3.2.15 선점
__3.2.16 자원 관리
__3.2.17 관측가능성 도구
3.3 커널
__3.3.1 유닉스
__3.3.2 BSD
__3.3.3 솔라리스
3.4 리눅스
__3.4.1 리눅스 커널 개발
__3.4.2 systemd
__3.4.3 KPTI(멜트다운)
__3.4.4 확장 BPF(Extended BPF)
3.5 기타 주제
__3.5.1 PGO 커널
__3.5.2 유니커널
__3.5.3 마이크로 커널 및 하이브리드 커널
__3.5.4 분산 운영 체제
3.6 커널 비교
3.7 연습 문제
3.8 참고 자료
__3.8.1 추가 자료

4장 관측가능성 도구
4.1 도구 적용 범위
__4.1.1 정적 성능 분석 도구
__4.1.2 비상 도구
4.2 도구 유형
__4.2.1 고정 카운터
__4.2.2 프로파일링
__4.2.3 트레이싱
__4.2.4 모니터링
4.3 관측가능성 소스
__4.3.1 /proc
__4.3.2 /sys
__4.3.3 지연 어카운팅
__4.3.4 netlink
__4.3.5 tracepoint
__4.3.6 kprobe
__4.3.7 uprobe
__4.3.8 USDT
__4.3.9 하드웨어 카운터(PMC)
__4.3.10 기타 관측가능성 소스
4.4 sar
__4.4.1 sar(1) 적용 범위
__4.4.2 sar(1) 모니터링
__4.4.3 sar(1) 실시간 모니터링
__4.4.4 sar(1) 관련 문서
4.5 트레이싱 도구
4.6 관측가능성 도구 관찰하기
4.7 연습 문제
4.8 참고 자료

5장 애플리케이션
5.1 애플리케이션 기초
__5.1.1 목표
__5.1.2 일반적인 경우 최적화하기
__5.1.3 관측가능성
__5.1.4 빅 오(Big O) 표기법
5.2 애플리케이션 성능 기법
__5.2.1 I/O 크기 변경
__5.2.2 캐싱
__5.2.3 버퍼링
__5.2.4 폴링
__5.2.5 동시성과 병렬성
__5.2.6 논블로킹 I/O
__5.2.7 프로세서 바인딩
__5.2.8 성능 최적화를 위한 지침
5.3 프로그래밍 언어
__5.3.1 컴파일 언어
__5.3.2 인터프리터 언어
__5.3.3 가상 머신
__5.3.4 가비지 컬렉션
5.4 방법론
__5.4.1 CPU 프로파일링
__5.4.2 Of-CPU 분석
__5.4.3 시스템 콜 분석
__5.4.4 USE 방법론
__5.4.5 스레드 상태 분석
__5.4.6 락 분석
__5.4.7 정적 성능 튜닝
__5.4.8 분산 트레이싱
5.5 관측가능성 도구
__5.5.1 perf
__5.5.2 profle
__5.5.3 ofcputime
__5.5.4 strace
__5.5.5 execsnoop
__5.5.6 syscount
__5.5.7 bpftrace
5.6 유의사항
__5.6.1 누락된 심벌
__5.6.2 누락된 스택
__5.7 연습 문제
__5.8 참고 자료

6장 CPU
6.1 용어
6.2 모델
__6.2.1 CPU 아키텍처
__6.2.2 CPU 메모리 캐시
__6.2.3 CPU 실행 큐
6.3 개념
__6.3.1 클럭 속도
__6.3.2 명령어
__6.3.3 명령어 파이프라인
__6.3.4 명령어 너비
__6.3.5 명령어 크기
__6.3.6 SMT
__6.3.7 IPC, CPI
__6.3.8 CPU 사용률
__6.3.9 사용자 시간/커널 시간 비율
__6.3.10 포화 상태
__6.3.11 선점
__6.3.12 우선순위 역전
__6.3.13 멀티프로세스, 멀티스레드
__6.3.14 워드 크기
__6.3.15 컴파일러 최적화
6.4 아키텍처
__6.4.1 하드웨어
__6.4.2 소프트웨어
6.5 방법론
__6.5.1 도구 방법론
__6.5.2 USE 방법론
__6.5.3 워크로드 특성화
__6.5.4 프로파일링
__6.5.5 사이클 분석
__6.5.6 성능 모니터링
__6.5.7 정적 성능 튜닝
__6.5.8 우선순위 튜닝
__6.5.9 리소스 제어
__6.5.10 CPU 바인딩
__6.5.11 마이크로 벤치마킹
6.6 관측가능성 도구
__6.6.1 uptime
__6.6.2 vmstat
__6.6.3 mpstat
__6.6.4 sar
__6.6.5 ps
__6.6.6 top
__6.6.7 pidstat
__6.6.8 time, ptime
__6.6.9 turbostat
__6.6.10 showboost
__6.6.11 pmcarch
__6.6.12 tlbstat
__6.6.13 perf
__6.6.14 profle
__6.6.15 cpudist
__6.6.16 runqlat
__6.6.17 runqlen
__6.6.18 s

출판사 서평

[이 책에서 다루는 내용]
● 하드웨어, 커널, 애플리케이션 내부 구조와 성능 특성
● 복잡한 시스템을 신속하게 진단하기 위한 성능 분석 방법론
● CPU, 메모리, 파일 시스템, 디스크, 네트워크 자원 사용 최적화
● perf, Ftrace, BPF(BCC 및 bpftrace)를 활용한 정밀 프로파일링과 트레이싱
● 클라우드 하이퍼바이저 환경에서 직면하는 성능 문제
● 더 효과적인 벤치마킹 기법