Programming/기타

[Android]CPU의 가능한 Hz, mode와 현재 상태 구하기

라우드니스 2013. 3. 11. 22:14

Android에서 CPU와 관련된 내용들을 얻는 것은 Linux에 의존하게 된다. (아님 그냥 내가 못 찾은 것. -_-;)

Linux에서 CPU에 대한 정보는 /sys/device/system/cpu에서 구할 수 있다.

그 중 우리가 원하는 CPU의 현재 Hz와 Mode, 사용 가능한 Hz와 Mode에 관한 정보는 /sys/……/cpu/[cpu number]/cpufreq 폴더에 존재한다.

CPU가 single core라면 CPU0만 존재하고 dual 이상이라면 CPU0, CPU1… 이런 식으로 늘어난다.

현재의 평범한 multi core system이라면 CPU숫자와 상관 없이 CPU에 대한 동일한 정보를 얻어올 수 있지만 차후 big.LITTLE 기능이 적용된다면 코어마다 다를 수도 있을 것 같다.

 

다음은 /sys/device/system/cpu/cpu*/cpufreq/ 폴더에 존재하는 파일들이다.

/sys/device/system/cpu/cpu*/cpufreq/

affected_cpus: 실행결과 해당 core number에 해당하는 수가 나온다.

cpuinfo_cur_freq: 현재 CPU의 Hz가 나온다.

cpuinfo_max_freq: CPU가 변경 가능한 Hz의 최대치가 나온다.

cpuinfo_min_freq: CPU가 변경 가능한 Hz의 최소치가 나온다.

cpuinfo_transition_latency: CPU의 Hz가 변하는데 걸리는 시간. kernel documentation에 따르면 nanosecond라고 한다.

related_cpus: 총 core의 수가 나온다. (single core면 0, hexa core면 5 이런 식)

scaling_available_freqeuncies: max->min 순으로 변화 가능한 CPU의 Hz가 나온다.

scaling_available_governors: CPU성능 기준 min -> max 순으로 CPU변환 방침이 나온다. 정상적인 방법으로는 이를 수정할 권한을 얻을 수 없으므로 크게 의미 없는 것 같다.

scaling_driver: CPU 종류를 나타내는 것 같다. 내 Android의 경우 OMAP Process를 사용하고 있는데 이 경우 omap 이라고 나오며 AMD CPU의 경우 powernow-k8 이라고 나온다.

scaling_governor: 현재 governor 상태가 나온다.

scaling_max_freq , scaling_min_freq: 현재 governor 정책에 의해 제한된 max, min Hz값을 알려주거나 설정할 수 있다.

scaling_setspeed: <unsupported>라고 나온다. Kernel documentation에 따르면 governor가 userspace일 경우에만 사용 가능한 것으로 보인다.

 

/sys/devices/system/cpu/cpu*/cpufreq/stats

 

time_in_state: 각각의 Hz 대역 대에서 보낸 총 시간이 나타낸다. 100Hz가 기준이므로 나오는 시간의 단위는 10ms 이다.

total_trans: 해당 CPU에서 일어난 Hz 변환의 총 횟수를 나타낸다.

반응형