[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v4 09/10] Add the function of colo_bitmap_clear_diry.
From: |
Dr. David Alan Gilbert |
Subject: |
Re: [PATCH v4 09/10] Add the function of colo_bitmap_clear_diry. |
Date: |
Thu, 25 Mar 2021 18:07:42 +0000 |
User-agent: |
Mutt/2.0.6 (2021-03-06) |
* leirao (lei.rao@intel.com) wrote:
> From: "Rao, Lei" <lei.rao@intel.com>
>
> When we use continuous dirty memory copy for flushing ram cache on
> secondary VM, we can also clean up the bitmap of contiguous dirty
> page memory. This also can reduce the VM stop time during checkpoint.
>
> Signed-off-by: Lei Rao <lei.rao@intel.com>
> ---
> migration/ram.c | 29 +++++++++++++++++++++++++----
> 1 file changed, 25 insertions(+), 4 deletions(-)
>
> diff --git a/migration/ram.c b/migration/ram.c
> index a258466..ae1e659 100644
> --- a/migration/ram.c
> +++ b/migration/ram.c
> @@ -855,6 +855,30 @@ unsigned long colo_bitmap_find_dirty(RAMState *rs,
> RAMBlock *rb,
> return first;
> }
>
> +/**
> + * colo_bitmap_clear_dirty:when we flush ram cache to ram, we will use
> + * continuous memory copy, so we can also clean up the bitmap of contiguous
> + * dirty memory.
> + */
> +static inline bool colo_bitmap_clear_dirty(RAMState *rs,
> + RAMBlock *rb,
> + unsigned long start,
> + unsigned long num)
> +{
> + bool ret;
> + unsigned long i = 0;
> +
> + qemu_mutex_lock(&rs->bitmap_mutex);
Please use QEMU_LOCK_GUARD(&rs->bitmap_mutex);
> + for (i = 0; i < num; i++) {
> + ret = test_and_clear_bit(start + i, rb->bmap);
> + if (ret) {
> + rs->migration_dirty_pages--;
> + }
> + }
> + qemu_mutex_unlock(&rs->bitmap_mutex);
> + return ret;
This implementation is missing the clear_bmap code that
migration_bitmap_clear_dirty has.
I think that's necessary now.
Are we sure there's any benefit in this?
Dave
> +}
> +
> static inline bool migration_bitmap_clear_dirty(RAMState *rs,
> RAMBlock *rb,
> unsigned long page)
> @@ -3700,7 +3724,6 @@ void colo_flush_ram_cache(void)
> void *src_host;
> unsigned long offset = 0;
> unsigned long num = 0;
> - unsigned long i = 0;
>
> memory_global_dirty_log_sync();
> WITH_RCU_READ_LOCK_GUARD() {
> @@ -3722,9 +3745,7 @@ void colo_flush_ram_cache(void)
> num = 0;
> block = QLIST_NEXT_RCU(block, next);
> } else {
> - for (i = 0; i < num; i++) {
> - migration_bitmap_clear_dirty(ram_state, block, offset +
> i);
> - }
> + colo_bitmap_clear_dirty(ram_state, block, offset, num);
> dst_host = block->host
> + (((ram_addr_t)offset) << TARGET_PAGE_BITS);
> src_host = block->colo_cache
> --
> 1.8.3.1
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
- [PATCH v4 00/10] Fixed some bugs and optimized some codes for COLO, leirao, 2021/03/24
- [PATCH v4 01/10] Remove some duplicate trace code., leirao, 2021/03/24
- [PATCH v4 02/10] Fix the qemu crash when guest shutdown during checkpoint, leirao, 2021/03/24
- [PATCH v4 03/10] Optimize the function of filter_send, leirao, 2021/03/24
- [PATCH v4 04/10] Remove migrate_set_block_enabled in checkpoint, leirao, 2021/03/24
- [PATCH v4 05/10] Add a function named packet_new_nocopy for COLO., leirao, 2021/03/24
- [PATCH v4 06/10] Add the function of colo_compare_cleanup, leirao, 2021/03/24
- [PATCH v4 07/10] Reset the auto-converge counter at every checkpoint., leirao, 2021/03/24
- [PATCH v4 08/10] Reduce the PVM stop time during Checkpoint, leirao, 2021/03/24
- [PATCH v4 09/10] Add the function of colo_bitmap_clear_diry., leirao, 2021/03/24
- Re: [PATCH v4 09/10] Add the function of colo_bitmap_clear_diry.,
Dr. David Alan Gilbert <=
- [PATCH v4 10/10] Fixed calculation error of pkt->header_size in fill_pkt_tcp_info(), leirao, 2021/03/24