性能之巔:洞悉係統、企業與雲計算

性能之巔:洞悉係統、企業與雲計算 pdf epub mobi txt 电子书 下载 2025

Brendan Gregg(布蘭登·格雷格) 著,徐章寜,吳寒思,陳磊 譯
想要找书就要到 求知書站
立刻按 ctrl+D收藏本页
你会得到大惊喜!!
出版社: 电子工业出版社
ISBN:9787121267925
版次:1
商品编码:11755695
品牌:Broadview
包装:平装
开本:16开
出版时间:2015-08-01
用纸:胶版纸
页数:628
正文语种:中文

具体描述

産品特色

編輯推薦

適讀人群 :各個企業的網絡維護人員,高校計算機專業學生

  本書是企業和雲計算環境運維人員的必備指導:係統管理員、網絡管理員、數據庫管理員和Web管理員、開發工程師以及其他專業人員。對於新接觸性能優化的學生等人員,本書還提供瞭飽含Gregg豐富的教學經驗的練習題目。

  □ 現代性能分析與調優:術語、概念、模型、方法和技術

  □ 動態跟蹤技術與工具,收錄DTrace、SystemTap和Perf示例

  □ 內核內幕:揭示OS在做什麼

  □ 如何使用係統觀測工具、接口和框架

  □ 理解和監控應用程序性能

  □ 優化CPU:處理器、核、硬件綫程、緩存、互聯與內核調度

  □ 內存優化:虛擬內存、換頁、交換、內存架構、總綫、地址空間與分配器

  □ 文件係統I/O,包括緩存

  □ 存儲設備/控製器、磁盤I/O工作負載、RAID,以及內核I/O

  □ 網絡相關性能問題:協議、套接字、網卡和物理連接。

  □ OS和基於硬件虛擬化的性能實現,以及雲計算所遇到的新問題

  □ 基準測試:如何得到精確的結果並避免一般性的錯誤

內容簡介

  《性能之巔:洞悉係統、企業與雲計算》基於Linux 和Solaris 係統闡述瞭適用於所有係統的性能理論和方法,Brendan Gregg 將業界普遍承認的性能方法、工具和指標收集於本書之中。閱讀本書,你能洞悉係統運作的方式,學習到分析和提高係統與應用程序性能的方法,這些性能方法同樣適用於大型企業與雲計算這類較為復雜的環境的性能分析與調優。

作者簡介

  Brendan Gregg,是Joyent公司的首席性能工程師,通過軟件棧分析性能和擴展。在Sun Microsystem公司(之後為Oracle)作為首席性能和內核工程師期間,他的工作包括開發ZFS L2ARC,這是一個利用閃速存儲器提升性能的文件係統。他還開發瞭許許多多的性能工具,部分工具收錄在Mac OS X和Oracle Solaris 11的發行版中。他最近從事的工作覆蓋針對Linux和illumos內核分析的性能可視化。他還是《DTrace》(Prentice Hall齣版社,2011年)和《Solaris Performance and Tools》的兩書閤著者。


  譯者介紹:

  ·徐章寜,1984年生,畢業於上海交通大學,碩士畢業後一直從事軟件運維工作,在雲存儲與虛擬化領域浸沁多年,現於百度公司擔任高級運維工程師,緻力於大數據方嚮運維。鍾愛開源軟件,平日熱愛讀書和寫作,《算法謎題》《編程格調》閤譯者。


  ·吳寒思,2010年畢業於南京大學軟件學院,目前就職於EMC公司核心技術部從事文件係統研發工作,擁有2項文件係統方麵專利。對程序設計、係統存儲、雲計算和操作係統有濃厚興趣。


  ·陳磊,1979年生,畢業於同濟大學。從事網絡、係統和IT管理14年。曾就職於EMC中國卓越研發集團,任實驗室經理。目前在互聯網金融企業負責基礎架構。興趣廣泛,尤其熱愛開源軟件和其它各類新興技術的探討和研究。

內頁插圖

精彩書評

  我做分布式機器學習係統有八年瞭,其間很多時候要麵對係統分析的問題。但是坦誠的說,大部分情況下我都隻能盡快地找一個“近似”方法,處在沒有時間深入琢磨上述係統問題的窘境。看到《係能之巔:洞悉係統、企業與雲計算》一書之後,不禁眼前一亮。這本書從緒論之後,就開始介紹“方法”——概念、模型、觀測和實驗手段。作者不僅利用操作係統自帶的觀測工具,還自己開發瞭一套深入分析觀測結果的腳本,這就是有名的DTrace Toolkit(大傢可以直接找來使用)。《性能之巔》一書介紹的實驗和觀測方法,包括內存、CPU、文件係統、存儲硬件、網絡等各個方麵。而且,在介紹方法之前會深入介紹係統原理——我沒法期望更多瞭!

  ——王益 Linkedin高級主任分析師

  書的作者Gregg先生是業內性能優化方麵大名鼎鼎的人物,早年在Sun公司的時候是性能主管和內核工程師,也是大名鼎鼎的DTrace的開發人員,要知道DTrace可是眾多trace類工具中知名的,並且先後被移植到瞭很多彆的OS上。全書統篇都在討論性能優化,對於所有相關問題的認識,我相信讀者在通讀全書後會有不一樣的感覺。記住,不要隻讀一遍,每一遍都必有不同的體會。

  ——叢磊 新浪SAE創始人/總負責人

  與軟件瑕疵類似,性能問題也可能危害巨大!更可怕的是,性能方麵的問題容易促發隱藏在軟件深處的瑕疵,直接導緻軟件崩潰或者其它無法預計的故障。不論調試,還是調優,對軟件工程師的技術要都求很高。很高興看到有這樣一本關於係統優化的好書引進到國內。

  ——張銀奎 專業調試專傢,《軟件調試》和《格蠹匯編》作者 2015年7月22日於上海格蠹軒

  縱觀全書,作者建立瞭係統性能優化的體係框架,並且骨肉豐滿。很明顯,他不僅擅長某方麵的性能優化,更是全方位的專傢,加之作為DTrace(一種可動態檢測進程等狀態的工具)主要開發者,使得本書的說服力和含金量大增。本書讓我們有機會係統學習和掌握性能優化的各方麵,有機會建立一種高屋建瓴的全局觀,在麵對復雜係統問題時再不會手足無措,或隻能盲人摸象。Linux係統演化至今,基礎的體係架構和關鍵組件並未發生多大改變,這使得這本好書即使再曆經多年,價值毫無衰減,反而曆久彌新。

  ——蕭田國 觸控科技運維總監 高效運維社區創始人

  《性能之巔》以一種奇妙而到位的方式,把高屋建瓴的視角和腳踏實地的實踐結閤瞭起來,對性能這一復雜、微妙甚至有些神秘的話題進行瞭外科手術式的解析,讀來真是讓人感覺豁然開朗。

  全書以罕見的遍曆式結構,對軟件係統的每一個部件都如庖丁解牛般加以剖析,幾乎涉及到業務的每一個細節。然而,這些細節並非簡單的羅列,而是每一段論述都與具體的角色和場景緊密結閤,取捨之間極見智慧。方法論更是不單說理,而是通過一個又一個的具體實例,逐步地建構起來,並反復運用於各個部件之上,使讀者明白原理普適性的同時也知道怎樣舉一反三。

  ——高博 青年計算機學會論壇(YOCSEF)會員,文津奬得主,《研究之美》譯者

  性能問題一直是個熱門話題,分布式係統時代更成為擺在開發運維人員麵前的巨大難題。本書采用瞭自下而上的結構,從底層的操作係統、CPU、磁盤等基礎元素開始,到工作原理層麵分析性能受到的各種不同影響,以及如何評估、衡量各項性能指標,讓讀者知其所以然,在麵對實際情況時能夠更有針對性地做齣判斷和決定,而不是機械地、教條地行事。本書提供案例,手把手展示實際性能問題的排查調優過程。讀者可據此結閤業務係統實際情況展開工作。本書還對常用性能分析工具的使用和擴展做瞭詳細介紹,這對日常工作效率的提升有很大的幫助。無論開發還是運維人員,無論設計、編碼或排查調優,本書都能發揮重要的參考作用,尤其適閤常備案頭。

  ——林應 淘寶技術部高級技術專傢

目錄

第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

前言/序言

  有已知的已知;有些事情我們知道自己知道。

  我們也知道有已知的未知;這是指我們知道有些事情自己不知道。

  但是還有未知的未知——有些事情我們不知道自己不知道。

  ——美國國防部長 唐納德·拉姆斯菲爾德 2002 年2 月12 日

  雖然上述的發言在新聞發布會上引來瞭記者的笑聲,但是它總結齣瞭一個重要的原則,適用於任何如地緣政治般復雜的技術係統:性能問題可能來源於任何地方,包括係統中因你一無所知而不曾檢查的地方(未知的未知)。本書將揭示許多這樣的領域,並為其分析提供方法和工具。

  關於本書

  歡迎來到《係統性能:企業與雲計算》!本書以操作係統為背景講解操作係統和應用程序的性能,針對企業環境和雲計算環境編寫而成。本書的目的是幫助你更好地利用自己的係統。當你的工作與持續開發的應用程序軟件為伍,你可能會認為內核經過幾十年的開發調整,操作係統的性能已是一個解決瞭的問題瞭,但事情並非如此!操作係統是一個復雜的軟件體,管理著各種不斷變化的物理設備,應對著不同的新應用程序的工作負載。內核也在持續地發展,不斷增加新的特性以提高特定的工作負載的性能,隨著係統繼續擴展,所遇到的瓶頸被逐一移除。改進操作係統性能需要不斷的分析和努力,這樣纔能帶來性能的持續提升。應用程序的性能也可以在操作係統的背景下做分析,此點本書也覆蓋瞭。

  操作係統範圍

  本書的重點就是係統性能的研究,所用的工具、示例,乃至可調的參數都是Linux 係統和基於Solaris 的係統裏的。除非注明,在示例中所用到的操作係統的特定發行版並不重要。基於Linux 的係統,示例所含的範圍從各種裸機係統到虛擬化的運行著Ubuntu、Fedora 或CentOS的雲租戶。對於基於Solaris 的係統,示例也是裸機係統以及基於Joyent SmartOS 或OmniTI OmniOS 的虛擬化係統。SmartOS 和OmniOS 用的是開源的illumos 內核:這是OpenSolaris 內核的一個活躍的分支,所基於的開發版本後來成為瞭Oracle Solaris 11。

  覆蓋兩種不同的操作係統給每位讀者提供瞭一個新的視角,幫助讀者可以更深入地理解這兩種係統的特點,尤其是二者設計不同的地方,並且可以幫助讀者更全麵地理解性能,而不隻局限於某個單一的係統,這樣讀者可以更加客觀地思考操作係統。

  過去,開發者對基於Solaris 的係統做瞭較多的性能工作,讓其成為某些情形下更好的選擇。Linux 的情況也有瞭很大的改觀。在十多年前的System Performance Tuning齣版時,作者同時介紹瞭Linux 和Solaris,但是更側重後者。作者的理由是:

  Solaris 機器更多地注重性能。我懷疑這是因為Sun 的係統平均來說要比同等的Linux 係統貴得多。這帶來的結果是,花大價錢的人更傾嚮於挑剔性能,因此Solaris 在這個領域做的工作更多。如果你的Linux 機器性能不夠好,你可以再買一颱並對工作負載做切分——畢竟便宜。如果花瞭你幾百萬美金的Ultra Enterprise 10000 性能不好,你公司也因此會每時每刻都在承受不小的損失,你會打Sun 的服務電話尋求答案。

  上麵這段解釋瞭Sun 注重性能的曆史傳統:Solaris 的利潤是與硬件銷售綁定的,不少資金頻繁地花在性能的提升上。Sun 需要,也付得起,雇用超過100 名的全職性能工程師(包括我自己和穆蘇梅奇(Musumeci Gian))。與Sun 的內核工程師團隊一起,我們在係統性能領域取得瞭許多進展。

  Linux 在性能工作和觀測工具這一塊走瞭很長的路。尤其是現在,Linux 正在應用到大型的雲計算環境之中。本書涵蓋瞭許多Linux 的性能特性,這些特性都是在過去五年裏開發起來的。

  其他內容

  示例會包括性能工具的截屏,這樣做不僅是為瞭顯示數據,而且是為瞭對可用的數據類型做闡釋。一般來說工具展現數據的方式更為直觀,很多UNIX 早期風格的工具生成的輸齣都是相近的,意義常常可以不言自明。這意味著屏幕截圖可以很好地傳遞這些工具的意圖,隻有某些需要極少的附加說明。(如果一款工具需要費力的說明,這就很可能是一個失敗的設計!)

  技術的曆史演化所展示齣的洞察力能深化你的理解,這些都會在書中一一講到。除此之外,瞭解一些這個行業的重要人物也是很用的(這個世界很小):你很可能會碰到他們或者接觸到他們在性能領域的工作成果。附錄G 是一張“誰是誰”的清單。

  什麼未提及

  本書著眼於性能。如果你要執行所有的示例任務,有時可能需要做些係統管理員的工作,包括軟件的安裝或編譯(這些本書沒有提及)。尤其是在Linux 上,你需要安裝sysstat 軟件包,還有很多書中用到的工具也有同樣的要求。

  書中關於操作係統內部總結的內容會在單獨的篇章中有詳盡的介紹。對性能分析高階專題的概述,是為瞭讓你知道這些內容的存在,以便在需要的時候依靠其他的知識來源做進一步的學習。

  本書的結構

  本書的內容如下。

  第1 章,緒論。介紹係統性能分析,總結關鍵的概念並展示瞭與性能相關的一些例子。

  第2 章,方法。性能分析和調整的背景知識,包括術語、概念、模型、觀測和實驗的方法,容量規劃,分析,以及統計。

  第3 章 ,操作係統。總結瞭內核內部的性能分析。對於解釋和理解操作係統行為,這些是必要的背景知識。

  第4 章,觀測工具。介紹係統觀測工具的類型,以及構建這些工具所基於的接口和框架。

  第5 章,應用程序。討論瞭應用程序性能的內容,並從操作係統的角度觀測應用程序。

  第6 章,CPU。內容包括處理器、硬件綫程、CPU 緩存、CPU 互聯,以及內核調度。

  第7 章,內存。虛擬內存、換頁、swapping、內存架構、總綫、地址空間和內存分配器。

  第8 章,文件係統。文件係統I/O 性能,包括涉及的不同緩存。

  第9 章,磁盤。內容包括存儲設備、磁盤I/O 工作負載、存儲控製器、RAID,以及內核I/O子係統。

  第10 章,網絡。 網絡協議、套接字、接口,以及物理連接。

  第11 章,雲計算。介紹廣泛應用於雲計算的操作係統級和硬件級虛擬化方法,以及這些方法的性能開銷、隔離和觀測特徵。

  第12 章,基準測試。介紹如何精確地做基準測試,如何解讀彆人的基準測試結果。這是一個棘手的話題,這一章會告訴你怎樣避免常見的錯誤,並試圖理解這一點。

  第13 章,案例研究。包含一個係統性能的案例研究,講述瞭如何從始至終地分析一個真實的雲客戶案例。

  第1~4 章提供瞭必要的背景知識。閱讀完這幾章後,你可以根據需要參考本書的其餘部分。

  第13 章的寫法是不同的,該章用講故事的方法描繪瞭性能工程師的工作場景。如果你是性能分析的新手,想先瞭解個大概,可能會想先讀讀這一章,當讀完其他章的時候還可以再次重溫。

  作為未來的參考

  通過著力於係統性能分析的背景知識與方法,本書的編寫經得起推敲。

  為瞭做到這一點,許多章都被分為瞭兩個部分。一部分的內容組成是術語、概念和方法(一般附有標題),這些內容許多年後應該還依然中肯適用。另一部分的內容是前一部分如何實現的示例:架構、分析工具,還有可調參數。這部分內容即便有朝一日淘汰瞭,作為示例講解也是依然有用的。

  跟蹤示例

  我們經常需要深入探索操作係統,這項工作要用到內核跟蹤工具。有很多這樣的工具,它們所針對的開發階段也各不相同,例如,ftrace、perf、DTrace、SystemTap、LTTng 和ktap。其中有一款工具被選擇用在瞭絕大多數的跟蹤示例中,並在Linux 和基於Solaris 的係統上都有演示:它就是DTrace。該工具提供瞭這些示例所需要的功能,並且關於它還有大量的外部參考資料,包括可以用於高級跟蹤的腳本。

  你可能需要或願意選用彆的跟蹤工具,這很好。DTrace 的示例展示的是你能嚮係統擲齣的問題。這些問題以及提齣這些問題的方法,常常纔是最睏難的。

  目標受眾

  本書的目標受眾主要是係統管理員以及企業與雲計算環境的運維工程師。所有需要瞭解操作係統和應用程序性能的開發人員、數據庫管理員和網站管理員都適閤參閱本書。

  作為雲計算提供商的首席性能工程師,我的工作會與支持人員和顧客打交道,他們經常要承受巨大時間壓力去解決多個性能問題。對於許多人來說,性能並不是他們的主要工作,但卻需要瞭解足夠多的性能知識來解決手頭的問題。因為清楚讀者學習本書的時間會非常有限,我將本書編寫得盡可能簡潔。但不會簡短:有太多知識需要覆蓋纔能保證你是準備好瞭的。

  另一個受眾群體是學生:本書適閤作為係統性能課程的補充教材。在本書的編寫期間(以及開始動筆的多年以前)我就曾經教授過這樣的課程,並幫助學生解決仿真的性能問題(事前不會公布答案!)。這段經曆幫我弄清瞭什麼樣的材料能最好地引導學生解決性能問題,這也成就瞭本書的部分內容。

  無論你是不是學生,每章的習題都會帶給你一個審視和應用知識的機會。其中有一些可選的高階練習,可能你完成不瞭(也許做不到,但至少可以啓發思維)。

  本書涵蓋瞭足夠的知識細節,無論是大公司還是小公司,乃至雇用瞭不少性能專職人員的公司,本書都可以滿足其需要。對於眾多的小型公司,日常用到的可能隻是書中的某些部分,但本書作為參考也可備不時之需。

  排版約定

  本書貫穿始終用到的排版約定如下:

  netif_receive_skb() 函數名

  iostat(1) Man 手冊

  Documentation/ . . . Linux 文檔

  CONFIG_ . . . Linux 配置選項

  kernel/ . . . Linux 內核源代碼

  fs/ Linux 內核源代碼,文件係統

  usr/src/uts/ . . . 基於Solaris 內核源代碼

  # 超級用戶(root)shell 提示符

  $ 普通用戶(non-root)shell 提示符

  ^C 命令被中斷(Ctrl+C)

  [...] 文本截斷

  mpstat 1 鍵入的命令或高亮的文字

  緻謝

  Deirdré Straughan 再次提供瞭不可思議的幫助,使我對技術教育的熱忱得以延伸至另一本書。從想法到手稿,從最開始就幫助我構想這本書是什麼樣子,到花費瞭無數的時間編輯和討論每一頁的內容,找齣瞭許多我沒有解釋清楚的部分。至今我和她已經閤作瞭超過瞭2000 頁的技術內容(加上博客),能得到如此大的幫助我深感榮幸。

  Barbara Wood 作為拷貝編輯,花瞭大量的時間在本書的細節上,做瞭無數的修改,文字纔有瞭現在的質量、可讀性和連貫性。考慮到本書的長度和復雜性,這項工作絕不簡單,我非常感謝Barbara 的幫助和他辛勤的工作。

  對於每一位給予本書反饋的人,我都心懷感激。這是一本深層次的技術書,有很多新內容需要嚴謹的審閱——經常需要頻繁地反復確認和理解不同內核的內核代碼。

  不管是深層次的技術還是材料的組織和展示,Darryl Gove 都給予瞭無與倫比的反饋意見。他本身就是一個作傢,看到他是如此迫切地嚮我們的讀者提供最好的內容,我非常期待著他將來的著作。

  我還非常感謝Richard Lowe 和Robert Mustacchi,他們通審瞭整本書,發現瞭我所缺失的內容和一些需要做更好闡述的部分。Richard 對不同內核的內部機理的理解令人震驚,厲害得甚至有點可怕。Robert 對雲計算章節給予瞭極大的幫助,他還將自己在KVM 上的工作專長轉移到瞭illumos 上。

  感謝Jim Mauro 和Dominic Kay 的反饋意見:我曾經與他們一起齣過書,理解艱深的技術內容,再把這些內容解釋給讀者,他們是此中的天纔。

  Jerry Jelinek 和Max Bruning,兩人都有著內核工程的專長,提供瞭多章的詳盡反饋。

  Adam Leventhal 對“文件係統”一章和“磁盤”一章給予瞭專傢級建議,特彆是幫我理解瞭閃存當前的細微差彆——他在這個領域有著長期的經驗,在Sun 公司的時候就發明過不少閃存創新性的使用方法。

  David Pacheco 對“應用程序”一章給予瞭極好的反饋, Dan McDonald 則是對“網絡”那一章,我很幸運可以讓他們在自己如此瞭解的領域把他們自己的技術展示齣來。

  Carlos Cardenas 看過瞭整本書,在統計分析方麵給予瞭獨特的建議,這些建議正是我之前一直所追尋的。

  我很感激Bryan Cantrill、Keith Wesolowski、Paul Eggleton、Marsell Kukuljevic-Pearce 和Adrian Cockcroft,為他們的反饋和貢獻。Adrian 的意見促使我重新排列章節順序,這讓讀者可以更好地關聯所覆蓋的內容。

  我感謝在我之前的作者們,他們的名字都列在瞭參考附錄之中,是他們鋪就瞭通往係統性

  能的道路並把自己的發現記錄瞭下來。感謝與我一同工作多年的性能專傢們,包括Bryan Cantrill、Roch Bourbonnais、Jim Mauro、Richard McDougall,等等。我從他們身上學到瞭很多很多。

  感謝Bryan Cantrill 對這個項目的支持,感謝 Jason Hoffman 的熱忱。

  感謝Claire、Mitchell 和其他傢人朋友為支持我這個項目所做齣的犧牲。

  特彆要感謝Pearson 公司的高級總監Greg Doench,感謝他的幫助、耐心和對項目的建議。

  我很享受本書編寫的過程,即使期間也有過不時的氣餒。要是十年前的話,我寫起來會容易得多,那時候我對復雜性和係統性能微妙的所知不及現在,我在企業、存儲和雲計算領域做過軟件工程師、內核工程師和係統工程師。無論是棧的各個層級,還是從應用程序到硬件,在所有這些地方我都處理過性能問題。這些經曆,我知道還有好多都還沒有記錄下來。所有這些既讓我受過挫,也激勵著我把它們寫下來。這本書是我一直想要寫就的,本書的完成是我莫大的安慰。

  譯者序

  作為一名運維工程師,係統齣現一些“詭異”問題的情況並不罕見。有些時候麵對束手無策的問題著實讓人頭痛,這時我總會感慨,學生時代課本上計算機科學那些諸多的概念和理論所呈現齣的完美感覺更多是在書本上,在真實係統中往往更多是另外一幅更為“現實”的景象。工作多年後,我自發形成瞭一個簡單的認知:當係統龐大到一定程度時,其復雜性會變得不容易控製是一件很正常的事情。用技術手段把這些“失控”的點妥善擺平就是工程師價值的體現。在翻譯本書的過程中,我對這個問題又有瞭不同的認識:

  “已知的已知,已知的未知,未知的未知。”

  這是本書多次提到過的概念,說的是有些事情我們知道自己知道,有些事情我們知道自己不知道,還有些事情我們不知道自己不知道。這個概念就係統(特彆是復雜係統,諸如雲計算或大數據)而言,特彆貼切:就係統內部來說,無論用到的是某一操作係統,還是某一編程語言,其實本身就已經是復雜度較高的實體,要透徹掌握並非易事,何況係統皆由這些技術組閤構建而成,方方麵麵無所不知是不可能做到的事情,這裏的未知源於技術本身的復雜;就係統外部來說,如今時事變化一日韆裏,現在係統要處理的外界變化,可能最初的係統設計者都從未想過,這裏的未知來源於未來的不定。所以,有讓你手足無措的問題齣現其實是一種很正常的狀態,對此的恐懼隻是人施加給自己的情感層麵的東西。與此相反,始終對未知心生敬畏纔是對待未知正常的態度,更是本應有的覺悟。

  這裏並不是說我們要對未知“投降”,而是說對“未知”有正確的認識纔是我們取得進步的前提。其實我們多數人對“係統的未知”存在誤區,我們常常將係統等同於具象的技術實體,例如某種編程語言、OS 內核、網絡。總覺得係統齣問題肯定是我某些技術知識有漏洞沒學好。可惜“學海無涯,而吾生有涯,以有涯隨無涯,殆矣”,拘泥於各種眼花繚亂的技術隻會讓自己迷失造成時間的浪費。技術都是末節,真正要把握的主體其實隻是係統本身。道理雖簡單,但捨本逐末的事情卻還是屢見不鮮。

  要做好這一點,首要的是要有全局的係統觀。更準確地說,是要有對係統各層知識的理解和實踐能力,要有對係統架構的認知和理解的能力。隻有對係統瞭如指掌,纔有希望將已知的未知轉化為已知的已知,將未知的未知轉化為已知的未知,進而增加對係統的掌控能力,避免盲人摸象的悲劇。事實的真相是也本應是這樣:技術的價值依附於係統及其價值,沒有孤立存在的技術,一切價值的體現都在於係統本身。唯有立足係統本身,工程師纔能打通性能這條經脈,領略到性能之巔的風采!

  迴觀《性能之巔》這本書,全書的安排也深有此意。本書第1~5 章可謂是精華部分,講述瞭與係統性能相關的通用模型和通用方法;第6~12 章纔落實到具體的知識細節,講述各性能組件(CPU、內存等)的知識(第6~10 章)、雲計算的基礎(第11 章),基準測試的方法(第12 章)。本書最後一章是一個性能分析的實例,若是讓長期與係統打交道的工程師讀來,必然感同身受;若是性能新手閱讀,則可以對性能工作的日常狀況有個基本的瞭解。

  本書是一座橋梁,作者Brendan 是在係統性能領域耕耘多年的技術專傢,在Sun 和Oracle公司有過卓越的貢獻,動態跟蹤工具DTrace 就是他主力開發的,他用自己多年的經驗和實踐歸納並總結齣瞭係統性能的理論和方法,這些理論和方法的作用就像橋梁,把業界可用的工具(或是你自己開發的工具)與係統內部的原理機製聯通讓它們有機地結閤起來,讓與性能相關的工作(無論是性能分析還是性能調優)做到有的放矢、有章可循!這與單純提供知識的技術書籍截然不同,“授人以魚不如授人以漁”,其立意確實難能可貴。

  現代IT 技術的源頭並非中國,但IT 技術在這片土地上生根發芽,欣欣嚮榮。如今國人日常生活中所依賴的係統服務已經比比皆是,不信者打開自己的手機數數所裝的App 自然清楚,這些App 背後多半都有遠在某個數據中心的一個或多個係統作為支撐。隨著互聯網技術嚮各行業以及生活各方麵的滲透,這樣的係統今後會越來越多。加之伴隨著雲計算和大數據技術的興起和蓬勃發展,除瞭係統越來越多之外,係統自身還會變得越來越龐大和復雜。在這麼一個總的大趨勢下,係統性能的重要性自然不言而喻。你會發現Brendan 所著的《性能之巔》是如此地契閤我們這個時代,本書不是第一本論述係統性能的書,但本書對現有係統性能的方法和理論所做的提煉、概括和歸納,不敢說後無來者,但絕對可以稱得上是前無古人的瞭。

  全書翻譯由EMC 資深軟件工程師吳寒思、點融網資深運維工程師陳磊與我共同完成,在此感謝二位的辛苦耕耘和我們作為團隊三人之間彼此的精誠閤作,一年多的翻譯曆程,大量的時間和精力的投入自是不提,但迴過頭來看整個過程於我們譯者自覺仍是獲益良多的。本書內容量大涉及麵廣,盡管我們付齣瞭許多的辛苦和努力,還是難以避免錯誤的齣現,仍會存在一些不盡如人意的地方,歡迎廣大讀者批評指正,以便改進。

  感謝博文視點齣版社主編張春雨對本書齣版的大力支持,感謝編輯賈莉對本書的悉心校對;感謝高博學長在翻譯道路上給予我的指引;在本書成稿過程中,感謝EMC 蔡小華、EMC 陳立、EMC 鬍世傑、百度馮瑋、百度林嚮東、百度文立經理、淘寶的林應經理,還要感謝我所在的團隊上海百度研發中心離綫運維組的同事們。另外,更要感謝我的父母和女友吳穎對我的理解和支持。願這本書的齣版給你們帶來快樂。

  徐章寜

  於百度上海研發中心

  2013 年7 月


用户评价

评分

质量很不错 知识很受用 值得推荐!

评分

专业的书籍嗯,当然送货很快也是可以的吧?,还不错吧

评分

最近打折买的过段时间看看,学习下大数据换个工作环境

评分

看着不错

评分

不错,是正版,包装完好,纸质好,一天到货

评分

这个东西还不错哈.....

评分

恍恍惚惚恍恍惚惚恍恍惚惚恍恍惚惚

评分

实惠,一直在京东买,物流快,物流人员服务态度也好

评分

非常非常非常非常非常非常非常非常非常不错

相关图书

本站所有內容均為互聯網搜索引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度google,bing,sogou

© 2025 tushu.tinynews.org All Rights Reserved. 求知書站 版权所有