国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當前位置: 首頁 > news >正文

防城港網(wǎng)站建設搜狗搜索舊版本

防城港網(wǎng)站建設,搜狗搜索舊版本,wordpress分類不同模板,seo 費用本文只是在閱讀《性能之巔》的過程中,對一些覺得有用的地方進行的總結和摘錄,并附加一些方便理解的材料,完整內容還請閱讀Gregg的大作 概念和方法 性能分析領域一詞的全棧代表了整個操作系統(tǒng)的軟硬件在內的所有事物 軟件生命周期和性能規(guī)劃…

本文只是在閱讀《性能之巔》的過程中,對一些覺得有用的地方進行的總結和摘錄,并附加一些方便理解的材料,完整內容還請閱讀Gregg的大作

概念和方法

性能分析領域一詞的全棧代表了整個操作系統(tǒng)的軟硬件在內的所有事物

在這里插入圖片描述

軟件生命周期和性能規(guī)劃

軟件項目生命周期從構思到開發(fā)到生產(chǎn)部署的理想步驟包括如下部分,**性能問題隨著開發(fā)的推進難度會越來越大。**云計算環(huán)境能夠讓用戶跳過前5個步驟(藍綠部署)

1.設置性能目標和建立性能模型

2.基于軟件或硬件原型進行性能特征歸納

3.對開發(fā)代碼進行性能分析(軟件整合之前)

4.執(zhí)行軟件非回歸性測試(軟件發(fā)布前或發(fā)布后)

5.針對軟件發(fā)布版本的基準測試

6.目標環(huán)境中的概念驗證(Proof-of-concept)測試

7.生產(chǎn)環(huán)境部署的配置優(yōu)化

8.監(jiān)控生產(chǎn)環(huán)境中運行的軟件

9.特定問題的性能分析

性能分析視角

性能分析可以從不同角度觸發(fā),典型的兩種性能分析的視角:負載分析(workload analysis)和資源分析(resource analysis)。開發(fā)人員工程采用負載視角,運維人員則從資源視角出發(fā)
在這里插入圖片描述

性能分析出發(fā)點

性能問題有其主觀性(需要客觀明確的標準)和復雜性(問題是面而非單個的點)。

  • 應用程序和內核通過在執(zhí)行邏輯中硬編碼計數(shù)器,提供關于活動和狀態(tài)的數(shù)據(jù)(操作數(shù),字節(jié)數(shù),使用率,延時,錯誤率等),根據(jù)這些數(shù)據(jù)可以進一步計算統(tǒng)計指標(平均值,比率,百分比等)
    在這里插入圖片描述

  • 除了被動獲取技術器數(shù)據(jù)外,還可以通過profile工具按需采樣(火焰圖)

  • 除了分析數(shù)據(jù)外,還可以對事件記錄進行分析,捕獲事件數(shù)據(jù)并保存和分析(系統(tǒng)調用strace,網(wǎng)絡數(shù)據(jù)包tcpdump
    在這里插入圖片描述

    • 靜態(tài)檢測指在源碼硬編碼的埋點,linux內核中有數(shù)百個檢測點(tracepoint),內核空間和用戶空間分別有對應的技術
    • 動態(tài)檢測指在程序運行后,在內存中插入檢測指令(例如bpf)
  • 觀測之外的手段,即通過實驗的方式進行基準測試,分為宏觀(模擬真實負載)和微觀基準測試

  • 好的工具能夠提升關測和分析的效率,linux的60秒快速分析涉及到如下工具

    工具檢查
    uptime平均負載識別系統(tǒng)負載的變化
    `dmesg -Ttail`
    vmstat -SM 1系統(tǒng)級統(tǒng)計,運行隊列長度,交換,cpu總體狀況
    mpstat -P ALL 1CPU平衡情況
    pidstat 1單個進程的cpu使用
    iostat -sxz 1磁盤io統(tǒng)計,iops,吞吐量,平均等待事件,utils等
    free -m內存使用,cache和buffer
    sar -n DEV 1網(wǎng)絡設備io,數(shù)據(jù)包和吞吐量
    sar -n TCP,ETCP 1tcp統(tǒng)計,連接和重傳
    top概覽

性能術語

關于性能的一些術語

  • IOPS:每秒發(fā)生的輸入/輸出操作的次數(shù)
  • 吞吐量:評價工作執(zhí)行的速率,尤其是在數(shù)據(jù)傳輸方面,這個術語用于描述數(shù)據(jù)傳輸速度(字節(jié)/秒或比特/秒)。在某些情況下(如數(shù)據(jù)庫),吞吐量指的是操作的速度(每秒操作數(shù)或每秒業(yè)務數(shù))
  • 響應時間:一次操作完成的時間。包括用于等待和服務的時間,也包括用來返回結果的時間。
  • 延時:延時是描述操作里用來等待服務的時間。在某些情況下,它可以指的是整個操作時間,等同于響應時間。
  • 使用率:對于服務所請求的資源,使用率描述在所給定的時間區(qū)間內資源的繁忙程度。對于存儲資源來說,使用率指的就是所消耗的存儲容量
  • 飽和度:指的是某一資源無法滿足服務的排隊工作量。
  • 瓶頸:在系統(tǒng)性能里,瓶頸指的是限制系統(tǒng)性能的那個資源。
  • 工作負載:系統(tǒng)的輸入或者是對系統(tǒng)所施加的負載叫做工作負載。對于數(shù)據(jù)庫來說,工作負載就是客戶端發(fā)出的數(shù)據(jù)庫請求和命令。
  • 緩存:用于復制或者緩沖一定量數(shù)據(jù)的高速存儲區(qū)域,避免對較慢的存儲層級的直接訪問從而提高性能

對其中一些概念的抽象能夠更好的體會量級的差異,延時和吞吐量尤其需要注意
在這里插入圖片描述

項目就是在性能,響應速度和成本之間進行權衡的過程,性能調優(yōu)在應用程序本身進行效果是最顯著的

性能分析方法

性能分析的方法很多,完整理論部分參考《性能之巔》的具體章節(jié),感覺比較好理解的方法有

  • USE方法,遍歷資源(硬件和軟件資源),根據(jù)資源在utilization、saturation、errors三個方面尋找測量指標,指標的異常往往體現(xiàn)了性能問題
  • 工作負載特征歸納,關注負載導致的問題(系統(tǒng)的輸入),例如負載的產(chǎn)生,調用邏輯,負載特征(iops,吞吐量,讀寫,變動方向)
  • 性能箴言,包括一些典型的調優(yōu)手段
    • 不要做,消除不必要的工作
    • 做但不要再做,利用緩存
    • 做少一點,將刷新,輪詢和更新的頻率降低
    • 回頭再做,回寫緩存
    • 在夜深人靜的時候做,錯開時間
    • 同時做,多線程
    • 做的更便宜,提升硬件性能

操作系統(tǒng)

系統(tǒng)內核

linux內核管理著CPU 調度、內存、文件系統(tǒng)、網(wǎng)絡協(xié)議,以及系統(tǒng)設備。

相比系統(tǒng)調用,系統(tǒng)庫提供的編程接口通常更為豐富和簡單。應用程序本身可以直接進行系統(tǒng)調用(操作系統(tǒng)允許)

頻繁IO的工作負載(網(wǎng)絡服務器)主要在內核態(tài)運行,計算密集型的工作負載通常在用戶態(tài)運行。因此,查看cpu的不同態(tài)的事件可以判斷工作負載的特征

內核的執(zhí)行主要是按需的,例如,當用戶級別的程序發(fā)起一次系統(tǒng)調用,或者設備發(fā)送一個中斷時。一些內核線程會異步地執(zhí)行一些系統(tǒng)維護的工作,其中可能包括內核時鐘程序和內存管理任務

經(jīng)典的UNIX 內核的一個核心組件是clock()例程(存在性能問題),現(xiàn)代內核已經(jīng)把許多功能移出了clock 例程,放到了按需中斷中,這是為了努力創(chuàng)造無tick內核

內核是唯一運行在內核態(tài)的程序(允許設備訪問和特權指令)。用戶程序(進程)運行在用戶態(tài),對于內核特權操作(例如I/O)的請求是通過系統(tǒng)調用傳遞的。執(zhí)行系統(tǒng)操作,執(zhí)行會做上下文切換從用戶態(tài)到內核態(tài),然后用更高的特權級別執(zhí)行

在這里插入圖片描述

用戶態(tài)和內核態(tài)程序有自身的上下文,上下文狀態(tài)切換有性能損耗(發(fā)生在狀態(tài)切換和進程切換)。有以下的優(yōu)化方式避免模式切換

  • 用戶態(tài)系統(tǒng)調用,內核導出虛擬動態(tài)共享對象到進程地址空間
  • 內存映射
  • 內核旁路(bypass),例如DPDK
  • 內核態(tài)應用程序(用戶態(tài)docker)

系統(tǒng)調用是請求內核執(zhí)行特權指令的例程,在內核中實現(xiàn)(因此要保證簡單),復雜的接口可以在用戶空間通過系統(tǒng)庫實現(xiàn)(例如glibc)

中斷分為異步中斷(硬件產(chǎn)生)和同步中斷(軟件產(chǎn)生)

在這里插入圖片描述

對于Linux 而言,設備驅動分為兩半,上半部用于快速處理中斷(在中斷禁止模式,不能耗時太長),到下半部的調度工作在之后處理(作為tasklet或工作隊列)

在這里插入圖片描述

進程是用以執(zhí)行用戶級別程序的環(huán)境。它包括內存地址空間、文件描述符、線程棧和寄存器。一個進程中包含有一個或多個線程,線程是一個可執(zhí)行的上下文,包括棧、寄存器,以及程序計數(shù)器

在這里插入圖片描述

調度器,進程在處理器上和CPU 間的調度是由調度器完成的,這是操作系統(tǒng)內核的關鍵組件?;镜囊鈭D是將CPU 時間劃分給活躍的進程和線程,而且維護一套優(yōu)先級的機制

調度器會跟蹤所有處于ready-to-run 狀態(tài)的線程,傳統(tǒng)意義上每一個優(yōu)先級隊列都稱為運行隊列,每個cpu都有一個隊列。多數(shù)的內核線程運行的優(yōu)先級要比用戶級別的優(yōu)先級高。此處的優(yōu)先級僅僅只時間片的長度,和運行的優(yōu)先級沒有關系(搶占式調度)。內核中存在動態(tài)優(yōu)化的邏輯執(zhí)行類似以下操作

調度器能夠識別CPU 密集型的進程并降低它們的優(yōu)先級,可以讓I/O 密集型工作負載(需要低延時響應)更快地運行

文件系統(tǒng)是作為文件和目錄的數(shù)據(jù)組織。有一個基于文件的接口用于訪問,該接口通?;赑OSIX 標準。虛擬文件系統(tǒng)(virtual file system,VFS)是一個對文件系統(tǒng)類型做抽象的內核界面

在這里插入圖片描述

基于存儲設備的文件系統(tǒng),從用戶級軟件到存儲設備的路徑被稱為I/O 棧

在這里插入圖片描述

由于磁盤I/O 的延時較長,軟件棧中的很多層級通過緩存讀取和緩存寫入來試圖避免,常見的緩存包括

緩存實例
客戶端緩存瀏覽器緩存
應用程序緩存-
webserver緩存apache緩存
緩存服務器redis
數(shù)據(jù)庫緩存mysql緩沖區(qū)告訴緩存
目錄緩存dcache
文件元數(shù)據(jù)緩存inode緩存
操作系統(tǒng)緩沖區(qū)高速緩存緩沖區(qū)高速緩存
文件系統(tǒng)主緩存換頁緩存
文件系統(tǒng)次緩存ZFS L2ARC
設備緩存ZFS vdev
快緩存緩沖區(qū)高速緩存
磁盤控制器緩存RAID卡緩存
存儲陣列緩存-
磁盤內存緩存-

內核提供一套內置的網(wǎng)絡協(xié)議棧(TCP/IP 棧),能夠讓系統(tǒng)用網(wǎng)絡進行通信。網(wǎng)絡協(xié)議通常不會變,但是新的TCP 選項和新的TCP 阻塞控制算法需要內核支持。另一個可能的變化是對于不同的網(wǎng)絡接口卡的支持,需要內核有新設備的驅動

設備驅動是用于設備管理和設備I/O 的內核軟件,常常由開發(fā)硬件設備的廠商提供

設備驅動提供給設備的接口有字符接口也有塊接口。字符設備,也稱為原始設備,提供無緩沖的設備順序訪問,訪問可以是任意I/O 尺寸的,也可以小到單一字符,取決于設備本身

多處理器架構下,NUMA架構允許主存連接到不同的物理CPU

觀測工具

Linux 性能調優(yōu)工具9張圖

linux工作負載性能觀測工具

img

工具的維度劃分,系統(tǒng)級別和進程級別

在這里插入圖片描述

觀測工具只是通過各種結構和框架整理信息,數(shù)據(jù)來源包括

在這里插入圖片描述

例如,/proc是一個提供內核統(tǒng)計信息的文件系統(tǒng)接口,將內核統(tǒng)計數(shù)據(jù)用目錄樹的形式暴露給用戶空間,接口就是POSIX文件系統(tǒng)調用。/sys在2.6 內核引入的,為內核統(tǒng)計提供一個基于目錄的結構

/proc進程級別的接口如下

  • limits:實際的資源限制
  • maps:映射的內存區(qū)域
  • sched:CPU 調度器的各種統(tǒng)計
  • schedstat:CPU 運行時間、延時和時間分片
  • smaps:映射內存區(qū)域的使用統(tǒng)計
  • stat:進程狀態(tài)和統(tǒng)計,包括總的CPU 和內存的使用情況
  • statm:以頁為單位的內存使用總結
  • status:stat 和statm 的信息,用戶可讀
  • task:每個任務的統(tǒng)計目錄

/proc系統(tǒng)級別的接口如下

  • cpuinfo:物理處理器信息,包含所有虛擬CPU、型號、時鐘頻率和緩存大小
  • diskstats:對于所有磁盤設備的磁盤I/O 統(tǒng)計
  • interrupts:每個CPU 的中斷計數(shù)器
  • loadavg:負載平均值
  • meminfo:系統(tǒng)內存使用明細
  • net/dev:網(wǎng)絡接口統(tǒng)計
  • net/tcp:活躍的TCP 套接字信息
  • schedstat:系統(tǒng)級別的CPU 調度器統(tǒng)計
  • self:關聯(lián)當前進程ID 路徑的符號鏈接
  • slabinfo:內核slab 分配器緩存統(tǒng)計
  • stat:內核和系統(tǒng)資源的統(tǒng)計,CPU、磁盤、分頁、交換區(qū)、進程
  • zoneinfo:內存區(qū)信息。

sar也是一個不可忽視的觀測工具,以下是可以覆蓋的觀測范圍

img

這里只列出了常見的觀測數(shù)據(jù)源,詳細需要參考原著

之后就是對應用程序,cpu,內存,文件系統(tǒng),磁盤,網(wǎng)絡等進行的具體分析

應用程序

性能調整離工作所執(zhí)行的地方越近越好:最好在應用程序里

Go 語言高性能編程

分析問題

對于一個應用程序的分析應當考慮以下問題

  • 功能:應用程序的角色是什么?是數(shù)據(jù)庫、Web 服務器、負載均衡器、文件服務器,還是對象存儲?
  • 操作:應用服務器服務哪些請求,或者執(zhí)行怎么樣的操作?數(shù)據(jù)庫服務查詢(和命令)、Web 服務器服務HTTP 請求,等等。這些可以用速率來度量,用以估計負載和做容量規(guī)劃。
  • CPU 模式:應用程序是用戶級的軟件實現(xiàn)還是內核級的軟件實現(xiàn)?多數(shù)的應用程序是用戶級別的,以一個或多個進程的形式執(zhí)行,但是有些是以內核服務的形式實現(xiàn)的(例如,NFS)。
  • 配置:應用程序是怎樣配置的,為什么這么配?這些信息能在配置文件里找到或者用管理工具得到。檢查所有與性能相關的可調參數(shù)有沒有改過,包括緩沖區(qū)大小、緩存大小、并發(fā)(進程或線程),以及其他選項。
  • 指標:有沒有可用的應用程序指標,如操作率?可能是用自帶工具或者第三方工具,通過API 請求,或者通過處理操作日志得到。
  • 日志:應用程序創(chuàng)建的操作日志是哪些?能啟用什么樣的日志?哪些性能指標,包括延時,能從日志中得到?
  • 版本:應用程序是最新的版本嗎?在最近的版本的發(fā)布說明里有沒有提及性能的修復和性能的提升?
  • Bugs:應用程序有bug 數(shù)據(jù)庫嗎?你用的應用程序版本有什么樣的“性能”bug?
  • 社區(qū):應用程序社區(qū)里有分享性能發(fā)現(xiàn)的地方嗎?
  • 書:有與應用程序以及它的性能相關的書嗎?
  • 專家:誰是這個應用程序公認的性能專家?

分析目標

應用程序性能分析的目標

  • 延時:低應用程序響應時間
  • 吞吐量:高應用程序操作率或者數(shù)據(jù)傳輸率
  • 資源使用率:對于給定應用程序工作負載,高效地使用資源

常用的調優(yōu)手段

提高應用程序性能的常用技術包括:選擇I/O 大小、緩存、緩沖區(qū)、輪詢、并發(fā)和并行、非阻塞I/O 和處理器綁定

  • IO大小:IO大小越大,每次傳輸?shù)臄?shù)據(jù)越多,效率越高。然而隨機讀寫大的IO會造成浪費(IO時間和緩存)

    執(zhí)行I/O 的開銷包括初始化緩沖區(qū)、系統(tǒng)調用、上下文切換、分配內核元數(shù)據(jù)、檢查進程權限和限制、映射地址到設備、執(zhí)行內核和驅動代碼來執(zhí)行I/O,以及,在最后釋放元數(shù)據(jù)和緩沖區(qū)。

  • 緩存:存儲通常用緩存來提高寫操作的性能,需要注意緩存一致性(避免返回過期數(shù)據(jù))

    12 張圖看懂 CPU 緩存一致性與 MESI 協(xié)議

  • 緩沖區(qū):寫操作同樣有寫緩沖區(qū),將IO進行合并減少開銷,但是會增加寫延遲。環(huán)形緩沖區(qū)(例如網(wǎng)卡驅動緩沖)提供了固定大小的緩沖區(qū)

  • 輪詢:不斷檢查事件狀態(tài),導致CPU開銷,兩個檢查存在延遲。通過poll和epoll接口提供基于事件的觸發(fā),避免輪詢

  • 并發(fā):可以用多進程(multiprocess)或者多線程(multithreaded)實現(xiàn),需要調度器上下文切換開銷為代價??梢栽谟脩魬B(tài)實現(xiàn)調度:協(xié)程(goroutine),基于事件的并發(fā)(nodejs)。提到并發(fā)就要考慮到同步原語的問題,即鎖可能會導致性能問題

    Golang深入理解GPM模型

  • 非阻塞IO:非阻塞I/O 模型是異步地發(fā)起I/O,而不阻塞當前的線程,線程可以執(zhí)行其他的工作

  • 處理器綁定:NUMA架構下,線程執(zhí)行I/O 前后運行在同一CPU 上。提高了應用程序的內存本地性,減少內存I/O

編程語言級別

  • 編程語言:不同語言的選擇,編譯型語言編譯優(yōu)化的考量,解釋性語言解釋器的分析
  • 語言虛擬機:性能分析通常靠的是語言虛擬機提供的工具集(一些虛擬機提供DTrace 探針)和第三方的工具
  • GC(垃圾回收):影響內存,CPU損耗和GC導致的延時有,例如,Java虛擬機提供了許多可調參數(shù)來設置GC 類型、GC 的線程數(shù)、堆尺寸的最大值、目標堆的空閑率

具體的分析方法

包括CPU剖析,系統(tǒng)調用,線程狀態(tài),IO,工作負載,USE方法,鎖分析

線程狀態(tài)的分析

確定應用程序的線程在哪里花費了時間,線程的9種狀態(tài)

  • 用戶:用戶態(tài)的on-cpu,哪些代碼在消耗CPU
  • 內核:內核態(tài)的on-cpu,哪些代碼在消耗CPU
  • 可運行:等待輪到上CPU,意味著需要申請資源,考慮是否存在資源控制(cgroup)
  • 匿名換頁:可運行,但是因等待匿名換頁而受阻,內存不足可能換頁,考慮資源控制
  • 磁盤IO:等待塊設備IO
  • 網(wǎng)絡IO:等待網(wǎng)絡折欸IO,套接字讀寫
  • 睡眠:等待包括網(wǎng)絡、塊設備和數(shù)據(jù)/文本頁換入在內的I/O。
  • 鎖:等待獲取同步鎖(等待其他線程)
  • 空閑:等待工作

在這里插入圖片描述

靜態(tài)性能調優(yōu)的問題

  • 在運行的應用程序是什么版本?有更新的版本嗎?發(fā)布說明有提及性能提高嗎?
  • 應用程序有哪些已知的性能問題?有可供搜索的bug 數(shù)據(jù)庫嗎?
  • 應用程序是如何配置的?
  • 如果配置或調整的與默認值不同,是由于什么原因?(是基于測量和分析,還是猜想?)
  • 應用程序用到了對象緩存嗎?緩存的大小是怎樣的?
  • 應用程序是并發(fā)運行的嗎?這是如何配置的(例如,線程池大小)?
  • 應用程序運行在特定模式下嗎?應用程序用到了哪些系統(tǒng)庫?它們的版本是什么?
  • 應用程序用的是怎樣的內存分配器?
  • 應用程序配置用大頁面做堆嗎?
  • 應用程序是編譯的嗎?編譯器的版本是什么?編譯器的選項和優(yōu)化是哪些?是64 位的嗎?
  • 應用程序遇到錯誤了嗎?錯誤之后會運行在降級模式嗎?
  • 有沒有系統(tǒng)設置的限制,以及對CPU、內存、文件系統(tǒng)、磁盤和網(wǎng)絡使用的資源控制?(在云計算中很普遍)

CPU

概念和架構

cpu運行隊列,花在等待CPU 運行上的時間又被稱為運行隊列延時或者分發(fā)器隊列延時(調度器延時)。對于多處理器系統(tǒng),內核通常為每個CPU 提供了一個運行隊列,并盡量使得線程每次都被放到同一隊列之中(熱緩存)。在NUMA系統(tǒng)中,這會提高內存本地性,從而提高系統(tǒng)性能
在這里插入圖片描述

  • 時鐘頻率,更快的時鐘頻率并不一定會提高性能,取決于快速CPU 周期指令。指令流水線能夠提升cpu的吞吐量。

  • 每指令周期(CPI):CPI 較高代表CPU 經(jīng)常陷入停滯,通常都是在訪問內存。而較低的CPI 則代表CPU 基本沒有停滯,指令吞吐量較高

  • 使用率:CPU 使用率通過測量一段時間內CPU 實例忙于執(zhí)行工作的時間比例獲得。CPU 使用率的測量包括了所有符合條件活動的時鐘周期,包括內存停滯周期(等待IO的時間)。CPU 使用率通常被分成內核時間和用戶時間兩個指標

  • 飽和度:100%使用率的CPU 被稱為是飽和的,線程在這種情況下會碰上調度器延時,也有可能被cgroup限制

  • 多進程和多線程的比較
    在這里插入圖片描述

  • 字長:表示地址空間大小和數(shù)據(jù)通路寬度,增加吞吐量,額外的內存開銷

  • 緩存:不同級別緩存訪問時延不同

    在這里插入圖片描述

  • 系統(tǒng)總線:在處理器數(shù)目增長的情況下,會因為共享系統(tǒng)總線資源而出現(xiàn)擴展性問題?,F(xiàn)在多處理器使用NUMA架構和cpu互聯(lián)技術
    在這里插入圖片描述

  • 調度器,具備的功能有

    • 分時:可運行線程之間的多任務,優(yōu)先執(zhí)行最高優(yōu)先級任務
    • 搶占:一旦有高優(yōu)先級線程變?yōu)榭蛇\行狀態(tài),調度器能夠搶占當前運行的線程,這樣較高優(yōu)先級的線程可以馬上開始運行
    • 負載均衡:把可運行的線程移到空閑或者較不繁忙的CPU 隊列中

    在這里插入圖片描述

  • 調度類:管理了可運行線程的行為,優(yōu)先級,CPU 時間是否分片,以及這些時間片的長度(又稱為時間量子)。用戶線程的優(yōu)先級受一個用戶定義的一個nice 值影響??梢詫Σ恢匾墓ぷ髟O置這個值以降低其優(yōu)先級

    在這里插入圖片描述

    linux下的調度類有

    • RT:為實時類負載提供固定的高優(yōu)先級。內核支持用戶和內核級別的搶占,允許RT任務以短延時分發(fā)。優(yōu)先級范圍為0~99
    • O(1)調度器:在Linux 2.6 作為默認用戶進程分時調度器引入
    • CFS:Linux 2.6.23 引入了完全公平調度作為默認用戶進程分時調度器

    用戶級進程可以通過調用sched_setscheduler()設置調度器策略以調整調度類的行為。RT 類支持SCHED_RR SCHED_FIFO 策略,而CFS 類支持SCHED_NORMALSCHED_BATCH

常用工具

  • uptime:檢查負載平均數(shù)以確認CPU 負載是隨時間上升還是下降。負載平均數(shù)超過了CPU 數(shù)量通常代表CPU 飽和
  • vmstat:每秒運行vmstat,然后檢查空閑列,看看還有多少余量。少于10%可能是一個問題
  • mpstat:檢查單個熱點(繁忙)CPU,挑出一個可能的線程擴展性問題
  • top/prstat:看看哪個進程和用戶是CPU 消耗大戶
  • pidstat/prstat:把CPU 消耗大戶分解成用戶和系統(tǒng)時間
  • perf/dtrace/stap/oprofile:從用戶時間或者內核時間的角度剖析CPU 使用的堆棧跟蹤,以了解為什么使用這么多CPU?!?/li>
  • perf/cpustat:測量CPI

具體的分析方法

USE方法

檢車美俄cpu的

  • 使用率:CPU 繁忙的時間(未在空閑線程中)。
  • 飽和度:可運行線程排隊等待CPU 的程度。
  • 錯誤:CPU 錯誤,包括可改正錯誤

負載特征分析

  • 平均負載(使用率+飽和度)
  • 用戶時間與系統(tǒng)時間之比
  • 系統(tǒng)調用頻率
  • 自愿上下文切換頻率
  • 中斷頻率
  • 整個系統(tǒng)范圍內的CPU 使用率是多少?每個CPU 呢?
  • CPU 負載的并發(fā)程度如何?是單線程嗎?有多少線程?
  • 哪個應用程序或者用戶在使用CPU?用了多少?
  • 哪個內核線程在使用CPU?用了多少?
  • 中斷的CPU 用量是多少?
  • CPU 互聯(lián)的使用率是多少?
  • 為什么CPU 被使用(用戶和內核級別調用路徑)?
  • 遇到了什么類型的停滯周期?

靜態(tài)性能調優(yōu)

  • 有多少CPU 可用?是核嗎?還是硬件線程?
  • CPU 的架構是單處理器還是多處理器?
  • CPU 緩存的大小是多少?是共享的嗎?
  • CPU 時鐘頻率是多少?是動態(tài)的(例如Intel 睿頻加速和SpeedStep)嗎?這些動態(tài)特性在BIOS 啟用了嗎?
  • BIOS 里啟用或者禁用了其他什么CPU 相關的特性?
  • 這款型號的處理器有什么性能問題(bug)?出現(xiàn)在處理器勘誤表上了嗎?
  • 這個BIOS 固件版本有什么性能問題(bug)嗎?
  • 有軟件的CPU 使用限制(資源控制)嗎?是什么?

常用性能指標

  • 平均負載:表示了對CPU 資源的需求,通過匯總正在運行的線程數(shù)(使用率)和正在排隊等待運行的線程數(shù)(飽和度)計算得出。Linux 目前把在不可中斷狀態(tài)執(zhí)行磁盤I/O 的任務也計入了平均負載。這意味著平均負載再也不能單用來表示CPU 余量或者飽和度
  • vmstat指標
    • r:運行隊列長度——可運行線程的總數(shù)
    • us:用戶態(tài)時間。
    • sy:系統(tǒng)態(tài)時間(內核)。
    • id:空閑
    • wa:等待I/O,即線程被阻塞等待磁盤I/O 時的CPU 空閑時間
    • st:偷取(未在輸出里顯示),CPU 在虛擬化的環(huán)境下在其他租戶上的開銷
  • mpstat指標
    • CPU:邏輯CPU ID,或者all 表示總結信息
    • %usr:用戶態(tài)時間
    • %nice:以nice 優(yōu)先級運行的進程用戶態(tài)時間
    • %sys:系統(tǒng)態(tài)時間(內核)
    • %iowait:I/O 等待
    • %irq:硬件中斷CPU 用量
    • %soft:軟件中斷CPU 用量
    • %steal:耗費在服務其他租戶的時間
    • %guest:花在訪客虛擬機的時間
    • %idle:空閑。

內存

概念和架構

  • 虛擬內存:抽象概念,它向每個進程和內核提供巨大的、線性的并且私有的地址空間。支持多任務(虛擬地址空間被設計成分離的),并且可以超額訂購(使用中的內存可以超出主內存的容量)

  • 換頁:

    • 文件系統(tǒng)換頁(好的):讀寫位于內存中的映射文件頁引發(fā),內存不足時可以回收的cache
    • 匿名換頁(壞的):匿名換頁牽涉進程的私有數(shù)據(jù):進程堆和棧(匿名是由于它在操作系統(tǒng)中缺乏有名字的地址,例如,沒有文件系統(tǒng)路徑),要求遷移數(shù)據(jù)到物理交換設備或者交換文件
  • 按需換頁:將虛擬內存按需映射到物理內存,把CPU 創(chuàng)建映射的開銷推遲到實際需要或訪問時,而不是在初次分配這部分內存時

    在這里插入圖片描述

    虛擬內存和按需換頁的結果是任何虛擬內存頁可能處于如下的一個狀態(tài):(如果因為系統(tǒng)內存壓力而換出頁就會到達D 狀態(tài)。狀態(tài)B 到C 的轉變就是缺頁。如果需要磁盤讀寫,就是嚴重缺頁,否則就是輕微缺頁)

    • A.未分配
    • B.已分配,未映射(未填充并且未缺頁)
    • C.已分配,已映射到主存(RAM)
    • D.已分配,已映射到物理交換空間(磁盤)

    云計算環(huán)境沒有交換區(qū),不鼓勵壞的換頁

    其他相關概念

    • RSS(C)常駐內存集,已經(jīng)分配的主存

    • 虛擬內存(B+C+D),所有已分配的區(qū)域

    • WSS 工作集,頻繁使用的主存大小

  • 進程交換(unix獨創(chuàng)):交換是在主存與物理交換設備或者交換文件之間移動整個進程,嚴重影響性能

  • 文件系統(tǒng)緩存,系統(tǒng)啟動之后內存的占用增加是正常的,因為操作系統(tǒng)會將可用內存用于文件系統(tǒng)緩存以提高性能。在應用程序需要的時候,內核應該能夠很快從文件系統(tǒng)緩存中釋放內存

  • 飽和度:對內存的需求超過了主存的情況被稱作主存飽和。這時操作系統(tǒng)會使用換頁、交換或者OOM killer來釋放內存

  • 內存釋放:系統(tǒng)中的可用內存過低時,內核有多種方法釋放內存,并添加到頁空閑鏈表中(如果在未被重用前有對任一頁的請求,它能被取回并從空閑鏈表中移除)
    在這里插入圖片描述

    • 回收大多是從內核的slab 分配器緩存釋放內存。這些緩存包含slab 大小的未使用內存塊,以供重用?;厥諏⑦@些內存交還給系統(tǒng)進行分配
    • 內核頁面換出守護進程(kswapd)管理利用換頁釋放內存。當主存中可用的空閑鏈表低于閾值時,頁面換出守護進程會開始頁掃描。kswapd 先掃描非活動列表,然后按需掃描活動列表。術語掃描指遍歷列表檢查頁面:如果頁被鎖定或者是臟的,它可能不適合釋放
  • 內存分配:用戶態(tài)庫或者內核程序向程序員提供簡單的內存使用接口。分配器可以利用包括線程級別對象緩存在內的技術以提高性能

    在這里插入圖片描述

    分配器包括,內核級分配器——slab 分配器和SLUB——以及用戶級分配器——glibc,jemalloc和TCMalloc

    glibc內存管理那些事兒

常用工具

  • 頁掃描:尋找連續(xù)的頁掃描(超過10 秒),它是內存壓力的預兆。Linux 中,可以使用sar -B 并檢查pgscan 列。
  • 壓力滯留信息(PSI):查看/proc/pressure/memeory檢查內存壓力(飽和度)
  • 換頁:換頁是系統(tǒng)內存低的進一步征兆。Linux 中,可以使用vmstat (8)并檢查si和so 列(這里,交換指匿名換頁)。
  • vmstat:每秒運行vmstat 檢查free 列的可用內存
  • OOM 終結者:這些事件可以在系統(tǒng)日志/var/log/messages,或者從dmesg(1)中找到
  • 交換:配置交換的情況下,用vmstat -S 并檢查si 和so
  • top/prstat:查看哪些進程和用戶是(常駐)物理內存和虛擬內存的最大使用者
  • perf/bpftrace:通過棧追蹤內存分配

具體分析方法

描述使用情況

  • 系統(tǒng)范圍的物理和虛擬內存使用率
  • 飽和度:換頁、交換、OOM 終結者
  • 內核和文件系統(tǒng)緩存使用情況
  • 每個進程的物理和虛擬內存使用情況
  • 是否存在內存資源控制
  • 內核內存用于何處?每個slab 呢?
  • 文件系統(tǒng)緩存(或者頁緩存)中不活躍與活躍的比例是多少?
  • 進程內存用于何處?
  • 進程為何分配內存(調用路徑)?
  • 內核為何分配內存(調用路徑)?
  • 哪些進程被持續(xù)地頁面換出/交換出?
  • 哪些進程曾經(jīng)被頁面換出/交換出?
  • 進程或者內核是否有內存泄漏?
  • NUMA 系統(tǒng)中,內存是否被分配到合適的節(jié)點中去?
  • CPI 和內存停滯周期頻率是多少?
  • 內存總線的平衡性?
  • 相對于遠程內存I/O,執(zhí)行了多少本地內存I/O?

性能監(jiān)測

  • 使用率
  • 飽和度:交換,oom

內存泄露

當應用程序或者內核模塊無盡地增長,從空閑鏈表、文件系統(tǒng)緩存,最終從其他進程消耗內存時,就出現(xiàn)了這個問題

  • 內存泄漏:一種類型的軟件bug,忘記分配過的內存而沒有釋放。通過修改軟件代碼,或應用補丁及進行升級(進而修改代碼)能修復。
  • 內存增長:軟件在正常地消耗內存,遠高于系統(tǒng)允許的速率。通過修改軟件配置,或者由軟件開發(fā)人員修改軟件內存的消耗方式來進行修復

靜態(tài)性能調優(yōu)

  • 主存有多少?
  • 配置允許應用程序使用多少內存(它們自己的配置)?
  • 應用程序使用哪個分配器?
  • 主存的速度?是否是可用的最快的類型?
  • 系統(tǒng)架構是什么?NUMA、UMA?
  • 操作系統(tǒng)支持NUMA 嗎?
  • 有多少內存總線?
  • CPU 緩存的數(shù)量和大小是多少?TLB?
  • 是否配置和使用了大頁面?
  • 是否支持和配置了過度提交?
  • 還使用了哪些其他的內存可調參數(shù)?
  • 是否有軟件強制的內存限制(資源控制)

可調的內核參數(shù)

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-TwOd8RAv-1676020322172)(assets/image-20230210151620434.png)]

文件系統(tǒng)

概念和架構

文件系統(tǒng)性能比磁盤性能更為重要。文件系統(tǒng)通過緩存、緩沖以及異步I/O 等手段來緩和磁盤(或者遠程系統(tǒng))的延時對應用程序的影響

  • 文件系統(tǒng)接口

    在這里插入圖片描述

  • 文件系統(tǒng)緩存。讀操作從緩存返回(緩存命中)或者從磁盤返回(緩存未命中)。未命中的操作被存儲在緩存中,并填充緩存(熱身)。文件系統(tǒng)緩存可能也用來緩沖寫操作,使之延時寫入

    在這里插入圖片描述

  • 文件系統(tǒng)延時,一個文件系統(tǒng)邏輯請求從開始到結束的時間。它包括了消耗在文件系統(tǒng)、內核磁盤I/O 子系統(tǒng)以及等待磁盤設備——物理I/O 的時間

  • 隨機與順序IO,一連串的文件系統(tǒng)邏輯I/O,按照每個I/O 的文件偏移量,可以分為隨機I/O 與順序I/O

    文件系統(tǒng)一直以來在磁盤上順序和連續(xù)地存放文件數(shù)據(jù),以努力減小隨機I/O 的數(shù)目。當文件系統(tǒng)未能達成這個目標時,文件的擺放變得雜亂無章,順序的邏輯I/O 被分解成隨機的物理I/O,這種情況我們稱為碎片化

    在這里插入圖片描述

  • 預取,通過檢查當前和上一個I/O 的文件偏移量,可以檢測出當前是否是順序讀負載,并且做出預測,在應用程序請求前向磁盤發(fā)出讀命令,以填充文件系統(tǒng)緩存

    在這里插入圖片描述

  • 回寫緩存,當數(shù)據(jù)寫入主存后,就認為寫入已經(jīng)結束并返回,之后再異步地把數(shù)據(jù)刷入磁盤。文件系統(tǒng)寫入“臟”數(shù)據(jù)的過程稱為刷新(flushing)。影響了數(shù)據(jù)的可靠性(斷電丟失),因此也會也提供一個同步寫的選項繞過這個機制,把數(shù)據(jù)直接寫在磁盤上

  • 同步寫,同步寫完成的標志是,所有的數(shù)據(jù)以及必要的文件系統(tǒng)元數(shù)據(jù)被完整地寫入到永久存儲介質(如磁盤設備)中。由于包含了磁盤I/O 的延時,所以肯定比異步寫(寫回緩存)慢得多

  • 裸IO,繞過了整個文件系統(tǒng),直接發(fā)給磁盤地址。其缺點在于難以管理,即不能使用常用文件系統(tǒng)工具執(zhí)行備份/恢復和監(jiān)控

  • 直接IO,允許應用程序繞過緩存使用文件系統(tǒng)

  • 非阻塞IO,如果需要等待,應用程序線程會被阻塞并讓出CPU,在等待期間給其他線程執(zhí)行的機會

  • 內存映射文件,通過把文件映射到進程地址空間,并直接存取內存地址的方法來提高文件系統(tǒng)I/O 性能。這樣可以避免調用read()和write()存取文件數(shù)據(jù)時產(chǎn)生的系統(tǒng)調用和上下文切換開銷。內存映射通過系統(tǒng)調用mmap()創(chuàng)建,通過munmap()銷

    Go Mmap 文件內存映射簡明教程

  • 元數(shù)據(jù),數(shù)據(jù)對應了文件和目錄的內容,那元數(shù)據(jù)則對應了有關它們的信息。元數(shù)據(jù)可能是通過文件系統(tǒng)接口(POSIX)讀出的信息,也可能是文件系統(tǒng)實現(xiàn)磁盤布局所需的信息。前者被稱為邏輯元數(shù)據(jù),后者被稱為物理元數(shù)據(jù)

  • 邏輯和物理IO,與應用程序I/O 相比,磁盤I/O 有時顯得無關、間接、放大或者縮小

    文件系統(tǒng)的工作不僅僅是在永久存儲介質(磁盤)上提供一個基于文件的接口那么簡單。它們緩存讀、緩沖寫,發(fā)起額外的I/O 維護磁盤上與物理布局相關的元數(shù)據(jù),這些元數(shù)據(jù)記錄了數(shù)據(jù)存儲的位置

    • 無關,以下因素可能造成磁盤I/O 與應用程序無關。
      • 其他應用程序:磁盤I/O 來源于其他應用程序。
      • 其他租戶:磁盤I/O 來源于其他租戶(可在虛擬化技術的幫助下通過系統(tǒng)工具查看)。
      • 其他內核任務:例如內核在重建一個軟RAID 卷或者執(zhí)行異步文件系統(tǒng)校驗驗證時。
    • 間接,以下因素可能造成應用程序I/O 與磁盤I/O 之間沒有直接對應關系。
      • 文件系統(tǒng)預取:增加額外的I/O,這些I/O 應用程序可能用得到,也可能用不到。
      • 文件系統(tǒng)緩沖:通過寫回緩存技術推遲和歸并寫操作,之后再一并刷入磁盤。有些文件系統(tǒng)可能會緩沖數(shù)十秒后一起寫入,造成偶爾的突發(fā)大I/O。
    • 縮小,以下因素可能造成磁盤I/O 小于應用程序I/O,甚至完全消失。
      • 文件系統(tǒng)緩存:直接從主存返回,而非磁盤。
      • 文件系統(tǒng)寫抵消:在一次性寫回到磁盤之前,同一個地址被修改了多次。
      • 壓縮:減少了從邏輯I/O 到物理I/O 的數(shù)據(jù)量。
      • 歸并:在向磁盤發(fā)I/O 前合并連續(xù)I/O。
      • 內存文件系統(tǒng):也許永遠不需要寫入到磁盤的內容(如tmpfs)
    • 放大
      • 以下因素可能造成磁盤I/O 大于應用程序I/O。
      • 文件系統(tǒng)元數(shù)據(jù):增加了額外的I/O。
      • 文件系統(tǒng)記錄尺寸:向上對齊的I/O 大小(增加了字節(jié)數(shù)),或者被打散的I/O(增加了I/O 數(shù)量)。
      • 卷管理器奇偶校驗:讀-改-寫的周期會增加額外的I/O。
  • 特殊文件系統(tǒng),有些特殊的文件系統(tǒng)也有著其他用途,比如臨時文件(/tmp)、內核設備路徑(/dev)和系統(tǒng)統(tǒng)計信息(/proc)

  • 文件系統(tǒng)緩存

    • 頁緩存,緩存了虛擬內存的頁面,包括文件系統(tǒng)的頁面,提升了文件和目錄的性能。頁緩存大小是動態(tài)的,它會不斷增長消耗可用的內存,并在應用程序需要的時候釋放
    • 目錄項緩存(Dcache)記錄了從目錄項(struct dentry)到VFS inode 的映射關系
    • inode 緩存這個緩存的對象是VFS inode(struct inode),每個都描述了文件系統(tǒng)一個對象的屬性

    在這里插入圖片描述

  • 文件系統(tǒng)類型:ext4,xfs,btrfs等

  • 卷和池

具體分析方法

延時分析

操作延時 = 時刻(完成操作)-時刻(發(fā)起操作)

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-qrb8BEZR-1676020322176)(assets/image-20230210154227952.png)]

負載特征歸納

  • 操作頻率和操作類型
  • 文件I/O 吞吐量
  • 文件I/O 大小
  • 讀寫比例
  • 同步寫比例
  • 文件隨機和連續(xù)訪問比例
  • 文件系統(tǒng)緩存命中率是多少?未命中率是多少?
  • 文件系統(tǒng)緩存有多大?當前使用情況如何?
  • 現(xiàn)在還使用了其他什么緩存(目錄、inode、高速緩沖區(qū))和它們的使用情況?
  • 哪個應用程序或者用戶在使用文件系統(tǒng)?
  • 哪些文件和目錄正在被訪問?是創(chuàng)建和刪除嗎?
  • 碰到了什么錯誤嗎?是不是由于一些非法請求,或者文件系統(tǒng)自身的問題?
  • 為什么要發(fā)起文件系統(tǒng)I/O(用戶程序的調用路徑)?
  • 應用發(fā)起的文件系統(tǒng)I/O 中同步的比例占到多少?
  • I/O 抵達時間的分布是怎樣的?

性能監(jiān)控

  • 操作頻率,操作頻率是負載的最基本特征
  • 操作延時,延時是好是差,取決于負載、環(huán)境和延時需求

事件追蹤

事件跟蹤捕獲文件系統(tǒng)每個操作的細節(jié)

  • 文件系統(tǒng)類型。
  • 文件系統(tǒng)掛載點。
  • 操作類型:讀取、寫入、統(tǒng)計、打開、關閉、建目錄,等等。
  • 操作大小(如果適用):字節(jié)數(shù)。
  • 操作開始時間戳:向文件系統(tǒng)發(fā)起操作的時間。
  • 操作結束時間戳:文件系統(tǒng)完成操作的時間。
  • 操作完成狀態(tài):錯誤。
  • 路徑名(如果適用)。
  • 進程ID。
  • 應用程序名。

靜態(tài)性能調優(yōu)

  • 當前掛載并使用了多少個文件系統(tǒng)?
  • 文件系統(tǒng)記錄大小?
  • 啟用了訪問時間戳嗎?
  • 還啟用了哪些文件系統(tǒng)選項(壓縮、加密等)?
  • 文件系統(tǒng)緩存是怎么配置的?最大緩存大小是多少?
  • 其他緩存(目錄、inode、高速緩沖區(qū))是怎么配置的?
  • 有二級緩存嗎?用了嗎?
  • 有多少個存儲設備?用了幾個?
  • 存儲設備是怎么配置的?用了RAID 嗎?
  • 用了哪種文件系統(tǒng)?
  • 用了哪個文件系統(tǒng)的版本(或者內核)?
  • 有什么需要考慮的文件系統(tǒng)bug/補丁?
  • 啟用文件系統(tǒng)I/O 的資源控制了嗎?

微基準測試的參數(shù)

  • 操作類型:讀、寫和其他文件系統(tǒng)操作的頻率。
  • I/O 大小:從1B 到1MB 甚至更大。
  • 文件偏移量模式:隨機或者連續(xù)。
  • 隨機訪問模式:統(tǒng)一的隨機分布或者帕累托分布。
  • 寫類型:異步或同步(O_SYNC)。
  • 工作集大小:文件系統(tǒng)緩存是否放得下。
  • 并發(fā):同時執(zhí)行的I/O 數(shù),或者執(zhí)行I/O 的線程數(shù)。
  • 內存映射:文件通過mmap()訪問而非read()/write()。
  • 緩存狀態(tài):文件系統(tǒng)緩存是“冷的”(未填充)還是“熱的”。
  • 文件系統(tǒng)可調參數(shù):可能包括了壓縮、數(shù)據(jù)消重等。

磁盤

在高負載下,磁盤成為了瓶頸,CPU 持續(xù)空閑以等待磁盤I/O 結束

概念和架構

  • 緩存磁盤和磁盤控制器

    在這里插入圖片描述

  • 磁盤響應時間,也叫磁盤I/O 延時,指的是從I/O 請求到結束的時間。它由服務和等待時間組成

    • 服務時間:I/O 得到主動處理(服務)的時間,不包括在隊列中等待的時間。
    • 等待時間:I/O 在隊列中等待服務的時間

    在這里插入圖片描述

    響應時間、服務時間和等待時間全部取決于測量所處的位置

    • 對內核的角度
      • 塊io等待時間,塊IO創(chuàng)建到插入內核IO隊列到離開內核IO隊列并發(fā)送到設備的事件
      • 塊io服務事件,發(fā)出請求到設備完成中斷之間的時間
    • 對磁盤的角度
      • 磁盤等待時間,話再磁盤隊列上的時間
      • 磁盤服務時間,進入磁盤隊列后IO被主動處理的時間

    在這里插入圖片描述

  • 磁盤IO延時的時間尺度

    在這里插入圖片描述

  • 緩存,最好的磁盤IO就是沒有IO,通過緩存讀和緩沖寫來避免磁盤I/O 抵達磁盤

  • 連續(xù)IO和隨機IO,讀和寫,IO大小

  • 非磁盤傳輸命令,將緩存協(xié)會磁盤

  • 使用率

  • 飽和度

  • IO等待,針對單個CPU 的性能指標,表示當CPU 分發(fā)隊列(在睡眠態(tài))里有線程被阻塞在磁盤I/O 上時消耗的空閑時間。較高的每CPU I/O 等待時間表示磁盤可能是瓶頸所在,導致CPU 等待而空閑

  • 磁盤IO和應用程序IO,磁盤I/O 是多個內核組件的終點,包括文件系統(tǒng)和設備驅動。磁盤I/O 與應用程序發(fā)出的I/O 在頻率和大小上都不匹配。可能原因

    • 文件系統(tǒng)放大、縮小和不相關的I/O。
    • 由于系統(tǒng)內存短缺造成的換頁。
    • 設備驅動I/O 大小:I/O 大小的向上取整,或者I/O 的碎片化

具體分析方法

常用工具

  • iostat:使用擴展模式尋找繁忙磁盤(超過60%使用率),較高的平均服務時間(超過大概10ms),以及高IOPS(可能)
  • iotop:發(fā)現(xiàn)哪個進程引發(fā)了磁盤I/O。
  • bitlatency,直方圖檢查IO延時分布
  • biosnoop,檢查單個IO
  • bpftrace,發(fā)出IO的用戶和內核棧

負載特征歸納

  • I/O 頻率
  • I/O 吞吐量
  • I/O 大小
  • 隨機和連續(xù)比例
  • 讀寫比
  • 系統(tǒng)IOPS 是多少?每個磁盤呢?每個控制器呢?
  • 系統(tǒng)吞吐量是多少?每個磁盤呢?每個控制器呢?
  • 哪個應用程序或者用戶正在使用磁盤?
  • 哪個文件系統(tǒng)或者文件正在被訪問?
  • 碰到什么錯誤了嗎?這些錯誤是源于非法請求,還是磁盤的問題?
  • I/O 在可用磁盤之間均衡嗎?
  • 每條參與的傳輸總線上的IOPS 是多少?
  • 每條參與的傳輸總線上的吞吐量是多少?
  • 發(fā)出了哪些非數(shù)據(jù)傳輸磁盤命令?
  • 為什么會發(fā)起磁盤I/O(內核調用路徑)?
  • 磁盤I/O 里應用程序同步的調用占到多少?
  • I/O 到達時間的分布是什么樣的?

性能特征歸納

  • 每塊盤有多忙(使用率)?
  • 每塊盤的I/O 飽和度是多少(等待隊列)?
  • 平均I/O 服務時間是多少?
  • 平均I/O 等待時間是多少?
  • 是否存在高延時的I/O 離群點?
  • I/O 延時的全分布是什么樣的?
  • 是否有例如I/O 流控的系統(tǒng)資源控制,存在并且激活了嗎?
  • 非數(shù)據(jù)傳輸磁盤命令的延時是多少?

延時分析

發(fā)起I/O 請求和完成中斷之間的時間。如果這個時間與應用程序感受到的I/O 延時一致,通常可以安全地推斷出I/O 延時源于磁盤

例如,B 的延時看上去來自文件系統(tǒng)層(鎖或者隊列?),因為底層的I/O 延時只占了較小的部分

在這里插入圖片描述

事件跟蹤

  • 磁盤設備ID。
  • I/O 類型:讀或寫。
  • I/O 偏移量:磁盤位置。
  • I/O 大小:字節(jié)數(shù)。
  • I/O 請求時間戳:I/O 發(fā)到設備的時間(也稱為I/O 策略)。
  • I/O 完成時間戳:I/O 事件完成的時間(完成中斷)。
  • I/O 完成狀態(tài):錯誤。

網(wǎng)絡

除了改進網(wǎng)絡延時和吞吐量以外,另一個常見的任務是消除可能由丟包引起的延時異常

網(wǎng)絡分析是跨硬件和軟件的。這里的硬件指的是物理網(wǎng)絡,包括網(wǎng)絡接口卡、交換機,路由器和網(wǎng)關(這通常也含有軟件)。這里的系統(tǒng)軟件指的是內核協(xié)議棧,通常是TCP/IP,以及每個所涉及的協(xié)議的行為

網(wǎng)絡工程師解惑篇,推薦這個可以在空閑充電的音頻,理解基本的網(wǎng)絡協(xié)議和架構

概念和架構

  • 網(wǎng)絡接口和控制器,網(wǎng)絡接口卡(NIC)給系統(tǒng)提供一個或多個網(wǎng)絡端口并且設有一個網(wǎng)絡控制器,一個在端口與系統(tǒng)I/O 傳輸通道間傳輸包的微處理器

    在這里插入圖片描述

  • 協(xié)議棧,不同的IP 協(xié)議版本IPv4 和IPv6,可能會由不同的內核代碼路徑處理,進而表現(xiàn)出不同的性能特性

    在這里插入圖片描述

  • 路由,路由管理稱為包的報文跨網(wǎng)絡傳遞

  • 單播和多播,成對主機間由單播(unicast)傳輸連接。多播(multicast)傳輸允許一個發(fā)送者可能跨越多個網(wǎng)絡同時傳輸給多個目標。它的傳遞依賴于路由器配置的支持

  • 包長度,包的長度通常受限于網(wǎng)絡接口的最大傳輸單元(MTU)長度。巨型幀(9000B)夠提高網(wǎng)絡吞吐性能

  • 延時,包括主機名解析延時、ping 延時、連接延時、首字節(jié)延時、往返時間,以及連接生命周期

    • ping延時,ICMP echo 請求到echo 響應所需的時間,衡量主機對之間包括網(wǎng)絡跳躍的網(wǎng)絡延時,而且它測量的是包往返的總時間
    • 連接延時,是傳輸任何數(shù)據(jù)前建立網(wǎng)絡連接所需的時間
    • 首字節(jié)延時,是從連接建立到接收到第一個字節(jié)數(shù)據(jù)所需的時間。這包括遠程主機接受連接、調度提供服務的線程,并且執(zhí)行線程以及發(fā)送第一個字節(jié)所需的時間
    • 往返時間,指網(wǎng)絡包往返兩個端點所需的時間
    • 連接生命周期,指一個網(wǎng)絡連接從建立到關閉所需的時間
  • 緩沖,TCP 利用緩沖以及可變的發(fā)送窗口提升吞吐量。網(wǎng)絡套接字也保有緩沖,并且應用程序可能也會利用它們自己的緩沖在發(fā)送前聚集數(shù)據(jù)。外部的網(wǎng)絡組件,如交換機和路由器,也會利用緩沖提高它們的吞吐量

  • 接口協(xié)商,通過與對端自動協(xié)商,網(wǎng)絡接口能夠工作于不同的模式,包括帶寬和雙工模式

    谷歌開源、高性能RPC框架:gRPC 使用體驗

  • 協(xié)議,TCP和UPD協(xié)議的特性

  • 硬件,包括接口,控制器,路由器和交換機

  • 軟件,內核協(xié)議棧

    現(xiàn)代內核中網(wǎng)絡棧是多線程的,并且傳入的包能被多個CPU 處理。傳入的包與CPU 的映射可用多個方法完成:可能基于源IP 地址哈希以平均分布負載,或者基于最近處理的CPU 以有效利用CPU 緩存熱度以及內存本地性

    在這里插入圖片描述

    TCP、IP 以及通用網(wǎng)絡驅動軟件是內核的核心組件,而設備驅動程序是附加模塊。數(shù)據(jù)包以struct sk_buff 數(shù)據(jù)類型穿過這些內核組件

  • TCP積壓隊列,突發(fā)的連接由積壓隊列處理。這里有兩個此類隊列,一個在TCP 握手完成(也稱為SYN積壓隊列)前處理未完成的連接,而另一個處理等待應用程序接收(也稱為偵聽積壓隊列)的已建立的會話

    在這里插入圖片描述

  • TCP緩沖區(qū),發(fā)送和接受緩沖區(qū)的大小是可調的,但需要消耗更多主存,大緩沖能夠提升吞吐量

    網(wǎng)絡設備和網(wǎng)絡接受的數(shù)據(jù)包大小最大到MSS最大段大小,可能小到1500字節(jié)

    在這里插入圖片描述

  • 網(wǎng)卡的發(fā)送和接收,發(fā)送數(shù)據(jù)包網(wǎng)卡收到通知,并使用DMA從內核內存中讀取幀提高效率。收到的數(shù)據(jù)包使用DMA放入內核環(huán)形緩沖區(qū)中,并中斷通知內核

具體分析方法

常用工具

  • netstat -s:查找高流量的重新傳輸和亂序數(shù)據(jù)包。哪些是“高”重新傳輸率依客戶機而不同,面向互聯(lián)網(wǎng)的系統(tǒng)因具有不穩(wěn)定的遠程客戶會比僅擁有同數(shù)據(jù)中心客戶的內部系統(tǒng)具有更高的重新傳輸率。
  • ip -s link/netstat -i:檢查接口的錯誤計數(shù)器,檢查“錯誤”、“丟棄”、“超限”
  • ss -tiepm,檢查重要套接字的限制其標志
  • ip -s link/nicstat,檢查傳輸和接受字節(jié)的速率
  • tcplife,記錄tcp會話的進程細節(jié)
  • tcptop,實時觀測速率最高的tcp會話
  • tcpdump,抓包
  • dtrace/stap/perf:用來檢查包括內核狀態(tài)在內的應用程序與線路間選中的數(shù)據(jù)

USE方法

  • 使用率:接口忙于發(fā)送或接收幀的時間。
  • 飽和度:由于接口滿負載,額外的隊列、緩沖或者阻塞的程度。
  • 錯誤:對于接收,校驗錯誤、幀過短(小于數(shù)據(jù)鏈路報文頭)或者過長、沖突(在交換網(wǎng)絡中不大可能);對于傳輸,延時碰撞(線路故障)

負載特征歸納

  • 網(wǎng)絡接口吞吐量:RX 和TX,B/s。
  • 網(wǎng)絡接口IOPS:RX 和TX,幀每秒。
  • TCP 連接率:主動和被動,每秒連接數(shù)。
  • 平均數(shù)據(jù)包的大小是多少?RX、TX?
  • 協(xié)議是什么?TCP 還是UDP?
  • 活躍的TCP/UDP 端口是多少?B/s、每秒連接數(shù)?
  • 哪個進程在主動地使用網(wǎng)絡?

延時分析

延時描述
主機名解析
ping延時
tcp連接初始化延時
tcp首字節(jié)延時
tcp重傳輸
tcp TIME_WAIT延時
連接會話延時
系統(tǒng)調用發(fā)送/接收延時
系統(tǒng)調用連接延時
網(wǎng)絡往返延時
中斷延時
棧間延時數(shù)據(jù)包在內核棧種移動的時間

靜態(tài)性能調優(yōu)

  • 有多少網(wǎng)絡接口可供使用?當前使用中的有哪些?
  • 網(wǎng)絡接口的最大速度是多少?
  • 當前協(xié)商的網(wǎng)絡接口速度是多少?
  • 網(wǎng)絡接口協(xié)商為半雙工還是全雙工?
  • 網(wǎng)絡接口配置的MTU 是多少?
  • 網(wǎng)絡接口是否使用了鏈路聚合?(多個網(wǎng)卡提升帶寬)
  • 有哪些適用于設備驅動的可調參數(shù)?IP 層?TCP 層?
  • 有哪些可調參數(shù)已不再是默認值?
  • 路由是如何配置的?默認路由是什么?
  • 數(shù)據(jù)路徑中網(wǎng)絡組件的最大吞吐量是多少(所有組件,包括交換機和路由器背板)?
  • 數(shù)據(jù)轉發(fā)是否啟用?該系統(tǒng)是否作為路由器使用?
  • DNS 是如何設置的?它距離服務器有多遠?
  • 該版本的網(wǎng)絡接口固件是否有已知的性能問題(bug)?
  • 該網(wǎng)絡設備驅動是否有已知的性能問題(bug)?內核TCP/IP 棧呢?
  • 是否存在軟件施加的網(wǎng)絡吞吐量限制(資源控制)?它們是什么?

云計算

http://aloenet.com.cn/news/44806.html

相關文章:

  • 怎樣做某個網(wǎng)站有更新的提醒seo排名計費系統(tǒng)
  • 寧夏建設工程招標投標管理中心網(wǎng)站百度推廣網(wǎng)頁版
  • 網(wǎng)站后臺樹形菜單樣式seo名詞解釋
  • 粉絲社區(qū)網(wǎng)站怎么做企業(yè)網(wǎng)絡搭建方案
  • 電影網(wǎng)站模板htmlseo互聯(lián)網(wǎng)營銷培訓
  • 網(wǎng)站的三要素手機怎么在百度上發(fā)布信息
  • 順平網(wǎng)站建設域名比價網(wǎng)
  • 網(wǎng)站導航欄全屏怎么做百度點擊排名收費軟件
  • 建設培訓網(wǎng)站辦安全員c證semantics
  • 下沙做網(wǎng)站一般網(wǎng)站推廣要多少錢
  • 編程和做網(wǎng)站有關系嗎營銷軟件代理推廣
  • 仿漫畫網(wǎng)站建設定制小說網(wǎng)站系統(tǒng)源碼建設百度引擎的搜索方式是什么
  • 前端優(yōu)化網(wǎng)站天津百度搜索網(wǎng)站排名
  • 做購物網(wǎng)站多少錢3分鐘搞定網(wǎng)站seo優(yōu)化外鏈建設
  • 南京軟件開發(fā)公司有哪些網(wǎng)站關鍵詞優(yōu)化價格
  • 綿陽網(wǎng)站建設公司nba東西部最新排名
  • 廣州 網(wǎng)站建設公司小程序推廣引流
  • 酒店網(wǎng)站開發(fā)常用的seo工具推薦
  • 怎么樣檢查網(wǎng)站有沒有做全站301網(wǎng)站群發(fā)軟件
  • 柳江網(wǎng)站虛擬主機公司谷歌官方seo入門指南
  • 昆明旅游網(wǎng)頁設計成都網(wǎng)站優(yōu)化seo
  • 諸城做網(wǎng)站的公司網(wǎng)站seo推廣計劃
  • 電子商務網(wǎng)站建設應該側重哪方面網(wǎng)站優(yōu)化方法
  • 向網(wǎng)站服務器上傳網(wǎng)頁文件下載市場營銷在線課程
  • wordpress wordpress.orgseo推廣軟
  • 網(wǎng)站建設的預算指數(shù)函數(shù)圖像
  • 太原0元網(wǎng)站建設谷歌代運營
  • java做博客網(wǎng)站有哪些招聘網(wǎng)絡營銷推廣人員
  • 嘉興手機網(wǎng)站開發(fā)費用b站2023年免費入口
  • 怎樣用flash做網(wǎng)站騰訊企點app