From: Mark Trumpold <markt@netqa.com>
To: Stefan Hajnoczi <stefanha@gmail.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
"markt@tachyon.net" <markt@tachyon.net>
Subject: Re: [Qemu-devel] 'qemu-nbd' explicit flush
Date: Fri, 07 Jun 2013 06:00:21 -0800 [thread overview]
Message-ID: <CDD7249D.8708%markt@netqa.com> (raw)
In-Reply-To: <20130529074215.GB20199@stefanha-thinkpad.redhat.com>
On 5/28/13 11:42 PM, "Stefan Hajnoczi" <stefanha@gmail.com> wrote:
>On Tue, May 28, 2013 at 06:00:08PM +0000, Mark Trumpold wrote:
>>
>> >-----Original Message-----
>> >From: Stefan Hajnoczi [mailto:stefanha@gmail.com]
>> >Sent: Monday, May 27, 2013 05:36 AM
>> >To: 'Mark Trumpold'
>> >Cc: 'Paolo Bonzini', qemu-devel@nongnu.org, markt@tachyon.net
>> >Subject: Re: 'qemu-nbd' explicit flush
>> >
>> >On Sat, May 25, 2013 at 09:42:08AM -0800, Mark Trumpold wrote:
>> >> On 5/24/13 1:05 AM, "Stefan Hajnoczi" <stefanha@gmail.com> wrote:
>> >> >On Thu, May 23, 2013 at 09:58:31PM +0000, Mark Trumpold wrote:
>> >> >One thing to be careful of is whether these operations are
>>asynchronous.
>> >> >The signal is asynchronous, you have no way of knowing when
>>qemu-nbd is
>> >> >finished flushing to the physical disk.
>> >>
>> >> Right, of course. I missed the obvious.
>> >
>> >I missed something too. Paolo may have already hinted at this when he
>> >posted a dd oflag=sync command-line option:
>> >
>> >blockdev --flushbufs is the wrong tool because ioctl(BLKFLSBUF) only
>> >writes out dirty pages to the block device. It does *not* guarantee to
>> >send a flush request to the device.
>> >
>> >Therefore, the underlying image file may not be put into an up-to-date
>> >state by qemu-nbd.
>> >
>> >
>> >I suggest trying the following instead of blockdev --flushbufs:
>> >
>> > python -c 'import os; os.fsync(open("/dev/loopX", "r+b"))'
>> >
>> >This should do the same as blockdev --flushbufs *plus* it sends and
>> >waits for the NBD FLUSH command.
>> >
>> >You may have to play with this command-line a little but the main idea
>> >is to open the block device and fsync it.
>> >
>> >Stefan
>> >
>>
>> Hi Stefan,
>>
>> One of my early experiments was adding a command line option to
>>'qemu-nbd' that did an open on 'device' (similar to the -c option), and
>>then calling 'fsync' on the 'device'. By itself, I did not get a
>>complete flush to disk. Was I missing something?
>>
>> Empirically, the signal solution (blockdev --flushbufs plus
>>'bdrv_flush_all') was keeping my disk consistent. My unit test
>>exercises the flush and snapshot pretty rigorously; that is, it never
>>passed before with 'qemu-nbd --cache=writeback ...'. However, I did not
>>want to rely on 'sleep' for the race condition.
>>
>> Is there any opportunity with the nbd client socket interface? The
>>advantage for me there is not modifying 'qemu-nbd' source.
>
>I'm suggesting that you don't need to modify qemu-nbd. If your host is
>running nbd.ko with flush support, then it should be enough to open the
>device and issue fsync(2).
>
>You can verify this using tcpdump(8) and checking that the NBD FLUSH
>command is really being sent by the host kernel. If not, double check
>you're using the latest nbd.ko.
>
>Stefan
Stefan,
I tried the 'fsync' approach. It apparently has no effect with my
3.3.1 Linux kernel and patch. Changing kernels is not an option for me
at the moment, so I will revisit when we have an opportunity to upgrade
kernels, but for the moment I'll have to stick with 'cache=writethrough'.
Thank you again for your attention and help.
Best Regards,
Mark T.
next prev parent reply other threads:[~2013-06-07 13:00 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-28 18:00 [Qemu-devel] 'qemu-nbd' explicit flush Mark Trumpold
2013-05-29 7:42 ` Stefan Hajnoczi
2013-05-29 15:29 ` Mark Trumpold
2013-06-07 14:00 ` Mark Trumpold [this message]
-- strict thread matches above, loose matches on Subject: below --
2013-05-23 23:35 Mark Trumpold
2013-05-24 9:06 ` Stefan Hajnoczi
2013-05-23 21:58 Mark Trumpold
2013-05-24 9:05 ` Stefan Hajnoczi
2013-05-25 17:42 ` Mark Trumpold
2013-05-27 12:36 ` Stefan Hajnoczi
2013-05-24 12:10 ` Paolo Bonzini
2013-05-22 16:10 Mark Trumpold
2013-05-21 20:01 Mark Trumpold
2013-05-22 9:47 ` Stefan Hajnoczi
2013-05-22 11:07 ` Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CDD7249D.8708%markt@netqa.com \
--to=markt@netqa.com \
--cc=markt@tachyon.net \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).