[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 3/8] migration: show the statistics of compre
From: |
Xiao Guangrong |
Subject: |
Re: [Qemu-devel] [PATCH v2 3/8] migration: show the statistics of compression |
Date: |
Mon, 23 Jul 2018 15:39:18 +0800 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0 |
On 07/23/2018 12:36 PM, Peter Xu wrote:
On Thu, Jul 19, 2018 at 08:15:15PM +0800, address@hidden wrote:
@@ -1597,6 +1608,24 @@ static void migration_update_rates(RAMState *rs, int64_t
end_time)
rs->xbzrle_cache_miss_prev) / iter_count;
rs->xbzrle_cache_miss_prev = xbzrle_counters.cache_miss;
}
+
+ if (migrate_use_compression()) {
+ uint64_t comp_pages;
+
+ compression_counters.busy_rate = (double)(compression_counters.busy -
+ rs->compress_thread_busy_prev) / iter_count;
Here I'm not sure it's correct...
"iter_count" stands for ramstate.iterations. It's increased per
ram_find_and_save_block(), so IMHO it might contain multiple guest
ram_find_and_save_block() returns if a page is successfully posted and
it only posts 1 page out at one time.
pages. However compression_counters.busy should be per guest page.
Actually, it's derived from xbzrle_counters.cache_miss_rate:
xbzrle_counters.cache_miss_rate = (double)(xbzrle_counters.cache_miss -
rs->xbzrle_cache_miss_prev) / iter_count;
+ rs->compress_thread_busy_prev = compression_counters.busy;
+
+ comp_pages = compression_counters.pages - rs->compress_pages_prev;
+ if (comp_pages) {
+ compression_counters.compression_rate =
+ (double)(compression_counters.reduced_size -
+ rs->compress_reduced_size_prev) /
+ (comp_pages * TARGET_PAGE_SIZE);
+ rs->compress_pages_prev = compression_counters.pages;
+ rs->compress_reduced_size_prev = compression_counters.reduced_size;
+ }
+ }
}
static void migration_bitmap_sync(RAMState *rs)
@@ -1872,6 +1901,9 @@ static void flush_compressed_data(RAMState *rs)
qemu_mutex_lock(&comp_param[idx].mutex);
if (!comp_param[idx].quit) {
len = qemu_put_qemu_file(rs->f, comp_param[idx].file);
+ /* 8 means a header with RAM_SAVE_FLAG_CONTINUE. */
+ compression_counters.reduced_size += TARGET_PAGE_SIZE - len + 8;
I would agree with Dave here - why we store the "reduced size" instead
of the size of the compressed data (which I think should be len - 8)?
len-8 is the size of data after compressed rather than the data improved
by compression that is not straightforward for the user to see how much
the improvement is by applying compression.
Hmm... but it is not a big deal to me... :)
Meanwhile, would a helper be nicer? Like:
Yup, that's nicer indeed.
- [Qemu-devel] [PATCH v2 0/8] migration: compression optimization, guangrong . xiao, 2018/07/19
- [Qemu-devel] [PATCH v2 1/8] migration: do not wait for free thread, guangrong . xiao, 2018/07/19
- [Qemu-devel] [PATCH v2 2/8] migration: fix counting normal page for compression, guangrong . xiao, 2018/07/19
- [Qemu-devel] [PATCH v2 3/8] migration: show the statistics of compression, guangrong . xiao, 2018/07/19
- Re: [Qemu-devel] [PATCH v2 3/8] migration: show the statistics of compression, Dr. David Alan Gilbert, 2018/07/25
- Re: [Qemu-devel] [PATCH v2 3/8] migration: show the statistics of compression, Peter Xu, 2018/07/26
[Qemu-devel] [PATCH v2 4/8] migration: introduce save_zero_page_to_file, guangrong . xiao, 2018/07/19
[Qemu-devel] [PATCH v2 5/8] migration: drop the return value of do_compress_ram_page, guangrong . xiao, 2018/07/19