writes a few (often around 4) blocks of (I think) directory data to the
drive, so if you only fwrite() one block it ends up writing 1 block of
"payload" and 4 blocks of "admin". Using bigger blocks makes it faster;
an even bigger block than this makes it a little faster still, but not
significantly.
The extra block writing is seemingly triggered by fwrite() calling
ext4_block_cache_write_back(..., 0). A better fix is probably to call
this another way, at the end of the file copy.
#ifdef DCPOMATIC_LINUX
static PolkitAuthority* polkit_authority = 0;
#endif
-static uint64_t const block_size = 4096;
+/* Use quite a big block size here, as ext4's fwrite() has quite a bit of overhead */
+static uint64_t const block_size = 4096 * 4096;
static Nanomsg* nanomsg = 0;
#define SHORT_TIMEOUT 100
uint8_t* buffer = new uint8_t[block_size];
Digester digester;
- int progress_frequency = 5000;
+ int progress_frequency = 1;
int progress_count = 0;
uint64_t remaining = file_size (from);
while (remaining > 0) {