Linux磁盘缓存和带有GFP_ATOMIC的kmalloc

时间:2018-12-26 19:14:18

标签: c linux caching io linux-kernel

在一些著名的article中,有这样的关于Linux磁盘缓存的声明:

  

绝对没有理由禁用它!


也:

  

具有足够内存的健康Linux系统运行一段时间后,将显示以下预期的无害行为:

     
      
  • 可用内存接近于0

  •   
  • 已用内存接近总容量

  •   
  • 可用内存(或“空闲+缓冲区/缓存”)有足够的空间(比如说占总数的20%以上)

  •   
  • 使用的交换不变

  •   

在我的情况下满足这些条件,并且有问题。我有一些生产内核模式的联网代码,这些代码必须在"atomic" context(设置了kmalloc()标志的GFP_ATOMIC中分配内存)中。因此,在“可用内存接近于0” 的预期的高负载下,我的代码无法分配内存,然后最终成为拒绝服务。

由于磁盘性能问题,显然cronsync && echo 3 > /proc/sys/vm/drop_caches并不能解决。可能只是尝试选择一些文件集来关闭对它们的缓存,但是这似乎并不是一个好的且可靠的解决方案。

问题是:

  • 在这种情况下正确和可靠的解决方案是什么? (从内核模式或用户模式或两者兼而有之)
  • 为什么认为没有理由禁用(降低强度)磁盘缓存?

一些对我没有帮助的帖子:12

0 个答案:

没有答案