Android程式碼獲取CPU執行情況

opendevkit發表於2014-10-29

眾所周知,android的os是linux。也就是說,關於硬體的資訊,只有從linux介面才能得到。我們知道,除了系統呼叫,只能從proc sys這兩個檔案系統裡獲取資料了。cpu資訊也藏在這兩個檔案系統裡。專門的系統呼叫不靈活,且依賴c庫。

1. /proc/cpuinfo

通過這個可以統計cpu情況,包括cpu個數,cpu核心數,cpu硬體執行緒數。不過android上,這個沒啥用。

kernel位置: fs/proc/cpuinfo.c

2. /proc/stat

這個能獲取每個cpu的活動情況,一些統計資訊,不包括頻率,我們知道頻率是通過cpufreq獲取的。

kernel位置:fs/proc/stat.c

3. /sys/devices/system/cpu

這個目錄下的諸如cpu0 cpu1等都是kernel裡註冊cpu時候,生成的節點,通過這個統計基本上可以統計出cpu的情況了。通過建立連結的方式,可以偽造一個cpuX。

sysfs_create_link(&cpu_subsys.dev_root->kobj, &cpu->dev.kobj, “cpu1″);

kernel位置:drivers/base/cpu.c

4. android的vm介面

Runtime.java:605:    public int availableProcessors() {

原始碼位置;libcore

注意:這個介面實際上最後呼叫了bionic的sysconf介面,這個介面也是統計的/sys/devices/system/cpu/下的資訊,但是連結是不算數的。

相關文章