Message ID | 20231019110724.15324-8-quintela@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Migration compression cleanup | expand |
Juan Quintela <quintela@redhat.com> writes: > So we can move more compression_counters stuff to ram-compress.c. > Create compression_counters struct to add the stuff that was on > MigrationState. > > Reviewed-by: Lukas Straub <lukasstraub2@web.de> > Signed-off-by: Juan Quintela <quintela@redhat.com> > --- > migration/ram-compress.h | 1 + > migration/ram.h | 1 - > migration/ram-compress.c | 42 +++++++++++++++++++++++++++++++++++++++- > migration/ram.c | 29 +-------------------------- > 4 files changed, 43 insertions(+), 30 deletions(-) > > diff --git a/migration/ram-compress.h b/migration/ram-compress.h > index b228640092..76dacd3ec7 100644 > --- a/migration/ram-compress.h > +++ b/migration/ram-compress.h > @@ -71,5 +71,6 @@ void decompress_data_with_multi_threads(QEMUFile *f, void *host, int len); > void populate_compress(MigrationInfo *info); > uint64_t ram_compressed_pages(void); > void update_compress_thread_counts(const CompressParam *param, int bytes_xmit); > +void compress_update_rates(uint64_t page_count); > > #endif > diff --git a/migration/ram.h b/migration/ram.h > index 145c915ca7..9cf8f58e97 100644 > --- a/migration/ram.h > +++ b/migration/ram.h > @@ -34,7 +34,6 @@ > #include "io/channel.h" > > extern XBZRLECacheStats xbzrle_counters; > -extern CompressionStats compression_counters; > > /* Should be holding either ram_list.mutex, or the RCU lock. */ > #define RAMBLOCK_FOREACH_NOT_IGNORED(block) \ > diff --git a/migration/ram-compress.c b/migration/ram-compress.c > index f56e1f8e69..af42cab0fe 100644 > --- a/migration/ram-compress.c > +++ b/migration/ram-compress.c > @@ -41,7 +41,20 @@ > #include "ram.h" > #include "migration-stats.h" > > -CompressionStats compression_counters; Could we remove CompressionStats from migration.json now? Anyway: Reviewed-by: Fabiano Rosas <farosas@suse.de>
Fabiano Rosas <farosas@suse.de> wrote: > Juan Quintela <quintela@redhat.com> writes: > >> So we can move more compression_counters stuff to ram-compress.c. >> Create compression_counters struct to add the stuff that was on >> MigrationState. >> >> Reviewed-by: Lukas Straub <lukasstraub2@web.de> >> Signed-off-by: Juan Quintela <quintela@redhat.com> >> --- >> migration/ram-compress.h | 1 + >> migration/ram.h | 1 - >> migration/ram-compress.c | 42 +++++++++++++++++++++++++++++++++++++++- >> migration/ram.c | 29 +-------------------------- >> 4 files changed, 43 insertions(+), 30 deletions(-) >> >> diff --git a/migration/ram-compress.h b/migration/ram-compress.h >> index b228640092..76dacd3ec7 100644 >> --- a/migration/ram-compress.h >> +++ b/migration/ram-compress.h >> @@ -71,5 +71,6 @@ void decompress_data_with_multi_threads(QEMUFile *f, void *host, int len); >> void populate_compress(MigrationInfo *info); >> uint64_t ram_compressed_pages(void); >> void update_compress_thread_counts(const CompressParam *param, int bytes_xmit); >> +void compress_update_rates(uint64_t page_count); >> >> #endif >> diff --git a/migration/ram.h b/migration/ram.h >> index 145c915ca7..9cf8f58e97 100644 >> --- a/migration/ram.h >> +++ b/migration/ram.h >> @@ -34,7 +34,6 @@ >> #include "io/channel.h" >> >> extern XBZRLECacheStats xbzrle_counters; >> -extern CompressionStats compression_counters; >> >> /* Should be holding either ram_list.mutex, or the RCU lock. */ >> #define RAMBLOCK_FOREACH_NOT_IGNORED(block) \ >> diff --git a/migration/ram-compress.c b/migration/ram-compress.c >> index f56e1f8e69..af42cab0fe 100644 >> --- a/migration/ram-compress.c >> +++ b/migration/ram-compress.c >> @@ -41,7 +41,20 @@ >> #include "ram.h" >> #include "migration-stats.h" >> >> -CompressionStats compression_counters; > > Could we remove CompressionStats from migration.json now? No. void populate_compress(MigrationInfo *info) { if (!migrate_compress()) { return; } info->compression = g_malloc0(sizeof(*info->compression)); info->compression->pages = compression_counters.pages; info->compression->busy = compression_counters.busy; info->compression->busy_rate = compression_counters.busy_rate; info->compression->compressed_size = compression_counters.compressed_size; info->compression->compression_rate = compression_counters.compression_rate; } I know that at this point you hate backwards compatibility O:-) > Anyway: > Reviewed-by: Fabiano Rosas <farosas@suse.de> Thanks.
diff --git a/migration/ram-compress.h b/migration/ram-compress.h index b228640092..76dacd3ec7 100644 --- a/migration/ram-compress.h +++ b/migration/ram-compress.h @@ -71,5 +71,6 @@ void decompress_data_with_multi_threads(QEMUFile *f, void *host, int len); void populate_compress(MigrationInfo *info); uint64_t ram_compressed_pages(void); void update_compress_thread_counts(const CompressParam *param, int bytes_xmit); +void compress_update_rates(uint64_t page_count); #endif diff --git a/migration/ram.h b/migration/ram.h index 145c915ca7..9cf8f58e97 100644 --- a/migration/ram.h +++ b/migration/ram.h @@ -34,7 +34,6 @@ #include "io/channel.h" extern XBZRLECacheStats xbzrle_counters; -extern CompressionStats compression_counters; /* Should be holding either ram_list.mutex, or the RCU lock. */ #define RAMBLOCK_FOREACH_NOT_IGNORED(block) \ diff --git a/migration/ram-compress.c b/migration/ram-compress.c index f56e1f8e69..af42cab0fe 100644 --- a/migration/ram-compress.c +++ b/migration/ram-compress.c @@ -41,7 +41,20 @@ #include "ram.h" #include "migration-stats.h" -CompressionStats compression_counters; +static struct { + int64_t pages; + int64_t busy; + double busy_rate; + int64_t compressed_size; + double compression_rate; + /* compression statistics since the beginning of the period */ + /* amount of count that no free thread to compress data */ + uint64_t compress_thread_busy_prev; + /* amount bytes after compression */ + uint64_t compressed_size_prev; + /* amount of compressed pages */ + uint64_t compress_pages_prev; +} compression_counters; static CompressParam *comp_param; static QemuThread *compress_threads; @@ -518,3 +531,30 @@ void update_compress_thread_counts(const CompressParam *param, int bytes_xmit) compression_counters.pages++; } +void compress_update_rates(uint64_t page_count) +{ + if (!migrate_compress()) { + return; + } + compression_counters.busy_rate = (double)(compression_counters.busy - + compression_counters.compress_thread_busy_prev) / page_count; + compression_counters.compress_thread_busy_prev = + compression_counters.busy; + + double compressed_size = compression_counters.compressed_size - + compression_counters.compressed_size_prev; + if (compressed_size) { + double uncompressed_size = (compression_counters.pages - + compression_counters.compress_pages_prev) * + qemu_target_page_size(); + + /* Compression-Ratio = Uncompressed-size / Compressed-size */ + compression_counters.compression_rate = + uncompressed_size / compressed_size; + + compression_counters.compress_pages_prev = + compression_counters.pages; + compression_counters.compressed_size_prev = + compression_counters.compressed_size; + } +} diff --git a/migration/ram.c b/migration/ram.c index a3c5fcc549..bfb2f02351 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -369,13 +369,6 @@ struct RAMState { bool xbzrle_started; /* Are we on the last stage of migration */ bool last_stage; - /* compression statistics since the beginning of the period */ - /* amount of count that no free thread to compress data */ - uint64_t compress_thread_busy_prev; - /* amount bytes after compression */ - uint64_t compressed_size_prev; - /* amount of compressed pages */ - uint64_t compress_pages_prev; /* total handled target pages at the beginning of period */ uint64_t target_page_count_prev; @@ -945,7 +938,6 @@ uint64_t ram_get_total_transferred_pages(void) static void migration_update_rates(RAMState *rs, int64_t end_time) { uint64_t page_count = rs->target_page_count - rs->target_page_count_prev; - double compressed_size; /* calculate period counters */ stat64_set(&mig_stats.dirty_pages_rate, @@ -973,26 +965,7 @@ static void migration_update_rates(RAMState *rs, int64_t end_time) rs->xbzrle_pages_prev = xbzrle_counters.pages; rs->xbzrle_bytes_prev = xbzrle_counters.bytes; } - - if (migrate_compress()) { - compression_counters.busy_rate = (double)(compression_counters.busy - - rs->compress_thread_busy_prev) / page_count; - rs->compress_thread_busy_prev = compression_counters.busy; - - compressed_size = compression_counters.compressed_size - - rs->compressed_size_prev; - if (compressed_size) { - double uncompressed_size = (compression_counters.pages - - rs->compress_pages_prev) * TARGET_PAGE_SIZE; - - /* Compression-Ratio = Uncompressed-size / Compressed-size */ - compression_counters.compression_rate = - uncompressed_size / compressed_size; - - rs->compress_pages_prev = compression_counters.pages; - rs->compressed_size_prev = compression_counters.compressed_size; - } - } + compress_update_rates(page_count); } /*