2

我需要在操作系统块缓存中保留尽可能多的大文件,即使它比我可以放入 ram 的要大,而且我正在不断地读取另一个非常大的文件。ATM 当我从另一个文件流式读取时,我将从系统缓存中删除大块的大型重要文件。

4

6 回答 6

3

在 linux 中,您可以将文件系统挂载为tmpfs类型,如果需要,它使用可用的交换内存作为支持。您应该能够创建一个大于内存大小的文件系统,并且它将优先考虑该文件系统在系统缓存中的内容。

mount -t tmpfs none /mnt/point

见: http: //lxr.linux.no/linux/Documentation/filesystems/tmpfs.txt

您还可以从这些文件中swapiness受益drop_cache/proc/sys/vm

于 2008-09-25T01:26:53.877 回答
3

如果您使用的是 Windows,请考虑使用标志打开您正在扫描的文件

FILE_FLAG_SEQUENTIAL_SCAN

你也可以使用

FILE_FLAG_NO_BUFFERING

对于该文件,但它对您的读取大小和缓冲区对齐施加了一些限制。

于 2008-09-30T17:11:35.210 回答
3

在 Linux 或 Solaris 等 POSIX 系统中,尝试使用 posix_fadvise。

在流文件上,执行以下操作:

posix_fadvise(fd, 0, 0, POSIX_FADV_SEQUENTIAL);
while( bytes > 0 ) {
  bytes = pread(fd, buffer, 64 * 1024, current_pos);
  current_pos += 64 * 1024;
  posix_fadvise(fd, 0, current_pos, POSIX_FADV_DONTNEED);
}

您可以将 POSIX_FADV_WILLNEED 应用于您的其他文件,这应该会提高其内存优先级。

现在,我知道 Windows Vista 和 Server 2008 也可以在内存优先级方面做一些漂亮的事情。可能像 XP 这样的旧版本也可以做更多的基本技巧。但我不知道我脑海中的功能,也没有时间查找它们。

于 2008-09-30T17:21:30.007 回答
1

某些操作系统具有 ramdisk,您可以使用它来留出一段 ram 用于存储,然后将其挂载为文件系统。

但是,我不明白为什么要阻止操作系统缓存文件。你的完整问题对我来说真的没有意义。

于 2008-09-25T01:20:21.617 回答
0

购买更多的内存(它相对便宜!)或让操作系统做它的事情。我想你会发现绕过操作系统会比它的价值更麻烦。操作系统将根据需要缓存尽可能多的文件,直到您的或任何其他应用程序需要内存。

我想你可以尽量减少进程的数量,但购买更多的内存可能会更快。

于 2008-09-25T10:53:10.803 回答
0

mlock() 和 mlockall() 分别将调用进程的部分或全部虚拟地址空间锁定到 RAM 中,防止该内存被分页到交换区域。

(从 MLOCK(2) Linux 手册页复制)

于 2008-09-30T17:07:07.997 回答