qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Max Reitz <mreitz@redhat.com>
To: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>,
	qemu-block@nongnu.org
Cc: fam@euphon.net, kwolf@redhat.com, eesposit@redhat.com,
	qemu-devel@nongnu.org, stefanha@redhat.com, pbonzini@redhat.com
Subject: Re: [PATCH v2 5/9] block/write-threshold: don't use aio context lock
Date: Wed, 5 May 2021 18:09:12 +0200	[thread overview]
Message-ID: <ec4d641b-d73b-f0f4-b320-4e25763c38b1@redhat.com> (raw)
In-Reply-To: <20210504082553.20377-6-vsementsov@virtuozzo.com>

On 04.05.21 10:25, Vladimir Sementsov-Ogievskiy wrote:
> Instead of relying on aio context lock, let's make use of atomic
> operations.
> 
> The tricky place is bdrv_write_threshold_check_write(): we want
> atomically unset bs->write_threshold_offset iff
>    offset + bytes > bs->write_threshold_offset
> We don't have such atomic operation, so let's go in a loop:

This could also be solved by untangling the overloaded meaning of 
write_threshold_offset – if we had an additional boolean 
write_threshold_check, then this wouldn’t be a problem, and we could do 
this:

if (end > bdrv_write_threshold_get(bs)) {
     if (qatomic_xchg(&bs->write_threshold_check, false) == true) {
         qapi_event_send(...);
     }
}

However, the problem then becomes thinking about the memory access 
semantics, because if some other thread sets the threshold offset and 
enables the threshold check, we need to ensure that we see the updated 
offset here...

So I suppose your loop is simpler then.

> 1. fetch wtr atomically
> 2. if condition satisfied, try cmpxchg (if not satisfied, we are done,
>     don't send event)
> 3. if cmpxchg succeeded, we are done (send event), else go to [1]
> 
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
>   block/write-threshold.c | 32 +++++++++++++++++---------------
>   1 file changed, 17 insertions(+), 15 deletions(-)

Reviewed-by: Max Reitz <mreitz@redhat.com>



  reply	other threads:[~2021-05-05 16:56 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-04  8:25 [PATCH v2 0/9] block: refactor write threshold Vladimir Sementsov-Ogievskiy
2021-05-04  8:25 ` [PATCH v2 1/9] block/write-threshold: don't use write notifiers Vladimir Sementsov-Ogievskiy
2021-05-05 12:37   ` Max Reitz
2021-05-05 13:27     ` Vladimir Sementsov-Ogievskiy
2021-05-05 13:35     ` Vladimir Sementsov-Ogievskiy
2021-05-05 14:29       ` Max Reitz
2021-05-04  8:25 ` [PATCH v2 2/9] block: drop " Vladimir Sementsov-Ogievskiy
2021-05-05 12:40   ` Max Reitz
2021-05-04  8:25 ` [PATCH v2 3/9] test-write-threshold: rewrite test_threshold_(not_)trigger tests Vladimir Sementsov-Ogievskiy
2021-05-05 14:28   ` Max Reitz
2021-05-05 15:20     ` Vladimir Sementsov-Ogievskiy
2021-05-04  8:25 ` [PATCH v2 4/9] block/write-threshold: drop extra APIs Vladimir Sementsov-Ogievskiy
2021-05-05 14:41   ` Max Reitz
2021-05-04  8:25 ` [PATCH v2 5/9] block/write-threshold: don't use aio context lock Vladimir Sementsov-Ogievskiy
2021-05-05 16:09   ` Max Reitz [this message]
2021-05-04  8:25 ` [PATCH v2 6/9] test-write-threshold: drop extra tests Vladimir Sementsov-Ogievskiy
2021-05-05 16:11   ` Max Reitz
2021-05-04  8:25 ` [PATCH v2 7/9] test-write-threshold: drop extra TestStruct structure Vladimir Sementsov-Ogievskiy
2021-05-05 16:13   ` Max Reitz
2021-05-04  8:25 ` [PATCH v2 8/9] test-write-threshold: drop extra includes Vladimir Sementsov-Ogievskiy
2021-05-05 16:14   ` Max Reitz
2021-05-04  8:25 ` [PATCH v2 9/9] block/write-threshold: " Vladimir Sementsov-Ogievskiy
2021-05-05 16:23   ` Max Reitz
2021-05-05 20:34     ` Vladimir Sementsov-Ogievskiy
2021-05-06  7:41       ` Max Reitz

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=ec4d641b-d73b-f0f4-b320-4e25763c38b1@redhat.com \
    --to=mreitz@redhat.com \
    --cc=eesposit@redhat.com \
    --cc=fam@euphon.net \
    --cc=kwolf@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    --cc=vsementsov@virtuozzo.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).