我知道当我使用write()
+ fsync()
(或O_SYNC
+ write()
,我认为它们是相同的ref #1 ref #2)编写文件时,这意味着我正在使用阻塞同步 I/O,如果write()
(with O_SYNC
) 或fsync()
返回,则意味着数据安全地保存在设备介质上(例如,用于 SSD 的 TLC NAND)而不是设备缓存(例如,SSD 中的 DDRAM)。
而如果我使用libaio
呢?(因为我想确保libaio发出的写入是在存储介质上而不是在设备缓存上。也就是说,我想io_getevents()
返回时,它可能不确定写入在存储介质上,可能只是在设备上缓存)
- 问题 1:是否
fsync()
专门用于同步 I/O? - 问题2:是
fsync()
在io_submit()
未定义行为之后? - 问题 3:如何使异步写入安全地持久化到设备介质而不是设备缓存(没有电池支持的缓存)。