I used strace to collect the writes, and as far as I can tell they are aligned to the cluster size (64K). Below are some examples...
1520414 pwritev(35, [{iov_base="\5\277z\314\24\305\177\r\340\327\f:e\222\10\33\374\232Q;FuN\t\0\0\325\275\0\0\0\0"..., iov_len=4096}, {iov_base="v\24\324\337\347\364i\26\216\202\277\361\262N\23\22Q\360\360\234\366\360J\1\0\20\325\275\0\0\0\0"..., iov_len=61440}], 2, 326696960 <unfinished ...> 1520424 pwrite64(35, "\200\263\303V)\2779Zpv\30Q\203\2142\24\316\16\353.\4\251T\35\331av\376\252}J\33"..., 65536, 381353984 <unfinished ...> 1520424 pwrite64(35, "\0\0\333\204\0\0\0\0\nT\0a\17JR\v\201\n\33\302\301\230(\16P\341\2\263\n2\253\22"..., 65536, 381419520 <unfinished ...> 1520419 pwrite64(35, "\220\255\361.\v$C1\2625\26\217\10\315\22\17\266\306\t\367\25\22\274\16\3268\206\333\275\206F\22"..., 65536, 381485056 <unfinished ...> 1520424 pwrite64(35, "Z\224\265`\325t0\2\0\0005\271\1\0\0\0Q\266\367\"\323:\247\f\0\0\205\207\1\0\0\0"..., 65536, 381550592 <unfinished ...> 1520419 pwritev(35, [{iov_base="M=Fsw\234pd\0\09\32\1\0\0\0\365\310#V\\\303\356\25\36\371I\246Y\255\202\6"..., iov_len=61440}, {iov_base="\314\242k\370\345;w\22\0\3609\32\1\0\0\0\213n\210#\225\206)\31\321\215+m\16\237\347\36"..., iov_len=4096}], 2, 381616128 <unfinished ...> On Wed, Aug 26, 2020 at 2:00 PM Alberto Garcia <be...@igalia.com> wrote: > On Wed 26 Aug 2020 03:18:32 PM CEST, Kevin Wolf wrote: > >> My understanding is that writing 4K blocks requires a > >> read-modify-write because you must fetch a complete cluster from > >> deeper in the overlay chain before writing to the active > >> overlay. However, this does not explain the drop in performance when > >> writing 64K blocks. > > Your understanding is correct. Apart from what Kevin wrote, I assume > that the write requests are always aligned to the cluster size, is that > right? > > Berto >