序
2019 年3 月3 日,Linux 核心創始人Linus Torvalds 在社區正式宣佈了Linux 5.0 核心的發佈。Linus Torvalds 在郵寄清單裡提到Linux 5.0 並不是一個大幅修改和具有很多新特性的版本。然而,因為Linux 4.20 核心的次版本編號太大了,所以才發佈了Linux 5.x 核心。但是Linux 核心的開發速度並沒有因此而變慢,依然每隔兩個多月會發佈一個新版本,新的版本支援更多的硬體和特性。從Linux 4.0 核心到Linux 5.0 核心經歷了20個版本,Linux 5.0 核心中新增了很多特性並且很多核心的實現已經發生了很大的變化。
最近兩年,作業系統和開放原始碼軟體的研究氣氛越來越濃厚,很多大公司開始基於Linux 核心打造自己的作業系統,包括手機作業系統、伺服器作業系統、IoT(物聯網)嵌入式系統等。另外,很多公司開始探索使用ARM64 架構來建構自己的硬體生態系統,包括手機晶片、伺服器晶片等。
✤ 本書特色
本書特色如下。
✓基於 Linux 5.0 和 ARM64/x86_64 架構。
完全基於Linux 5.0 核心來講解。Linux 5.0 核心中,不少重要模組(如綠色排程器、迴旋栓鎖等)的實現相對於Linux 4.0 已經發生了天翻地覆的變化。同時,Linux 5.0 核心中修復了Linux 4.0 核心中的很多故障,比如KSM 導致的虛擬機器當機故障等。由於ARM64 架構和x86_64 架構是目前主流的處理器架構,因此本書主要基於ARM64/x86_64 架構來講解Linux 5.0 核心的實現。很多核心模組的實現與架構的相關性很低,因此本書也適合使用其他架構的讀者閱讀。在目前伺服器領域,大部分廠商依然使用x86_64 架構加上Red Hat 或UbuntuLinux 企業發行版本的方案,第4 章會介紹x86_64 架構伺服器的當機修復案例。
✓實戰案例分析。
本書充滿了實戰案例,舉例來說,在記憶體管理方面新增了4 個實戰案例,這些案例都是從實際專案中抽出來的,對讀者提升實戰能力有非常大的幫助。另外也新增了解決當機難題的實戰案例。在實際專案中,我們常常會遇到系統當機(如手機當機、伺服器當機等),因此本書複習了多個當機案例,利用Kdump+Crash 工具來詳細分析如何解決當機難題。考慮到部分讀者使用ARM64 處理器做產品開發,部分讀者在x86_64 架構的伺服器上做運行維護和性能最佳化等工作,因此本書分別介紹了針對這兩個架構的處理器如何快速解決當機問題。2019 年出現的CPU 熔斷和CPU「幽靈」漏洞牽動了全球開發人員的心,了解這兩個漏洞對讀者熟悉電腦架構和Linux 核心的相關實現非常有幫助,因此第6 章會詳細分析這兩個漏洞的攻擊原理和Linux 核心修復方案。
✓核心偵錯和最佳化技巧。
本書函蓋了很多核心偵錯和最佳化技巧。Linux 核心透過proc 和sysfs提供了很多有用的記錄檔資訊。在記憶體管理、最佳化過程中,可以透過核心提供的記錄檔資訊(如meminfo、zone 等)快速了解和分析系統記憶體並進行核心偵錯與最佳化。第3 章裡新增了性能最佳化的內容,如使用perf 工具以及eBPF/BCC 來進行性能分析等。
✓充滿大量插圖和表格。
為了分析Linux 核心的原理,本書充滿了很多插圖和表格。
✓ARM64 架構方面的內容。
詳細介紹了ARM64 架構,這部分內容包括ARM64 指令集、ARM64暫存器、頁表、記憶體管理、TLB、記憶體屏障等。
✤ 本書精華內容
精華內容如下。
✓perf、eBPF、BCC 工具,詳見第 3 章。
✓使用Kdump+Crash來解決x86_64伺服器當機難題的方法,詳見第4章。
✓使用 Kdump+Crash 來解決 ARM 當機難題的方法,詳見第 5 章。
✓CPU 熔斷和 CPU「幽靈」漏洞分析,詳見第 6 章。
✤ 本書主要內容
本書主要介紹Linux 核心中的併發和同步、中斷管理、核心偵錯與性能最佳化、當機難題的解決方案以及安全性漏洞的攻擊原理和修復方案等內容。本書的側重點是實踐以及案例分析。
本書共6 章。每一章的主要內容如下。
第1 章介紹併發與同步,包括原子操作、記憶體屏障、經典迴旋栓鎖、MCS鎖、排隊迴旋栓鎖、號誌、互斥鎖、讀寫入鎖、讀寫訊號量、RCU 等。
第2 章介紹中斷管理,包括中斷控制器、硬體中斷號和Linux 中斷號的映射、註冊中斷、ARM64 底層中斷處理、ARM64 高層中斷處理、軟體中斷、tasklet、工作佇列等。
第3 章介紹核心偵錯與性能最佳化,包括ARM64 實驗平台的打造、ftrace工具、記憶體檢測、鎖死檢測、核心偵錯方法、perf 工具、SystemTap 工具、eBPF 與BCC 等內容。
第4 章說明Kdump 工具、Crash 工具、crash 命令、鎖死檢查機制等,並展示6 個基於x86-64 的當機案例。
第5 章介紹Kdump 實驗環境的架設,並展示4 個基於ARM64 的當機案例。
第6 章分析安全性漏洞,包括側通道攻擊的原理、CPU 熔斷漏洞、CPU「幽靈」漏洞的攻擊原理和修復方案等內容。
由於作者知識水準有限,書中難免存在紕漏,敬請各位讀者批評指正。作者的電子郵件是runninglinuxkernel@126.com。
笨叔