我知道当我使用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:如何使异步写入安全地持久化到设备介质而不是设备缓存(没有电池支持的缓存)。