aboutsummaryrefslogtreecommitdiff
path: root/migration/ram-compress.c
diff options
context:
space:
mode:
authorJuan Quintela <quintela@redhat.com>2023-10-19 13:07:20 +0200
committerJuan Quintela <quintela@redhat.com>2023-10-30 17:41:55 +0100
commitfb36fb275f455642599ac882fd5a96a8b00b062e (patch)
treeb4b5d9bfd54610898a7dec78ea1618850b23e714 /migration/ram-compress.c
parent250b1d7ef62b26fde8dc0f8dacad406807d82f1a (diff)
migration: Create compress_update_rates()
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> Reviewed-by: Fabiano Rosas <farosas@suse.de> Signed-off-by: Juan Quintela <quintela@redhat.com> Message-ID: <20231019110724.15324-8-quintela@redhat.com>
Diffstat (limited to 'migration/ram-compress.c')
-rw-r--r--migration/ram-compress.c42
1 files changed, 41 insertions, 1 deletions
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;
+ }
+}