On Tue, Dec 19, 2017 at 4:13 PM, Eric Blake <ebl...@redhat.com> wrote: > Can block devices report an unaligned offset to lseek()? If not, then when > writing an unaligned value to a block device, don't we have to do a > read-modify-write of the larger aligned cluster, and then put lseek() back > to the unaligned boundary, and have extra magic in ftell() to track that we > are at an unaligned position within the block device? But that sounds like > a lot of nasty overhead; and that it would be better to make sure that block > devices can report unaligned lseek() locations (caveat: I haven't tested > what Linux does in that regards).
>From what I observe on Linux, it supports writing at any offset to the block device because it does a read-modify-write behind the scenes, with accompanying nasty overhead (e.g. writes going at 64MB/s instead of an "expected" 180MB/s). I think you can observe this behavior on Linux by piping this program's stdout to a block device (note: must be python3, not python2): #!/usr/bin/python3 import sys block = b" " * 4096 while True: sys.stdout.buffer.write(block) sys.stdout.buffer.write(b" ") and watching the block device activity with `dstat -d -D sdN` - you should see a lot of reads. Ivan -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple