在一些著名的article中,有这样的关于Linux磁盘缓存的声明:
绝对没有理由禁用它!
也:
具有足够内存的健康Linux系统运行一段时间后,将显示以下预期的无害行为:
可用内存接近于0
已用内存接近总容量
可用内存(或“空闲+缓冲区/缓存”)有足够的空间(比如说占总数的20%以上)
使用的交换不变
在我的情况下满足这些条件,并且有问题。我有一些生产内核模式的联网代码,这些代码必须在"atomic" context(设置了kmalloc()
标志的GFP_ATOMIC
中分配内存)中。因此,在“可用内存接近于0” 的预期的高负载下,我的代码无法分配内存,然后最终成为拒绝服务。
由于磁盘性能问题,显然cron
和sync && echo 3 > /proc/sys/vm/drop_caches
并不能解决。可能只是尝试选择一些文件集来关闭对它们的缓存,但是这似乎并不是一个好的且可靠的解决方案。
问题是: