物理内存中保留的虚拟内存量是否取决于物理内存大小?
假设我的 swappiness 参数为 60,8GB 中的 4GB 填充了应用程序数据,另外 4GB 填充了文件缓存。
在相同的工作负载、相同的交换参数、但只有 4GB 物理内存的情况下,是否所有 4GB 都被应用程序数据填满或更少?
答案1
它是成比例的,根本不基于内存大小。代码位于mm/vmscan.c
.在检查了一些病理情况后,例如完全超出交换空间(然后仅扫描文件支持的页面作为从内存中逐出的候选页面),几乎耗尽内存(将同等地扫描文件支持的内存和匿名内存) ),或者页面缓存变得非常大并且充满了非活动页面(只有文件支持的页面将被扫描),我们点击这个:
/*
* With swappiness at 100, anonymous and file have the same priority.
* This scanning priority is essentially the inverse of IO cost.
*/
anon_prio = swappiness;
file_prio = 200 - anon_prio;
根据内存扫描器最近在释放每种类型内存方面所取得的成功,这些优先级会得到进一步调整。然后按比例扫描每种类型的内存,最近未使用的页面将被逐出。
最重要的是,这完全取决于工作量。 swappiness 值告诉系统为尝试换出匿名内存分配什么优先级,但内存访问模式将决定实际发生的情况。