最近遇到 i2c 傳輸慢的問題,正常一筆 i2c 傳輸 52 bytes 應該在 1ms 內返回,但是偶爾出現 6 ~ 7ms 才返回,不滿足要求,因此研究一下 ftrace 工具,分析 i2c 傳輸到底慢在哪里。懷疑:
同一路 i2c bus 掛載設備多,可能同時發起傳輸,導致搶占。(解決方法:重要器件獨占一路 i2c bus)
i2c 硬件傳輸慢。一般不太可能,因為這是硬件行為,除非從機返回慢。(研究從機為什么慢)
i2c 傳輸完成后返回,i2c 控制器發傳輸完成的信號給 cpu,但 cpu 忙 loading 重,沒有及時調用 i2c_reply 通知調用者;或者是 i2c 傳輸完成后,CPU 處于睡眠狀態,由于 i2c 中斷無法喚醒系統,系統醒了以后才返回,導致慢。(提升 user 線程優先級 + 讓這一路 i2c bus 持鎖,可以優化)
1、簡介
strace:用來跟蹤 Linux 進程執行時的系統調用和接收所接收的信號,可以跟蹤到一個進程產生的系統調用,包括參數,返回值,執行消耗的時間。
ftrace:是一個 Linux 內核函數跟蹤器,function tracer,旨在幫助開發人員和系統設計者可以找到內核內部發生的事情,從 Linux-2.6 內核就支持了。
atrace:Android tracer,使用 ftrace 來跟蹤 Android 上層的函數調用。
systrace:Android 的 trace 數據分析工具,將 atrace 采集上來的數據,以圖形化的方式展現出來。systrace 是分析 Android 設備性能的主要工具。不過,它實際上是多種其他工具的封裝容器:它是 atrace 的主機端封裝容器。atrace 是用于控制用戶空間跟蹤和設置 ftrace 的設備端可執行文件,也是 Linux 內核中的主要跟蹤機制。systrace 使用 atrace 來啟用跟蹤,然后讀取 ftrace 緩沖區并將其全部封裝到一個獨立的 HTML 查看器中。
perfetto:新一代 systrace 分析工具,使用 perfetto 工具,可以通過 Android 調試橋 (ADB) 在 Android 設備上收集性能信息。perfetto 從您的設備上收集性能跟蹤數據時會使用多種來源,例如:使用 ftrace 收集內核信息、使用 atrace 收集服務和應用中的用戶空間注釋、使用 heapprofd 收集服務和應用的本地內存使用情況信息。
在 Android 9 (P) 及以上版本平臺都可用,但只有在 Android 11 (R) 及以上的版本中才默認啟用。在Android 9 (P) 和 10 (Q) 上,你需要執行下面的命令,以確保在一切開始之前跟蹤服務正常啟動:
# 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,主要用于分析游戲場景。
因此,首先需要學習 ftrace,它是其他 trace 的基礎。
-
Linux
+關注
關注
87文章
11312瀏覽量
209702 -
I2C
+關注
關注
28文章
1489瀏覽量
123896
發布評論請先 登錄
相關推薦
評論