[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 01/12] migration: do not wait if no free thread
From: |
Peter Xu |
Subject: |
Re: [Qemu-devel] [PATCH 01/12] migration: do not wait if no free thread |
Date: |
Mon, 11 Jun 2018 15:39:20 +0800 |
User-agent: |
Mutt/1.9.5 (2018-04-13) |
On Mon, Jun 04, 2018 at 05:55:09PM +0800, address@hidden wrote:
> From: Xiao Guangrong <address@hidden>
>
> Instead of putting the main thread to sleep state to wait for
> free compression thread, we can directly post it out as normal
> page that reduces the latency and uses CPUs more efficiently
The feature looks good, though I'm not sure whether we should make a
capability flag for this feature since otherwise it'll be hard to
switch back to the old full-compression way no matter for what
reason. Would that be a problem?
>
> Signed-off-by: Xiao Guangrong <address@hidden>
> ---
> migration/ram.c | 34 +++++++++++++++-------------------
> 1 file changed, 15 insertions(+), 19 deletions(-)
>
> diff --git a/migration/ram.c b/migration/ram.c
> index 5bcbf7a9f9..0caf32ab0a 100644
> --- a/migration/ram.c
> +++ b/migration/ram.c
> @@ -1423,25 +1423,18 @@ static int compress_page_with_multi_thread(RAMState
> *rs, RAMBlock *block,
>
> thread_count = migrate_compress_threads();
> qemu_mutex_lock(&comp_done_lock);
Can we drop this lock in this case?
> - while (true) {
> - for (idx = 0; idx < thread_count; idx++) {
> - if (comp_param[idx].done) {
> - comp_param[idx].done = false;
> - bytes_xmit = qemu_put_qemu_file(rs->f, comp_param[idx].file);
> - qemu_mutex_lock(&comp_param[idx].mutex);
> - set_compress_params(&comp_param[idx], block, offset);
> - qemu_cond_signal(&comp_param[idx].cond);
> - qemu_mutex_unlock(&comp_param[idx].mutex);
> - pages = 1;
> - ram_counters.normal++;
> - ram_counters.transferred += bytes_xmit;
> - break;
> - }
> - }
> - if (pages > 0) {
> + for (idx = 0; idx < thread_count; idx++) {
> + if (comp_param[idx].done) {
> + comp_param[idx].done = false;
> + bytes_xmit = qemu_put_qemu_file(rs->f, comp_param[idx].file);
> + qemu_mutex_lock(&comp_param[idx].mutex);
> + set_compress_params(&comp_param[idx], block, offset);
> + qemu_cond_signal(&comp_param[idx].cond);
> + qemu_mutex_unlock(&comp_param[idx].mutex);
> + pages = 1;
> + ram_counters.normal++;
> + ram_counters.transferred += bytes_xmit;
> break;
> - } else {
> - qemu_cond_wait(&comp_done_cond, &comp_done_lock);
> }
> }
> qemu_mutex_unlock(&comp_done_lock);
Regards,
--
Peter Xu
[Qemu-devel] [PATCH 03/12] migration: fix counting xbzrle cache_miss_rate, guangrong . xiao, 2018/06/04
[Qemu-devel] [PATCH 04/12] migration: introduce migration_update_rates, guangrong . xiao, 2018/06/04