POSIX O_DIRECT vs Windows FILE_FLAG_WRITE_THROUGH& FILE_FLAG_NO_BUFFERING

时间:2013-04-12 12:43:37

标签: file winapi posix device

从我可以收集的内容中,然后在阻止设备文件上使用带有O_DIRECT的POSIX open()的工作方式与将FILE_FLAG_WRITE_THROUGHFILE_FLAG_NO_BUFFERING与{{1}相结合的方式相同在Windows上 - 这是我正确的假设吗?

打开:

  

O_DIRECT 尝试最小化I / O与此文件之间的缓存效果。一般来说,这会降低性能,但它很有用   特殊情况,例如应用程序执行自己的缓存时。   文件I / O直接进出用户空间缓冲区。

Createfile:

  

如果使用 FILE_FLAG_WRITE_THROUGH FILE_FLAG_NO_BUFFERING   还没有指定,所以系统缓存有效,然后   数据被写入系统缓存,但没有被刷新到磁盘   延迟。如果 FILE_FLAG_WRITE_THROUGH FILE_FLAG_NO_BUFFERING   都是指定的,所以系统缓存没有生效,那么   数据立即刷新到磁盘而不通过Windows   系统缓存。操作系统还要求直写   硬盘的本地硬件缓存到持久性媒体。

2 个答案:

答案 0 :(得分:3)

是的,它会在Windows系统中将这两个标志用作POSIX系统中的O_DIRECT,效果非常相似。由于它是两个不同的OS,你可以预期没有完全匹配。但除非您试图准确理解文件系统的工作方式,否则您将从这两个选项中“不要缓冲数据,并尽快将其直接写入磁盘”。

答案 1 :(得分:0)

是的,这是正确的。如果您希望在Node.js中执行此操作并需要对齐缓冲区等,则可以使用https://github.com/ronomon/direct-io