1부.측정
1장.너무느린내프로그램
1.1데이터센터의측면
1.2데이터센터하드웨어
1.3데이터센터소프트웨어
1.4긴꼬리지연시간
1.5프레임워크에관한고찰
1.6크기정도산정
1.7트랜잭션이느린이유
1.85가지기본적인자원들
1.9요약
2장.CPU측정
2.1과거에서지금까지의발자취
2.2지금의위치
2.3add명령어의지연시간측정
2.4직선형코드의실수
2.5간단한반복문,반복문오버헤드실수,컴파일러최적화실수
2.6사용되지않는변수로인한실패
2.7향상된반복문
2.8의존적인변수들
2.9실제실행지연시간
2.10몇가지추가차이점
2.11요약
연습
3장.메모리측정
3.1메모리타이밍
3.2메모리
3.3캐시구조
3.4데이터정렬
3.5변환색인버퍼구조
3.6측정
3.7캐시라인크기측정
3.8문제:N+1프리패칭
3.9종속적인로드
3.10무작위가아닌DRAM
3.11캐시계층별크기측정
3.12캐시계층별접근도측정
3.13변환버퍼시간
3.14활용도낮은캐시
3.15요약
연습
4장.CPU와메모리의상호작용
4.1캐시상호작용
4.2간단한행렬곱셈의다양성
4.3예측
4.4초기화,크로스체크그리고관찰
4.5초기의결과
4.6더빠른행렬곱셈,전치방법
4.7더빠른행렬곱셈과하위블록방법
4.8캐시인지계산
4.9요약
연습
5장.디스크/SSD측정
5.1하드디스크
5.2SSD
5.3소프트웨어디스크접근과디스크버퍼링
5.4디스크를빠르게읽는방법
5.5대략적인계산
5.6디스크쓰기는얼마나빠른가
5.7결과
5.8디스크읽기
5.9디스크에쓰기
5.10SSD읽기
5.11SSD에쓰기
5.12다중전송
5.13요약
연습
6장.네트워크측정
6.1이더넷
6.2허브,스위치,라우터
6.3TCP/IP
6.4패킷
6.5원격프로시저호출(RPC)
6.6슬롭
6.7네트워크트래픽관찰
6.8간단한RPC메시지정의
6.9샘플로깅설계
6.10샘플RPC를이용한클라이언트서버시스템
6.11간단한서버프로그램
6.12스핀락
6.13샘플클라이언트프로그램
6.14하나의샘플클라이언트서버RPC측정
6.15RPC로그후처리
6.16관찰
6.17요약
연습
7장.디스크와네트워크데이터베이스의상호작용
7.1시간정렬
7.2다중클라이언트
7.3스핀락
7.4실험1
7.5디스크기반데이터베이스
7.6실험2
7.7실험3
7.8로깅
7.9트랜잭션지연시간의다양성이해
7.10요약
연습
2부.관찰
8장.로깅
8.1관찰도구
8.2로깅
8.3기본적인로깅
8.4확장된로깅
8.5타임스탬프
8.6RPCID
8.7로그파일포맷
8.8로그파일관리
8.9요약
9장.측정결과의통합
9.1균일한속도와버스트이벤트
9.2측정간격
9.3타임라인
9.4타임라인의더많은요약
9.5시간규모히스토그램
9.6이벤트별측정집계
9.7시간에따른값의패턴
9.8시간간격업데이트
9.9트랜잭션예제
9.10결론
10장.대시보드
10.1샘플서비스
10.2샘플대시보드
10.3마스터대시보드
10.4인스턴스별대시보드
10.5서버별대시보드
10.6정상상태검사
10.7요약
연습
11장.다른도구들
11.1관찰도구의종류
11.2관찰데이터
11.3top명령어
11.4/proc과/sys수도파일
11.5time명령어
11.6perf명령어
11.7oprofile,CPU프로파일러
11.8strace,시스템콜
11.9ltrace,CPUC라이브러리호출
11.10ftrace,CPU추적
11.11mtrace,메모리할당/해제
11.12blktrace,디스크추적
11.13tcpdump와와이어샤크,네트워크추적
11.14locktrace,임계구역락
11.15부하,외부호출,그리고트랜잭션지연시간
11.16요약
연습
12장.추적
12.1추적의장점
12.2추적의단점
12.3시작하며묻는세가지질문
12.4예제:초기의프로그램카운터추적
12.5예제:함수별카운트와시간
12.6사례연구:지메일의함수별추적
12.7요약
13장.관찰도구설계원칙
13.1관찰의대상
13.2관찰의정도
13.3오버헤드의정도
13.4설계결과
13.5사례연구:히스토그램버킷
13.6데이터디스플레이설계
13.7요약
3부.커널-사용자추적
14장.KUtrace:목적,설계,구현
14.1개요
14.2목표
14.3설계
14.4구현
14.5커널패치와모듈
14.6컨트롤프로그램
14.7후처리
14.8보안
14.9요약
15장.KUtrace:리눅스커널패치
15.1추적버퍼데이터구조
15.2가공되지않은추적블록형태
15.3추적항목
15.4IPC추적항목
15.5타임스탬프
15.6이벤트번호
15.7중첩된추적항목
15.8코드
15.9패킷추적
15.10AMD/인텔x86-64패치
15.11요약
연습
16장.KUtrace:리눅스커널모듈
16.1커널인터페이스데이터구조
16.2모듈로드/언로드
16.3초기화와추적제어
16.4추적요청구현
16.5Insert1
16.6InsertN
16.7새로운커널블록으로전환
16.8요약
17장.KUtrace:사용자모드런타임제어
17.1추적제어
17.2홀로동작하는kutrace_control프로그램
17.3kutrace_lib라이브러리
17.4커널모듈을제어하는인터페이스
17.5요약
18장.KUtrace:후처리
18.1후처리상세보기
18.2rawtoevent프로그램
18.3eventtospan프로그램
18.4spantotrim프로그램
18.5spantospan프로그램
18.6samptoname_k와samptoname_u프로그램
18.7makeself프로그램
18.8KUtraceJSON형태
18.9요약
19장.KUtrace:소프트웨어역동성디스플레이
19.1개요
19.21구역,제어
19.32구역,Y축
19.43구역,타임라인
19.54구역,IPC범례
19.65구역,X축
19.76구역,저장/복구
19.8보조제어
19.9요약
4부.추론
20장.찾고자하는것
20.1개요
21장.너무많은실행
21.1개요
21.2프로그램
21.3미스터리
21.4탐구및추론
21.5미스터리이해
21.6요약
22장.느린실행
22.1개요
22.2프로그램
22.3미스터리
22.4부동소수점방해프로그램
22.5메모리방해프로그램
22.6미스터리의이해
22.7요약
23장.CPU대기
23.1프로그램
23.2미스터리
23.3탐구와추론
23.4미스터리2
23.5미스터리2의이해
23.6보너스미스터리
23.7요약
연습
24장.메모리대기
24.1프로그램
24.2미스터리
24.3탐구와추론
24.4미스터리2:페이지테이블접근
24.5미스터리2의이해
24.6요약
연습
25장.디스크대기
25.1프로그램
25.2미스터리
25.3탐구와추론
25.440MB읽기
25.5순차적4KB블록읽기
25.6임의의4KB블록읽기
25.7SSD의40MB쓰기와동기화
25.8SSD의40MB읽기
25.9한번에두파일에접근하는두프로그램
25.10미스터리의이해
25.11요약
연습
26장.네트워크대기
26.1개요
26.2프로그램
26.3실험1
26.4실험1의미스터리
26.5실험1탐구와추론
26.6실험1의RPC소요시간
26.7실험2
26.8실험3
26.9실험4
26.10미스터리의이해
26.11추가이상현상
26.12요약
27장.락대기
27.1개요
27.2프로그램
27.3실험1:오랜락유지시간
27.3.1간단한락
27.3.2락포화
27.4실험1의미스터리
27.5실험1의탐구와추론
27.5.1락캡처
27.5.2락기아
27.6실험2:락캡처수정
27.7실험3:다중락에의한락경합수정
27.8실험4:더적은락을통한락경합수정
27.9실험5:대시보드를위한RCU를이용한락경합수정
27.10요약
28장.시간대기
28.1주기적인작업
28.2타임아웃
28.3타임슬라이싱
28.4인라인실행지연
28.5요약
29장.큐지연
29.1개요
29.2요청분포
29.3큐구조
29.4작업테스크
29.5프라이머리테스크
29.6디큐
29.7인큐
29.8스핀락
29.9“작업”루틴
29.10간단한예제
29.11가능성있는문제
29.12CPU빈도수
29.13복잡한예제
29.14CPU대기:RPC로그
29.15CPU대기:KUtrace
29.16PlainSpinLock결함
29.17근본원인
29.18PlainSpinLock수정:가시성
29.19부하분산
29.20큐길이:가시성
29.21마지막스핀
29.22추가결함
29.23크로스체크
29.24요약
연습
30장.정리
30.1배운것
30.2배우지못한것
30.3다음단계
30.4전체책요약
부록A.샘플서버
A.1샘플서버하드웨어
A.2서버연결
부록B.추적항목
B.1고정길이의추적항목
B.2가변길이의추적항목
B.3이벤트번호
B.3.1커널모드KUtrace패치로삽입된이벤트
B.3.2유저모드코드로삽입된이벤트
B.3.3후처리코드로삽입된이벤트