This is the mail archive of the
cygwin
mailing list for the Cygwin project.
Re: Wrong file position after writing 65537 bytes to block device
On Tue, Dec 19, 2017 at 4:13 PM, Eric Blake <eblake@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