1

在 C 文件 I/O 中,该O_DIRECT标志可用于最小化正在open()编辑的文件的缓存影响。我知道这不是 POSIX 功能,自 2.4.10 版以来一直存在于 Linux 内核中,并且 Linus 通常反对该接口。在 NetBSD 下,它似乎像宣传的那样工作。示例调用:

int fd = 打开(文件名,O_DIRECT);

我正在尝试编写一些低级磁盘基准测试实用程序,并且使用O_DIRECT看起来是测量磁盘和驱动器性能的潜在好方法,而不受操作系统文件系统/块缓存的影响。理想情况下,我希望能够在 Linux、Windows(Cygwin 可以)、Mac OS X 和 BSD 系统上运行基准测试。O_DIRECT就基准测试的可移植性和可靠性而言,绕过操作系统磁盘缓存的最佳方法是什么?有替代品吗?

4

3 回答 3

2

对于 Windows,您应该查看带有标志 FILE_FLAG_NO_BUFFERING 和 FILE_FLAG_WRITE_THROUGH 的 CreateFile 函数。(http://msdn.microsoft.com/en-us/library/aa363858(VS.85).aspx)。但是你必须使用windows函数进行读写:SetFilePointer、WriteFile、ReadFile...

于 2010-03-05T14:02:50.573 回答
1

O_DIRECT 甚至在 Mac OS X 上都不存在(我只是在 /usr/include 中找到它,但它不存在)。至于 Linux,你的工具会做什么 hdparm 没有?

于 2009-05-29T08:13:24.303 回答
1

我认为 Windows 不支持它 - 至少我在 MSDN 中找不到任何提及。这意味着 Cygwin 可能也不支持它,因为 Cygwin 需要使用底层的 Windows 操作系统。

于 2009-05-29T08:17:20.737 回答