中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

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

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

本文只是在閱讀《性能之巔》的過(guò)程中,對(duì)一些覺(jué)得有用的地方進(jìn)行的總結(jié)和摘錄,并附加一些方便理解的材料,完整內(nèi)容還請(qǐng)閱讀Gregg的大作

概念和方法

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

在這里插入圖片描述

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

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

1.設(shè)置性能目標(biāo)和建立性能模型

2.基于軟件或硬件原型進(jìn)行性能特征歸納

3.對(duì)開(kāi)發(fā)代碼進(jìn)行性能分析(軟件整合之前)

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

5.針對(duì)軟件發(fā)布版本的基準(zhǔn)測(cè)試

6.目標(biāo)環(huán)境中的概念驗(yàn)證(Proof-of-concept)測(cè)試

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

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

9.特定問(wèn)題的性能分析

性能分析視角

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

性能分析出發(fā)點(diǎn)

性能問(wèn)題有其主觀性(需要客觀明確的標(biāo)準(zhǔn))和復(fù)雜性(問(wèn)題是面而非單個(gè)的點(diǎn))。

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

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

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

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

  • 好的工具能夠提升關(guān)測(cè)和分析的效率,linux的60秒快速分析涉及到如下工具

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

性能術(shù)語(yǔ)

關(guān)于性能的一些術(shù)語(yǔ)

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

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

項(xiàng)目就是在性能,響應(yīng)速度和成本之間進(jìn)行權(quán)衡的過(guò)程,性能調(diào)優(yōu)在應(yīng)用程序本身進(jìn)行效果是最顯著的

性能分析方法

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

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

操作系統(tǒng)

系統(tǒng)內(nèi)核

linux內(nèi)核管理著CPU 調(diào)度、內(nèi)存、文件系統(tǒng)、網(wǎng)絡(luò)協(xié)議,以及系統(tǒng)設(shè)備。

相比系統(tǒng)調(diào)用,系統(tǒng)庫(kù)提供的編程接口通常更為豐富和簡(jiǎn)單。應(yīng)用程序本身可以直接進(jìn)行系統(tǒng)調(diào)用(操作系統(tǒng)允許)

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

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

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

內(nèi)核是唯一運(yùn)行在內(nèi)核態(tài)的程序(允許設(shè)備訪問(wèn)和特權(quán)指令)。用戶程序(進(jìn)程)運(yùn)行在用戶態(tài),對(duì)于內(nèi)核特權(quán)操作(例如I/O)的請(qǐng)求是通過(guò)系統(tǒng)調(diào)用傳遞的。執(zhí)行系統(tǒng)操作,執(zhí)行會(huì)做上下文切換從用戶態(tài)到內(nèi)核態(tài),然后用更高的特權(quán)級(jí)別執(zhí)行

在這里插入圖片描述

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

  • 用戶態(tài)系統(tǒng)調(diào)用,內(nèi)核導(dǎo)出虛擬動(dòng)態(tài)共享對(duì)象到進(jìn)程地址空間
  • 內(nèi)存映射
  • 內(nèi)核旁路(bypass),例如DPDK
  • 內(nèi)核態(tài)應(yīng)用程序(用戶態(tài)docker)

系統(tǒng)調(diào)用是請(qǐng)求內(nèi)核執(zhí)行特權(quán)指令的例程,在內(nèi)核中實(shí)現(xiàn)(因此要保證簡(jiǎn)單),復(fù)雜的接口可以在用戶空間通過(guò)系統(tǒng)庫(kù)實(shí)現(xiàn)(例如glibc)

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

在這里插入圖片描述

對(duì)于Linux 而言,設(shè)備驅(qū)動(dòng)分為兩半,上半部用于快速處理中斷(在中斷禁止模式,不能耗時(shí)太長(zhǎng)),到下半部的調(diào)度工作在之后處理(作為tasklet或工作隊(duì)列)

在這里插入圖片描述

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

在這里插入圖片描述

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

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

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

文件系統(tǒng)是作為文件和目錄的數(shù)據(jù)組織。有一個(gè)基于文件的接口用于訪問(wèn),該接口通常基于POSIX 標(biāo)準(zhǔn)。虛擬文件系統(tǒng)(virtual file system,VFS)是一個(gè)對(duì)文件系統(tǒng)類型做抽象的內(nèi)核界面

在這里插入圖片描述

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

在這里插入圖片描述

由于磁盤(pán)I/O 的延時(shí)較長(zhǎng),軟件棧中的很多層級(jí)通過(guò)緩存讀取和緩存寫(xiě)入來(lái)試圖避免,常見(jiàn)的緩存包括

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

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

設(shè)備驅(qū)動(dòng)是用于設(shè)備管理和設(shè)備I/O 的內(nèi)核軟件,常常由開(kāi)發(fā)硬件設(shè)備的廠商提供

設(shè)備驅(qū)動(dòng)提供給設(shè)備的接口有字符接口也有塊接口。字符設(shè)備,也稱為原始設(shè)備,提供無(wú)緩沖的設(shè)備順序訪問(wèn),訪問(wèn)可以是任意I/O 尺寸的,也可以小到單一字符,取決于設(shè)備本身

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

觀測(cè)工具

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

linux工作負(fù)載性能觀測(cè)工具

img

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

在這里插入圖片描述

觀測(cè)工具只是通過(guò)各種結(jié)構(gòu)和框架整理信息,數(shù)據(jù)來(lái)源包括

在這里插入圖片描述

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

/proc進(jìn)程級(jí)別的接口如下

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

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

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

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

img

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

之后就是對(duì)應(yīng)用程序,cpu,內(nèi)存,文件系統(tǒng),磁盤(pán),網(wǎng)絡(luò)等進(jìn)行的具體分析

應(yīng)用程序

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

Go 語(yǔ)言高性能編程

分析問(wèn)題

對(duì)于一個(gè)應(yīng)用程序的分析應(yīng)當(dāng)考慮以下問(wèn)題

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

分析目標(biāo)

應(yīng)用程序性能分析的目標(biāo)

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

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

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

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

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

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

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

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

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

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

    Golang深入理解GPM模型

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

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

編程語(yǔ)言級(jí)別

  • 編程語(yǔ)言:不同語(yǔ)言的選擇,編譯型語(yǔ)言編譯優(yōu)化的考量,解釋性語(yǔ)言解釋器的分析
  • 語(yǔ)言虛擬機(jī):性能分析通??康氖钦Z(yǔ)言虛擬機(jī)提供的工具集(一些虛擬機(jī)提供DTrace 探針)和第三方的工具
  • GC(垃圾回收):影響內(nèi)存,CPU損耗和GC導(dǎo)致的延時(shí)有,例如,Java虛擬機(jī)提供了許多可調(diào)參數(shù)來(lái)設(shè)置GC 類型、GC 的線程數(shù)、堆尺寸的最大值、目標(biāo)堆的空閑率

具體的分析方法

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

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

確定應(yīng)用程序的線程在哪里花費(fèi)了時(shí)間,線程的9種狀態(tài)

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

在這里插入圖片描述

靜態(tài)性能調(diào)優(yōu)的問(wèn)題

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

CPU

概念和架構(gòu)

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

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

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

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

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

  • 多進(jìn)程和多線程的比較
    在這里插入圖片描述

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

  • 緩存:不同級(jí)別緩存訪問(wèn)時(shí)延不同

    在這里插入圖片描述

  • 系統(tǒng)總線:在處理器數(shù)目增長(zhǎng)的情況下,會(huì)因?yàn)楣蚕硐到y(tǒng)總線資源而出現(xiàn)擴(kuò)展性問(wèn)題?,F(xiàn)在多處理器使用NUMA架構(gòu)和cpu互聯(lián)技術(shù)
    在這里插入圖片描述

  • 調(diào)度器,具備的功能有

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

    在這里插入圖片描述

  • 調(diào)度類:管理了可運(yùn)行線程的行為,優(yōu)先級(jí),CPU 時(shí)間是否分片,以及這些時(shí)間片的長(zhǎng)度(又稱為時(shí)間量子)。用戶線程的優(yōu)先級(jí)受一個(gè)用戶定義的一個(gè)nice 值影響??梢詫?duì)不重要的工作設(shè)置這個(gè)值以降低其優(yōu)先級(jí)

    在這里插入圖片描述

    linux下的調(diào)度類有

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

    用戶級(jí)進(jìn)程可以通過(guò)調(diào)用sched_setscheduler()設(shè)置調(diào)度器策略以調(diào)整調(diào)度類的行為。RT 類支持SCHED_RR SCHED_FIFO 策略,而CFS 類支持SCHED_NORMALSCHED_BATCH

常用工具

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

具體的分析方法

USE方法

檢車美俄cpu的

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

負(fù)載特征分析

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

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

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

常用性能指標(biāo)

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

內(nèi)存

概念和架構(gòu)

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

  • 換頁(yè):

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

    在這里插入圖片描述

    虛擬內(nèi)存和按需換頁(yè)的結(jié)果是任何虛擬內(nèi)存頁(yè)可能處于如下的一個(gè)狀態(tài):(如果因?yàn)橄到y(tǒng)內(nèi)存壓力而換出頁(yè)就會(huì)到達(dá)D 狀態(tài)。狀態(tài)B 到C 的轉(zhuǎn)變就是缺頁(yè)。如果需要磁盤(pán)讀寫(xiě),就是嚴(yán)重缺頁(yè),否則就是輕微缺頁(yè))

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

    云計(jì)算環(huán)境沒(méi)有交換區(qū),不鼓勵(lì)壞的換頁(yè)

    其他相關(guān)概念

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

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

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

  • 進(jìn)程交換(unix獨(dú)創(chuàng)):交換是在主存與物理交換設(shè)備或者交換文件之間移動(dòng)整個(gè)進(jìn)程,嚴(yán)重影響性能

  • 文件系統(tǒng)緩存,系統(tǒng)啟動(dòng)之后內(nèi)存的占用增加是正常的,因?yàn)椴僮飨到y(tǒng)會(huì)將可用內(nèi)存用于文件系統(tǒng)緩存以提高性能。在應(yīng)用程序需要的時(shí)候,內(nèi)核應(yīng)該能夠很快從文件系統(tǒng)緩存中釋放內(nèi)存

  • 飽和度:對(duì)內(nèi)存的需求超過(guò)了主存的情況被稱作主存飽和。這時(shí)操作系統(tǒng)會(huì)使用換頁(yè)、交換或者OOM killer來(lái)釋放內(nèi)存

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

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

    在這里插入圖片描述

    分配器包括,內(nèi)核級(jí)分配器——slab 分配器和SLUB——以及用戶級(jí)分配器——glibc,jemalloc和TCMalloc

    glibc內(nèi)存管理那些事兒

常用工具

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

具體分析方法

描述使用情況

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

性能監(jiān)測(cè)

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

內(nèi)存泄露

當(dāng)應(yīng)用程序或者內(nèi)核模塊無(wú)盡地增長(zhǎng),從空閑鏈表、文件系統(tǒng)緩存,最終從其他進(jìn)程消耗內(nèi)存時(shí),就出現(xiàn)了這個(gè)問(wèn)題

  • 內(nèi)存泄漏:一種類型的軟件bug,忘記分配過(guò)的內(nèi)存而沒(méi)有釋放。通過(guò)修改軟件代碼,或應(yīng)用補(bǔ)丁及進(jìn)行升級(jí)(進(jìn)而修改代碼)能修復(fù)。
  • 內(nèi)存增長(zhǎng):軟件在正常地消耗內(nèi)存,遠(yuǎn)高于系統(tǒng)允許的速率。通過(guò)修改軟件配置,或者由軟件開(kāi)發(fā)人員修改軟件內(nèi)存的消耗方式來(lái)進(jìn)行修復(fù)

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

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

可調(diào)的內(nèi)核參數(shù)

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

文件系統(tǒng)

概念和架構(gòu)

文件系統(tǒng)性能比磁盤(pán)性能更為重要。文件系統(tǒng)通過(guò)緩存、緩沖以及異步I/O 等手段來(lái)緩和磁盤(pán)(或者遠(yuǎn)程系統(tǒng))的延時(shí)對(duì)應(yīng)用程序的影響

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

    在這里插入圖片描述

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

    在這里插入圖片描述

  • 文件系統(tǒng)延時(shí),一個(gè)文件系統(tǒng)邏輯請(qǐng)求從開(kāi)始到結(jié)束的時(shí)間。它包括了消耗在文件系統(tǒng)、內(nèi)核磁盤(pán)I/O 子系統(tǒng)以及等待磁盤(pán)設(shè)備——物理I/O 的時(shí)間

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

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

    在這里插入圖片描述

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

    在這里插入圖片描述

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

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

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

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

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

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

    Go Mmap 文件內(nèi)存映射簡(jiǎn)明教程

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

  • 邏輯和物理IO,與應(yīng)用程序I/O 相比,磁盤(pán)I/O 有時(shí)顯得無(wú)關(guān)、間接、放大或者縮小

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

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

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

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

    在這里插入圖片描述

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

  • 卷和池

具體分析方法

延時(shí)分析

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

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

負(fù)載特征歸納

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

性能監(jiān)控

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

事件追蹤

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

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

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

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

微基準(zhǔn)測(cè)試的參數(shù)

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

磁盤(pán)

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

概念和架構(gòu)

  • 緩存磁盤(pán)和磁盤(pán)控制器

    在這里插入圖片描述

  • 磁盤(pán)響應(yīng)時(shí)間,也叫磁盤(pán)I/O 延時(shí),指的是從I/O 請(qǐng)求到結(jié)束的時(shí)間。它由服務(wù)和等待時(shí)間組成

    • 服務(wù)時(shí)間:I/O 得到主動(dòng)處理(服務(wù))的時(shí)間,不包括在隊(duì)列中等待的時(shí)間。
    • 等待時(shí)間:I/O 在隊(duì)列中等待服務(wù)的時(shí)間

    在這里插入圖片描述

    響應(yīng)時(shí)間、服務(wù)時(shí)間和等待時(shí)間全部取決于測(cè)量所處的位置

    • 對(duì)內(nèi)核的角度
      • 塊io等待時(shí)間,塊IO創(chuàng)建到插入內(nèi)核IO隊(duì)列到離開(kāi)內(nèi)核IO隊(duì)列并發(fā)送到設(shè)備的事件
      • 塊io服務(wù)事件,發(fā)出請(qǐng)求到設(shè)備完成中斷之間的時(shí)間
    • 對(duì)磁盤(pán)的角度
      • 磁盤(pán)等待時(shí)間,話再磁盤(pán)隊(duì)列上的時(shí)間
      • 磁盤(pán)服務(wù)時(shí)間,進(jìn)入磁盤(pán)隊(duì)列后IO被主動(dòng)處理的時(shí)間

    在這里插入圖片描述

  • 磁盤(pán)IO延時(shí)的時(shí)間尺度

    在這里插入圖片描述

  • 緩存,最好的磁盤(pán)IO就是沒(méi)有IO,通過(guò)緩存讀和緩沖寫(xiě)來(lái)避免磁盤(pán)I/O 抵達(dá)磁盤(pán)

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

  • 非磁盤(pán)傳輸命令,將緩存協(xié)會(huì)磁盤(pán)

  • 使用率

  • 飽和度

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

  • 磁盤(pán)IO和應(yīng)用程序IO,磁盤(pán)I/O 是多個(gè)內(nèi)核組件的終點(diǎn),包括文件系統(tǒng)和設(shè)備驅(qū)動(dòng)。磁盤(pán)I/O 與應(yīng)用程序發(fā)出的I/O 在頻率和大小上都不匹配??赡茉?/p>

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

具體分析方法

常用工具

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

負(fù)載特征歸納

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

性能特征歸納

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

延時(shí)分析

發(fā)起I/O 請(qǐng)求和完成中斷之間的時(shí)間。如果這個(gè)時(shí)間與應(yīng)用程序感受到的I/O 延時(shí)一致,通??梢园踩赝茢喑鯥/O 延時(shí)源于磁盤(pán)

例如,B 的延時(shí)看上去來(lái)自文件系統(tǒng)層(鎖或者隊(duì)列?),因?yàn)榈讓拥腎/O 延時(shí)只占了較小的部分

在這里插入圖片描述

事件跟蹤

  • 磁盤(pán)設(shè)備ID。
  • I/O 類型:讀或?qū)憽?/li>
  • I/O 偏移量:磁盤(pán)位置。
  • I/O 大小:字節(jié)數(shù)。
  • I/O 請(qǐng)求時(shí)間戳:I/O 發(fā)到設(shè)備的時(shí)間(也稱為I/O 策略)。
  • I/O 完成時(shí)間戳:I/O 事件完成的時(shí)間(完成中斷)。
  • I/O 完成狀態(tài):錯(cuò)誤。

網(wǎng)絡(luò)

除了改進(jìn)網(wǎng)絡(luò)延時(shí)和吞吐量以外,另一個(gè)常見(jiàn)的任務(wù)是消除可能由丟包引起的延時(shí)異常

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

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

概念和架構(gòu)

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

    在這里插入圖片描述

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

    在這里插入圖片描述

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

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

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

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

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

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

    谷歌開(kāi)源、高性能RPC框架:gRPC 使用體驗(yàn)

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

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

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

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

    在這里插入圖片描述

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

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

    在這里插入圖片描述

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

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

    在這里插入圖片描述

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

具體分析方法

常用工具

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

USE方法

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

負(fù)載特征歸納

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

延時(shí)分析

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

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

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

云計(jì)算

http://www.risenshineclean.com/news/44806.html

相關(guān)文章:

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