chromium中的效能優化工具syzyProf

2021-09-08 14:16:20 字數 1378 閱讀 9711

我先開始介紹syzyprof。這個工具可以捕獲每個執行緒呼叫每個函式執行的時間,然後把結果生成乙個kcachegrind能夠識別的資料格式檔案,然後通過kcachegrind的展示結果。你就可以知道函式哪個函式執行了次數最多,消耗的時間最多,哪個執行緒在讀寫檔案,哪個執行緒在建立視窗介面,而且kcachegrind以圖形的方式顯示出函式呼叫鏈等資訊,非常直觀。如圖這是我生成cef自帶demo程式的函式呼叫資訊。

其實能夠函式效能分析工具已經夠多了,比如xperf,aqtime,還有visual studio自帶的效能分析功能。但是這些工具都是重量級的,有的需要除錯的模式執行目標程式,導致對目標程式執行效率有很大的影響。

相比而言syzyprof是輕量級的函式效能分析工具,配置簡單,對目標程式單執行效率影響小。說起來這麼先進,其實syzyprof的工作原理很簡單,就是給編譯器加上/profile的開關,然後編譯出的pe檔案有一些額外的空間,syzyprof在這些額外的空間裡插入指令,修改編譯後的pe檔案,hook住每個函式的呼叫,然後記錄下函式的執行資訊。/profile是vs編譯器為效能優化預留的操作空間,vs本身效能優化也用到了這個介面。

如果chromium的效能優化僅限於syzyprof那就太普通了,它還有乙個殺手鐗——syzygy。syzygy利用syzyprof生成的函式效能分析資料,重新優化函式在pe二進位制檔案中的分布位置,比如呼叫的早的函式放到pe檔案的前頭,函式之間呼叫頻繁緊密的函式放到一起,減少程式執行時的缺頁中斷錯誤,從而減少程式的冷啟動時間和記憶體占用。因為syzygy這個詞的發音太拗口,我一般稱它為山寨機。

聽起來有些不可思議,但確實是這樣的,這也是為什麼chromium瀏覽器啟動的這麼快的原因。chromium自己宣稱syzygy能夠減少了80%的冷啟動時間,還有40%的記憶體占用。

事實上我們用visual studio的編譯器生成的pe檔案函式的分布相對它在執行時的順序而言幾乎是隨機的,這就導致了程式在執行的時候有一些非必要的缺頁中斷,導致冷啟動時間增加。還有不同分頁中**和資料效能很差的訪問,導致記憶體工作集變大。這些正是syzygy優化的地方。

微軟自己早就對windows系統某些模組才用了同樣的技術對pe檔案的函式重分布,比如 ntoskrnl.exe,根本不是編譯器預設生成的樣子。微軟很早就開始了這方面的研究,binary technologies projects的binary transformation infrastructure。這種效能優化的思路並非chromium首創,但發揮的淋漓盡致的確是chromium。

syzygy做優化的需要改變pe檔案,這將導致pe檔案跟原來的pdb檔案對應不上,不能再使用pdb檔案來除錯了,為此syzygy改變pe檔案的同時也會修改對應的pdb檔案。

總結syzygy所用到的技術:

看起來也並不複雜,但是背後分解pe檔案,還有編譯器生成某些符號不能重排布,底下有很多有髒話累活,這都要試錯躺雷才能明白。

效能優化 工作筆記

效能優化 1.同步查詢速度慢的問題 a.如果查詢的結果相同的話就建立乙個物理化檢視 b.如果查詢的是不一樣的結果就可以優化查詢語句,或者建立索引 2.併發訪問死鎖問題 減少事務的長度 3.web調優步驟 a.明確應用程式的效能指標 b.在目標平台測試 c.如果效能已達到效能指標,停止調優工作 d.查...

Android效能優化工具 bootchart

1.安裝bootchart sudo apt get install bootchart 2.編譯bootchart 由於5.1原始碼預設編譯時是不編譯bootchart的,需要開啟該編譯項 touch system core init init.c 由於該檔案對應的映象檔案為boot.img,需要...

SQL效能優化工具TKPROF

全名為trace kernel profile,用來格式化跟蹤檔案,是乙個命令列工具。主要的格式例如以下 tkprof tracefile outputfile tracefile 要分析的trace檔案 outputfile 格式化後的檔案 可選引數及說明例如以下 explain 為每乙個sql語...