android如何强制cpu核心离线(关闭核心)

Posted

技术标签:

【中文标题】android如何强制cpu核心离线(关闭核心)【英文标题】:android how to force cpu core offline(shut down cores) 【发布时间】:2013-11-26 15:46:36 【问题描述】:

我使用的是四核智能手机。

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

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

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

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

【问题讨论】:

我不确定这是否可行。您可以将内核设置为非常低的频率,但我认为“关闭”它们会带来安全问题。 【参考方案1】:

运行以下命令关闭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

【讨论】:

这些命令并非一直有效。在线写入 0 后马上又变成 1。 如果 mpdecision 仍在运行,我可以想象会发生这种情况。 “mpdecision”是高通独有的 CPU 调度机制。【参考方案2】:

我必须首先为 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】:

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

# 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

...

当然,这个解决方案并不完美。再看一遍,代码sn-p:

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

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

【讨论】:

以上是关于android如何强制cpu核心离线(关闭核心)的主要内容,如果未能解决你的问题,请参考以下文章

怎样查看手机CPU核心数,有软件吗?

如何将视频快速存储在核心数据中? [关闭]

我的cpu核心数量,电脑识别的少了一半,请问大神怎么解决?

如何使用核心数据离线显示 Json 数据

如何查看cpu核心数和线程数?

核心数据与 SQLite [关闭]