qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Juan Quintela <quintela@redhat.com>
To: Peter Xu <peterx@redhat.com>
Cc: qemu-devel@nongnu.org,  Leonardo Bras <leobras@redhat.com>,
	 Hailiang Zhang <zhanghailiang@xfusion.com>,
	 Fiona Ebner <f.ebner@proxmox.com>,
	Stefan Hajnoczi <stefanha@redhat.com>,
	 qemu-block@nongnu.org,  Fam Zheng <fam@euphon.net>
Subject: Re: [PATCH v2 05/20] qemu_file: Use a stat64 for qemu_file_transferred
Date: Tue, 13 Jun 2023 18:12:18 +0200	[thread overview]
Message-ID: <87ttvbe3z1.fsf@secure.mitica> (raw)
In-Reply-To: <ZH4n9jeN6PcoZ3A1@x1n> (Peter Xu's message of "Mon, 5 Jun 2023 14:22:46 -0400")

Peter Xu <peterx@redhat.com> wrote:
> On Tue, May 30, 2023 at 08:39:26PM +0200, Juan Quintela wrote:
>> This way we can read it from any thread.
>> I checked that it gives the same value than the current one.  We never
>> use to qemu_files at the same time.
>> 
>> Signed-off-by: Juan Quintela <quintela@redhat.com>
>
> The follow up patch may be better to be squashed or it's very confusing..

As said before, there used to be a nice:

if (old_counter != new_counter)
   printf(old_counter and new counter)

> Why do we need to convert mostly everything into atomics?  Is it modified
> outside migration thread?

Because we have four users of this stuff:

- io thread: needs it for info migrate basically
- migration_thread: needs it to know when to stop.  qemu_file is
  supposed to only happen here.
- ... until someone called peter decided to create another qemu file for
  preempt.  Current code don't account for this.
- multifd bytes is a completelly diffrent story, that is why it use its
  own atomics.

After this series go in, basically we only update one atomic for each
write (ok two yet, downtime/precopy/postocpy_bytes are still not
integrated).

But there used to be three:
- transferred
- multifd_bytes (for multifd pages)
- downtime/-precopy/postocpy

And we are back to only one (now we use transferred or multifd, never both).

> AFAIR atomic ops are still expensive, and will get more expensive on larger
> hosts,

If you care for performance, you are using multifd.
one atomic every 64 pages is kind ok.

For rate limiting, we do it 10 times a second, and:
a - it shouldn't matter with so few times
b - it is not a regression, we were already updating some
c - correct vs fast any day

And the other big improvement is that after this series, you can use any
counter on any thread.  No need to contorsions to update the rate_limit
that we used to have.

> IOW it'll be good for us to keep non-atomic when possible (and
> that's why when I changed some counters in postcopy work I only changed the
> limited set because then the rest are still accessed in 1 single thread and
> keep running fast).

void ram_transferred_add(uint64_t bytes)
{
    if (runstate_is_running()) {
        stat64_add(&mig_stats.precopy_bytes, bytes);
    } else if (migration_in_postcopy()) {
        stat64_add(&mig_stats.postcopy_bytes, bytes);
    } else {
        stat64_add(&mig_stats.downtime_bytes, bytes);
    }
    stat64_add(&mig_stats.transferred, bytes);
}

That is used everywhere, and I am dropping this to a single atomic.

Later, Juan.



  reply	other threads:[~2023-06-13 16:13 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-30 18:39 [PATCH v2 00/20] Next round of migration atomic counters Juan Quintela
2023-05-30 18:39 ` [PATCH v2 01/20] qemu-file: Rename qemu_file_transferred_ fast -> noflush Juan Quintela
2023-05-30 18:39 ` [PATCH v2 02/20] migration: Change qemu_file_transferred to noflush Juan Quintela
2023-05-30 18:39 ` [PATCH v2 03/20] migration: Use qemu_file_transferred_noflush() for block migration Juan Quintela
2023-05-30 18:39 ` [PATCH v2 04/20] qemu-file: We only call qemu_file_transferred_* on the sending side Juan Quintela
2023-06-05 18:18   ` Peter Xu
2023-06-13 16:02     ` Juan Quintela
2023-06-14 13:36       ` Peter Xu
2023-06-21 22:20         ` Juan Quintela
2023-05-30 18:39 ` [PATCH v2 05/20] qemu_file: Use a stat64 for qemu_file_transferred Juan Quintela
2023-06-05 18:22   ` Peter Xu
2023-06-13 16:12     ` Juan Quintela [this message]
2023-05-30 18:39 ` [PATCH v2 06/20] qemu_file: total_transferred is not used anymore Juan Quintela
2023-06-14 14:52   ` Peter Xu
2023-06-21 23:05     ` Juan Quintela
2023-06-22 14:45       ` Peter Xu
2023-05-30 18:39 ` [PATCH v2 07/20] migration: Use the number of transferred bytes directly Juan Quintela
2023-05-30 18:39 ` [PATCH v2 08/20] qemu_file: Remove unused qemu_file_transferred() Juan Quintela
2023-05-30 18:39 ` [PATCH v2 09/20] qemu-file: Remove _noflush from qemu_file_transferred_noflush() Juan Quintela
2023-05-30 18:39 ` [PATCH v2 10/20] migration: migration_transferred_bytes() don't need the QEMUFile Juan Quintela
2023-05-30 18:39 ` [PATCH v2 11/20] migration: migration_rate_limit_reset() " Juan Quintela
2023-05-30 18:39 ` [PATCH v2 12/20] qemu-file: Simplify qemu_file_get_error() Juan Quintela
2023-05-30 18:39 ` [PATCH v2 13/20] migration: Use migration_transferred_bytes() Juan Quintela
2023-05-30 18:39 ` [PATCH v2 14/20] migration: Remove transferred atomic counter Juan Quintela
2023-05-30 18:39 ` [PATCH v2 15/20] qemu-file: Make qemu_fflush() return errors Juan Quintela
2023-05-30 18:39 ` [PATCH v2 16/20] migration/rdma: Split qemu_fopen_rdma() into input/output functions Juan Quintela
2023-06-14 15:07   ` Peter Xu
2023-05-30 18:39 ` [PATCH v2 17/20] qemu-file: Remove unused qemu_file_mode_is_not_valid() Juan Quintela
2023-05-30 18:39 ` [PATCH v2 18/20] qemu_file: Make qemu_file_is_writable() static Juan Quintela
2023-06-14 15:54   ` Peter Xu
2023-05-30 18:39 ` [PATCH v2 19/20] qemu-file: Simplify qemu_file_shutdown() Juan Quintela
2023-06-14 15:54   ` Peter Xu
2023-05-30 18:39 ` [PATCH v2 20/20] qemu-file: Make qemu_file_get_error_obj() static Juan Quintela
2023-06-14 15:54   ` Peter Xu
2023-05-31  9:10 ` [PATCH v2 00/20] Next round of migration atomic counters Fiona Ebner
2023-05-31 10:22   ` Juan Quintela

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=87ttvbe3z1.fsf@secure.mitica \
    --to=quintela@redhat.com \
    --cc=f.ebner@proxmox.com \
    --cc=fam@euphon.net \
    --cc=leobras@redhat.com \
    --cc=peterx@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    --cc=zhanghailiang@xfusion.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).