我对fsync+感到困惑direct IO。
这样的代码很容易理解:
fd = open(filename, O_RDWR, 00644);
write(fd, data, size);
fsync(fd);
在这种情况下,write()会将数据写入页面缓存,并将fsync所有修改过的页面缓存中引用的数据强制fd写入磁盘设备。
但是如果我们打开一个带有O_DIRECT标志的文件,像这样,
fd = open(filename, O_RDWR|O_DIRECT, 00644);
write(fd, data, size);
fsync(fd);
在这种情况下,write()会绕过页面缓存,直接写入磁盘设备。那么怎么fsync办呢,. 引用的页缓存中没有脏页fd。
如果我们打开一个原始设备,会fsync做什么,
fd = open('/dev/sda', O_RDWR|O_DIRECT, 00644);
write(fd, data, size);
fsync(fd);
在这种情况下,我们打开一个原始设备O_DIRECT,该设备上没有文件系统。在这里做什么sync?