最近遇到 i2c 傳輸慢的問題,正常一筆 i2c 傳輸 52 bytes 應(yīng)該在 1ms 內(nèi)返回,但是偶爾出現(xiàn) 6 ~ 7ms 才返回,不滿足要求,因此研究一下 ftrace 工具,分析 i2c 傳輸?shù)降茁谀睦?。懷疑?/p>
同一路 i2c bus 掛載設(shè)備多,可能同時發(fā)起傳輸,導(dǎo)致?lián)屨?。(解決方法:重要器件獨占一路 i2c bus)
i2c 硬件傳輸慢。一般不太可能,因為這是硬件行為,除非從機返回慢。(研究從機為什么慢)
i2c 傳輸完成后返回,i2c 控制器發(fā)傳輸完成的信號給 cpu,但 cpu 忙 loading 重,沒有及時調(diào)用 i2c_reply 通知調(diào)用者;或者是 i2c 傳輸完成后,CPU 處于睡眠狀態(tài),由于 i2c 中斷無法喚醒系統(tǒng),系統(tǒng)醒了以后才返回,導(dǎo)致慢。(提升 user 線程優(yōu)先級 + 讓這一路 i2c bus 持鎖,可以優(yōu)化)
1、簡介
strace:用來跟蹤 Linux 進程執(zhí)行時的系統(tǒng)調(diào)用和接收所接收的信號,可以跟蹤到一個進程產(chǎn)生的系統(tǒng)調(diào)用,包括參數(shù),返回值,執(zhí)行消耗的時間。
ftrace:是一個 Linux 內(nèi)核函數(shù)跟蹤器,function tracer,旨在幫助開發(fā)人員和系統(tǒng)設(shè)計者可以找到內(nèi)核內(nèi)部發(fā)生的事情,從 Linux-2.6 內(nèi)核就支持了。
atrace:Android tracer,使用 ftrace 來跟蹤 Android 上層的函數(shù)調(diào)用。
systrace:Android 的 trace 數(shù)據(jù)分析工具,將 atrace 采集上來的數(shù)據(jù),以圖形化的方式展現(xiàn)出來。systrace 是分析 Android 設(shè)備性能的主要工具。不過,它實際上是多種其他工具的封裝容器:它是 atrace 的主機端封裝容器。atrace 是用于控制用戶空間跟蹤和設(shè)置 ftrace 的設(shè)備端可執(zhí)行文件,也是 Linux 內(nèi)核中的主要跟蹤機制。systrace 使用 atrace 來啟用跟蹤,然后讀取 ftrace 緩沖區(qū)并將其全部封裝到一個獨立的 HTML 查看器中。
perfetto:新一代 systrace 分析工具,使用 perfetto 工具,可以通過 Android 調(diào)試橋 (ADB) 在 Android 設(shè)備上收集性能信息。perfetto 從您的設(shè)備上收集性能跟蹤數(shù)據(jù)時會使用多種來源,例如:使用 ftrace 收集內(nèi)核信息、使用 atrace 收集服務(wù)和應(yīng)用中的用戶空間注釋、使用 heapprofd 收集服務(wù)和應(yīng)用的本地內(nèi)存使用情況信息。
在 Android 9 (P) 及以上版本平臺都可用,但只有在 Android 11 (R) 及以上的版本中才默認啟用。在Android 9 (P) 和 10 (Q) 上,你需要執(zhí)行下面的命令,以確保在一切開始之前跟蹤服務(wù)正常啟動:
# Needed only on Android 9 (P) and 10 (Q) on non-Pixel phones.adb shell setprop persist.traced.enable 1
perfconv:CPU Freq 分析工具
LTR:Long Trace Recoder,可以錄制長達半個小時的 trace,主要用于分析游戲場景。
因此,首先需要學(xué)習(xí) ftrace,它是其他 trace 的基礎(chǔ)。
-
Linux
+關(guān)注
關(guān)注
87文章
11331瀏覽量
209986 -
I2C
+關(guān)注
關(guān)注
28文章
1495瀏覽量
124137
發(fā)布評論請先 登錄
相關(guān)推薦
評論