Watchdog in Android121. Android Watchdog簡介 (2)31.1 普通watchdog介紹 (2)41.2 android中的watchdog (2)2. Watchdog 啟動 (3)562.1 android啟動簡介 (3)72.2 watchdog啟動介紹 (4)3. Watchdog与電源管理 (7)893.1 電源管理簡介 (7)103.2 watchdog在android電源管理中的角色 (8)113.3 watchdog內部架構分析 (9)12參考資料 (12)131. Android Watchdog簡介141.1 普通watchdog介紹15Linux 在不同領域如電信、終端便攜設備等得到廣泛的應用,不同領域的應用對 Linux系統也提16出相應要求。
Carrier Grade Linux是OSDL(Open Source Development Lab)發布的電信級Linux 17的標準,在系統可用性這部分指出 Linux 必須支持 watchdog 機制。
Linux 內核從 1.3.51 版本18開始提供硬體、軟體 watchdog 驅動。
19軟體watchdog的實現原理是:系統有一個Timer/Alarm專門檢測在規定時間內(一般是1m)程式20進程有沒有寫的操作。
如果應用程式在給定時間內沒有寫操作,watchdog負責reboot應用程式;21如果系統在規定時限內沒有寫操作,watchdog負責reboot系統,這種情況下就需要硬體watchdog 22提供支持, restart系統。
231.2 android中的watchdog24本文主要介绍android framework层中的watchdog,它屬於一種軟體watchdog實現。
對於硬體25watchdog不做介紹,對於內核中的watchdog module只做簡單概括。
26Watchdog的主要作用是:271)檢測應用程式內存使用量。
282)判斷系統是否hang up。
29通過其內部的評判標準,決定處理情況。
對於應用程式決定是否結束進程;對於系統,決定是否重30啟。
而評判內存消耗的標準是系統內部配置的值,主要包括softthreshold(軟極限)和hardthreshold 31(硬極限)。
Watchdog中的內部類HeartbeatHandle 繼承Java的handle類,相當於一個內置handle。
32ran()函數執行死循環,在規定時間內向handle發送消息,進行相應處理。
如果一次處理的時間33超出了系統規定值,認為系統hang up,reboot系統。
34內置的handle用於處理消息、檢測內存,重啟系統等。
是系統的中心處理單元。
35362. Watchdog 啟動37對於android中的watchdog根據前面的介紹,我的理解是:它是一種軟體實現,充當一種service 38的角色。
Android框架中服務類型分為:Native服務、Android服務和Init空間服務。
關於android 39框架中的的服務類型,這裡不做展開,只需要知道這些android的service不是指android應用層40的service。
本節中主要講述watchdog的啟動過程,首先我們先闡述一下android系統的啟動過41程。
422.1 android啟動簡介43Android的啟動流程,主要有四個步驟:44(1) init進程啟動45(2) Native服務啟動46(3) System Server,Android服務啟動47(4) Home啟動48總體框架如圖:4950 Android 啟動框架圖51 Init 進程:它是一个由內核啟動的用戶級進程。
内核自行啟動之後,就通過啟動一個用戶級程式52 init 的方式,完成引導進程。
Init 始終是第一個進程。
53 zygote 进程:奠定了Android 的基础。
Zygote 这个进程起来才会建立起真正的Android 运行空间。
54 它是一種孵化器,C/S 結構,利用Linux 的fork 機制。
其他進程作為一個客戶端向客服端向Zygo 55 te 發出”孵化”請求,Zygote 接收到命令就“孵化”出一個Activity 進程來。
562.2 watchdog 啟動介紹57 上一节说到watchdog 是在SystemServer 中被初始化和啟動的,SystemServer 继承Thread ,在58 SystemServer 被start 的时候,优先初始化关键服务先看初始化。
見下圖:59註釋:Watchdog 在systemserver 中啟動60Watchdog初始化6162在SystemServer run函数末尾,将检查当前系统是否已经准备好运行第三方代码。
通过63systemReady函数实现,这属于ActivityManagerService的内容,可以查阅64\frameworks\base\services\java\com\android\server\am\ActivityManagerService。
当系统已65经准备好运行第三方代码的时候,将执行systemReady參數中傳入的callback函數,watchdog這66時才被啟動。
見下圖:6768Watchdog啟動6970713. Watchdog与電源管理723.1 電源管理簡介73這是Steve Guo給出一幅電源管理的架構圖:747576Android Power Management 架構圖77我認為有點異議,Watchdog与Power(\frameworks\base\core\java\android\os目錄下)没有交互,78它只是和PowerManagerService(\frameworks\base\services\java\com\android\server目錄下)有交79互。
見如下代碼:8081這條語句是watchdog提供的一個接口。
通過它,其他service將自己註冊到watchdog中,watchdog 82為這些service提供檢測服務。
83再看以下代码,在reboot的时候,watchdog调用的是PowerManagerService中的reboot函数。
8485所以我認為上述框架圖應該修改為:868788Android Power Management 架構圖(修正watchdog)3.2 watchdog在android電源管理中的角色89關於Android Power Management的詳細介紹有其他同事負責,上面的概述主要是為了讓大家能有90一個簡單概念。
91通過上面介紹watchdog主要與PowermanagerService有交互。
通過提供接口,讓PowermanagerService 92註冊callback函數,并传入PowermanagerService实例给watchdog。
这主要有两方面作用:931)watchdog获取PowermanagerService实例。
主要用于在扫描系统memory时,统计该系統應用94程式的内存消耗。
如果系統的总内存消耗超过配置中规定的极限值,watchdog调用95PowerManagerService中的rebootSystem函數,重啟系統。
962)Watchdog在每次检测完毕后,如果系統狀態良好,将一次调用所註冊的Callback函数,至于需97要执行什么功能由其他类决定,在PowerManagerService的callback中没有执行任何代码。
98993.3 watchdog內部架構分析100101102Watchdog功能簡介103上圖主要是反映watchdog的主要作用,以及watchdog內部的主要部件和函數。
HeartbeatHandle是104watchdog的核心,它主要處理兩種信息,系統memory檢測完畢後的message和應用程序memory檢105測完畢後的message ,並作出相應處理。
106107Watchdog需要BatteryService、PowerManagerService、AlarmManagerService和ActivityManagerService 108完成初始化,其中BatteryService、PowerManagerService、AlarmManagerService用於參與系統是否應109該重啟的邏輯判斷,例如已經剩餘電量不足以支持系統重啟,或者電源狀態不明,這些情況下,即110使watchdog判斷內存消耗過大,也不會reboot系統;watchdog調用ActivityManagerService的111requestPss()函數以檢測所有應用程式的內存消耗,查詢完畢後向HeartbeatHandler發消息。
112ActivityManagerService向Watchdog 傳入各Application的進程信息。
當watchdog start後,通過113sendmessage給HeartbeatHandle,對系統進行檢測。
114115116 簡單介紹後,我們先來看checkMemory (),它有HeartbeatHandle 調用。
117118119120函數checkMemory()負責監控內存狀態。
MeMonitor這個內部類主要輔助checkMemory函數工121作。
它負責取得系統的定義的內存極限使用量、系統是否允許重啟application process以及判斷系122統或應用程式的運行狀態。
對於系統,和應用程序有不同的判斷邏輯。
其中mPhoneReq是PssStats 123類型,描述進程的信息,例如是否可見,是否是空進程,包含service的個數。
檢測分為124SystemMemMonitor 和PhoneMemMonitor兩個部分。
125126對於watchdog的內部原理,如前所述。
Watchdog啟動後,執行死循環,向HeartbeatHandle類發127送消息,如果在系統規定的時間內,HeartbeatHandle將消息處理完畢,則認為系統完好,否則一128旦出現超時,則認為系統被hang up,調用PowerManagerService中方法reboot system。
129HeartbeatHandle類中將依據其內置的判定標準,執行進程Memory check 或者system memory 130check,以決定reboot system 或者kill process。