From nobody Thu Nov 6 21:16:34 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1543931467811576.5216553074054; Tue, 4 Dec 2018 05:51:07 -0800 (PST) Received: from localhost ([::1]:56888 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gUB6Q-00006o-3J for importer@patchew.org; Tue, 04 Dec 2018 08:51:06 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36911) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gUB5J-0007We-7i for qemu-devel@nongnu.org; Tue, 04 Dec 2018 08:49:58 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gUB5F-0001ve-85 for qemu-devel@nongnu.org; Tue, 04 Dec 2018 08:49:57 -0500 Received: from mail-pg1-x542.google.com ([2607:f8b0:4864:20::542]:43345) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1gUB5E-0001rS-Si for qemu-devel@nongnu.org; Tue, 04 Dec 2018 08:49:53 -0500 Received: by mail-pg1-x542.google.com with SMTP id v28so7394670pgk.10 for ; Tue, 04 Dec 2018 05:49:47 -0800 (PST) Received: from VM_79_236_centos.localdomain ([150.109.98.122]) by smtp.gmail.com with ESMTPSA id m85sm29355098pfj.171.2018.12.04.05.49.45 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 04 Dec 2018 05:49:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=ihnj7osBAuMJLJ2QzA07QKS8ItRglSkO9B8kNObKw5M=; b=lelNQq9h3XQqJfDtvOPHi/ADT8SRV/XngIBBEPxzXKYY/P/3UpCZG+6kYkccgv4b/D JO9pz5+jpXIvfLHFwdjuh7bwilWnvMvgiR/jB/VNLEMBLvKaDkdfZOwCgmgL5MFdmlEd IyRlWgL4G41Aah1/6SfKg0bWeejseofqensytXR8lrLD1Vx8YHMhaYuEdE9sboYWDZJI 0eqsWig0PrWtSLyOFNhWmgUo4TyZ8wwTbuRy6SmNU/m3TLkRjtvGFsCHmz67v9m0+ikk c9P6+sq7sw6MEJVFAtrTSmmBoXnDRMF5CPcNQz1eL2w3HpCHDIAcTcS+oJ2Ejl196MfJ WwOA== 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; bh=ihnj7osBAuMJLJ2QzA07QKS8ItRglSkO9B8kNObKw5M=; b=R6BvNXXR9fQ5l7FOtl/y5ScZSlsl6QqERap6pi5qS7vW36N1EC0HnJ5LGuPH/npjRk 7uXUTlfst70F4Sj/oeUgcFwgqmJlImkqRULUs1KzPInBZLq8ryri4yywhfqS4ksW6Vl9 hdPY0YoJM5xhNbZAVDComFPAz0ffHh92a4YK+gDF0Y7r6073qQU+FapfCI04vK0JAV1O ftXrCl8WlIOu4RhAr/HEhJed3zUVXcL2WT9JOywFUiBHx9Zz/d68uD7WWyCdbMKcfpfB Zzs6jj8RBvD25l7ogXzuD1Je2O6jztpA8SfOwWLfzjkczTbyjkIsZDx6Vf0biiq8F916 lojg== X-Gm-Message-State: AA+aEWb3ct4B8KV5UMHLHzcXVkEHAqHbAdJSzVwxqaLW07F8Ae58bY6+ RMaSozgrJsMttHDzUjlU7E552dbLLOKp6w== X-Google-Smtp-Source: AFSGD/XeushTORbEEPKwD3PD+AmjuIouHiUObjFimksdPk1QstMNshnoSc6AfDT7mc/sO3RNdW5Usw== X-Received: by 2002:a63:ae01:: with SMTP id q1mr15269936pgf.402.1543931387118; Tue, 04 Dec 2018 05:49:47 -0800 (PST) From: Ivan Ren X-Google-Original-From: Ivan Ren To: quintela@redhat.com, dgilbert@redhat.com Date: Tue, 4 Dec 2018 21:49:40 +0800 Message-Id: <1543931380-1773-1-git-send-email-ivanren@tencent.com> X-Mailer: git-send-email 1.8.3.1 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::542 Subject: [Qemu-devel] [PATCH] permit dynamic adjust compress level when migration running 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: qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" After commit dcaf446ebda5d87e05eb41cdbafb7ae4a7cc4a62, we can't dynamic adjust the compress level when migration running. For some scenes, dynamic adjust the compress level to change the compress behavior without restart a new migration is useful. Signed-off-by: Ivan Ren --- migration/ram.c | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/migration/ram.c b/migration/ram.c index 7e7deec..653a484 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -361,6 +361,7 @@ struct CompressParam { =20 /* internally used fields */ z_stream stream; + int current_compress_level; uint8_t *originbuf; }; typedef struct CompressParam CompressParam; @@ -394,6 +395,27 @@ static QemuThread *decompress_threads; static QemuMutex decomp_done_lock; static QemuCond decomp_done_cond; =20 +static int initial_compress_stream(CompressParam *param) +{ + int ret =3D -1; + int current_compress_level =3D 0; + + if (param =3D=3D NULL) { + goto exit; + } + + current_compress_level =3D migrate_compress_level(); + if (deflateInit(&(param->stream), current_compress_level) !=3D Z_OK) { + goto exit; + } + + param->current_compress_level =3D current_compress_level; + return 0; + +exit: + return ret; +} + static bool do_compress_ram_page(QEMUFile *f, z_stream *stream, RAMBlock *= block, ram_addr_t offset, uint8_t *source_buf); =20 @@ -410,6 +432,12 @@ static void *do_data_compress(void *opaque) block =3D param->block; offset =3D param->offset; param->block =3D NULL; + if (param->current_compress_level !=3D migrate_compress_level(= )) { + if (initial_compress_stream(param) !=3D 0) { + qemu_file_set_error(migrate_get_current()->to_dst_file= , -1); + error_report("fail to update compress stream!"); + } + } qemu_mutex_unlock(¶m->mutex); =20 zero_page =3D do_compress_ram_page(param->file, ¶m->stream, @@ -488,8 +516,8 @@ static int compress_threads_save_setup(void) goto exit; } =20 - if (deflateInit(&comp_param[i].stream, - migrate_compress_level()) !=3D Z_OK) { + if (initial_compress_stream(&comp_param[i]) !=3D 0) { + error_report("fail to initial compress stream!"); g_free(comp_param[i].originbuf); goto exit; } --=20 1.8.3.1