[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 19/20] memory: introduce total_dirty_pages to stat dirty pages
From: |
Juan Quintela |
Subject: |
[PULL 19/20] memory: introduce total_dirty_pages to stat dirty pages |
Date: |
Mon, 1 Nov 2021 23:09:11 +0100 |
From: Hyman Huang(黄勇) <huangy81@chinatelecom.cn>
introduce global var total_dirty_pages to stat dirty pages
along with memory_global_dirty_log_sync.
Signed-off-by: Hyman Huang(黄勇) <huangy81@chinatelecom.cn>
Reviewed-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
include/exec/ram_addr.h | 9 +++++++++
migration/dirtyrate.c | 7 +++++++
2 files changed, 16 insertions(+)
diff --git a/include/exec/ram_addr.h b/include/exec/ram_addr.h
index 45c913264a..64fb936c7c 100644
--- a/include/exec/ram_addr.h
+++ b/include/exec/ram_addr.h
@@ -26,6 +26,8 @@
#include "exec/ramlist.h"
#include "exec/ramblock.h"
+extern uint64_t total_dirty_pages;
+
/**
* clear_bmap_size: calculate clear bitmap size
*
@@ -373,6 +375,10 @@ static inline void
cpu_physical_memory_set_dirty_lebitmap(unsigned long *bitmap,
qatomic_or(
&blocks[DIRTY_MEMORY_MIGRATION][idx][offset],
temp);
+ if (unlikely(
+ global_dirty_tracking & GLOBAL_DIRTY_DIRTY_RATE)) {
+ total_dirty_pages += ctpopl(temp);
+ }
}
if (tcg_enabled()) {
@@ -403,6 +409,9 @@ static inline void
cpu_physical_memory_set_dirty_lebitmap(unsigned long *bitmap,
for (i = 0; i < len; i++) {
if (bitmap[i] != 0) {
c = leul_to_cpu(bitmap[i]);
+ if (unlikely(global_dirty_tracking & GLOBAL_DIRTY_DIRTY_RATE))
{
+ total_dirty_pages += ctpopl(c);
+ }
do {
j = ctzl(c);
c &= ~(1ul << j);
diff --git a/migration/dirtyrate.c b/migration/dirtyrate.c
index f92c4b498e..17b3d2cbb5 100644
--- a/migration/dirtyrate.c
+++ b/migration/dirtyrate.c
@@ -28,6 +28,13 @@
#include "sysemu/runstate.h"
#include "exec/memory.h"
+/*
+ * total_dirty_pages is procted by BQL and is used
+ * to stat dirty pages during the period of two
+ * memory_global_dirty_log_sync
+ */
+uint64_t total_dirty_pages;
+
typedef struct DirtyPageRecord {
uint64_t start_pages;
uint64_t end_pages;
--
2.33.1
- [PULL 09/20] migration: Add migrate_add_blocker_internal(), (continued)
- [PULL 09/20] migration: Add migrate_add_blocker_internal(), Juan Quintela, 2021/11/01
- [PULL 10/20] dump-guest-memory: Block live migration, Juan Quintela, 2021/11/01
- [PULL 11/20] memory: Introduce replay_discarded callback for RamDiscardManager, Juan Quintela, 2021/11/01
- [PULL 12/20] virtio-mem: Implement replay_discarded RamDiscardManager callback, Juan Quintela, 2021/11/01
- [PULL 13/20] migration/ram: Handle RAMBlocks with a RamDiscardManager on the migration source, Juan Quintela, 2021/11/01
- [PULL 14/20] virtio-mem: Drop precopy notifier, Juan Quintela, 2021/11/01
- [PULL 18/20] migration/ram: Handle RAMBlocks with a RamDiscardManager on background snapshots, Juan Quintela, 2021/11/01
- [PULL 07/20] migration/dirtyrate: implement dirty-ring dirtyrate calculation, Juan Quintela, 2021/11/01
- [PULL 19/20] memory: introduce total_dirty_pages to stat dirty pages,
Juan Quintela <=
- [PULL 20/20] migration/dirtyrate: implement dirty-bitmap dirtyrate calculation, Juan Quintela, 2021/11/01
- [PULL 16/20] migration: Simplify alignment and alignment checks, Juan Quintela, 2021/11/01
- [PULL 15/20] migration/postcopy: Handle RAMBlocks with a RamDiscardManager on the destination, Juan Quintela, 2021/11/01
- [PULL 17/20] migration/ram: Factor out populating pages readable in ram_block_populate_pages(), Juan Quintela, 2021/11/01
- Re: [PULL 00/20] Migration 20211031 patches, Richard Henderson, 2021/11/02