android如何强制cpu核心脱机(关闭核心)

时间:2013-11-26 15:46:36

标签: android adb cpu frequency power-management

我正在使用四核智能手机。

我想知道如何强制使用三个核心或两个核心离线。因此,我可以测量运行指定基准的不同频率级别的不同活动核心计数的性能。

我可以通过“用户空间管理器”管理核心频率。但是,我无法关闭核心。当我运行基准测试时,空闲核心将被唤醒。

我使用“ adb shell ”连接到手机。我也可以获得root访问权限。

有人可以帮忙解决这个问题吗?提前谢谢。

4 个答案:

答案 0 :(得分:6)

运行以下命令关闭cpu1,cpu2,cpu3。

adb root
adb stop mpdecision
adb shell
echo "0" > /sys/devices/system/cpu/cpu1/online
echo "0" > /sys/devices/system/cpu/cpu2/online
echo "0" > /sys/devices/system/cpu/cpu3/online

答案 1 :(得分:2)

"停止决定"必须在" adb shell"之后运行,而不是" adb"写在它之前。

所以命令(在PC上)应该是:

adb shell
su
stop mpdecision
echo "0" > /sys/devices/system/cpu/cpu1/online
echo "0" > /sys/devices/system/cpu/cpu2/online
echo "0" > /sys/devices/system/cpu/cpu3/online

答案 2 :(得分:1)

我必须先为Galaxy-S7设备禁用 hotplug ,以防止CPU 返回在线状态

echo 0 > /sys/devices/system/cpu/cpuhotplug/enabled

在我的设备上,对该文件的每次写访问都会导致CPU状态重置。因此,先检查现有值以免遇到麻烦:

if [[ 0 != $(cat /sys/devices/system/cpu/cpuhotplug/enabled) ]]; then
    echo 0 > /sys/devices/system/cpu/cpuhotplug/enabled
fi

答案 3 :(得分:0)

您可以通过更改相应文件的权限来强制“在线”状态:

# Without stopping this service, the following approach will fail
# You can run it after. This will increase battery life. So, I suggest to run it.
stop mpdecision

# Make the file writable
chmod 664 /sys/devices/system/cpu/cpu0/online

# Make the core always offline
echo 0 > /sys/devices/system/cpu/cpu0/online

# Make the file read-only. 
# Now "online" status will not be changed by external apps
chmod 444 /sys/devices/system/cpu/cpu0/online

# Run the service again
start mpdecision

你必须为每个cpu核心运行所有这些东西。 我建议创建一个bash脚本,如:

...
set_core_offline () {
    local core=$1
    chmod 664 /sys/devices/system/cpu/cpu$core/online
    echo 0 > /sys/devices/system/cpu/cpu$core/online
    chmod 444 /sys/devices/system/cpu/cpu$core/online
}

# Works for 4-core CPUs
set_cores_offline () {
    set_core_offline 0
    set_core_offline 1
    set_core_offline 2
    set_core_offline 3
}
...

当然,这个解决方案并不完美。再看一下,在代码片段中:

echo 0 > /sys/devices/system/cpu/cpu0/online
chmod 444 /sys/devices/system/cpu/cpu0/online

这是两个单独的命令。执行第一个后,外部应用程序可能会再次将“在线”状态更改为“1”。之后,第二个命令将此状态修复为不可更改。因此,最明确的解决方案是将这两个命令包装成循环并检查状态,直到我们得到所需的结果。