会员   密码 您忘记密码了吗?
1,583,363 本书已上架      购物流程 | 常见问题 | 联系我们 | 关于我们 | 用户协议

有店 App


当前分类

商品分类

浏览历史

当前位置: 首页 > 简体书 > 深入理解軟件性能:一種動態視角
深入理解軟件性能:一種動態視角
上一张
下一张
prev next

深入理解軟件性能:一種動態視角

作者: (美)理查德·賽茨
出版社: 人民郵電出版社
出版日期: 2024-01-01
商品库存: 点击查询库存
以上库存为海外库存属流动性。
可选择“空运”或“海运”配送,空运费每件商品是RM14。
配送时间:空运约8~12个工作天,海运约30个工作天。
(以上预计配送时间不包括出版社库存不足需调货及尚未出版的新品)
定价:   NT779.00
市场价格: RM140.04
本店售价: RM124.64
促销价: RM117.63
剩余时间: 请稍等, 正在载入中...
购买数量:
collect Add to cart Add booking
详细介绍 商品属性 商品标记
內容簡介

本書不僅介紹了如何測量CPU、記憶體、磁片/SSD、網路的性能,如何觀察、記錄、跟蹤、匯總性能指標,還討論了如何設計和創建性能測試工具KUtrace,以及如何對觀察結果進行推理。

本書不僅適合軟體發展人員閱讀,還適合電腦相關專業的師生參考。


作者介紹

理查· L. 賽茨(Richard L.Sites),美國國家工程院院士。在職業生涯的大部分時間中,他負責硬體與軟體的交接,特別關注 CPU/軟體性能交互。他擔任了DEC Alpha處理器的架構師,發明了處理器的效能計數器。他還在DEC、Adobe、Google和Tesla公司編寫過低開銷的微代碼,負責過軟體跟蹤


目錄

第一部分 測量
第1章 我的程式太慢了 3
1.1 資料中心環境 3
1.2 資料中心的硬體 5
1.3 資料中心的軟體 6
1.4 長尾時延 7
1.5 思維框架 9
1.6 數量級估測 9
1.7 為什麼事務很慢 10
1.8 5種基本資源 11
1.9 小結 12
第2章 測量CPU時間 13
2.1 發展歷史 14
2.2 現狀 17
2.3 測量add指令的時延 18
2.4 直線代碼失敗 19
2.5 簡單迴圈、迴圈開銷失敗、優化編譯器失敗 19
2.6 死變數失敗 22
2.7 更好的迴圈 23
2.8 依賴變數 24
2.9 實際執行時延 25
2.10 更多細微差別 25
2.11 小結 26
習題 26
第3章 測量記憶體層次 28
3.1 記憶體計時 28
3.2 關於記憶體 29
3.3 緩存組織 30
3.4 數據對齊 32
3.5 頁表緩存組織 33
3.6 測量記憶體的步驟 34
3.7 測量緩存行的大小 34
3.8 問題:預取第N+1行 36
3.9 依賴載入 37
3.10 非隨機的DRAM 38
3.11 測量每個緩存級別的總大小 39
3.12 測量每個級別的緩存相聯度 41
3.13 頁表緩存時間 42
3.14 緩存利用不足 42
3.15 小結 42
習題 43
第4章 CPU與記憶體的交互 45
4.1 緩存交互 45
4.2 簡單矩陣乘法的動態 47
4.3 估測 47
4.4 初始化、反復核對和觀察 48
4.5 初始結果 49
4.6 更快的矩陣乘法,轉置方法 51
4.7 更快的矩陣乘法,子塊方法 53
4.8 感知緩存的計算 54
4.9 小結 55
習題 55
第5章 測量磁片/SSD的傳輸時間 56
5.1 關於硬碟 56
5.2 關於SSD 58
5.3 軟體磁片訪問和磁片緩衝 60
5.4 磁片讀取有多快 62
5.5 一次粗略估算 65
5.6 磁片寫入有多快 66
5.7 結果 66
5.8 從磁片讀取 67
5.9 寫入磁片 71
5.10 從SSD讀取 74
5.11 寫入SSD 75
5.12 多次傳輸 76
5.13 小結 77
習題 77
第6章 測量網路流量 79
6.1 關於乙太網 81
6.2 關於集線器、交換機和路由器 82
6.3 關於TCP/IP 83
6.4 關於資料包 84
6.5 關於RPC 85
6.6 空程差 87
6.7 觀察網路流量 88
6.8 示例RPC消息的定義 90
6.9 示例日誌設計 92
6.10 使用RPC的示例客戶-伺服器系統 93
6.11 示例伺服器程式 94
6.12 自旋鎖 95
6.13 示例用戶端程式 96
6.14 測量一個示例客戶-伺服器RPC 98
6.15 後處理RPC日誌 99
6.16 觀察 100
6.17 小結 101
習題 102
第7章 磁片和網路資料庫的交互 103
7.1 時間對齊 103
7.2 多個用戶端 109
7.3 自旋鎖的應用 109
7.4 實驗1 110
7.5 磁片資料庫 113
7.6 實驗2 113
7.7 實驗3 117
7.8 日誌 119
7.9 理解事務時延的變化 120
7.10 小結 120
習題 121

第二部分 觀察
第8章 日誌 125
8.1 觀察工具 125
8.2 日誌 125
8.3 基本日誌 126
8.4 擴展日誌 127
8.5 時間戳記 127
8.6 RPC ID 128
8.7 日誌檔的格式 129
8.8 管理日誌檔 130
8.9 小結 131
第9章 聚合措施測量 132
9.1 均勻的事件率與陣發的事件率 133
9.2 測量間隔 133
9.3 時間線 134
9.4 進一步匯總時間線 136
9.5 長條圖的時間尺度 138
9.6 聚合每個事件的測量結果 140
9.7 一段時間的值的模式 142
9.8 更新間隔 143
9.9 事務採樣 144
9.10 小結 145
第10章 儀錶板 147
10.1 示例服務 147
10.2 示例儀錶板 149
10.3 主儀錶板 149
10.4 實例儀錶板 153
10.5 伺服器儀錶板 154
10.6 健全檢查 154
10.7 小結 155
習題 155
第11章 其他現有工具 156
11.1 觀察工具的分類 156
11.2 要觀察的資料 158
11.3 top命令 159
11.4 /proc和/sys偽文件 160
11.5 time命令 160
11.6 perf命令 161
11.7 oprofile 162
11.8 strace 165
11.9 ltrace 168
11.10 ftrace 169
11.11 mtrace 172
11.12 blktrace 174
11.13 tcpdump和Wireshark 177
11.14 locktrace 179
11.15 輸入負載、出站調用 179
11.16 小結 180
習題 181
第12章 跟蹤工具 182
12.1 跟蹤工具的優勢 182
12.2 跟蹤工具的缺點 183
12.3 3個起始問題 183
12.4 示例1:早期的程式計數器跟蹤 186
12.5 示例2:每個函數的計數和時間 188
12.6 案例分析:Gmail的按函數跟蹤 191
12.7 小結 196
第13章 優秀觀察工具的設計原則 197
13.1 需要觀察什麼 197
13.2 有多頻繁?要多久 198
13.3 開銷有多大 199
13.4 設計的後果 200
13.5 案例分析:長條圖桶 200
13.6 設計資料顯示 202
13.7 小結 203

第三部分 內核-使用者跟蹤
第14章 KUtrace的目標、設計、實現 207
14.1 概述 207
14.2 目標 208
14.3 設計 209
14.4 實現 211
14.5 內核補丁和Linux內核可載入模組 211
14.6 控制程式 212
14.7 後處理 213
14.8 關於安全問題的一點說明 213
14.9 小結 213
第15章 KUtrace中的Linux內核補丁 214
15.1 跟蹤緩衝區資料結構 215
15.2 原始跟蹤塊的格式 216
15.3 跟蹤條目 217
15.4 IPC跟蹤條目 218
15.5 時間戳記 219
15.6 事件編號 219
15.7 嵌套的跟蹤條目 219
15.8 代碼 220
15.9 資料包跟蹤 221
15.10 AMD/Intel x86-64補丁 222
15.11 小結 224
習題 224
第16章 KUtrace的Linux內核可載入模組 225
16.1 內核介面資料結構 225
16.2 模組載入/卸載 226
16.3 初始化和控制跟蹤 226
16.4 實現跟蹤調用 227
16.5 Insert1 227
16.6 InsertN 229
16.7 切換到一個新的跟蹤塊 230
16.8 小結 230
第17章 KUtrace的用戶態的運行時控制 231
17.1 控制跟蹤 232
17.2 獨立的kutrace_control程式 232
17.3 底層的kutrace_lib庫 233
17.4 可載入模組的控制介面 233
17.5 小結 234
第18章 KUtrace的後處理 235
18.1 後處理的細節 235
18.2 rawtoevent程式 236
18.3 eventtospan程式 237
18.4 spantotrim程式 239
18.5 spantospan程式 239
18.6 samptoname_k和samptoname_u程式 240
18.7 makeself程式 240
18.8 KUtrace的JSON格式 240
18.9 小結 242
第19章 KUtrace中軟體動態的顯示 243
19.1 概述 243
19.2 區域①——控制項 244
19.3 區域②——y軸 246
19.4 區域③——主時間線 246
19.5 區域④——IPC圖例 251
19.6 區域⑤——x軸 252
19.7 區域⑥——保存/還原 252
19.8 輔助控制項 252
19.9 小結 253

第四部分 推理
第20章 尋找什麼 257
20.1 概述 257
20.2 尋找原因 258
第 21章 執行太多 259
21.1 概述 259
21.2 程式 259
21.3 謎團 260
21.4 探索和分析 261
21.5 理解謎團 265
21.6 小結 265
第22章 執行緩慢 267
22.1 概述 267
22.2 程式 268
22.3 謎團 268
22.4 浮點運算對立程式 270
22.5 記憶體對立程式 273
22.6 理解謎團 274
22.7 小結 274
第23章 等待CPU 276
23.1 程式 276
23.2 謎團1 276
23.3 探索和分析 277
23.4 謎團2 279
23.5 理解謎團2 280
23.6 附加謎團 282
23.7 小結 284
習題 284
第 24章 等待記憶體 285
24.1 程式 285
24.2 謎團1 286
24.3 探索和分析 286
24.4 謎團2:訪問頁表 290
24.5 理解謎團2 290
24.6 小結 292
習題 292
第25章 等待磁片 293
25.1 程式 293
25.2 謎團 294
25.3 探索和分析 294
25.4 讀取40 MB 296
25.5 順序讀取4 KB的塊 297
25.6 隨機讀取4 KB的塊 299
25.7 在SSD上寫入和同步40 MB 301
25.8 在SSD上讀取40 MB 301
25.9 兩個程式同時訪問兩個檔 302
25.10 理解謎團 303
25.11 小結 304
習題 304
第26章 等待網路 305
26.1 概述 305
26.2 程式 306
26.3 實驗1 307
26.4 實驗1中的謎團 308
26.5 實驗1的探索與分析 309
26.6 實驗1中RPC之間的時間 313
26.7 實驗2 315
26.8 實驗3 315
26.9 實驗4 316
26.10 理解謎團 319
26.11 附加異常 320
26.12 小結 322
第27章 等待鎖 323
27.1 概述 323
27.2 程式 327
27.3 實驗1:長時間持有鎖 330
27.4 實驗1中的謎團 331
27.5 探索和分析實驗1 332
27.6 實驗2:修復鎖捕獲 334
27.7 實驗3:通過多個鎖修復鎖爭用 335
27.8 實驗4:通過鎖住更少的工作來修復鎖爭用 337
27.9 實驗5:通過為儀錶板使用RCU來修復鎖爭用 338
27.10 小結 340
第28章 等待時間 341
28.1 定期工作 341
28.2 超時 342
28.3 時間分片 342
28.4 內在的執行延遲 343
28.5 小結 343
第29章 等待佇列 344
29.1 概述 344
29.2 請求的分佈 346
29.3 佇列的結構 347
29.4 工作任務 348
29.5 主任務 348
29.6 Dequeue操作 348
29.7 Enqueue操作 349
29.8 PlainSpinLock類 349
29.9 “工作”常式 350
29.10 簡單的示例 350
29.11 哪些地方可能發生了問題 351
29.12 CPU頻率 352
29.13 複雜的示例 353
29.14 等待CPU:RPC日誌 353
29.15 等待CPU:KUtrace 354
29.16 PlainSpinLock存在的缺陷 357
29.17 根本原因 358
29.18 修復PlainSpinLock:可觀察性 359
29.19 負載均衡 360
29.20 佇列深度:可觀察性 361
29.21 結尾處的自旋 361
29.22 剩下的Z後一個缺陷 362
29.23 交叉檢查 362
29.24 小結 363
習題 363
第30章 全書回顧 365
30.1 你學到了什麼 365
30.2 我們沒有講什麼 367
30.3 接下來的工作 367
30.4 全書小結 368
附錄A 示例伺服器 369
附錄B 跟蹤條目 372
術語表 377
參考文獻 383
KUtrace HTML圖例 384