[Haskell-cafe] How to move files?

Sven Bartscher sven.bartscher at weltraumschlangen.de
Thu Apr 15 09:58:17 UTC 2021


Am 15.04.21 um 11:27 schrieb ☂Josh Chia (謝任中):
> That would work but may not be the most efficient in all cases. On many 

> systems, /tmp is a tmpfs, which being memory-backed is more efficient 
> than a file on a physical disk or network, so writing to /tmp has 
> performance advantages.

This isn't necessarily relevant in the case the OP describes.

In the case where the target directory is also on tmpfs, writing there 
directly is just as fast as writing to /tmp first. In the case where the 
target directory is on a slower medium it is not more efficient to write 
to /tmp first, because you will still have the performance penalty once 
you copy from /tmp to the target directory.

The latter case might be slower if you first write something to the file 
and later overwrite parts of it with other content or if you decide that 
you don't need the file at all and just delete it instead of copying it. 
But you can prevent even those performance penalties by not calling 
fsync (or close) on the open file before the file contains exactly the 
data you ultimately want. That way the written content will not actually 
be written to the medium before fsync is called and you get pretty much 
the same performance as writing on tmpfs. Though controlling when fsync 
is called might be tricky if the file is not produced by your own code. 
I'm also not sure if Haskell calls fsync implicitly in some cases other 
than closing the file descriptor.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20210415/7e7b6bb9/attachment.sig>

More information about the Haskell-Cafe mailing list