如果我在文件上连续地调用Cat / Dev / Null两次,那么第二个呼叫将是No-Op?

StackOverflow https://stackoverflow.com/questions/6088169

  •  09-09-2020
  •  | 
  •  

我想使用cat filepath > /dev/null作为廉价的内存缓存机制。 我想知道的是:如果我第二次称之为,那么文件 已经在磁盘缓存中,是OS智能足以做什么?

更新:我在CIFS卷上测试了这一点,使用fadise posix_fadv_fillneed 要在本地缓存文件(使用命令行上的Linux-Ftools)。事实证明 卷需要安装在读写模式中以便工作。在只读 模式,保证似乎被忽略了。这必须与桑巴有什么关系 Oplock机制。

有帮助吗?

解决方案

更好的是posix_fadvise(...,posix_fadv_willneed)而不是cat文件到/ dev / null - 它需要更少的实际IO,并且不需要将文件内容读入用户空间RAM,销毁CPU缓存。

此外,如果文件的相关部分已在缓存中,则POSIX_FIST将可少于CAT文件> / dev / null

更少的工作。

如果您觉得您真的需要刚刚在核心中的页面,那么MMAP文件的相关部分和MLOCK它(之后解锁;如果记忆压力可能会立即丢弃是紧的)。需要root权限。

通常,这样做的事情是一种悲观化,但应该避免。强制内核表现如何,您希望如何降低其刚才优化实际工作量的能力。

其他提示

no,它不能。

确定程序是否没有什么比运行它更复杂。

为什么需要控制内存缓存?如果绝对必要,请考虑使用TMPFS文件系统或使用Compcache(压缩RAM块设备)

它不会做 ,因为其他答案所说。但如果你真的意味着:

如果我第二次叫它,而且 文件已在磁盘缓存中,是 智能智能足以未读取它 从磁盘第二次?

...然后答案是yes 1 。这就是磁盘缓存的工作原理。


1。只要有问题的文件系统使用页面缓存,无论如何。

It will be fast as hell, but it won't be a no-op (if it were, there would be legit reasons for syscalls to do unexpected things instead of their promised functions...). However, depending on the filesystem driver used, and the kernel options, you could be running close to the memory bandwidth.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top