有没有办法在用户空间中实现动态调整缓存?我希望我的程序能够分配使用可用物理内存的公平份额的缓存。如果系统的物理内存不足,则应按程序选择删除缓存,并且在任何情况下都不应将它们换出。最好不需要特殊权限,因此没有必要实际锁定内存。该程序应该只是知道页面被换出,所以它不会使用它们。总而言之,它应该像内核中实现的缓存和缓冲区一样工作。你能指出一般的想法和API如何做到这一点?我感兴趣的平台是Linux和Windows。
答案 0 :(得分:1)
为什么您认为有合理的方式来定义“公平份额”?当应用程序试图了解太多时,它并不是一个真正的用户体验:更好的是找到一个合理的,最小默认值,并为用户提供一个配置选项来调整它。更好的方法是为用户提供统计数据,以显示当前大小的缓存的效果 - 更大并不总是更好。
Linux中没有“协作内存管理”API - 内核无法告诉用户空间使用更少的内存。我能想到的最接近的是(相对较新的)内存cgroup控制器在达到内存限制时可以提供“通知程序”(而不是OOM杀死分配进程。)这不是很好用,但是又一次,任何这样的界面都会与竞争/死锁倾向调情。使用mincore进行轮询可能会在一些有些人为的/受限制的情况下工作,但鉴于应用程序无法理解系统范围内对内存的需求变化,它无法正常运行。