我有一些大文件,可以通过磁盘I / O容量读取它们。我希望免费为其他文件提供文件系统缓存。 是否可以为Linux中的特定文件打开文件系统缓存?
答案 0 :(得分:1)
您的问题暗示您可能不是您想要控制的程序的作者...如果是这样,答案是“不容易”。如果您正在寻找仅在其中标记(例如通过扩展属性)的特定文件集“ nocache”,则答案是否定的。充其量,您仅限于在程序周围使用LD_PRELOAD
包装器,并且必须仔细编写包装器,以免影响程序尝试打开的所有文件等。
如果您是该程序的作者,则应该使用fadvise
(如果您使用的是madvise
,则应使用等效的mmap
),因为在阅读完本书后,数据,您可以向内核暗示它应该使用FADV_DONTNEED
参数(why not use FADV_NOREUSE
? Because with Linux kernels available at the time of writing it's a no-op)丢弃缓存的片段。
如果您是作者,另一种技巧是打开带有O_DIRECT
标志的文件,但是除非您真的知道自己在做什么,否则我不建议您这样做。 O_DIRECT
带有大量使用限制和使用条件(人们常常在为时已晚之前才注意到或理解其影响):
O_DIRECT
,因此您的程序必须处理该问题。O_DIRECT
是“尽力而为”的提示)。NB:根本不允许使用缓存(即甚至在初次读取时也不能使用)可能导致以远低于磁盘可达到的速度读取文件。
答案 1 :(得分:0)
我认为您可以通过使用O_DIRECT的开放系统调用来执行此操作,以处理您不想在内核的页面缓存中缓存文件的文件。
打开的手册中O_DIRECT标志的含义如下:
GET _myindex/_search
{
"query": {
"term": {
"email": "example.elastic@yahoo.com"
}
}
}