Not true, you still need fsync in direct I/O to ensure durability in power loss situations. Some drives have write caches that means acknowledged writes live in non-volatile memory. So maybe the perf is wildly better because you’re sacrificing durability?
/// Even when using direct I/O, `fsync` is still necessary, as it ensures the device itself has flushed any internal caches.
async fn sync(&self) {
let (fut, fut_ctl) = SignalFuture::new();
self.sender.send(Request::Sync { res: fut_ctl }).unwrap();
fut.await
}
Full code here:https://github.com/wilsonzlin/blobd/blob/master/libblobd-dir...
200ms seems fairly reasonable to me once we factor in all of the other aspects of S3. A lot of machines would have to die at Amazon for your data to become at risk.
Also for the descried issue of small images for a frontend, nobody would serve directly from S3 without a caching layer on top.
It's a interesting read for fun, but I am not sure what it solves in the end.