《性能之巔:洞悉系統、企業與雲計算》是2015年8月電子工業出版社出版的圖書,作者是徐章寧、吳寒思、陳磊。
內容簡介,圖書目錄,
內容簡介
大型網路、雲計算、大數據和虛擬計算機系統的快速部署已經為性能最佳化帶來了新的挑戰。本書為此提供了解決方案。國際知名的性能最佳化專家Brendan Gregg匯集了最先進的技術和工具來分析調優大型網路或雲計算的環境。本書的內容包括現代化的性能分析和容量規劃;與雲計算相關的新性能和可靠性挑戰;夜汗連雄方法料協乃協、概念、術語、工具和指標;負載與結構問題的權衡;調整作業系統、CPU、記憶體、檔案系統、磁碟、網路和匯流排;調整虛擬系統;性能相關的程式語言問題,對C、 C++、 Java和node.js編寫的應用程式分析。
圖書目錄
目錄
第1章 緒論 1
1.1 系統性能 1
1.2 人員 2
1.3 事情 3
1.4 視角 4
1.5 性能是充滿挑戰的 4
1.5.1 性能是主觀的 4
1.5.2 系統是複雜的 5
1.5.3 可能有多個問題並存 6
1.6 延時 6
1.7 動態跟蹤 7
1.8 雲計算 8
1.9 案例研究 8
1.9.1 緩慢的磁碟 9
1.9.2 軟體變更 10
1.9.3 更多閱讀 12
第2章 方法 13
2.1 術語 14
2.2 模型盛舟 14
2.2.1 受測系統 15
2.2.2 排隊系統 15
2.3 概念 16
2.3.1 延時 16
2.3.2 時間量級 17
2.3.3 權衡三角 18
2.3.4 調整的影艱應灶響 19
2.3.5 合適的層級 19
2.3.6 性能建議的時間點 20
2.3.7 負載vs.架構 20
2.3.8 擴展性 21
2.3.9 已知的未知 22
2.3.10 指標 23
2.3.11 使用率 24
2.3.12 飽和度 25
2.3.13 剖析 26
2.3.14 快取 26
2.4 視角 28
2.4.1 資源分析 28
2.4.2 工作負載分析 29
2.5 方法 30
2.5.1 疊放兵街燈反方法 31
2.5.2 隨機變動反方法 32
2.5.3 責怪他人反方法 32
2.5.4 ad hoc核對清單法 33
2.5.5 問題陳述法 33
2.5.6 科學法 34
2.5.7 診斷循環 35
2.5.8 工具法 35
2.5.9 USE方法 36
2.5.10 工作負載特徵歸納 42
2.5.11 向下挖掘分析 43
2.5.12 延時分析 44
2.5.13 R方法 45
2.5.14 事件跟蹤 45
2.5.15 基礎線統計 47
2.5.16 靜態性能調整 47
2.5.17 快取調優 47
2.5.18 微基承疊格準測試 48
2.6 建模 49
2.6.1 企業vs.雲 49
2.6.2 可視化識別 49
2.6.3 Amdahl擴展定律 51
2.6.4 通用擴展定律 52
2.6.5 排隊理論 52
2.7 容量規劃 56
2.7.1 資源極限 56
2.7.2 因素分析 58
2.7.3 擴展方案 58
2.8 統計 59
2.8.1 量化性能 59
2.8.2 平均值 60
2.8.3 標準方差、百分位數、中位數 61
2.8.4 變異係數汽虹欠 62
2.8.5 多重模態分布 62
2.8.6 異常值 63
2.9 監視 63
2.9.1 基於時間的規律 63
2.9.2 監測產品 65
2.9.3 啟動以來的信息統計 65
2.10 可視化 65
2.10.1 線圖 65
2.10.2 散點圖 66
2.10.3 熱圖 67
2.10.4 表面圖 68
2.10.5 可視化工具 69
2.11 練習 70
2.12 參考 70
第3章 作業系統 72
3.1 術語 72
3.2 背景 73
3.2.1 核心 73
3.2.2 棧 76
3.2.2 中斷和中斷執行緒 77
3.2.4 中斷優先權 78
3.2.5 進程 78
3.2.6 系統調用 80
3.2.7 虛擬記憶體 82
3.2.8 記憶體管理 82
3.2.9 調度器 83
3.2.10 檔案系統 84
3.2.11 快取 86
3.2.12 網路 87
3.2.13 設備驅動 87
3.2.14 多處理器 87
3.2.15 搶占 88
3.2.16 資源管理 88
3.2.17 觀測性 89
3.3 核心 89
3.3.1 UNIX 90
3.3.2 基於Solaris 90
3.3.3 基於Linux 93
3.3.4 差異 95
3.4 練習 96
3.5 參考 96
第4章 觀測工具 98
4.1 工具類型 98
4.1.1 計數器 99
4.1.2 跟蹤 100
4.1.3 剖析 101
4.1.4 監視(sar) 102
4.2 觀測來源 103
4.2.1 /proc 103
4.2.2 /sys 108
4.2.3 kstat 109
4.2.4 延時核算 111
4.2.5 微狀態核算 112
4.2.6 其他的觀測源 112
4.3 DTrace 114
4.3.1 靜態和動態跟蹤 115
4.3.2 探針 116
4.3.3 provider 116
4.3.4 參數 117
4.3.5 D語言 117
4.3.6 內置變數 118
4.3.7 action 118
4.3.8 變數類型 119
4.3.9 單行命令 121
4.3.10 腳本 121
4.3.11 開銷 122
4.3.12 文檔和資源 123
4.4 SystemTap 124
4.4.1 探針 124
4.4.2 tapset 125
4.4.3 action和內置變數 125
4.4.4 示例 125
4.4.5 開銷 127
4.4.6 文檔和資源 128
4.5 perf 128
4.6 觀測工具的觀測 129
4.7 練習 130
4.8 參考 130
第5章 應用程式 131
5.1 應用程式基礎 131
5.1.1 目標 132
5.1.2 常見情況的最佳化 133
5.1.3 觀測性 134
5.1.4 大O標記法 134
5.2 應用程式性能技術 135
5.2.1 選擇I/O尺寸 135
5.2.2 快取 136
5.2.3 緩衝區 136
5.2.4 輪詢 136
5.2.5 並發和並行 137
5.2.6 非阻塞I/O 139
5.2.7 處理器綁定 139
5.3 程式語言 140
5.3.1 編譯語言 140
5.3.2 解釋語言 141
5.3.3 虛擬機 142
5.3.4 垃圾回收 142
5.4 方法和分析 143
5.4.1 執行緒狀態分析 143
5.4.2 CPU剖析 146
5.4.3 系統調用分析 148
5.4.4 I/O剖析 154
5.4.5 工作負載特徵歸納 155
5.4.6 USE方法 155
5.4.7 向下挖掘法 156
5.4.8 鎖分析 156
5.4.9 靜態性能調優 159
5.5 練習 160
5.6 參考 161
第6章 CPU 162
6.1 術語 163
6.2 模型 163
6.2.1 CPU架構 163
6.2.2 CPU記憶體快取 164
6.2.3 CPU運行佇列 165
6.3 概念 165
6.3.1 時鐘頻率 165
6.3.2 指令 166
6.3.3 指令流水線 166
6.3.4 指令寬度 167
6.3.5 CPI,IPC 167
6.3.6 使用率 167
6.3.7 用戶時間/核心時間 168
6.3.8 飽和度 168
6.3.9 搶占 168
6.3.10 優先權反轉 169
6.3.11 多進程,多執行緒 169
6.3.12 字長 170
6.3.13 編譯器最佳化 171
6.4 架構 171
6.4.1 硬體 171
6.4.2 軟體 179
6.5 方法 184
6.5.1 工具法 184
6.5.2 USE方法 185
6.5.3 負載特徵歸納 186
6.5.4 剖析 187
6.5.5 周期分析 188
6.5.6 性能監控 189
6.5.7 靜態性能調優 189
6.5.8 優先權調優 189
6.5.9 資源控制 190
6.5.10 CPU綁定 190
6.5.11 微型基準測試 191
6.5.12 擴展 191
6.6 分析 192
6.6.1 uptime 192
6.6.2 vmstat 194
6.6.3 mpstat 195
6.6.4 sar 197
6.6.5 ps 198
6.6.6 top 199
6.6.7 prstat 200
6.6.8 pidstat 201
6.6.9 time和ptime 202
6.6.10 DTrace 203
6.5.11 SystemTap 209
6.6.12 perf 209
6.6.13 cpustat 215
6.6.14 其他工具 216
6.6.15 可視化 216
6.7 實驗 219
6.7.1 Ad Hoc 219
6.7.2 SysBench 220
6.8 調優 220
6.8.1 編譯器選項 221
6.8.2 調度優先權和調度類 221
6.8.3 調度器選項 221
6.8.4 進程綁定 223
6.8.5 獨占CPU組 224
6.8.6 資源控制 224
6.8.7 處理器選項(BIOS調優) 224
6.9 練習 225
6.10 參考資料 226
第7章 記憶體 228
7.1 術語 229
7.2 概念 229
7.2.1 虛擬記憶體 230
7.2.2 換頁 230
7.2.3 按需換頁 231
7.2.4 過度提交 233
7.2.5 交換 233
7.2.6 檔案系統快取占用 233
7.2.7 使用率和飽和度 234
7.2.8 分配器 234
7.2.9 字長 234
7.3 架構 234
7.3.1 硬體 235
7.3.2 軟體 239
7.3.3 進程地址空間 244
7.4 方法 248
7.4.1 工具法 249
7.4.2 USE方法 249
7.4.3 使用特徵歸納 250
7.4.4 周期分析 251
7.4.5 性能監測 251
7.4.6 泄漏檢測 252
7.4.7 靜態性能調優 252
7.4.8 資源控制 253
7.4.9 微基準測試 253
7.5 分析 253
7.5.1 vmstat 254
7.5.2 sar 256
7.5.3 slabtop 259
7.5.4 ::kmstat 260
7.5.5 ps 261
7.5.6 top 262
7.5.7 prstat 263
7.5.8 pmap 264
7.5.9 DTrace 265
7.5.10 SystemTap 269
7.5.11 其他工具 269
7.6 調優 270
7.6.1 可調參數 271
7.6.2 多個頁面大小 273
7.6.3 分配器 274
7.6.4 資源控制 274
7.7 練習 274
7.8 參考資料 276
第8章 檔案系統 278
8.1 術語 279
8.2 模型 279
8.2.1 檔案系統接口 279
8.2.2 檔案系統快取 280
8.2.3 二級快取 281
8.3 概念 281
8.3.1 檔案系統延時 281
8.3.2 快取 282
8.3.3 隨機與順序I/O 282
8.3.4 預取 283
8.3.5 預讀 284
8.3.6 寫回快取 284
8.3.7 同步寫 284
8.3.8 裸I/O和直接I/O 285
8.3.9 非阻塞I/O 285
8.3.10 記憶體映射檔案 286
8.3.11 元數據 286
8.3.12 邏輯I/O vs.物理I/O 287
8.3.13 操作並非不平等 288
8.3.14 特殊檔案系統 289
8.3.15 訪問時間戳 289
8.3.16 容量 289
8.4 架構 290
8.4.1 檔案系統I/O棧 290
8.4.2 VFS 291
8.4.3 檔案系統快取 291
8.4.4 檔案系統特性 296
8.4.5 檔案系統種類 297
8.4.6 卷和池 302
8.5 方法 303
8.5.1 磁碟分析 304
8.5.2 延時分析 304
8.5.3 負載特徵歸納 306
8.5.4 性能監控 308
8.5.5 事件跟蹤 308
8.5.6 靜態性能調優 309
8.5.7 快取調優 310
8.5.8 負載分離 310
8.5.9 記憶體檔案系統 310
8.5.10 微型基準測試 310
8.6 分析 312
8.6.1 vfsstat 312
8.6.2 fsstat 313
8.6.3 strace、truss 314
8.6.4 DTrace 314
8.6.5 SystemTap 323
8.6.6 LatencyTOP 323
8.6.7 free 324
8.6.8 top 324
8.6.9 vmstat 324
8.6.10 sar 325
8.6.11 slabtop 326
8.6.12 mdb ::kmastat 327
8.6.13 fcachestat 327
8.6.14 /proc/meminfo 328
8.6.15 mdb ::memstat 328
8.6.16 kstat 329
8.6.17 其他工具 330
8.6.18 可視化 331
8.7 實驗 331
8.7.1 Ad Hoc 332
8.7.2 微型基準測試工具 332
8.7.3 快取寫回 334
8.8 調優 334
8.8.1 應用程式調用 335
8.8.2 ext3 336
8.8.3 ZFS 336
8.9 練習 338
8.10 參考資料 339
第9章 磁碟 341
9.1 術語 342
9.2 模型 342
9.2.1 簡單磁碟 342
9.2.2 快取磁碟 343
9.2.3 控制器 344
9.3 概念 344
9.3.1 測量時間 344
9.3.2 時間尺度 346
9.3.3 快取 347
9.3.4 隨機 vs 連續I/O 347
9.3.5 讀/寫比 348
9.3.6 I/O大小 348
9.3.7 IOPS並不平等 349
9.3.8 非數據傳輸磁碟命令 349
9.3.9 使用率 349
9.3.10 飽和度 350
9.3.11 I/O等待 350
9.3.12 同步 vs 異步 351
9.3.13 磁碟 vs 應用程式I/O 351
9.4 架構 352
9.4.1 磁碟類型 352
9.4.2 接口 357
9.4.3 存儲類型 358
9.4.4 作業系統磁碟I/O棧 360
9.5 方法 363
9.5.1 工具法 364
9.5.2 USE方法 364
9.5.3 性能監控 365
9.5.4 負載特徵歸納 366
9.5.5 延時分析 367
9.5.6 事件跟蹤 368
9.5.7 靜態性能調優 369
9.5.8 快取調優 370
9.5.9 資源控制 370
9.5.10 微基準測試 370
9.5.11 伸縮 371
9.6 分析 372
9.6.1 iostat 373
9.6.2 sar 380
9.6.3 pidstat 381
9.6.4 DTrace 382
9.6.5 SystemTap 390
9.6.6 perf 390
9.6.7 iotop 391
9.6.8 iosnoop 393
9.6.9 blktrace 396
9.6.10 MegaCli 397
9.6.11 smartctl 398
9.6.12 可視化 399
9.7 實驗 402
9.7.1 Ad Hoc 402
9.7.2 自定義負載生成器 403
9.7.3 微基準測試工具 403
9.7.4 隨機讀示例 403
9.8 調優 404
9.8.1 作業系統可調參數 404
9.8.2 磁碟設備可調參數 406
9.8.3 磁碟控制器可調參數 406
9.9 練習 407
9.10 參考資料 408
第10章 網路 410
10.1 術語 411
10.2 模型 411
10.2.1 網路接口 411
10.2.2 控制器 412
10.2.3 協定棧 412
10.3 概念 413
10.3.1 網路和路由 413
10.3.2 協定 414
10.3.3 封裝 414
10.3.4 包長度 414
10.3.5 延時 415
10.3.6 緩衝 417
10.3.7 連線積壓佇列 417
10.3.8 接口協商 417
10.3.9 使用率 418
10.3.10 本地連線 418
10.4 架構 418
10.4.1 協定 418
10.4.2 硬體 421
10.4.3 軟體 423
10.5 方法 427
10.5.1 工具法 428
10.5.2 USE方法 428
10.5.3 工作負載特徵歸納 429
10.5.4 延時分析 430
10.5.5 性能監測 431
10.5.6 數據包嗅探 431
10.5.7 TCP分析 432
10.5.8 挖掘分析 433
10.5.9 靜態性能調優 433
10.5.10 資源控制 434
10.5.11 微基準測試 434
10.6 分析 435
10.6.1 netstat 435
10.6.2 sar 440
10.6.3 ifconfig 442
10.6.4 ip 443
10.6.5 nicstat 443
10.6.6 dladm 444
10.6.7 ping 445
10.6.8 traceroute 445
10.6.9 pathchar 446
10.6.10 tcpdump 446
10.6.11 snoop 447
10.6.12 Wireshark 450
10.6.13 DTrace 450
10.6.14 SystemTap 461
10.6.15 perf 461
10.6.16 其他工具 462
10.7 實驗 463
10.7.1 iperf 463
10.8 調優 464
10.8.1 Linux 465
10.8.2 Solaris 467
10.8.3 配置 469
10.9 練習 470
10.10 參考 471
第11章 雲計算 473
11.1 背景 474
11.1.1 性價比 474
11.1.2 可擴展的架構 474
11.1.3 容量規劃 475
11.1.4 存儲 477
11.1.5 多租戶 477
11.2 OS虛擬化 478
11.2.1 系統開銷 479
11.2.2 資源控制 481
11.2.3 可觀測性 484
11.3 硬體虛擬化 489
11.3.1 系統開銷 490
11.3.2 資源控制 495
11.3.3 可觀測性 498
11.4 比較 503
11.5 練習 505
11.6 參考資料 506
第12章 基準測試 508
12.1 背景 508
12.1.1 事情 509
12.1.2 有效的基準測試 509
12.1.3 基準測試之罪 511
12.2 基準測試的類型 516
12.2.1 微基準測試 517
12.2.2 模擬 518
12.2.3 回放 519
12.2.4 行業標準 519
12.3 方法 521
12.3.1 被動基準測試 521
12.3.2 主動基準測試 522
12.3.3 CPU剖析 524
12.3.4 USE方法 525
12.3.5 工作負載特徵歸納 526
12.3.6 自定義基準測試 526
12.3.7 逐漸增加負載 526
12.3.8 完整性檢查 528
12.3.9 統計分析 529
12.4 基準測試問題 530
12.5 練習 531
12.6 參考 532
第13章 案例研究 534
13.1 案例研究:紅鯨 534
13.1.1 問題陳述 535
13.1.2 支持 536
13.1.3 上手 537
13.1.4 選擇征途 538
13.1.5 USE方法 539
13.1.6 我們做完了嗎 542
13.1.7 二度出擊 542
13.1.8 基礎 543
13.1.9 忽略紅鯨 544
13.1.10 審問核心 545
13.1.11 為什麼 546
13.1.12 尾聲 548
13.2 結語 548
13.3 附加信息 549
13.4 參考 549
附錄A USE法:Linux 551
附錄B USE法:Solaris 556
附錄C sar 總結 561
附錄D DTrace單行命令 563
附錄E 從DTrace到SystemTap 573
附錄F 精選練習題答案 582
附錄G 系統性能名人錄 585
2.5.13 R方法 45
2.5.14 事件跟蹤 45
2.5.15 基礎線統計 47
2.5.16 靜態性能調整 47
2.5.17 快取調優 47
2.5.18 微基準測試 48
2.6 建模 49
2.6.1 企業vs.雲 49
2.6.2 可視化識別 49
2.6.3 Amdahl擴展定律 51
2.6.4 通用擴展定律 52
2.6.5 排隊理論 52
2.7 容量規劃 56
2.7.1 資源極限 56
2.7.2 因素分析 58
2.7.3 擴展方案 58
2.8 統計 59
2.8.1 量化性能 59
2.8.2 平均值 60
2.8.3 標準方差、百分位數、中位數 61
2.8.4 變異係數 62
2.8.5 多重模態分布 62
2.8.6 異常值 63
2.9 監視 63
2.9.1 基於時間的規律 63
2.9.2 監測產品 65
2.9.3 啟動以來的信息統計 65
2.10 可視化 65
2.10.1 線圖 65
2.10.2 散點圖 66
2.10.3 熱圖 67
2.10.4 表面圖 68
2.10.5 可視化工具 69
2.11 練習 70
2.12 參考 70
第3章 作業系統 72
3.1 術語 72
3.2 背景 73
3.2.1 核心 73
3.2.2 棧 76
3.2.2 中斷和中斷執行緒 77
3.2.4 中斷優先權 78
3.2.5 進程 78
3.2.6 系統調用 80
3.2.7 虛擬記憶體 82
3.2.8 記憶體管理 82
3.2.9 調度器 83
3.2.10 檔案系統 84
3.2.11 快取 86
3.2.12 網路 87
3.2.13 設備驅動 87
3.2.14 多處理器 87
3.2.15 搶占 88
3.2.16 資源管理 88
3.2.17 觀測性 89
3.3 核心 89
3.3.1 UNIX 90
3.3.2 基於Solaris 90
3.3.3 基於Linux 93
3.3.4 差異 95
3.4 練習 96
3.5 參考 96
第4章 觀測工具 98
4.1 工具類型 98
4.1.1 計數器 99
4.1.2 跟蹤 100
4.1.3 剖析 101
4.1.4 監視(sar) 102
4.2 觀測來源 103
4.2.1 /proc 103
4.2.2 /sys 108
4.2.3 kstat 109
4.2.4 延時核算 111
4.2.5 微狀態核算 112
4.2.6 其他的觀測源 112
4.3 DTrace 114
4.3.1 靜態和動態跟蹤 115
4.3.2 探針 116
4.3.3 provider 116
4.3.4 參數 117
4.3.5 D語言 117
4.3.6 內置變數 118
4.3.7 action 118
4.3.8 變數類型 119
4.3.9 單行命令 121
4.3.10 腳本 121
4.3.11 開銷 122
4.3.12 文檔和資源 123
4.4 SystemTap 124
4.4.1 探針 124
4.4.2 tapset 125
4.4.3 action和內置變數 125
4.4.4 示例 125
4.4.5 開銷 127
4.4.6 文檔和資源 128
4.5 perf 128
4.6 觀測工具的觀測 129
4.7 練習 130
4.8 參考 130
第5章 應用程式 131
5.1 應用程式基礎 131
5.1.1 目標 132
5.1.2 常見情況的最佳化 133
5.1.3 觀測性 134
5.1.4 大O標記法 134
5.2 應用程式性能技術 135
5.2.1 選擇I/O尺寸 135
5.2.2 快取 136
5.2.3 緩衝區 136
5.2.4 輪詢 136
5.2.5 並發和並行 137
5.2.6 非阻塞I/O 139
5.2.7 處理器綁定 139
5.3 程式語言 140
5.3.1 編譯語言 140
5.3.2 解釋語言 141
5.3.3 虛擬機 142
5.3.4 垃圾回收 142
5.4 方法和分析 143
5.4.1 執行緒狀態分析 143
5.4.2 CPU剖析 146
5.4.3 系統調用分析 148
5.4.4 I/O剖析 154
5.4.5 工作負載特徵歸納 155
5.4.6 USE方法 155
5.4.7 向下挖掘法 156
5.4.8 鎖分析 156
5.4.9 靜態性能調優 159
5.5 練習 160
5.6 參考 161
第6章 CPU 162
6.1 術語 163
6.2 模型 163
6.2.1 CPU架構 163
6.2.2 CPU記憶體快取 164
6.2.3 CPU運行佇列 165
6.3 概念 165
6.3.1 時鐘頻率 165
6.3.2 指令 166
6.3.3 指令流水線 166
6.3.4 指令寬度 167
6.3.5 CPI,IPC 167
6.3.6 使用率 167
6.3.7 用戶時間/核心時間 168
6.3.8 飽和度 168
6.3.9 搶占 168
6.3.10 優先權反轉 169
6.3.11 多進程,多執行緒 169
6.3.12 字長 170
6.3.13 編譯器最佳化 171
6.4 架構 171
6.4.1 硬體 171
6.4.2 軟體 179
6.5 方法 184
6.5.1 工具法 184
6.5.2 USE方法 185
6.5.3 負載特徵歸納 186
6.5.4 剖析 187
6.5.5 周期分析 188
6.5.6 性能監控 189
6.5.7 靜態性能調優 189
6.5.8 優先權調優 189
6.5.9 資源控制 190
6.5.10 CPU綁定 190
6.5.11 微型基準測試 191
6.5.12 擴展 191
6.6 分析 192
6.6.1 uptime 192
6.6.2 vmstat 194
6.6.3 mpstat 195
6.6.4 sar 197
6.6.5 ps 198
6.6.6 top 199
6.6.7 prstat 200
6.6.8 pidstat 201
6.6.9 time和ptime 202
6.6.10 DTrace 203
6.5.11 SystemTap 209
6.6.12 perf 209
6.6.13 cpustat 215
6.6.14 其他工具 216
6.6.15 可視化 216
6.7 實驗 219
6.7.1 Ad Hoc 219
6.7.2 SysBench 220
6.8 調優 220
6.8.1 編譯器選項 221
6.8.2 調度優先權和調度類 221
6.8.3 調度器選項 221
6.8.4 進程綁定 223
6.8.5 獨占CPU組 224
6.8.6 資源控制 224
6.8.7 處理器選項(BIOS調優) 224
6.9 練習 225
6.10 參考資料 226
第7章 記憶體 228
7.1 術語 229
7.2 概念 229
7.2.1 虛擬記憶體 230
7.2.2 換頁 230
7.2.3 按需換頁 231
7.2.4 過度提交 233
7.2.5 交換 233
7.2.6 檔案系統快取占用 233
7.2.7 使用率和飽和度 234
7.2.8 分配器 234
7.2.9 字長 234
7.3 架構 234
7.3.1 硬體 235
7.3.2 軟體 239
7.3.3 進程地址空間 244
7.4 方法 248
7.4.1 工具法 249
7.4.2 USE方法 249
7.4.3 使用特徵歸納 250
7.4.4 周期分析 251
7.4.5 性能監測 251
7.4.6 泄漏檢測 252
7.4.7 靜態性能調優 252
7.4.8 資源控制 253
7.4.9 微基準測試 253
7.5 分析 253
7.5.1 vmstat 254
7.5.2 sar 256
7.5.3 slabtop 259
7.5.4 ::kmstat 260
7.5.5 ps 261
7.5.6 top 262
7.5.7 prstat 263
7.5.8 pmap 264
7.5.9 DTrace 265
7.5.10 SystemTap 269
7.5.11 其他工具 269
7.6 調優 270
7.6.1 可調參數 271
7.6.2 多個頁面大小 273
7.6.3 分配器 274
7.6.4 資源控制 274
7.7 練習 274
7.8 參考資料 276
第8章 檔案系統 278
8.1 術語 279
8.2 模型 279
8.2.1 檔案系統接口 279
8.2.2 檔案系統快取 280
8.2.3 二級快取 281
8.3 概念 281
8.3.1 檔案系統延時 281
8.3.2 快取 282
8.3.3 隨機與順序I/O 282
8.3.4 預取 283
8.3.5 預讀 284
8.3.6 寫回快取 284
8.3.7 同步寫 284
8.3.8 裸I/O和直接I/O 285
8.3.9 非阻塞I/O 285
8.3.10 記憶體映射檔案 286
8.3.11 元數據 286
8.3.12 邏輯I/O vs.物理I/O 287
8.3.13 操作並非不平等 288
8.3.14 特殊檔案系統 289
8.3.15 訪問時間戳 289
8.3.16 容量 289
8.4 架構 290
8.4.1 檔案系統I/O棧 290
8.4.2 VFS 291
8.4.3 檔案系統快取 291
8.4.4 檔案系統特性 296
8.4.5 檔案系統種類 297
8.4.6 卷和池 302
8.5 方法 303
8.5.1 磁碟分析 304
8.5.2 延時分析 304
8.5.3 負載特徵歸納 306
8.5.4 性能監控 308
8.5.5 事件跟蹤 308
8.5.6 靜態性能調優 309
8.5.7 快取調優 310
8.5.8 負載分離 310
8.5.9 記憶體檔案系統 310
8.5.10 微型基準測試 310
8.6 分析 312
8.6.1 vfsstat 312
8.6.2 fsstat 313
8.6.3 strace、truss 314
8.6.4 DTrace 314
8.6.5 SystemTap 323
8.6.6 LatencyTOP 323
8.6.7 free 324
8.6.8 top 324
8.6.9 vmstat 324
8.6.10 sar 325
8.6.11 slabtop 326
8.6.12 mdb ::kmastat 327
8.6.13 fcachestat 327
8.6.14 /proc/meminfo 328
8.6.15 mdb ::memstat 328
8.6.16 kstat 329
8.6.17 其他工具 330
8.6.18 可視化 331
8.7 實驗 331
8.7.1 Ad Hoc 332
8.7.2 微型基準測試工具 332
8.7.3 快取寫回 334
8.8 調優 334
8.8.1 應用程式調用 335
8.8.2 ext3 336
8.8.3 ZFS 336
8.9 練習 338
8.10 參考資料 339
第9章 磁碟 341
9.1 術語 342
9.2 模型 342
9.2.1 簡單磁碟 342
9.2.2 快取磁碟 343
9.2.3 控制器 344
9.3 概念 344
9.3.1 測量時間 344
9.3.2 時間尺度 346
9.3.3 快取 347
9.3.4 隨機 vs 連續I/O 347
9.3.5 讀/寫比 348
9.3.6 I/O大小 348
9.3.7 IOPS並不平等 349
9.3.8 非數據傳輸磁碟命令 349
9.3.9 使用率 349
9.3.10 飽和度 350
9.3.11 I/O等待 350
9.3.12 同步 vs 異步 351
9.3.13 磁碟 vs 應用程式I/O 351
9.4 架構 352
9.4.1 磁碟類型 352
9.4.2 接口 357
9.4.3 存儲類型 358
9.4.4 作業系統磁碟I/O棧 360
9.5 方法 363
9.5.1 工具法 364
9.5.2 USE方法 364
9.5.3 性能監控 365
9.5.4 負載特徵歸納 366
9.5.5 延時分析 367
9.5.6 事件跟蹤 368
9.5.7 靜態性能調優 369
9.5.8 快取調優 370
9.5.9 資源控制 370
9.5.10 微基準測試 370
9.5.11 伸縮 371
9.6 分析 372
9.6.1 iostat 373
9.6.2 sar 380
9.6.3 pidstat 381
9.6.4 DTrace 382
9.6.5 SystemTap 390
9.6.6 perf 390
9.6.7 iotop 391
9.6.8 iosnoop 393
9.6.9 blktrace 396
9.6.10 MegaCli 397
9.6.11 smartctl 398
9.6.12 可視化 399
9.7 實驗 402
9.7.1 Ad Hoc 402
9.7.2 自定義負載生成器 403
9.7.3 微基準測試工具 403
9.7.4 隨機讀示例 403
9.8 調優 404
9.8.1 作業系統可調參數 404
9.8.2 磁碟設備可調參數 406
9.8.3 磁碟控制器可調參數 406
9.9 練習 407
9.10 參考資料 408
第10章 網路 410
10.1 術語 411
10.2 模型 411
10.2.1 網路接口 411
10.2.2 控制器 412
10.2.3 協定棧 412
10.3 概念 413
10.3.1 網路和路由 413
10.3.2 協定 414
10.3.3 封裝 414
10.3.4 包長度 414
10.3.5 延時 415
10.3.6 緩衝 417
10.3.7 連線積壓佇列 417
10.3.8 接口協商 417
10.3.9 使用率 418
10.3.10 本地連線 418
10.4 架構 418
10.4.1 協定 418
10.4.2 硬體 421
10.4.3 軟體 423
10.5 方法 427
10.5.1 工具法 428
10.5.2 USE方法 428
10.5.3 工作負載特徵歸納 429
10.5.4 延時分析 430
10.5.5 性能監測 431
10.5.6 數據包嗅探 431
10.5.7 TCP分析 432
10.5.8 挖掘分析 433
10.5.9 靜態性能調優 433
10.5.10 資源控制 434
10.5.11 微基準測試 434
10.6 分析 435
10.6.1 netstat 435
10.6.2 sar 440
10.6.3 ifconfig 442
10.6.4 ip 443
10.6.5 nicstat 443
10.6.6 dladm 444
10.6.7 ping 445
10.6.8 traceroute 445
10.6.9 pathchar 446
10.6.10 tcpdump 446
10.6.11 snoop 447
10.6.12 Wireshark 450
10.6.13 DTrace 450
10.6.14 SystemTap 461
10.6.15 perf 461
10.6.16 其他工具 462
10.7 實驗 463
10.7.1 iperf 463
10.8 調優 464
10.8.1 Linux 465
10.8.2 Solaris 467
10.8.3 配置 469
10.9 練習 470
10.10 參考 471
第11章 雲計算 473
11.1 背景 474
11.1.1 性價比 474
11.1.2 可擴展的架構 474
11.1.3 容量規劃 475
11.1.4 存儲 477
11.1.5 多租戶 477
11.2 OS虛擬化 478
11.2.1 系統開銷 479
11.2.2 資源控制 481
11.2.3 可觀測性 484
11.3 硬體虛擬化 489
11.3.1 系統開銷 490
11.3.2 資源控制 495
11.3.3 可觀測性 498
11.4 比較 503
11.5 練習 505
11.6 參考資料 506
第12章 基準測試 508
12.1 背景 508
12.1.1 事情 509
12.1.2 有效的基準測試 509
12.1.3 基準測試之罪 511
12.2 基準測試的類型 516
12.2.1 微基準測試 517
12.2.2 模擬 518
12.2.3 回放 519
12.2.4 行業標準 519
12.3 方法 521
12.3.1 被動基準測試 521
12.3.2 主動基準測試 522
12.3.3 CPU剖析 524
12.3.4 USE方法 525
12.3.5 工作負載特徵歸納 526
12.3.6 自定義基準測試 526
12.3.7 逐漸增加負載 526
12.3.8 完整性檢查 528
12.3.9 統計分析 529
12.4 基準測試問題 530
12.5 練習 531
12.6 參考 532
第13章 案例研究 534
13.1 案例研究:紅鯨 534
13.1.1 問題陳述 535
13.1.2 支持 536
13.1.3 上手 537
13.1.4 選擇征途 538
13.1.5 USE方法 539
13.1.6 我們做完了嗎 542
13.1.7 二度出擊 542
13.1.8 基礎 543
13.1.9 忽略紅鯨 544
13.1.10 審問核心 545
13.1.11 為什麼 546
13.1.12 尾聲 548
13.2 結語 548
13.3 附加信息 549
13.4 參考 549
附錄A USE法:Linux 551
附錄B USE法:Solaris 556
附錄C sar 總結 561
附錄D DTrace單行命令 563
附錄E 從DTrace到SystemTap 573
附錄F 精選練習題答案 582
附錄G 系統性能名人錄 585