Remix.run Logo
hoppp 4 days ago

Calling fsync on each commit makes it slower, doesn't it?

Its an extra syscall. It depends on the use-case if its needed or not

senderista 3 days ago | parent | next [-]

You can enqueue fsync as an op in io_uring, using link flag to sequence it after previous ops and drain flag to ensure no new ops are started until it completes.

dgshsg 3 days ago | parent [-]

You still need to wait for it to complete to report the commit success to the user, the cost of syscall itself is rather minor here.

senderista 3 days ago | parent [-]

Avoiding the syscall cost is about maximizing throughput, not minimizing latency. The media's time-to-durability is what it is.

mxey 3 days ago | parent | prev | next [-]

It’s slow because it forces a write to disk. I don’t think the syscall itself matters much.

praptak 4 days ago | parent | prev [-]

That's why big DBs do group commits, trading latency for throughput.