持久內存編程 版權信息
- ISBN:9787111676744
- 條形碼:9787111676744 ; 978-7-111-67674-4
- 裝幀:一般膠版紙
- 冊數:暫無
- 重量:暫無
- 所屬分類:>>
持久內存編程 本書特色
適讀人群 :本書主要面向具有一定經驗的應用程序開發(fā)人員,也適用于更廣泛的讀者,如系統管理員和架構師、學生、講師,以及學術研究人員等。系統設計人員、內核開發(fā)人員,以及任何對這項全球首本持久內存編程和應用的系統方法指南,本書強調以工程實踐為導向,通過大量的示例,全方位介紹持久內存架構、硬件及操作系統支持的整體技術細節(jié),幫助開發(fā)人員了解持久內存編程的核心概念以及持久內存編程的開發(fā)庫。 持久內存技術是內存領域革命性的技術。從根本上顛覆傳統的內存-存儲架構,對整個產業(yè)界和學術界產生了深遠的影響。 無論是初學者,還是經驗豐富的程序員,都可以使用本書作為持久內存編程的綜合指南,了解持久內存對軟硬件的要求,以及持久內存在提升性能、縮短應用程序啟動時間方面的巨大潛力。 【讀者對象】 本書主要面向具有一定經驗的應用程序開發(fā)人員,也適用于更廣泛的讀者,如系統管理員和架構師、學生、講師,以及學術研究人員等。此外,系統設計人員、內核開發(fā)人員,以及任何對這項新興技術感興趣的人都可以在本書中找到實用的內容。
持久內存編程 內容簡介
本書介紹了相關技術及其應用前景, 涵蓋持久內存的操作系統和硬件要求, 以及如何使用模擬和真實的持久內存硬件創(chuàng)建開發(fā)環(huán)境。內容包括: 持久內存編程簡介 ; 持久內存架構等。
持久內存編程 目錄
第1章 持久內存編程簡介 1
1.1 高級示例程序 2
1.1.1 有何區(qū)別 4
1.1.2 性能差異 5
1.1.3 程序復雜性 5
1.1.4 libpmemkv如何運行 5
1.2 后文提要 6
1.3 總結 7
第2章 持久內存架構 8
2.1 持久內存的特性 8
2.2 持久內存的平臺支持 9
2.3 緩存層級 10
2.4 電源故障保護域 11
2.5 刷新、排序和屏障操作的需求 13
2.6 數據可見性 16
2.7 用于持久內存的英特爾機器指令 16
2.8 檢測平臺功能 17
2.9 應用程序啟動與恢復 18
2.10 后文提要 20
2.11 總結 20
第3章 持久內存的操作系統支持 21
3.1 內存和存儲的操作系統支持 21
3.2 持久內存用作塊存儲 22
3.3 持久內存感知型文件系統 23
3.4 內存映射文件 24
3.5 持久內存直接訪問 30
3.6 總結 37
第4章 持久內存編程的基本概念 38
4.1 有何區(qū)別 38
4.2 原子更新 39
4.3 事務 39
4.3.1 原子性 39
4.3.2 一致性 40
4.3.3 隔離性 40
4.3.4 持久性 40
4.4 刷新不具有事務性 41
4.5 啟動時職責 41
4.6 針對硬件配置進行調優(yōu) 41
4.7 總結 42
第5章 持久內存開發(fā)套件簡介 43
5.1 背景 43
5.2 選擇正確的語義 44
5.3 易失性庫 44
5.3.1 libmemkind 44
5.3.2 libvmemcache 45
5.3.3 libvmem 46
5.4 持久性庫 46
5.4.1 libpmem 46
5.4.2 libpmemobj 46
5.4.3 libpmemobj-cpp 47
5.4.4 libpmemkv 47
5.4.5 libpmemlog 47
5.4.6 libpmemblk 48
5.5 工具和命令程序 48
5.5.1 pmempool 48
5.5.2 pmemcheck 48
5.5.3 pmreorder 49
5.6 總結 49
第6章 libpmem:底層持久內存支持 50
6.1 使用庫 51
6.2 映射文件 51
6.3 復制到持久內存 52
6.4 分解刷新步驟 53
6.5 總結 54
第7章 libpmemobj:原生事務性對象存儲 55
7.1 什么是libpmemobj 55
7.2 為什么不使用malloc() 55
7.3 組合操作 56
7.4 內存池 56
7.4.1 創(chuàng)建內存池 56
7.4.2 池對象指針和根對象 59
7.4.3 打開內存池并從內存池中讀取數據 60
7.5 內存池集 61
7.5.1 串聯池集 61
7.5.2 副本池集 62
7.6 管理內存池和池集 62
7.7 類型化對象標識符 63
7.8 分配內存 63
7.9 持久保存數據 63
7.9.1 原子操作 64
7.9.2 保留/發(fā)布API 66
7.9.3 事務API 68
7.9.4 可選標記 71
7.9.5 持久保存數據總結 71
7.10 libpmemobj的API可提供保障 71
7.11 管理庫操作 72
7.12 調試與錯誤處理 72
7.13 總結 74
第8章 libpmemobj-cpp:自適應語言C++和持久內存 75
8.1 簡介 75
8.2 元編程 75
8.2.1 持久指針 76
8.2.2 事務 76
8.2.3 創(chuàng)建快照 77
8.2.4 分配 79
8.3 C++標準限制 80
8.3.1 對象的生命周期 80
8.3.2 平凡類型 81
8.3.3 對象布局 82
8.3.4 指針 83
8.3.5 限制總結 85
8.4 簡化持久性 85
8.5 生態(tài)系統 91
8.5.1 持久容器 91
8.5.2 持久容器示例 91
8.6 總結 94
第9章 pmemkv:持久內存鍵值存儲 95
9.1 pmemkv架構 97
9.2 電話簿示例 99
9.3 讓持久內存更靠近云 102
9.4 總結 103
第10章 持久內存編程的易失性用途 104
10.1 簡介 104
10.2 背景 105
10.2.1 內存分配 105
10.2.2 工作原理 105
10.2.3 支持的內存“類型” 105
10.3 memkind API 107
10.3.1 類型管理API 107
10.3.2 堆管理API 111
10.3.3 類型配置管理 112
10.3.4 更多memkind代碼示例 113
10.4 面向PMEM類型的C++分配器 113
10.4.1 pmem::allocator方法 114
10.4.2 嵌套容器 114
10.5 C++示例 114
10.5.1 使用pmem::allocator 115
10.5.2 創(chuàng)建字符串向量 115
10.6 使用持久內存擴展易失性內存 116
10.7 libvmemcache:面向大容量持久內存的高效易失性鍵值緩存 120
10.7.1 libvmemcache概述 120
10.7.2 libvmemcache設計 122
10.7.3 使用libvmemcache 124
10.8 總結 126
第11章 設計適用于持久內存的數據結構 127
11.1 連續(xù)數據結構和碎片化 127
11.1.1 內部和外部碎片化 127
11.1.2 原子性和一致性 128
11.1.3 選擇性持久化 131
11.1.4 示例數據結構 131
11.2 總結 140
第12章 調試持久內存應用程序 141
12.1 用于Valgrind的pmemcheck 142
12.1.1 棧溢出示例 142
12.1.2 內存泄漏示例 143
12.2 Intel Inspector?—?Persistence Inspector 144
12.2.1 棧溢出示例 144
12.2.2 內存泄漏示例 145
12.3 常見的持久內存編程問題 146
12.3.1 非持久存儲 146
12.3.2 數據存儲未添加到事務 157
12.3.3 將一個內存對象添加至兩個不同的事務 160
12.3.4 內存覆寫 165
12.3.5 非必要刷新 166
12.3.6 亂序寫入 170
12.4 總結 179
第13章 實際應用程序中實現持久性 180
13.1 數據庫示例 180
13.2 不同的持久內存實現方式 181
13.3 開發(fā)持久內存感知型MariaDB*存儲引擎 181
13.3.1 了解存儲層 182
13.3.2 創(chuàng)建存儲引擎類 183
13.4 總結 191
第14章 并發(fā)和持久內存 192
14.1 事務與多線程 192
14.2 持久內存上的互斥體 196
14.3 原子操作與持久內存 198
14.4 持久內存的并發(fā)數據結構 198
14.4.1 并發(fā)有序映射 199
14.4.2 并發(fā)散列映射 202
14.5 總結 202
第15章 分析與性能 204
15.1 簡介 204
15.2 性能分析概念 204
15.2.1 計算受限與內存受限 204
15.2.2 內存延時與內存容量 205
15.2.3 讀取與寫入性能 205
15.2.4 內存訪問模式 205
15.2.5 I/O存儲受限的工作負載 205
15.3 確定工作負載是否適合持久內存 206
15.3.1 易失性用例 206
15.3.2 需要持久性的用例 208
15.4 使用持久內存的工作負載性能分析 209
15.4.1 確定工作負載特性 210
15.4.2 內存帶寬與延時 210
15.4.3 持久內存讀寫比率 211
15.4.4 工作集大小與內存占用空間大小 211
15.4.5 非一致內存架構行為 211
15.4.6 優(yōu)化面向持久內存的軟件 212
15.5 總結 215
第16章 PMDK內部組件:重要算法和數據結構 216
16.1 持久內存池:高層架構概覽 216
16.2 內存映射的不確定性:持久內存對象標識符 218
16.3 持久化線程本地存儲:使用通道 220
16.4 確保電源故障原子性:重做日志和撤銷日志 220
16.4.1 事務重做日志 221
16.4.2 事務撤銷日志 221
16.4.3 libpmemobj統一日志 222
16.5 持久分配:事務持久分配器的接口 223
16.6 持久內存堆管理:持久內存分配器設計 223
16.7 ACID事務:高效的底層持久事務 226
16.8 延遲重新初始化變量:將易失性狀態(tài)存儲在持久內存上 227
16.9 總結 228
第17章 可靠性、可用性與可維護性 229
17.1 處理不可糾正錯誤 229
17.1.1 已使用的不可糾正錯誤處理 230
17.1.2 未使用的不可糾正錯誤處理 231
17.1.3 清除不可糾正錯誤 234
17.2 設備狀態(tài) 234
17.2.1 ACPI定義的設備狀態(tài)函數(_NCH,_NBS) 236
17.2.2 特定供應商的設備狀態(tài)(_DSM) 236
17.2.3 ACPI NFIT狀態(tài)事件通知 236
17.3 不安全/異常關機 237
17.4 總結 238
第18章 遠程持久內存 239
18.1 RDMA網絡協議 240
18.2 初始遠程持久內存架構的目標 242
18.3 確保遠程持久性 242
18.3.1 通用遠程復制方法 243
18.3.2 設備遠程復制方法 244
18.4 一般軟件架構 246
18.5 librpmem架構及其在復制中的使用 246
18.5.1 使用內存池集配置遠程復制 249
18.5.2 性能注意事項 249
18.5.3 遠程復制錯誤處理 250
18.5.4 向復制世界“問好” 251
18.6 總結 254
第19章 高級主題 256
19.1 非一致性內存訪問 256
19.1.1 NUMACTL Linux程序 257
19.1.2 NDCTL Linux程序 258
19.1.3 英特爾內存延遲檢查器程序 259
19.1.4 NUMASTAT程序 260
19.1.5 英特爾VTune Profiler —Platform Profiler 261
19.1.6 IPMCTL程序 261
19.1.7 BIOS調優(yōu)選項 261
19.1.8 自動NUMA平衡 261
19.2 使用具有持久內存的卷管理器 263
19.3 mmap()的MAP_SYNC標記 264
19.4 總結 265
附錄A 如何在Linux上安裝NDCTL和DAXCTL 266
附錄B 如何安裝持久內存開發(fā)套件 271
附錄C 如何在Linux和Windows上安裝IPMCTL 277
附錄D 面向持久內存的Java 282
附錄E 遠程持久內存復制的未來 289
術語表 292
持久內存編程 作者簡介
【作者簡介】 Steve Scargall是英特爾公司的一名持久內存軟件/云架構師。作為一名技術宣傳官,Steve Scargall負責提供技術的啟動與開發(fā)支持工作,以便將持久內存技術集成到軟件棧、應用程序和硬件架構中,包括在專有和開源開發(fā)工作方面與獨立軟件開發(fā)商(ISV)進行合作,以及與原始設備制造商(OEM)和云服務提供商(CSP)等合作。 Steve曾在英國雷丁大學潛心學習神經網絡、人工智能和機器人等知識,獲得了計算機科學和控制論專業(yè)學士學位。他曾負責為Solaris Kernel、ZFS和UFS文件系統提供x86架構與SPARC性能分析支持,擁有超過19年的豐富經驗。在Sun Microsystems和Oracle工作期間,他負責企業(yè)和云環(huán)境中的DTrace調試工作。 【譯者簡介】 吳國安(Dennis)2005年于上海交通大學碩士研究生畢業(yè)。目前是英特爾持久內存工程部經理,在IA架構、性能優(yōu)化、軟件協同硬件開發(fā)方面有多年工作經驗。目前主要支持客戶應用英特爾數據中心級持久化內存進行軟件開發(fā)和應用適配,提供IA架構上的客戶方案技術咨詢和支持。在2012年加入英特爾之前,任職意法半導體,負責數字電視軟件開發(fā)和集成的工作。 魏劍(Terry Wei)是英特爾傲騰技術方案專家,在英特爾供職16年,曾擔任硬件開發(fā)、客戶技術支持等多種職位,目前主要致力于傲騰存儲技術在中國用戶環(huán)境的技術適配和應用推廣方面的工作。 楊錦文(Jinwen Yang)負責英特爾中國區(qū)云計算和互聯網行業(yè)的戰(zhàn)略規(guī)劃和數據中心產品線的市場導入,并整合內部和外部技術資源,不斷優(yōu)化數據中心的全棧式解決方案,專注于服務客戶的多樣化需求。 吳少慧(Shaohui Wu)目前是英特爾持久內存工程師,擁有清華大學工程物理系的工程學士學位以及北京有色金屬研究總院金屬材料及熱處理專業(yè)的工程碩士學位。2018年入職英特爾之前,從事半導體芯片的產品開發(fā)與制造方面的工作,目前主要致力于傲騰持久內存生態(tài)環(huán)境的建立,并推廣持久內存在中國區(qū)的應用。 許春曄(Chunye Xu)是英特爾公司的持久內存應用工程師,致力于客戶持久內存技術支持和工作負載調試工作,曾在英特爾通信和設備部門負責系統調試和自動化測試工作。他畢業(yè)于河北大學,擁有計算機應用碩士學位。 林翔(Xiang Lin)是英特爾公司的平臺應用工程師,目前主要致力于持久內存的應用和研究工作,包括工作負載的應用和性能優(yōu)化,同時還負責客戶支持方面的工作。此外,他對圖形圖像處理領域有著濃厚的興趣。 王龍(Long Wang)是英特爾公司的軟件工程師,當前主要致力于持久內存相關的數據庫開發(fā)與性能優(yōu)化,同時還參與PMDK項目,例如遠程持久內存訪問的集成開發(fā)工作。 李曉冉(Xiaoran Li)2018年畢業(yè)于日本北海道大學信息與科學學院,目前就職于英特爾數據中心部門,從事傲騰持久內存研發(fā)工作,對系統存儲、云計算、并行計算有濃厚興趣。 斯佩峰(Peifeng Si)是英特爾數據中心部門資深軟件工程師。長期從事x86服務器的固件開發(fā)和軟件性能調優(yōu),目前專注于持久內存對數據庫及存儲類應用的優(yōu)化。 陶少玉(Shaoyu Tao)在英特爾任職軟件工程師超過5年,在加入英特爾的前幾年,他主要從事Linux內核、系統調試相關工作,目前專注于基于持久內存的數據庫優(yōu)化相關工作。 高明(Ming Gao)是英特爾公司中國區(qū)行業(yè)解決方案部互聯網行業(yè)技術總監(jiān),他主要負責英特爾與中國互聯網公司的技術戰(zhàn)略合作,助力中國互聯網公司利用英特爾的產品和技術構建云計算解決方案,對包括人工智能在內的各類工作負載進行性能優(yōu)化。高明獲得了北京郵電大學計算機科學與技術專業(yè)碩士學位。 崔峰 2015年5月起就職于京天石易通信息技術有限公司,至今從業(yè)超過15年,2004年畢業(yè)于英國諾桑比亞大學,獲商業(yè)管理學士學位。
- >
羅曼·羅蘭讀書隨筆-精裝
- >
名家?guī)阕x魯迅:朝花夕拾
- >
經典常談
- >
小考拉的故事-套裝共3冊
- >
上帝之肋:男人的真實旅程
- >
苦雨齋序跋文-周作人自編集
- >
巴金-再思錄
- >
有舍有得是人生