From patchwork Thu Sep 6 07:00:59 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xiao Guangrong X-Patchwork-Id: 966821 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=208.118.235.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="ZXHBPDR5"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 425Whw36qtz9sDb for ; Thu, 6 Sep 2018 17:02:08 +1000 (AEST) Received: from localhost ([::1]:59858 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fxoIo-0001TF-A6 for incoming@patchwork.ozlabs.org; Thu, 06 Sep 2018 03:02:06 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33548) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fxoI6-0001PM-0D for qemu-devel@nongnu.org; Thu, 06 Sep 2018 03:01:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fxoI4-0008B6-Cq for qemu-devel@nongnu.org; Thu, 06 Sep 2018 03:01:21 -0400 Received: from mail-pl1-x634.google.com ([2607:f8b0:4864:20::634]:44726) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fxoHz-000887-Va for qemu-devel@nongnu.org; Thu, 06 Sep 2018 03:01:19 -0400 Received: by mail-pl1-x634.google.com with SMTP id ba4-v6so4510473plb.11 for ; Thu, 06 Sep 2018 00:01:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=rfQjjZoYN8ey6JzyEFUHP7aTftpMshBfTWmwy04gytM=; b=ZXHBPDR5o+zImRH2BS5ZWyh1BhK4II1mfOrl+ZCfAYlDHOtz942pD+eCUoaJmf2C/D HTHj0TSShk3r/RZp1+O8SZXL2I5YZMoRzh5yO0UDjuuChgi4bvTTWaBtTjPyP3QZMXZA mz0f0mitNdazo/8S2qFF6CY8AnzyzbYeYUxGCDyPSsDCOmMvf8/fMNGfrd/3BRG+7Oxj i8nvYWamTXbeOypZkfBZX5E3FiqJLpUCzdDXpVZ4+b7ueshy/ne+KT6PwnBpcXSih+I/ g9MDEbMW+Wq46ioeDRUKIBFUdp6pcipbs1Ll2UslXU6epXeebT/9J8B9B595rQiX4ZQn TbiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=rfQjjZoYN8ey6JzyEFUHP7aTftpMshBfTWmwy04gytM=; b=QSH7lkdKIBWqyoProZ3YX5QZDrKh6zPucg6Z4zN/MN6AKIdWcd0Suftzj1y/xWg+Zc nBxA/bpvs28ddh0DNSHQG5gjMgZIFvlrCVaz8xJgs9ch5F2GmtI2EuaP/VmCN2RlQc9l yDI9ZUmMcZi74Q3rqdrTVloG5NRdlcoq23A4oBmnUA0b7qOQY3GJ4VmylpNqLw20Nf29 SoGZd5oWuxm2OTp59SSjadCFTLtXtJTCxCu0ubgNL/oXdYUvUS/p1AWCu0LJc3wYf/hM yGvIVgtUD4BlzqNPqkVZR8ZErYl/Z6JqkOOmIlBRK19LHNP+FIpSH6HbfQ9f0DNEfU2w AB5w== X-Gm-Message-State: APzg51DS0WdJCJWyeBIXx6Wr+rdXz9cZRQ5ZHKJFbGorRik6ENxnpR5U UozIfxZCF+OP3PAJsSWa78s= X-Google-Smtp-Source: ANB0VdZKV2VHxnwkbzx3ENQfi43vyK6E3D0lT9iX06m7MhX3zauxiP/7EbvexJC+xul5HlMWpubMHA== X-Received: by 2002:a17:902:be07:: with SMTP id r7-v6mr1282618pls.275.1536217274359; Thu, 06 Sep 2018 00:01:14 -0700 (PDT) Received: from localhost.localdomain ([203.205.141.37]) by smtp.gmail.com with ESMTPSA id u195-v6sm7697017pgb.21.2018.09.06.00.01.10 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 06 Sep 2018 00:01:13 -0700 (PDT) From: guangrong.xiao@gmail.com X-Google-Original-From: xiaoguangrong@tencent.com To: pbonzini@redhat.com, mst@redhat.com, mtosatti@redhat.com Date: Thu, 6 Sep 2018 15:00:59 +0800 Message-Id: <20180906070101.27280-2-xiaoguangrong@tencent.com> X-Mailer: git-send-email 2.14.4 In-Reply-To: <20180906070101.27280-1-xiaoguangrong@tencent.com> References: <20180906070101.27280-1-xiaoguangrong@tencent.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::634 Subject: [Qemu-devel] [PATCH v6 1/3] migration: do not flush_compressed_data at the end of iteration X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kvm@vger.kernel.org, quintela@redhat.com, Xiao Guangrong , qemu-devel@nongnu.org, peterx@redhat.com, dgilbert@redhat.com, wei.w.wang@intel.com, jiang.biao2@zte.com.cn Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Xiao Guangrong flush_compressed_data() needs to wait all compression threads to finish their work, after that all threads are free until the migration feeds new request to them, reducing its call can improve the throughput and use CPU resource more effectively We do not need to flush all threads at the end of iteration, the data can be kept locally until the memory block is changed or memory migration starts over in that case we will meet a dirtied page which may still exists in compression threads's ring Signed-off-by: Xiao Guangrong Reviewed-by: Juan Quintela --- migration/ram.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/migration/ram.c b/migration/ram.c index 2add09174d..e152831254 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -1996,17 +1996,22 @@ static bool find_dirty_block(RAMState *rs, PageSearchStatus *pss, bool *again) pss->page = 0; pss->block = QLIST_NEXT_RCU(pss->block, next); if (!pss->block) { + /* + * If memory migration starts over, we will meet a dirtied page + * which may still exists in compression threads's ring, so we + * should flush the compressed data to make sure the new page + * is not overwritten by the old one in the destination. + * + * Also If xbzrle is on, stop using the data compression at this + * point. In theory, xbzrle can do better than compression. + */ + flush_compressed_data(rs); + /* Hit the end of the list */ pss->block = QLIST_FIRST_RCU(&ram_list.blocks); /* Flag that we've looped */ pss->complete_round = true; rs->ram_bulk_stage = false; - if (migrate_use_xbzrle()) { - /* If xbzrle is on, stop using the data compression at this - * point. In theory, xbzrle can do better than compression. - */ - flush_compressed_data(rs); - } } /* Didn't find anything this time, but try again on the new block */ *again = true; @@ -3219,7 +3224,6 @@ static int ram_save_iterate(QEMUFile *f, void *opaque) } i++; } - flush_compressed_data(rs); rcu_read_unlock(); /*