Note: "permalinks" may not be as permanent as we would like,
direct links of old sources may well be a few messages off.
On 06/20/2012 10:59 AM, Phil Frost wrote: > On 06/20/2012 10:43 AM, Shaun Thomas wrote: >> "Unfortunately device mapper (LVM) might not support barriers." > > Further, the fsync() latency I observed running ext4 on MD and LVM > (but not DRBD devices) empirically suggest that barriers are working > for DRBD's underlying block device, at least given my understanding > that working barriers are required for a fsync() that really does > flush to non-volatile storage. Just to check my sanity further, I just did a test of a DRBD device directly on a partition of a SATA drive. No LVM, no MD; just a plain SATA drive and DRBD. I reached the same conclusion, DRBD is not observing fsync(), O_SYNC, etc., and it's not for lack of support on the underlying device. Can anyone reproduce? pfrost at storage02:/mnt/synctest$ cat /etc/drbd.d/test.res resource test { device minor 1; net { shared-secret BTawM41lfw8L0RTKBXhOiGK4lWb6dZTqJGNaGJJwF0pCfNhasdfhB5qjBjgZL4O; } on storage01 { disk /dev/sda2; meta-disk internal; address 10.0.0.7:7790; } on storage02 { disk /dev/sda2; meta-disk internal; address 10.0.0.9:7790; } } pfrost at storage02:~$ sudo drbdadm -- --overwrite-data-of-peer primary test pfrost at storage02:~$ sudo mkfs -t ext4 /dev/drbd/by-res/test pfrost at storage02:~$ sudo mount /dev/drbd/by-res/test -o barrier=1 -t ext4 /mnt/synctest/ pfrost at storage02:~$ cd /mnt/synctest/ pfrost at storage02:/mnt/synctest$ sudo ~/test_fsync -f ./test_fsync Simple write timing: write 0.002742 Compare fsync times on write() and non-write() descriptor: If the times are similar, fsync() can sync data written on a different descriptor. write, fsync, close 0.196210 write, close, fsync 0.175143 Compare one o_sync write to two: one 16k o_sync write 0.175284 two 8k o_sync writes 0.300499 Compare file sync methods with one 8k write: (o_dsync unavailable) open o_sync, write 0.157953 write, fdatasync 0.167023 write, fsync 0.169357 Compare file sync methods with two 8k writes: (o_dsync unavailable) open o_sync, write 0.300676 write, fdatasync 0.182892 write, fsync 0.184106 pfrost at storage02:/mnt/synctest$ cd .. pfrost at storage02:/mnt$ sudo umount synctest/ pfrost at storage02:/mnt$ sudo drbdadm down test pfrost at storage02:/mnt$ sudo mkfs -t ext4 /dev/sda2 pfrost at storage02:/mnt$ cd /mnt/synctest/ pfrost at storage02:/mnt/synctest$ sudo ~/test_fsync -f ./test_fsync Simple write timing: write 0.002765 Compare fsync times on write() and non-write() descriptor: If the times are similar, fsync() can sync data written on a different descriptor. write, fsync, close 8.561847 write, close, fsync 8.490528 Compare one o_sync write to two: one 16k o_sync write 8.365526 two 8k o_sync writes 20.089010 Compare file sync methods with one 8k write: (o_dsync unavailable) open o_sync, write 8.390429 write, fdatasync 8.407142 write, fsync 8.540648 Compare file sync methods with two 8k writes: (o_dsync unavailable) open o_sync, write 16.739327 write, fdatasync 8.423901 write, fsync 8.515552