为什么 Android 应用程序进程上的 renice 没有效果?

Why does renice on Android application process has no effect?

提问人:Sepultura 提问时间:11/14/2023 最后编辑:Sepultura 更新时间:11/14/2023 访问量:22

问:

我正在弄乱 android 进程的漂亮值,并注意到设置我的应用程序的漂亮值似乎不会对系统的其余部分产生任何性能影响。

我尝试的是,我实现了一个启动前台进程的应用程序。此过程在无限循环中计算 Pi。即使我启动了 8 个应用程序(它们都是一样的)并将所有应用程序的良好值设置为 -20,每个进程的 CPU 时间也会均匀分布在所有其他进程中,并且对整个 Android 系统没有明显的性能影响:enter image description here

所有应用都作为特权应用 (system/priv-app) 安装,并以系统用户身份运行。 我用来设置流程的良好值。renice -n -20 -p PID

但是,如果我使用 adb shell 中启动脚本并将 nice 值设置为 -20,它确实会对系统产生影响。如果我用 -20 启动两个脚本,系统几乎完全无响应:niceenter image description here

运行两个脚本时:enter image description here

该脚本计算 Pi:

#!/bin/sh
echo "scale=1000000; 4*a(1)" | bc -l

我想知道,为什么 renice 一个 android 进程似乎没有效果(有没有办法做到这一点),但 renice 在从 shell 启动的进程上工作得很好?

我希望我的应用程序占用了大部分 CPU 时间,因此系统变得非常慢且无响应 - 但事实并非如此 - 性能绝对没有明显差异。

我读到了一些关于 linux 中进程自动分组的内容,但是我找不到这里提到的任何配置(例如 或): 进程友好度(优先级)设置对 Linux 没有影响kernel.sched_autogroup_enabled/proc/$PID/autogroup/proc/sys/kernel/sched_autogroup_enabled

Android Linux 性能 调度 不错

评论

0赞 Gabe Sechan 11/14/2023
在其他不错的水平上,设备上是否真的有足够大的负载?Android 的后台进程最少 - 后台应用程序被主动杀死。因此,您的应用程序几乎是唯一运行的东西。如果没有其他 CPU 绑定运行的东西,那么 nice 就不会产生明显的影响。
0赞 Sepultura 11/14/2023
@GabeSechan 我很确定系统上有足够的负载 - 这就是为什么我创建了 8 个应用程序,所以我有 8 个单独的进程 - 如果我运行一个应用程序,CPU 使用率为 100%,如果我运行第二个应用程序,它会下降到 50%。这个过程是在无休眠或任何东西的无限循环中计算圆周率
0赞 Gabe Sechan 11/14/2023
是的,这还不够。负载需要来自其他具有更高 nice 级别的进程,这些进程受 CPU 限制以与之竞争。而且你需要的进程(或至少更多的线程)比 CPU 的内核数还要多——如果 CPU 有 8 个内核,而你有 8 个进程,那么它只会为每个内核分配 1 个。更好的设置是将其翻倍到 16 个,其中 8 个已关闭,其中 8 个未关闭,并将已使用与未使用已使用进行比较。
0赞 Gabe Sechan 11/14/2023
但也要记住,nice 是对调度程序的建议,而不是规则。调度程序仍然会更喜欢像主屏幕这样的交互式非 CPU 绑定应用程序,而不是 CPU 绑定应用程序。这就是调度程序的工作 - 弄清楚如何让一切运行,这样你就不会看到系统变慢
0赞 Sepultura 11/15/2023
我在一个只有两个内核的模拟器上运行它。有趣的是,我从 shell 启动的脚本的良好价值具有效果,并且仅运行其中两个几乎会冻结整个模拟器,但是应用程序的良好价值被忽略了

答: 暂无答案