- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在开发一个按顺序写入大文件(根本不读取)的应用程序,我想使用 posix_fadvise()
来优化文件系统行为。
联机帮助页中的函数描述表明最合适的策略是 POSIX_FADV_SEQUENTIAL
。然而,Linux 实现描述怀疑:
Under Linux,
POSIX_FADV_NORMAL
sets the readahead window to the default size for the backing device;POSIX_FADV_SEQUENTIAL
doubles this size, andPOSIX_FADV_RANDOM
disables file readahead entirely.
因为我只写数据(也可能覆盖文件),所以我不希望有任何预读。然后我应该坚持使用我的 POSIX_FADV_SEQUENTIAL
还是使用 POSIX_FADV_RANDOM
来禁用它?
其他选项如何,例如 POSIX_FADV_NOREUSE
?或者根本不使用 posix_fadvise()
进行写作?
最佳答案
大多数 posix_fadvise()
标志(例如 POSIX_FADV_SEQUENTIAL
和 POSIX_FADV_RANDOM
)都是关于预读而不是写入的提示。
Linus 有一些建议 here和 here关于获得良好的顺序写入性能。这个想法是将文件分成大的 (8MB) 窗口,然后循环执行:
write()
写出窗口N;sync_file_range(..., SYNC_FILE_RANGE_WRITE)
请求异步写出窗口 Nsync_file_range(..., SYNC_FILE_RANGE_WAIT_BEFORE | SYNC_FILE_RANGE_WRITE | SYNC_FILE_RANGE_WAIT_AFTER)
posix_fadvise(..., POSIX_FADV_DONTNEED)
从页面缓存中删除窗口 N-1>这样,页面缓存中的数据量永远不会超过两个窗口,但在填充下一部分时,内核仍会将页面缓存的一部分写入磁盘。
关于c - 顺序文件写入的 posix_fadvise() 参数是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3755765/
我有以下用于打开所有文件的代码: int ret= open(zFile, flags, mode); posix_fadvise (ret, 0, 0, POSIX_FADV_RANDOM); 而p
我很好奇:当我将文件的内容读入内存和/或处理它并且我要取消链接(删除)它时,在关闭之前对 posix_fadvise(POSIX_FADV_NOREUSE) 有用吗文件?或者(Linux-)内核会自动
我正在开发一个按顺序写入大文件(根本不读取)的应用程序,我想使用 posix_fadvise() 来优化文件系统行为。 联机帮助页中的函数描述表明最合适的策略是 POSIX_FADV_SEQUENTI
我使用的是Android NDK版本:r9c 我需要 posix_fadvise() 来建议操作系统不要缓存文件,我打开它是为了绕过缓存并在需要读/写时强制对存储设备进行 I/O 访问这个文件。 我没
在运行 Linux 内核版本 2.6.18-194.26.1.el5 的 CentOS 5.5 机器上,我注意到 posix_fadvise(WILLNEED) 使读取 60K 文件的速度比普通 IO
我有一个通常在整个块设备上运行的脚本,如果读取的每个块都被缓存,它将驱逐其他应用程序正在使用的数据。为了防止这种情况发生,我添加了对使用 mmap(2) 和 posix_fadvise(2) 的支持,
我在linux下做一个项目,需要使用多线程读/写同一个fd。我想使用 posix_fadvise 来释放页面缓存。 当另一个线程正在读取或写入同一个 fd 时,我可以调用 posix_fadvise
我是一名优秀的程序员,十分优秀!