Performance and robustness

When you design or configure a filesystem, you have to balance performance and robustness.

Robustness involves synchronizing the user
operations to the implementation of that operation to the successful
response to the user.

For example, the creation of a new file—via
creat()—may
perform all the physical disk writes that are necessary to add
that new filename into a directory on the disk filesystem and only
then reply back to the client.

Performance may decouple the actual implementation of the operation from the reply.

For example, writing data into a file—via
write()—might
immediately reply to the client,
but leave the data in a write-behind in-memory cache in an attempt to
merge with later writes and construct a large, contiguous run for a
single sequential disk access (but until that occurs, the data is
vulnerable to loss if the power fails).

You must decide on the balance between robustness and performance
that's appropriate for your installation, expectations, and requirements.