背景:
去年工作成果,現在將有道的筆記轉移這里,有問題大家可以探討,我們可以通過二進制重排優化啟動時間,減少page-fault次數,優化的方向是減少page-in操作,需要將啟動相關的系統函數和應用函數進行放入一個page里面,正常一個page是可以存儲所有的啟動相關的函數的,然后將這些啟動函數的函數簽名寫入.order文件供xcode 的鏈接器ld消費,那么我們第一步需要拿到啟動相關的函數?具體步驟如下:
啟動相關的函數:
第一步:配置apple clang custom compiles 的配置 在other-c-flag里增加-fsanitize-coverage=func,trace-pc-guard配置,系統會給每一個函數調用之前插入一個 __sanitizer_cov_trace_pc_guard 函數的hook,需要外部自己實現,攔截所有的函數信息
第二步:將獲取的函數信息存在一個列表里,等待啟動完畢,寫入.order文件存入我們沙盒下任意目錄,因為考慮到page的準確性,我們可以多運行幾遍
,拿到最準確的啟動函數信息
第三步:xcode ->windows->device and simulator device -> 下載對應的包信息取出對應的order文件,拷貝到我們的目錄下
注意:大家第一次可以使用我寫好的的pod庫去獲取啟動相關的函數信息
每一次會存在沙河/temp目錄下
pod 'ClangTraceLaurchMethods', :git => 'git@github.com:GE-GAO-ZHAO/ClangTraceLaurchMethods.git', :branch => 'dev'
消費order文件:
第一步:xcode-build-setting-linking 設置order-file的path為.order文件的路徑即可
第二步:關掉我們獲取啟動函數的所有配置和注釋相關的代碼,這時再去command + r
優化成果檢測:
第一種:system trace 看下page -falut次數,自己google看下
第二種:可以通過fishhook看mian函數之后優化前后的時間消耗