Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android如何强制cpu内核脱机(关闭内核)_Android_Adb_Cpu_Frequency_Power Management - Fatal编程技术网

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

android如何强制cpu内核脱机(关闭内核),android,adb,cpu,frequency,power-management,Android,Adb,Cpu,Frequency,Power Management,我使用的是一款四核智能手机 我想知道如何强制三核或两核脱机。因此,我可以在运行指定基准测试的不同频率级别上测量不同活动内核计数的性能 我可以通过“用户空间管理器”管理核心频率。然而,我不能关闭内核。当我运行基准测试时,空闲内核将被唤醒 我已使用“adb外壳”连接到手机。我也可以获得根访问权限 有人能帮忙解决这个问题吗?提前感谢。运行以下命令关闭cpu1、cpu2、cpu3 adb root adb shell stop mpdecision adb shell echo "0"

我使用的是一款四核智能手机

我想知道如何强制三核或两核脱机。因此,我可以在运行指定基准测试的不同频率级别上测量不同活动内核计数的性能

我可以通过“用户空间管理器”管理核心频率。然而,我不能关闭内核。当我运行基准测试时,空闲内核将被唤醒

我已使用“adb外壳”连接到手机。我也可以获得根访问权限


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

运行以下命令关闭cpu1、cpu2、cpu3

adb root
adb shell 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
您可以通过更改相应文件的权限来强制“联机”状态:

# 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”。之后,第二个命令将此状态修复为不可更改。因此,最清晰的解决方案是将这两个命令包装成一个循环,并检查状态,直到我们得到所需的结果。

我必须首先禁用Galaxy-S7设备的热插拔,以防止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

我不确定这是否可能。您可以将内核设置为非常低的频率,但我认为将其“关闭”将是一个安全问题。这些命令并不总是有效。在将0写入在线后,它又变为1。如果mpdecision仍在运行,我可以想象这种情况会发生。“mpdecision”只是高通公司的cpu调度机制。