"); //-->

狠狠做深爱婷婷久久一区,欧美日韩国内,久久麻豆精品传媒,久久久一区一区二区,色鬼伦理片,99视频精品久久,久久精品国产久久久久久,久久久伦理电影一区二,磁力天堂河北彩花

專欄中心

EEPW首頁 > 專欄 > Linux 性能優(yōu)化工具

Linux 性能優(yōu)化工具

發(fā)布人:地平線開發(fā)者 時(shí)間:2026-05-07 來源:工程師 發(fā)布文章
1.概述

Linux 的性能問題,依賴于各類性能工具,針對不同性能場景,選擇合適的工具,可以大大提高整個(gè)性能優(yōu)化的效率,下圖是性能問題和工具圖譜:



受限本文篇幅和側(cè)重,結(jié)合征程系列 SoC 調(diào)優(yōu)實(shí)踐,主要展開介紹下面的工具及使用。

1.1. top

top 命令可以動態(tài)地持續(xù)監(jiān)聽系統(tǒng)及進(jìn)程的運(yùn)行狀態(tài),為用戶提供 CPU 使用率、內(nèi)存使用情況、CPU 負(fù)載信息,除此之外,該命令還提供了一個(gè)交互界面,用戶可以根據(jù)需要進(jìn)行調(diào)整。

  • 通過 top 命令分析內(nèi)存使用狀態(tài)比較簡單清晰,本文就不做贅述。

  • 由于智能駕駛的應(yīng)用場景復(fù)雜,CPU 處于較高水平的邏輯和運(yùn)算占用,導(dǎo)致系統(tǒng)的負(fù)載和使用率長期處于較高水平,是性能優(yōu)化的主要方向之一。

注:

智能駕駛應(yīng)用場景中系統(tǒng)負(fù)載是和使用率同步升高,基本不存在 IO 或其他導(dǎo)致的負(fù)載提升,所以本文提到的負(fù)載和使用率的描述均可理解為使用率。

使用 top 命令監(jiān)控系統(tǒng)及各進(jìn)程的 CPU 使用率,是分析 CPU 占用高問題的主要方法,在使用前需要了解 top 的原理和限制,從而正確的使用和提取有效信息,進(jìn)行有效分析。

1.1.1. top 的原理

top 命令的實(shí)現(xiàn)是通過采樣 proc 下系統(tǒng)和進(jìn)程的 stat 下的各類時(shí)間信息,經(jīng)過計(jì)算得出來的平均使用率等信息。

  • CPU 時(shí)間信息(單位為 jiffies):

  • /proc/stat

記錄了 CPU 從系統(tǒng)啟動開始累計(jì)到當(dāng)前時(shí)刻各類事件信息。

  • /proc/$PID/stat

記錄了進(jìn)程從啟動開始累計(jì)到當(dāng)前時(shí)刻各類事件信息。

  • 使用率計(jì)算方法

stat 節(jié)點(diǎn)記錄了的是從開機(jī)/進(jìn)程啟動后累計(jì)的時(shí)間信息,但這不能體現(xiàn)在當(dāng)前時(shí)間段的實(shí)際負(fù)載情況,實(shí)際 CPU 使用率的計(jì)算方法如下(system、user、irq、softirq 等類似):

采樣的開始時(shí)間 T1,結(jié)束時(shí)刻 T2:

  1. Total(T1-T2) = (user2+ nice2+ system2+ idle2+ iowait2+ irq2+ softirq2) - ( user1+ nice1+ system1+ idle1+ iowait1+ irq1+ softirq1)

  2. Idle(T1-T2) = (idle2 - idle1)

  3. CPU Usage (T1-T2) = 1 - Idle / Total

不難理解,最終 CPU 使用率主要受到從 CPU 獲取到的時(shí)間信息,和采樣周期時(shí)間的影響。

1.1.2. top 的限制
  • CPU 負(fù)載顯示模式

Linux 上 top 命令的 CPU 占用率顯示有兩種模式:

  1. Irix 模式,按單個(gè) CPU 上的算力計(jì)算。

  2. Solaris 模式,按所有 CPU 做平均計(jì)算。

例如一個(gè) 8 核系統(tǒng),CPU0 上一個(gè)進(jìn)程 CPU 占用率是 100%,其它 CPU 是 idle:

  • Irix 模式,CPU0 占用顯示 100%,進(jìn)程的 CPU 也是 100%。

  • Solaris 模式,CPU0 占用顯示 12.5%,進(jìn)程的 CPU 也是 12.5%。

當(dāng)前 Busybox 的 top 命令,PER CPU 的顯示默認(rèn)是 Irix 模式,進(jìn)程顯示是 Solaris 模式。

  • top 周期的選定

CPU 的使用率受到周期的影響,在 CPU 繁忙時(shí)使用“top -d1”和“top -d5”的結(jié)果差異是非常大的,周期越大,越接近實(shí)際平均負(fù)載。 考慮這樣的一種極端場景,在 1s 的時(shí)間內(nèi),前 100ms 負(fù)載 100%,后 900ms CPU 全部 idle,以 1s 為周期,負(fù)載就是 10%,以 100ms 為周期,負(fù)載就出現(xiàn)了 100% 的情況,基于以上情況考慮,我們一般建議以 5s 作為 top 的周期(“top -d5”)。

另外,需要特別注意的是,top 命令適用于長時(shí)間的負(fù)載檢測,對于一次性負(fù)載檢查(”top -n1”),top 實(shí)現(xiàn)中第一次 top 計(jì)算的周期是 200ms,以 200ms 周期計(jì)算出來的 CPU 使用率非常不準(zhǔn),會對整體分析產(chǎn)生誤導(dǎo)。

  • CPU 使用率中包含 iowait

一般理解中 CPU 使用率是指 CPU 忙占 CPU 總時(shí)間的比值,處于 iowait 的線程實(shí)際并不占用 CPU,但是目前幾乎所有的統(tǒng)計(jì)工具中,都把 iowait 統(tǒng)計(jì)到 CPU 使用率中。

1.1.3. top 的使用

征程系列系統(tǒng)軟件默認(rèn)集成了 top 命令,使用方法如下:

Usage:
top [options]

Options:
-b, --batch-mode                run in non-interactive batch mode
-c, --cmdline-toggle            reverse last remembered 'c' state
-d, --delay =SECS [.TENTHS]     iterative delay as SECS [.TENTHS]
-E, --scale-summary-mem =SCALE  set mem as: k,m,g,t,p,e for SCALE
-e, --scale-task-mem =SCALE     set mem with: k,m,g,t,p for SCALE
-H, --threads-show              show tasks plus all their threads
1.2. df

用于顯示系統(tǒng)磁盤使用情況,當(dāng)磁盤/文件系統(tǒng)快滿的時(shí)候,文件系統(tǒng)及磁盤硬件性能都會受到影響。

1.3. free&procrank
  • free 用于顯示系統(tǒng)級內(nèi)存使用情況,通過/proc/meminfo 可檢查系統(tǒng)內(nèi)存使用的細(xì)節(jié)。

  • procrank 用于顯示系統(tǒng)各進(jìn)程的內(nèi)存使用情況,查找內(nèi)存使用超載或泄漏進(jìn)程。

  • 當(dāng)內(nèi)存緊張時(shí),系統(tǒng)性能表現(xiàn)將會受到較大影響,iowait 的提升也會導(dǎo)致 CPU 使用率也會明顯上升。

1.4. Perf

Perf 是內(nèi)置于 Linux 內(nèi)核源碼樹中的性能剖析(profiling)工具,作為一款強(qiáng)大的綜合性分析工具,能夠提供從硬件到軟件、從應(yīng)用到內(nèi)核的全棧性能分析方法,常用于性能瓶頸的查找與熱點(diǎn)代碼的定位。

1.4.1. Perf 原理

Perf 工具功能強(qiáng)大,通過下面的軟、硬件能力實(shí)現(xiàn)性能 profiling。

  1. Hardware Event 由 PMU 部件產(chǎn)生,在特定的條件下探測性能事件是否發(fā)生以及發(fā)生的次數(shù)。比如 cache 命中。

  2. Software Event 是內(nèi)核產(chǎn)生的事件,分布在各個(gè)功能模塊中,統(tǒng)計(jì)和操作系統(tǒng)相關(guān)性能事件。比如進(jìn)程切換,tick 數(shù)等。

  3. Tracepoint Event 是內(nèi)核中靜態(tài) tracepoint 所觸發(fā)的事件(ftrace),這些 tracepoint 用來判斷程序運(yùn)行期間內(nèi)核的行為細(xì)節(jié),perf 在這種應(yīng)用場景下,可理解為 ftrace 的一種前端工具。

1.4.2. Perf 使用

Perf 命令非常多,每個(gè)命令下又有很多子命令,所以本文只針對性介紹一些常用命令。

1.4.2.1. perf list

查看當(dāng)前系統(tǒng)軟、硬件支持的性能事件。

1.4.2.2. perf stat

統(tǒng)計(jì) cache、branch、context-switches 等軟硬件底層性能指標(biāo)。

  • 使用 ctrl+c 退出。

  • perf stat -p 追蹤指定進(jìn)程的性能指標(biāo):



1.4.2.3. perf top
  • 實(shí)時(shí)查看當(dāng)前系統(tǒng)中所有(kernel,app)函數(shù)占用率情況,及 irq 統(tǒng)計(jì)。

  • “perf top -U”,U 統(tǒng)計(jì) kernel 中符號占用率。

  • “perf top -K”,K 統(tǒng)計(jì)應(yīng)用符號占用率。

  • “perf top -p ”,統(tǒng)計(jì)制定進(jìn)程的符號占用情況。

  • “perf top -g”,記錄占用率的同時(shí)保存函數(shù)調(diào)用棧情況。

  • “perf top -s dso”,以 library&executed 進(jìn)行占用排序。

  • “perf top -s pid”,以 pid 進(jìn)行占用排序。



1.4.2.4. perf sched
  1. perf sched 依賴開啟 ftrace,用于統(tǒng)計(jì)分析調(diào)度相關(guān)信息。

  2. perf sched record -p ,可抓取指定進(jìn)程調(diào)度信息。

  3. perf sched latency –sort max,對 record 的數(shù)據(jù)進(jìn)行 runtime、delay 等時(shí)間分析。

  4. perf sched timehist -wM,對 record 的數(shù)據(jù)進(jìn)行調(diào)度時(shí)延的分析。

root@hobot:~# perf sched record -- sleep 1
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 1.066 MB perf.data (7233 samples) ]
root@hobot:~#
root@hobot:~# perf sched latency --sort max
-------------------------------------------------------------------------------------------------------------------------------------------
Task                  |   Runtime ms  | Switches | Avg delay ms    | Max delay ms    | Max delay start           | Max delay end          |
-------------------------------------------------------------------------------------------------------------------------------------------
sleep:2329            |      1.120 ms |        1 | avg:   0.000 ms | max:   0.000 ms | max start:     0.000000 s | max end:     0.000000 s
rcuc/9:92             |      0.002 ms |        1 | avg:   0.000 ms | max:   0.000 ms | max start:     0.000000 s | max end:     0.000000 s
1.4.2.5. 火焰圖

火焰圖是分析系統(tǒng)、進(jìn)程熱點(diǎn)的強(qiáng)大工具,原理是通過 PMU 對 CPU 當(dāng)前運(yùn)行符號(PC)進(jìn)行采樣,再通過火焰圖工具還原整個(gè)調(diào)用棧。

通過火焰圖可以查看 kernel+app 的調(diào)用棧耗時(shí)狀態(tài),查找性能瓶頸。

  1. perf record -g -p ,記錄系統(tǒng)/進(jìn)程的堆棧采樣數(shù)據(jù),默認(rèn) perf.data。

  2. perf script > perf.unflod,對 record 的調(diào)用棧等信息進(jìn)行解析。

  3. 將 perf.unflod 導(dǎo)入 PC 機(jī),使用火焰圖工具出解析 perf.svg。

  4. FlameGraph/stackcollapse-perf.pl perf.unflod FlameGraph/flamegraph.pl > perf.svg. FlameGraph 工具從 https://github.com/brendangregg/FlameGraph.git 獲取。

  5. 使用 chrome 瀏覽器打開。



1.5. Ftrace 功能

Ftrace 功能的作用是幫助開發(fā)人員了解 Linux 內(nèi)核的運(yùn)行時(shí)行為,以便進(jìn)行故障調(diào)試或性能分析。

  • Ftrace 通過靜態(tài)和動態(tài)插裝,實(shí)現(xiàn)對內(nèi)核核心及熱點(diǎn)函數(shù)的 profiling,對于調(diào)度、io 等問題是最重要的分析手段。

  • Ftrace 需要使能內(nèi)核 CONFIG_FTRACE,當(dāng)前默認(rèn)打開。

  • Ftrace 使用 per-cpu 的 ring-buffer,內(nèi)容為二進(jìn)制格式,執(zhí)行效率高。設(shè)置 CONFIG_DYNAMIC_FTRACE 后,加入的 trace 功能在不使用時(shí)對運(yùn)行時(shí)系統(tǒng)性能幾乎沒有影響(初始化會對開機(jī)時(shí)間有一定影響),動態(tài)使能 ftrace 后,對運(yùn)行時(shí)性能會有一定副作用。

  • Ftrace 的調(diào)度 profiling 在內(nèi)核中對熱點(diǎn)函數(shù)大量埋點(diǎn),導(dǎo)致系統(tǒng)會在幾秒內(nèi)產(chǎn)生百兆以上的 log,通過 log 直接分析性能難度較大,所以一般會引入一些 ftrace 前端工具。

  • perf、trace-cmd、systemtap、bcc、kernelshark 都是優(yōu)秀的 ftrace 前端工具??梢酝ㄟ^這些工具去分析 ftrace 日志。


專欄文章內(nèi)容及配圖由作者撰寫發(fā)布,僅供工程師學(xué)習(xí)之用,如有侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 聯(lián)系我們

關(guān)鍵詞: 算法 自動駕駛 算法工具鏈 地平線 征程5

相關(guān)推薦

2035年自動駕駛出租車市場規(guī)模將達(dá)1680億美元

汽車電子 2026-04-21

面向算法硬件加速的FPGA實(shí)現(xiàn)方法

PID算法

資源下載 2007-02-16

賦能自動駕駛和機(jī)器人感知,讀懂二維可尋址VCSEL | 硬科技有點(diǎn)意思

ADI:傳感技術(shù)助力未來自動駕駛的發(fā)展

視頻 2020-03-16

加快實(shí)現(xiàn)自動駕駛(完整小組討論)

視頻 2020-06-12

76-81GHz自動駕駛CMOS RADAR

視頻 2018-05-31

自動駕駛正推動汽車行業(yè)加速布局人形機(jī)器人

恩智浦第三代雷達(dá)收發(fā)器助力高性能成像雷達(dá)規(guī)模量產(chǎn),賦能L2+至L4級自動駕駛

CRC算法原理及C語言實(shí)現(xiàn)

資源下載 2007-02-16

數(shù)字PID控制算法之一

資源下載 2007-12-28

地平線HSD引領(lǐng)智能駕駛普惠新時(shí)代

攜手ADI贏得未來

自動駕駛的現(xiàn)狀與未來(節(jié)選)

視頻 2020-03-16

英偉達(dá) “全天候” 芯片實(shí)現(xiàn)毫秒級人臉檢測

掘金自動駕駛,不要把大坑當(dāng)機(jī)會

汽車電子 2026-04-17

曲面顯示屏取代傳統(tǒng)汽車擋風(fēng)玻璃

簡單實(shí)用的單片機(jī)CRC 快速算法

加密算法之MD5算法

更多 培訓(xùn)課堂
更多 焦點(diǎn)
更多 視頻

技術(shù)專區(qū)

潜江市| 竹溪县| 调兵山市| 怀来县| 耿马| 六安市| 京山县| 夏邑县| 白城市| 永昌县| 桂阳县| 遂平县| 宁国市| 九江县| 旬邑县| SHOW| 南涧| 通榆县| 商都县| 双江| 晴隆县| 遂宁市| 元朗区| 宿松县| 大邑县| 宁国市| 加查县| 双城市| 瑞金市| 三台县| 长治市| 淮南市| 河源市| 丘北县| 灵川县| 宁都县| 宣恩县| 苍溪县| 拉孜县| 玉环县| 和田县|