在Android系统优化过程中,swappiness值的配置至关重要。价值路径是/proc/sys/vm/swappiness
. 一些消息来源建议将其设置为 60,而另一些消息来源建议将其设置为 120。一些消息来源声称其最大值是 100,而另一些消息来源则声称它是 200,这让我感到困惑。
如何确认我的系统支持的最大值?
我可以在 Stack Overflow 上找到的链接:
在Android系统优化过程中,swappiness值的配置至关重要。价值路径是/proc/sys/vm/swappiness
. 一些消息来源建议将其设置为 60,而另一些消息来源建议将其设置为 120。一些消息来源声称其最大值是 100,而另一些消息来源则声称它是 200,这让我感到困惑。
如何确认我的系统支持的最大值?
我可以在 Stack Overflow 上找到的链接:
在 5.8 之前的内核版本上的最大值为 100 ,在内核5.8
swappiness
上该值增加到 200 。如果您仔细阅读链接中的答案(并且在谷歌中可以找到大量其他类似的问题和文章),您会发现它们都没有提供最佳价值。这取决于确切的工作负载及其在运行操作系统的计算机上的特定行为,并且只需要一些基准测试。
通常默认值(60)是最平衡的。
尽管您链接中的答案解释了如何
swappiness
影响系统,但我会尽力使其更简单,而无需其他人添加到答案中的计算和数字,使它们更精确,但可能更难以阅读。如果您希望以极其简化的方式了解其要点(只是为了使其更直观),您可以说您的 RAM 包含两种主要类型的页面:
当内存压力很大,并且内核需要释放 RAM 中的一些空间时,它面临一个艰难的决定:
这
swappiness
暗示内核应该更喜欢什么。值“0”告诉内核尽可能避免交换匿名页面,并始终清除文件回存内存/缓存以腾出更多空间。你增加的越多,你的匿名内存被换出的机会就越大,并且文件支持的内存会受到青睐。在 > 5.8 的内核上,值为 200 意味着它应该始终优先交换出匿名页面并将文件支持的内存保留在 RAM 中。这就是为什么建议值取决于许多不同的因素,例如工作负载类型、I/O 速度和交换速度。
swappiness
并且您的进程有大量可能不会使用的不活动内存页面,您可能更愿意增加以尽可能减少 I/O。zswap
,交换被压缩并存储在 RAM 中的专用部分(而不是磁盘)中,交换的成本甚至更低,因此也许可以优先考虑交换而不是从 RAM 中清除文件数据。但底线是:没有通用的推荐值。对于标准情况和工作负载,默认值应该没问题。如果您发现交换过多或 I/O 过多,您可能需要仔细调整该值,但必须对其进行测试。只需更改该值并检查它如何影响机器的性能,直到达到最适合您的特定机器和工作负载的状态。