Benefits or drawbacks to `truncate` vs `fallocate` for file-based pool

Follow up from my question here:

Evidence says it is possible, and stable, to use a file for a production pool under restricted available options. That question was fully answered and solved, so I’m opening this new, related question.

Doing some research, I found:

If I am going to use a file for a prod pool, it seems I have two options:

  • truncate - creates a sparse file (at least on ext4?) and any data written to it will result in fragments being written to disk
  • fallocate - sparse file, actual addresses reserved, so no fragmenting (at least until possibly an expansion, though looks like an expansion could be made without fragmenting it)

This file in which the zpool would be created is on an ssd. So I’m inclined just to use truncate, so that the controller can wear-level more freely, and, fragmentation doesn’t matter for speed.

Any other consideration I should make?

edit: add link, minor formatting