大型企業服務、云計算和虛擬計算系統都面臨著嚴峻的性能挑戰。如今,國際知名的性能專家 Brendan Gregg 將業界驗證的方法、工具和指標融匯在一起,足以應對複雜環境的性能分析和調優工作。
《性能之巔(第2版):系統、企業與云可觀測性》著力講述 Linux 的性能,但所論述的性能問題適用於所有的操作系統。你將了解到系統是如何工作與執行的,還將學習到如何分析和改進系統及應用程序性能的方法。本書對第 1 版的內容做了大量的更新,這些更新包括但不限於 :近年來 Linux 內核各方面的變化對於資源性能的影響;云計算架構的主流演進方向;動態跟蹤工具的新星(BPF 及其前後端技術);常見性能工具的使用方法的變化等。需要說明的是,在第 1 版中進行性能分析所用到的術語、概念和方法,在第 2 版中幾乎沒有變化,依然中肯適用,經得起時間的檢驗。
《性能之巔(第2版):系統、企業與云可觀測性》的目標受眾主要是系統管理員及企業與云計算環境的運維工程師。所有需要了解操作系統和應用程序性能的開發人員、數據庫管理員和網站管理員都適合閱讀本書。對於剛接觸性能優化的學生等人員,本書還提供了包含Gregg 豐富教學經驗的練習題。
Brendan Gregg是計算性能和云計算方面的行業專家。他是Netflix的高級性能架構師,從事性能設計、評估、分析和調優工作。他是多本技術圖書的作者,包括《BPF之巔:洞悉Linux系統和應用性能》。他曾獲得USENIX LISA系統管理的杰出成就獎,還曾擔任內核工程師和性能負責人,並且是USENIX LISA 2018會議的項目聯合主席。他開發了收錄在多個操作系統中的性能工具,還開發了包括火焰圖在內的用於性能分析的可視化工具和方法。
譯者簡介
徐章寧,目前就職於小紅書,擔任 SRE 專家工程師,負責混沌工程等云原生可觀測性項目的研發。曾就職於百度上海研發中心和 EMC 中國研發中心,擔任 SRE 運維工程師。對於云原生計算領域發生的一切變革抱有熱忱的態度,對大型系統運維和性能調優有濃厚興趣。
吳寒思,目前就職於 eBay 中國研發中心,擔任軟件技術經理,負責廣告系統、推薦系統和搜索系統的研發。曾就職於 EMC 中國研發中心,擔任文件系統研發工程師。對大數據、機器學習和性能調優有濃厚興趣。
余亮,目前就職於百度,擔任 SRE 資深研發工程師。負責混沌工程、智能運維等穩定性工程項目的研發。曾就職於Synopsys 上海研發中心,擔任 SWE 工程師。喜歡鉆研架構優化、性能調優等技術。
《性能之巔(第2版):系統、企業與云可觀測性》介紹了操作系統和應用程序的概念、策略、工具和調優,並用基於Linux的操作系統作為主要示例。對這些工具和技術的深刻理解對於今天的開發者來說至關重要,這個新版本針對這些工具和技術做了全面的修訂和更新。實施本書中講述的策略能夠讓終用戶有更好的體驗並讓運維成本更低,對於按操作系統實例收費的云計算環境尤為如此。
系統性能專家和暢銷書作者Brendan Gregg總結了相關的操作系統、硬件和應用程序理論,即使是之前從未做過性能分析的人員也能迅速上手。不僅如此,Gregg還對包括擴展BPF在內的新工具和技術做了深入的講解,並展示了如何從云、網絡和大規模企業系統中獲得豐厚收益。
本書的主要內容包括:
存在已知的已知,有些事情我們知道自己知道。我們也知道有已知的未知,也就是說,我們知道有些事情自己不知道。但是還有未知的未知,有些事情我們不知道自己不知道。
——唐納德 · 拉姆斯菲爾德,美國前國防部長
雖然上述發言在新聞發布會上引來了記者的笑聲,但是它總結了一個重要的原則,適用於任何如地緣政治般複雜的技術系統 :性能問題可能來源於任何地方,包括系統中因你一無所知而不曾檢查的地方(未知的未知)。本書將揭示許多這樣的領域,並為其分析提供方法和工具。
關於這一版
我在 8 年前寫了本書第 1 版,並為第 1 版設計了很長的“保質期”。各章首先涵蓋的是持久的技能(模型、架構和方法),其次是將變化較快的技能(工具和調優)作為實施的例子。雖然工具和調優的例子會過時,但持久的技能可告訴你如何保持更新。
在過去的 8 年中,Linux 有了很大的發展。eBPF 作為一種內核技術,為新一代的性能分析工具提供動力,包括 Netflix 和 Facebook 等公司都在使用。我在本書第 2 版中加入了 BPF 章節和 BPF 工具,同時我還出版了關於這個主題的更深入的參考資料 [Gregg 19]。Linux 的 perf 和 Ftrace 工具也有了很大的發展,我為這兩個工具增加了單獨的章節。同時對於 Linux 內核新增的許多性能特性和技術,本書也有涉及。驅動云計算虛擬機的管理程序和容器技術也發生了很大的變化,我對這些內容也進行了更新。
第 1 版同時涵蓋了 Linux 和 Solaris。 如 今,Solaris 的市場份額已經大幅縮水[ITJobsWatch 20],因此第 2 版中基本刪除了有關 Solaris 的內容,為更多的 Linux 內容騰出空間。然而,作為一個視角,通過思考替換方案,可以增強你對操作系統或內核的理解。出於這個原因,本版中包含了一些涉及 Solaris 和其他操作系統的內容。
在過去的 6 年裡,我一直是 Netflix 的高級性能工程師,將系統性能思考踐行於Netflix 的微服務環境。我一直從事著改善管理程序、容器、運行時、內核、數據庫和應用程序的性能的工作。我根據需要開發了新的方法和工具,並與云性能和 Linux 內核工程的專家合作。這些經驗都有助於改進第 2 版的內容。
關於本書
本書以操作系統為背景講解操作系統和應用程序的性能問題,針對企業環境和云計算環境編寫而成。本書的目的是幫助你更好地利用自己的系統。
當你的工作與持續開發的應用程序為伍時,你可能會認為內核經過幾十年的開發調整,操作系統的性能問題早已解決,但事情並非如此!操作系統是一個複雜的軟件體,管理著各種不斷變化的物理設備,應對著不同的新應用程序的工作負載。內核也在持續地發展,不斷增加新的特性以提高特定的工作負載的性能,隨著系統繼續擴展,所遇到的瓶頸被逐一移除。一些內核變化,如 2018 年的 Meltdown 漏洞的緩解措施,也會損害性能。分析並努力提高操作系統的性能是一項可以不斷進行的持續任務。在操作系統的上下文中做應用程序的性能分析,可以找到更多的線索,而這些線索很可能被只針對應用程序的工具所遺漏,這些我在本書中會進行介紹。
操作系統的範圍
本書的重點就是系統性能的研究,以英特爾處理器上基於 Linux 的操作系統為主要例子。本書的內容結構也有助於你對於其他內核和處理器的學習。
除非另有說明,具體的 Linux 發行版本在本書所使用的例子中並不重要。這些例子大多來自 Ubuntu 發行版,必要時會有注解說明它與其他發行版的差異。這些例子也取自各種系統類型 :裸機和虛擬化,生產環境和測試環境,服務器和客戶設備。
在我的職業生涯中,我與各種不同的操作系統和內核打過交道,這加深了我對操作系統和內核設計的理解。為了加深你的理解,本書也會提及一些 UNIX、BSD、Solaris 和 Windows 的內容。
其他內容
本書中的示例會包括性能工具的截屏,這樣做不僅是為了顯示數據,而且是為了對可用的數據類型進行闡釋。一般來說,工具展現數據的方式更為直觀,很多 UNIX 早期風格的工具生成的輸出都是相近的,意義常常不言自明。這意味著屏幕截圖可以很好地傳遞這些工具的意圖,其中的一些可能僅需要極少的附加說明。(如果一款工具需要費力地進行說明,它就很可能是一個失敗的設計!)
我將觸及某些技術的歷史,這能提供有用的見解來加深你的理解。除此之外,了解這個行業的一些重要人物也是很有用的 :你很可能會碰到他們或者接觸到他們在性能領域的工作成果。附錄 E 是一份關於“名人錄”的清單。
本書中的少數主題在我之前的書《BPF 之巔》[Gregg 19] 中也有涉及 :特別是 BPF、BCC、bpftrace、tracepoint、kprobe、uprobe,以及各種基於 BPF 的工具。你可以參考該書以獲得更多信息。本書中對這些主題的講解通常是基於那本較早的書,有時候還使用了相同的文字和例子。
哪些內容未提及
本書著眼於性能。如果你要執行所有的示例任務,有時可能需要做一些系統管理員的工作,包括軟件的安裝或編譯(這些本書沒有提及)。書中關於操作系統內部總結的內容會在單獨的章節中提供詳盡的介紹。對性能分析高階專題的概述,是為了讓你知道這些內容的存在,以便在需要的時候依靠其他的知識來源進一步學習,可參見本前言末尾的“補充材料與參考”部分。
本書的結構
第 1 章,緒論。介紹系統性能分析,總結關鍵的概念並展示了與性能相關的一些例子。
第 2 章,方法。介紹性能分析和調優的背景知識,包括術語、概念、模型、觀測和實驗的方法、容量規劃、分析,以及統計。
第 3 章,操作系統。總結了內核內部的性能分析知識。對於解釋和理解操作系統的行為,這些是必要的背景知識。
第 4 章,觀測工具。介紹系統可用的觀測工具的類型,以及構建這些工具所基於的接口和框架。
第 5 章,應用程序。討論了應用程序性能的內容,並從操作系統的角度觀測應用程序。
第 6 章,CPU。內容包括處理器、核、硬件線程、CPU 緩存、CPU 互聯、硬件互聯及內核調度。
第 7 章,內存。本章涉及虛擬內存、換頁、交換、內存架構、總線、地址空間和內存分配器。
第 8 章,文件系統。介紹了文件系統 I/O 性能,包括涉及的不同緩存。
第 9 章,磁盤。內容包括存儲設備、磁盤 I/O 工作負載、存儲控制器、RAID,以及內核 I/O 子系統。
第 10 章,網絡。內容涉及網絡協議、套接字、接口,以及物理連接。
第 11 章,云計算。介紹了廣泛應用於云計算的操作系統級和硬件級虛擬化方法,以及這些方法的性能開銷、隔離和觀測特徵。這一章涵蓋了管理程序和容器。
第 12 章,基準測試。介紹了如何精確地做基準測試,如何解讀別人的基準測試結果。這是一個棘手的話題。這一章會告訴你怎樣避免常見的錯誤,並試圖理解它們。
第 13 章,perf。介紹了標準的 Linux 剖析器 perf(1),以及它的諸多功能。這是perf(1) 在全書中的使用參考。
第 14 章,Ftrace。介紹了標準的 Linux 跟蹤器 Ftrace,Ftrace 特別適用於探索內核代碼的執行。
第 15 章,BPF。講解了標準的 BPF 前端—BCC 和 bpftrace。
第 16 章,案例研究。包含一個來自 Netflix 的系統性能案例,展示了如何從頭開始分析一個生產環境性能難題。
第 1 ~ 4 章提供了必要的背景知識。閱讀完這幾章後,你可以根據需要參考本書的其余部分,特別是第 5 ~ 12 章,其中包括具體的分析目標。第 13 ~ 15 章涵蓋了高級分析和跟蹤的內容,對於那些希望更詳細地了解一種或多種跟蹤器的人來說,這是可選的閱讀內容。
第 16 章用講故事的方式來描繪性能工程師的工作場合。如果你是性能分析的新手,這一章作為一個用各種不同工具做性能分析的例子,你可能想先閱讀,然後在閱讀完其他章節後再回到這一章。
作為未來的參考
本書聚焦於系統性能分析的背景知識與方法,以期為讀者帶來長久的價值。為了做到這一點,許多章都被分為了兩部分。一部分的內容是術語、概念和方法(一般附有標題),這些內容許多年後應該還依然中肯適用。另一部分的內容是前一部分如何實現的示例 :架構、分析工具,還有可調參數。這部分內容即便有朝一日過時了,作為示例進行學習也依然是有用的。
跟蹤示例
我們經常需要深入探索操作系統,這項工作要用到內核跟蹤工具。自本書第 1 版以來,eBPF 已經被開發出來並合並到 Linux 內核中,為使用 BCC 和 bpftrace 為前端的新一代跟蹤工具提供動力。本書的重點是 BCC 和 bpftrace,還有 Linux 內核內置的 Ftrace 跟蹤器。BPF、BCC 和 bpftrace 在我之前的書中有更深入的介紹 [Gregg 19]。
本書還涵蓋了 Linux 中的 perf,perf 是另一個執行跟蹤的工具。然而,perf 被收錄在各章節中,通常用於采樣和 PMC 分析,而不是用於跟蹤。你可能需要或希望選用其他跟蹤工具,這很好。本書中的跟蹤工具用來展示你能向系統拋出的問題,這些問題及提出這些問題的方法,往往才是難知道的。
目標受眾
本書的目標受眾主要是系統管理員及企業與云計算環境中的運維工程師,所有需要了解操作系統和應用程序性能的開發人員、數據庫管理員和網站管理員也適合閱讀本書。作為在一家擁有大型計算環境的公司(Netflix)工作的性能工程師,我經常與 SRE(站點可靠性工程師)和開發人員一起工作,他們面臨著巨大的時間壓力,需要解決多個同
時發生的性能問題。我還參加過 Netflix CORE SRE 的輪流值班,親身經歷了這種壓力。
對於很多人來說,性能調整不是他們的主要工作,他們了解的知識足夠解決當前的問題就行。由於知道讀者的時間有限,因此我把這本書寫得盡可能短,並在書的結構上便於讀者跳到特定的章節。
本書的另一個受眾群體是學生 :本書適合作為系統性能課程的補充教材。在本書的編寫期間(以及開始動筆的多年以前),我就曾經教授過這樣的課程,並幫助學生解決仿真的性能問題(事前不會公布答案!)。這段經歷幫我弄清了什麼樣的材料能好地引導學生解決性能問題,這也促成了本書的部分內容。
無論你是不是學生,每章的習題都會帶給你一個審視和應用知識的機會。其中有一些可選的高階練習,可能你完成不了(但至少可以啟發思維)。
本書涵蓋了足夠多的知識細節,無論是大公司還是小公司,乃至雇用了不少性能專職人員的公司,本書都可以滿足其需要。對於眾多的小公司,日常用到的可能只是書中的某些部分,但本書作為參考也可備不時之需。
第1章 緒論
第2章 方法
第3章 操作系統
第4章 觀測工具
第5章 應用程序
第6章 CPU
第7章 內存
第8章 文件系統
第9章 磁盤
第10章 網絡
第11章 云計算
第12章 基準測試
第13章 Perf
第14章 Ftrace
第15章 BCC
第16章 案例研究
第17章 附錄A USE方法:Linux
第18章 附錄B sar總結
第19章 附錄C bpftrace單行命令
第20章 附錄D 精選練習題答案
第21章 附錄E 系統性能名人錄
大陸出版品因裝訂品質及貨運條件與台灣出版品落差甚大,除封面破損、內頁脫落等較嚴重的狀態,其餘商品將正常出貨。
特別提醒:部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。
無現貨庫存之簡體書,將向海外調貨:
海外有庫存之書籍,等候約45個工作天;
海外無庫存之書籍,平均作業時間約60個工作天,然不保證確定可調到貨,尚請見諒。
為了保護您的權益,「三民網路書店」提供會員七日商品鑑賞期(收到商品為起始日)。
若要辦理退貨,請在商品鑑賞期內寄回,且商品必須是全新狀態與完整包裝(商品、附件、發票、隨貨贈品等)否則恕不接受退貨。