From nobody Mon May 13 04:50:12 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1681984106; cv=none; d=zohomail.com; s=zohoarc; b=DPBKcNZFLFCdcVBAVWVWMUzQCKy2UWxKakVC9zu5gKwQDP01wtQjJq7dIh1W3rgZDqjqirx7U1mRstOKE5uyjn44Sz0zxby4fpvc/Hq5NtyRycZdxMGVsy7uz92453xbhuK7WUQ4HnMeRtNaPLUeG1z5SOuu1F6ojgcOWNgaM8Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1681984106; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Ohp8HcONnk7RANpvnt3L1nVpNItU4XBSj1mh9xuxItA=; b=YGlEjYCdCavIEnC8Dd7gyS++alpBfegLWKrLg2pKroUrfUaF7g5o2294NvNNXnhU9Sve2DCHBWUHvLmIWD0jgdDUL5lBlp736D6OONK/m4NNEedM3OH7diP37l/msCzBGTgwopsEnDHXJNCI1nKDa0GVyBk65yeOd6Ls1Oxum0I= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 168198410679856.257458510779315; Thu, 20 Apr 2023 02:48:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ppQtn-0006oQ-9t; Thu, 20 Apr 2023 05:48:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ppQtV-0006YJ-M6 for qemu-devel@nongnu.org; Thu, 20 Apr 2023 05:48:03 -0400 Received: from mout.web.de ([212.227.15.14]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ppQtT-0007zM-QC for qemu-devel@nongnu.org; Thu, 20 Apr 2023 05:48:01 -0400 Received: from gecko.fritz.box ([82.207.254.123]) by smtp.web.de (mrweb005 [213.165.67.108]) with ESMTPSA (Nemesis) id 1MKMA7-1pbTJF0z1T-00Lkkx; Thu, 20 Apr 2023 11:47:54 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=s29768273; t=1681984074; i=lukasstraub2@web.de; bh=II/xCy85IPZ6uuS206CqWBiCl1Yvzra5TBTN4pjRMqA=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=pmVGesYP1rTBRPHmKF+D2byZyDFHz5sdj0+qDiRKvaq9CDzuk4efABDDemWWBRK+y 7/yr3lmBlS1DG79G7i4cBk5rg03xZg88NFg8xMzw/IQRUxpudST0OjTpJAT5wPquSG vy6fw/hNycAdIJfIOKzJxVjS6Jk1dEgMwnAKsoY6RlLaQ8stWmOqhD53crR5nGlj5i SC2B6MqRtAisV7dGwE9lPZHJBB/cH74DCAF3xOx4Yzw1RguxEmNUtiwAkTo5SppDMN Qgtlg1Y8oA3VyiTaQOILRkSHhyySDWGY+HVduO+vWh5eh+w0LJ7pqulLj7pjy/pKAY urtG/dS9KgG3A== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Date: Thu, 20 Apr 2023 11:47:53 +0200 From: Lukas Straub To: qemu-devel Cc: Juan Quintela , Peter Xu , Thomas Huth , Laurent Vivier , Paolo Bonzini Subject: [PATCH v2 01/13] qtest/migration-test.c: Add postcopy tests with compress enabled Message-ID: <01a063686e62ce97e7d0bc9fa935389f074ecb4b.1681983401.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/C.O15HesEp.0vYR6xcN7KlK"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:sHxw0g7syKrEFsr/t1xYnH/s80ce3X6m/Dd31EXOwbvA1yuSrqS fdnkaClmwzZZD6niQO4iy3QKq85IL1IiUmhIsM7ByGnUFtFXfJpAogreNy0ZryyN2frxwdy ZtFCiXb0CRyj/HfVHVVz4AS1mYUTTNviAUFDbFrQAb2d7sADAs+J4p8t6i2fuHPMXZTGJwp uOf4yzkFsufQW4UFqyzjg== UI-OutboundReport: notjunk:1;M01:P0:Wf8xBOkFknI=;dHvYNYbp6VI4YZPLrWh2nF/1ajf txUAhe7c9SI+CIYqSgjVCeU+yQNwtl4Pu19qJGZHPf9c1t1dDU/XrCQw6ozyxsOg0Ikk9FrrD KlpNzwPRW2ticAEOo17Es/1JPnRgYyiigaPOhyU4uUTp55k4b7y6n9AajVz291XvHkcMUbXJ6 t+wMK663vQQOuDSfFP04RGKxiI9Jlvjr44MyrmjJewTXYt5k3RDws3y1ha+8mqfFdq/LJ/WHe Uu/x/g3WBIX5y9vfQhJUwrtoxvQOJuctyjhBNbxdLbVv3TEKi9X1115ARrWs2OvvT5T9PTZyq wV7aQVEi5oRrzp+4Tb3RmRWSCwQlCG/VxYeZPTay8Qnf0ah7CHvEACZflODNdSeGoZ8tDMMes OZhhpEKmxjbyi2h5rRiszGSNsebk2QizRpTyS6LLRigWK48FFDf8CfT4wVzW+gLJ7OSwiQtz7 vQOqfv91WBWFoL1Pb0rORTMUytANMWExJyqfVDOu1/w3sk6Ei42Oi/6YrhdGc8oXTkn83CjLU YWrHTnxuE0gSCfUn0zLC4jvjxl+4bK68Mafxy9r6KEDXdEUUcmM+cYf9P3IgxahjCTjyWKPSO JDPLwdPxM88N0//rgMPYvedDF5rRn1PR7KtJ2Ik3Ayvf96/oJp7qt+R6SoFi5sv7unJCAha0u z3SQSMdWqAXZtWXWyfBTmWhTAZbkqtqwmJVwm7VbhdmrjCiVXv2k4FdSyCUIyjFXLfCPttNGZ 6Na/vGMU7zxIESe/03MzXRBVODPs+8j8GDwTSQHq44OFgRF8bB/Iok+3EiqC3Lch590nZ+nNZ Fp82ACluz2lNHqiXhWa2V9WRsKueQHaBEWK0Vp+0a06+VzG6PR/FVKoBIV3Ya7nrmXpVF6sb7 lTz9P5qGY9f+GpIl5w4XKOHxSIbjH9dtYPDvsRL+/T6nQ+8d1shIXrX+2l5ZnJceztjxqBgvG JiuHcW9+nlHRzFxrwhdd/OAsjFY= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=212.227.15.14; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1681984107199100005 --Sig_/C.O15HesEp.0vYR6xcN7KlK Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Add postcopy tests with compress enabled to ensure nothing breaks with the refactoring in the next commits. preempt+compress is blocked, so no test needed for that case. Signed-off-by: Lukas Straub Reviewed-by: Juan Quintela --- tests/qtest/migration-test.c | 83 +++++++++++++++++++++++------------- 1 file changed, 53 insertions(+), 30 deletions(-) diff --git a/tests/qtest/migration-test.c b/tests/qtest/migration-test.c index 1f2a019ce0..930cb4f29d 100644 --- a/tests/qtest/migration-test.c +++ b/tests/qtest/migration-test.c @@ -1127,6 +1127,36 @@ test_migrate_tls_x509_finish(QTestState *from, #endif /* CONFIG_TASN1 */ #endif /* CONFIG_GNUTLS */ +static void * +test_migrate_compress_start(QTestState *from, + QTestState *to) +{ + migrate_set_parameter_int(from, "compress-level", 1); + migrate_set_parameter_int(from, "compress-threads", 4); + migrate_set_parameter_bool(from, "compress-wait-thread", true); + migrate_set_parameter_int(to, "decompress-threads", 4); + + migrate_set_capability(from, "compress", true); + migrate_set_capability(to, "compress", true); + + return NULL; +} + +static void * +test_migrate_compress_nowait_start(QTestState *from, + QTestState *to) +{ + migrate_set_parameter_int(from, "compress-level", 9); + migrate_set_parameter_int(from, "compress-threads", 1); + migrate_set_parameter_bool(from, "compress-wait-thread", false); + migrate_set_parameter_int(to, "decompress-threads", 1); + + migrate_set_capability(from, "compress", true); + migrate_set_capability(to, "compress", true); + + return NULL; +} + static int migrate_postcopy_prepare(QTestState **from_ptr, QTestState **to_ptr, MigrateCommon *args) @@ -1204,6 +1234,15 @@ static void test_postcopy(void) test_postcopy_common(&args); } +static void test_postcopy_compress(void) +{ + MigrateCommon args =3D { + .start_hook =3D test_migrate_compress_start + }; + + test_postcopy_common(&args); +} + static void test_postcopy_preempt(void) { MigrateCommon args =3D { @@ -1305,6 +1344,15 @@ static void test_postcopy_recovery(void) test_postcopy_recovery_common(&args); } +static void test_postcopy_recovery_compress(void) +{ + MigrateCommon args =3D { + .start_hook =3D test_migrate_compress_start + }; + + test_postcopy_recovery_common(&args); +} + #ifdef CONFIG_GNUTLS static void test_postcopy_recovery_tls_psk(void) { @@ -1338,6 +1386,7 @@ static void test_postcopy_preempt_all(void) test_postcopy_recovery_common(&args); } + #endif static void test_baddest(void) @@ -1559,21 +1608,6 @@ static void test_precopy_unix_xbzrle(void) test_precopy_common(&args); } -static void * -test_migrate_compress_start(QTestState *from, - QTestState *to) -{ - migrate_set_parameter_int(from, "compress-level", 1); - migrate_set_parameter_int(from, "compress-threads", 4); - migrate_set_parameter_bool(from, "compress-wait-thread", true); - migrate_set_parameter_int(to, "decompress-threads", 4); - - migrate_set_capability(from, "compress", true); - migrate_set_capability(to, "compress", true); - - return NULL; -} - static void test_precopy_unix_compress(void) { g_autofree char *uri =3D g_strdup_printf("unix:%s/migsocket", tmpfs); @@ -1591,21 +1625,6 @@ static void test_precopy_unix_compress(void) test_precopy_common(&args); } -static void * -test_migrate_compress_nowait_start(QTestState *from, - QTestState *to) -{ - migrate_set_parameter_int(from, "compress-level", 9); - migrate_set_parameter_int(from, "compress-threads", 1); - migrate_set_parameter_bool(from, "compress-wait-thread", false); - migrate_set_parameter_int(to, "decompress-threads", 1); - - migrate_set_capability(from, "compress", true); - migrate_set_capability(to, "compress", true); - - return NULL; -} - static void test_precopy_unix_compress_nowait(void) { g_autofree char *uri =3D g_strdup_printf("unix:%s/migsocket", tmpfs); @@ -2604,8 +2623,12 @@ int main(int argc, char **argv) if (has_uffd) { qtest_add_func("/migration/postcopy/plain", test_postcopy); + qtest_add_func("/migration/postcopy/compress/plain", + test_postcopy_compress); qtest_add_func("/migration/postcopy/recovery/plain", test_postcopy_recovery); + qtest_add_func("/migration/postcopy/recovery/compress/plain", + test_postcopy_recovery_compress); qtest_add_func("/migration/postcopy/preempt/plain", test_postcopy_= preempt); qtest_add_func("/migration/postcopy/preempt/recovery/plain", test_postcopy_preempt_recovery); -- 2.40.0 --Sig_/C.O15HesEp.0vYR6xcN7KlK Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmRBCkkACgkQNasLKJxd slj5mBAAskRbYqhjN4lRlBOKwCMckuZbREJtJ+eCxHBudZ1PSIOe8uZh0QcsimSq 1K7c6ipOtiYOvt0yKLFsfTnL8vyJH0Cum9hs361lTkqAdR0wccfAhpFMRsBmsG8x uq4+95IAzXBh2h5TlSikATFAcjCXPO+MCtV6kf0qLcokjyFIWDRd1G4KpadzZJrz ErnssIPcDtW+MIWmSl/YqRkhXTRDtumb9NLmR2NPwfs+kXninMVAraB1OMNrZTU8 JIJf4sr1svJ11EOg2C2D2PcHQICciFlZLvlHSYHiI3sR7A6khH4b7jBGC8Jl3Yu4 26ltrDsJh/TxR4tlv0oWONJvAa+DLzCQ7Aq2hvrZqZOtyngiYFhGXuoigkmS1fz+ CGlEkFosagFGLxA8Ifur4dJOk0sLD5ktZC0VwbJfRbbO3Vxf29IIUipohI5Am/5I WBI2ENmeRpAj/pTPLGW/vGZ8o82bdCveGE7jbfR4Alj4d4AsOUe7IMUQB4R7Y6dr 7GqRSGcZm8J+jtKCxvMByY4xxnB1MQvTXb4FxnU30FK5/4WxhG05EzigNXLalU3k YZAUbID8t7g5LxvGujnKiU2mSFEYh/BZaeKjRtv5iTm91Q6QODqEvv0IUlnQMzdA hYw8bJ4HFvNA6k+A6+oLPjocQKbGZat/s67Wi0LoDpHbQFvsVh8= =TDkF -----END PGP SIGNATURE----- --Sig_/C.O15HesEp.0vYR6xcN7KlK-- From nobody Mon May 13 04:50:12 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1681984166; cv=none; d=zohomail.com; s=zohoarc; b=VCBCTVcBFWSeFGeisLqKIn/pWiEMH6WGsiXlSG+GtYgQjUcm1W+fmn9pIYnkptTml97n5opnb0TFy5eUQgVih0TaCccSvSFCz1sOwLujhja3X6xKrLT9rMTXtkPCaPRhCiAuzZTXh/Mq6jMlPXu3mtupou2m+J4Rgyhvkz/za5o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1681984166; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Jf6aHjZR6nCQkmCgrU8oHlG3K5sTsOu4L2TPx8qVq8w=; b=cmQA67xbLV8eb+gSG9aaPZiJY0ZG3mIH68MdrJf9kI9TygWjxIZ8LH0dlFoeSD2aEpHKJCQ98QOb7gCWZSMLQhzjP02iiuvL4jYM27nUj6EN6RCcq9Ns/ny3OJROvpghXj1jYSyH/yDB/50Qi1arallaZq5rPpFUlghzr+0QDMM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1681984166047800.8120071526532; Thu, 20 Apr 2023 02:49:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ppQtr-0007DA-PP; Thu, 20 Apr 2023 05:48:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ppQtj-0006oR-Vw for qemu-devel@nongnu.org; Thu, 20 Apr 2023 05:48:18 -0400 Received: from mout.web.de ([212.227.15.14]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ppQtY-0007zm-7S for qemu-devel@nongnu.org; Thu, 20 Apr 2023 05:48:15 -0400 Received: from gecko.fritz.box ([82.207.254.123]) by smtp.web.de (mrweb005 [213.165.67.108]) with ESMTPSA (Nemesis) id 1N7xeZ-1qKlMk3AzT-014zvl; Thu, 20 Apr 2023 11:47:57 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=s29768273; t=1681984077; i=lukasstraub2@web.de; bh=wrG1Hvb8UOtdOBIp/5UhtsTLxnaSXeUp/H7vp3+H4GU=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=vWOvzvKNDlOIahHUqC/YqPOvYFA1kNdgjlA6w2+QMSHY0iIwvUYd8kEFf0El1Lb7G EX9qXTH5t9GI7Ubaez5qKNTzNbmCdINRZXwHhbcGjGQS2zZIuaJwq4BPVzi/f21mzZ pdTdIgucdlM6gNppyjw0idz7qB7XePt4T6gFYPFuAyQ8NzwJCpAJk4FrnhZnTc6dhc bRHXTVEFLS6ywS/9FUSitCVJrDoW7/Sh/XeSHBmyPaGFK8DJfITDa5vhYUeq2eHIbI XNyTyd9D+H65ryUtUekkicoIauc/9bWKa9wV4OUZrTgzknYezJz2E4Bzx89TTVtoQJ wFsa84TQ1agoQ== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Date: Thu, 20 Apr 2023 11:47:56 +0200 From: Lukas Straub To: qemu-devel Cc: Juan Quintela , Peter Xu , Thomas Huth , Laurent Vivier , Paolo Bonzini Subject: [PATCH v2 02/13] ram.c: Let the compress threads return a CompressResult enum Message-ID: <41cb2e3c0065b2c99948703a5a4f4bfe600ee64b.1681983401.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/9Z/1Tf9XhI..LO8Dbi1_WpC"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:0jncPqQGgxGYRqStLYFcGBCxGTHdQ/mCg/FR9NK2xxST215GGd9 Jshm/o6Px7sbgzX+HQSBsOBeCxkksCJRNrouQuyAdaMdBuUkKquJN2p5RB9DMooaB+Xy3Di VP4eOXFdL0i6dULo6KFjDzdvO3w+GVORIM+cGAQQlQTuk1wjasi0EG/JA2yR6D5h+ZPrh6e FNWOtoy1BDa+/4D/2NORA== UI-OutboundReport: notjunk:1;M01:P0:YudwZjfx/+o=;2lXwudv7jaQ8XICLhRdzlc3XSOT slAviGjfy67AlRrvHJ/xQijGxphMG7/JFEpCwmFxyDaE11VsHz5zXNsjKwfwMG39xPcTvTw5V 2fSh/6caUJgT3kr4DpmmyqY1MheF+Md2g1YtCPj4/cQrGPGYsjI8DrYD9SprJaEtg0LVBBE+k TkrIKVXw0yE5iio300o/soSS9kZr3Mt+nTieWaBPewVkCu53tdEUl8n1Q8qn0788lhAhqJZyH grwMNynpRa2jxM74acUnD0yBUDt4Hbj9HsNWR9bhcmiBdyM+wriyPurs5xFzNR7I1mSuZpExP jze17ZyFMkL1+8Q/N0qaWFczowIaMOqZNbRfNH712EyH5+jTH2ipWs07/d4ecFeHe5ZUkyxWA Gqp11Zo3Q7jqs4w5p5+p6RwRL0A+MVoqUVzpI1s5x684Bbqz1+N8bWsQmAhHvoyyCu2Zsz/yi Vs2gEknXsOuGqIJQH8e92lirbIHTtBYBd8KtfbKf1gfo3BuBtTcFhDXbP7DQeTOKrliN09gqL KuLw+5gc74HNpIUqvY7kI+zy9NGaKkEhYuOToxIf4VVQW2f+qR3Rah1BnYpSNWSgkiQFV6Vlx vF+EYXXHQUIFRDBt+B9F0KAPdkWrPEZbKdLWIzZ/IjJgmUzDLXwfPwvd9D24gUNDKh0473/ER CIDIOOYjoPeticcE4fqta2fF5qVhkzgIVk+optgoS/JtvjmtnHlsBhYNa9lLKweAyF/gvayT5 mr1jzLLRTF7Ez06NGlVv1IL80m3mZWkDpRNP61Exj6jJ0byjdysdjAOdSyEEbDN9NBFSkOY/d mu3c8qBNaM3WB/vn+C1DNbC9hbU/7SVxv0DtD3r8qM0leIcCdU+aIogmylVX9BaVa+/SboQfb sDzS/IPnoNXxaXcUqkgZoPKdwzHzHX8j6afoHuLsy4e0qMWXdiV3DIQk9Avy4Xa1f+TrhMk32 FFwvnvWEQG1SBffSHM6jjOGfsrE= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=212.227.15.14; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1681984167433100012 --Sig_/9Z/1Tf9XhI..LO8Dbi1_WpC Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This will be used in the next commits to move save_page_header() out of compress code. Signed-off-by: Lukas Straub Reviewed-by: Juan Quintela --- migration/ram.c | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/migration/ram.c b/migration/ram.c index 79d881f735..ade6638a96 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -493,10 +493,17 @@ MigrationOps *migration_ops; CompressionStats compression_counters; +enum CompressResult { + RES_NONE =3D 0, + RES_ZEROPAGE =3D 1, + RES_COMPRESS =3D 2 +}; +typedef enum CompressResult CompressResult; + struct CompressParam { bool done; bool quit; - bool zero_page; + CompressResult result; QEMUFile *file; QemuMutex mutex; QemuCond cond; @@ -538,8 +545,9 @@ static QemuCond decomp_done_cond; static int ram_save_host_page_urgent(PageSearchStatus *pss); -static bool do_compress_ram_page(QEMUFile *f, z_stream *stream, RAMBlock *= block, - ram_addr_t offset, uint8_t *source_buf); +static CompressResult do_compress_ram_page(QEMUFile *f, z_stream *stream, + RAMBlock *block, ram_addr_t off= set, + uint8_t *source_buf); /* NOTE: page is the PFN not real ram_addr_t. */ static void pss_init(PageSearchStatus *pss, RAMBlock *rb, ram_addr_t page) @@ -564,7 +572,7 @@ static void *do_data_compress(void *opaque) CompressParam *param =3D opaque; RAMBlock *block; ram_addr_t offset; - bool zero_page; + CompressResult result; qemu_mutex_lock(¶m->mutex); while (!param->quit) { @@ -574,12 +582,12 @@ static void *do_data_compress(void *opaque) param->block =3D NULL; qemu_mutex_unlock(¶m->mutex); - zero_page =3D do_compress_ram_page(param->file, ¶m->stream, - block, offset, param->originb= uf); + result =3D do_compress_ram_page(param->file, ¶m->stream, + block, offset, param->originbuf); qemu_mutex_lock(&comp_done_lock); param->done =3D true; - param->zero_page =3D zero_page; + param->result =3D result; qemu_cond_signal(&comp_done_cond); qemu_mutex_unlock(&comp_done_lock); @@ -1463,8 +1471,9 @@ static int ram_save_multifd_page(QEMUFile *file, RAMB= lock *block, return 1; } -static bool do_compress_ram_page(QEMUFile *f, z_stream *stream, RAMBlock *= block, - ram_addr_t offset, uint8_t *source_buf) +static CompressResult do_compress_ram_page(QEMUFile *f, z_stream *stream, + RAMBlock *block, ram_addr_t off= set, + uint8_t *source_buf) { RAMState *rs =3D ram_state; PageSearchStatus *pss =3D &rs->pss[RAM_CHANNEL_PRECOPY]; @@ -1472,7 +1481,7 @@ static bool do_compress_ram_page(QEMUFile *f, z_strea= m *stream, RAMBlock *block, int ret; if (save_zero_page_to_file(pss, f, block, offset)) { - return true; + return RES_ZEROPAGE; } save_page_header(pss, f, block, offset | RAM_SAVE_FLAG_COMPRESS_PAGE); @@ -1487,8 +1496,9 @@ static bool do_compress_ram_page(QEMUFile *f, z_strea= m *stream, RAMBlock *block, if (ret < 0) { qemu_file_set_error(migrate_get_current()->to_dst_file, ret); error_report("compressed data failed!"); + return RES_NONE; } - return false; + return RES_COMPRESS; } static void @@ -1496,7 +1506,7 @@ update_compress_thread_counts(const CompressParam *pa= ram, int bytes_xmit) { ram_transferred_add(bytes_xmit); - if (param->zero_page) { + if (param->result =3D=3D RES_ZEROPAGE) { stat64_add(&ram_atomic_counters.duplicate, 1); return; } -- 2.40.0 --Sig_/9Z/1Tf9XhI..LO8Dbi1_WpC Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmRBCkwACgkQNasLKJxd sljXdw//b/hH1wupaYc/vOxhGJU612vq3jPNbBtLiANCXGK0IFxgWpA1aXrzSLnD 9pfGZsN1RxS6r/tQEWYehJinsnG1/QbPjNabKFjVVGjlVICQYqcwMrvWEzNRM/Q0 qvS+BHOh3/u1PhrlkqCG9Qa9/M2oo2vWa/cX3UJvNcazZCfrDrQbSAg1cPHMyJQx uqVEIivZ69RjxzVXJ9grF3Fmhx25LdAA5krVk5+1X2p1i+CH02Frz9gmnx5ocO/Z 5G1Wj2NYNoatEwF3qmpTTNTzsDFhayj68jFlrmHEisKJ9lH5xhZ72RE2DL0ORCzy C3QgU88kEVfAw4aX9RrLXDcHsPqEzLDS4qE6sDdfTt9Fq3RaGOC6sXPXX2LkR4aJ lFApO0qmNFbwvk942o84c19sQrQLdsB8Y/I7N2OP9PiDv2yRa/B5sApJlx3vOqk+ XiM+sXI62fKbvQLtI2zi+Xc3YjdlLYdF+zFujAJhqtObaC46r92xUaOxNqKeBXsu DgkxaL/eqFdZu8AOjjGZh05aQs1FXvITMudtx2ndiG5QjUvy+B60Fux1HjqTkZ5T wcZvLR0p9x4vvsp7eqdjUh2uWGYRz40SqKpfZQLDYowevMB6UxcVqNxSqJkCrDGh hGq8glCu8mmTqOuYxmBtwxV5nwitZDRfnTsspRPwqIZoYSBRFc4= =9Ain -----END PGP SIGNATURE----- --Sig_/9Z/1Tf9XhI..LO8Dbi1_WpC-- From nobody Mon May 13 04:50:12 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1681984197; cv=none; d=zohomail.com; s=zohoarc; b=I8BflEyKxlNqB0yJmuMl0QlHAfLob2VvgIVkD/FZkALYGmAvGtXgsTyZKQqpb35CQcwV1SOSrQ1fmqi6DVtodiDw4/G6yoj/jehO12/lsm8SU8mtu8t971/N0/uGIHXz/HoUyBVK4lSdr1OToySKpLG8lr1OpXNfeJT30oWLsAI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1681984197; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=cfpMCpVn70CFFaymo1z25ITNZ5pF/F6bBPl6KYs0zj8=; b=fa0PpGIvmebcDEBITnXpkehCb+lU0dlJPxU7Fvs42rHI4JhRnwidBEY8MQesPN7CAG4xb6+wt5RAp4WsfIwGVPUq2tNT+mnD1dH1RdDwxia4E6RLmSr3z3cwM4orhQkHAM2WC32SAhUmEWuYuuLN7/YN02QX/oRx5Yj/1xXAAxA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1681984197055407.6956697603538; Thu, 20 Apr 2023 02:49:57 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ppQtr-00079f-AO; Thu, 20 Apr 2023 05:48:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ppQte-0006kI-4i for qemu-devel@nongnu.org; Thu, 20 Apr 2023 05:48:12 -0400 Received: from mout.web.de ([212.227.15.3]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ppQta-00081e-7d for qemu-devel@nongnu.org; Thu, 20 Apr 2023 05:48:08 -0400 Received: from gecko.fritz.box ([82.207.254.123]) by smtp.web.de (mrweb005 [213.165.67.108]) with ESMTPSA (Nemesis) id 1MWzD3-1pn4R607Dt-00XJrY; Thu, 20 Apr 2023 11:48:01 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=s29768273; t=1681984081; i=lukasstraub2@web.de; bh=eLFJoHY7peL+SKZF2sPs8aKtSRtjxyC6z9ykmJRSQxE=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=db9iMjuURlMO8odNKtIdvRW5sUsr0xwGvhjeeNaNBiBAsPp67NqscWTXqNXv6CEzx 5n+U/wm54HWqFE9xP7daemXqiDVlIRw3Gu5Yb39C1Z9kE9E+f80qRvC6yvWxfy3zSP 7/96zk5fk/JbHFEPeFS6b0xG/OjfWKd28hdP0AVeo2JIv+ZK+UvVbNZ5mXlVeEV79C W40wm7N/SKiHtRQOK+qyjj6x7Fz5FqQwE3KXruZ0R3W65ZOKDhfE0HQ6lF78qUygDQ zld/t6ucsU0yZFErpoxg781zMz2YtXBbhqdnmhouxxPEUceisI9379z06LN8mYbcQh immhmCREMWbtw== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Date: Thu, 20 Apr 2023 11:47:59 +0200 From: Lukas Straub To: qemu-devel Cc: Juan Quintela , Peter Xu , Thomas Huth , Laurent Vivier , Paolo Bonzini Subject: [PATCH v2 03/13] ram.c: Dont change param->block in the compress thread Message-ID: In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/C+TqE/eBD7dTk8zQL+MYLgv"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:VTtd6cfmwvXWYVQeM0Ep7/hvo8QQzRQK6TZtavl+2j1E3kpwmNm 3Tksjcbupkd/jPEctp46Sh+icdea2wvSc32r4qlImv0zXkE1AXnVklnZ3NNpemV95GKtL3E g/iLj1l/mpEAzQw7f30y+NYAflSJax6lXkl+XYrwcLuFk40vngNEuEoakb+VeJOMslnSlZy q/fvmK2ZXqlq3uOMOWX7A== UI-OutboundReport: notjunk:1;M01:P0:FVzsHSdw788=;HidTxsaqgeSiNQysgXZdqwOvLdV yKYjygK+fdRa0f8Bi39rAuWYW3ABlq1WEXJQbCLf1SchpRyUiidR/g2RsgYFdeOjQjPlbyiI5 VzJU/VU//Ea8Nxkhnh0a5k37/EGLGfRmQ2gZGgMaDnhBcwXeVsKNIoSuMG8GM5CF/Xa1/II0Y TpzR8pvmF4VNOqp+HLzxOmCieW6K5u+pg3pqOhdXfv8I33rxKfYJehAt4KuUoF7Ivqu8SBRMJ 6FjGxLiuZoa7+GZ8aS3kVTHYHzc5Qm8yyiqMRaM+B/tV6InwAS4AGj8Rvq9CHAFVlr63aRqXr MPJKe8CMa/AxlERlxw9UO+C1CL5zAhUzNlmw+dEZxa0liDcJG8uaPYmFlgLWAcCLRgP8sIFMA Nfq0AiJCIrLtyAYd3d0WdNx0r0DVmdUQBGeQ+Nzwiarh1xGOPEOvQsoCgO+Ux0b68aEBagkW0 /3T7ncrjKrRUkcvcUXN0r6YjJB6qfS61lTyss5LrvsoCiT2QexQE3ZXKiKVSexlGvg9zX6eDc /oMYvImBWS0KPVl005MQhANoiLHb1LMqztYTIbjMEPlHUedfq2Jc+VKvldB4V6Evb5OWMjCdr S1q0oQU4RaJxkB1cNmg9yJg5nmrN+fh38JqV5Tcm49b551wlTNuNTSM+vV9VbqooI2idfWmui 7gAq/2AsFZ7du6Awwvi7uqEvfEfFa2DCj+tkkw3hZfutctKVMxnoE4/+/4Vxc/5stYDUqOUCq sJNgNSxPAf7OdOSrpnfetnQgJ2RVTImfL6Dw/pKV+egSXt7kw8drFmiOYb4TDmY1H+uPYVjR3 QzCkjjqMsmBIgTUf956fY+U28olHKRaLrBBbrulje6Vm7/eFVP/76B6QPj+gxzdnk8QOGprlP 6l9oOELo+o3onVtNuPi+P9OfznstFcva8tA+MbFZjyni/8rKTaKSyUQDXq4I1qh9jFxlkNfKo PS1BmJdRWAiAtzT/h++6LNInOJk= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=212.227.15.3; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1681984197558100001 --Sig_/C+TqE/eBD7dTk8zQL+MYLgv Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Instead introduce a extra parameter to trigger the compress thread. Now, when the compress thread is done, we know what RAMBlock and offset it did compress. This will be used in the next commits to move save_page_header() out of compress code. Signed-off-by: Lukas Straub Reviewed-by: Juan Quintela --- migration/ram.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/migration/ram.c b/migration/ram.c index ade6638a96..820b4ebaeb 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -503,6 +503,7 @@ typedef enum CompressResult CompressResult; struct CompressParam { bool done; bool quit; + bool trigger; CompressResult result; QEMUFile *file; QemuMutex mutex; @@ -576,10 +577,10 @@ static void *do_data_compress(void *opaque) qemu_mutex_lock(¶m->mutex); while (!param->quit) { - if (param->block) { + if (param->trigger) { block =3D param->block; offset =3D param->offset; - param->block =3D NULL; + param->trigger =3D false; qemu_mutex_unlock(¶m->mutex); result =3D do_compress_ram_page(param->file, ¶m->stream, @@ -1556,6 +1557,7 @@ static inline void set_compress_params(CompressParam = *param, RAMBlock *block, { param->block =3D block; param->offset =3D offset; + param->trigger =3D true; } static int compress_page_with_multi_thread(RAMBlock *block, ram_addr_t off= set) -- 2.40.0 --Sig_/C+TqE/eBD7dTk8zQL+MYLgv Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmRBCk8ACgkQNasLKJxd slg5Qw/+NROUst2+fDV8s+qGPSqqkppVntNhiTkqXG3YOmAIgrobVgeu/rgk/1aC Y30wgaO2vL0JVBBY0nzs0FL/Mj3iERpS/OIkeHBDBMRBX1WjnIUblEI/m6ZpNS1/ NIeGYi4uCAzo4UtCXHLwFawwiT1bYjKXIukhm+kITje9x5mPTfZBU8cA3YFSCV9Y oQ0rSi4b18aX9AK4pq+10PhPNhX4OALsygJ8Wi4S4OKnoKCDty77JRvAcU/R6Tjy fXc5KqI6dUq336RTnDRnJtzeOk0K4F+CllNNVS2MB3wu7KJ56a/P1PdKppaJiZ9c Y4m1XhAGkfedeW3oC7mmWKdjftRq7BGjykXrPDWRoLbTKXOSiKtvtTioulbRHFaq 50XxO86pLIWDKuz2BGHP80YQweB/7YimakYExp6t912gcXhMSdtHe0wzR7aRnevN BKRu7cSsTLHyB6g9EazLHVu0BxEa3Ay4Dd3owRHOGcDcqvrMDtoOqfs5Xxd3n9fL I+YkFtFb93PQ5/nZ4KhFkS0sxUF5gdkq/YGChpRPaZ2l3pXYdbzzX/LHqdX8v1bA fc8FAcyAlpLsHq5cHdhm62/AOZeiad+++IM6cFnPHM3wlv9g2Sf9tqeeLw8YjqNp HuekaCuTwQZ6AJs8wwVyeemOpgPIyu24ouokxjCmuIYSCVaFLoA= =owzv -----END PGP SIGNATURE----- --Sig_/C+TqE/eBD7dTk8zQL+MYLgv-- From nobody Mon May 13 04:50:12 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1681984106; cv=none; d=zohomail.com; s=zohoarc; b=Q19Z87bhg3CwhKs9rahwAsuBQ3oK+IAG3bIxUNR3AlMkx1N44o+50Zbzrzl/bdx3hMbhaMRjEjQEuqyXeBJEoAbxu8waDOqE5OXRTWRr7EBXjvIumIHvAt9Ad4AEZszuk4i6v67G53AKaVvjbWqWyMNE5qd3XDpT9i3d1X6IpzI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1681984106; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=HG4SL1JOaCQzPMzC1WQwoXqn9MWSNUN7yO8yUqzUQWQ=; b=n7TwogsHDS0nVzidfeupLWvc+8gNGgqhxxfln4cSVyA2XKODVt9ngElOVesVS6LYghhg8bNwiX4YWLUSqoSZEDc/TzAyP61baBQQacrsVnZJGHeUQ0lWBUQEmgD50B13SRzXP/9KyrIPCLs8BBMtFMWjg37t5ahr6aBKxHZfLMk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1681984106207680.5593538583454; Thu, 20 Apr 2023 02:48:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ppQtr-0006yW-6M; Thu, 20 Apr 2023 05:48:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ppQtg-0006mh-SX for qemu-devel@nongnu.org; Thu, 20 Apr 2023 05:48:14 -0400 Received: from mout.web.de ([212.227.15.14]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ppQtd-00082S-Sx for qemu-devel@nongnu.org; Thu, 20 Apr 2023 05:48:12 -0400 Received: from gecko.fritz.box ([82.207.254.123]) by smtp.web.de (mrweb006 [213.165.67.108]) with ESMTPSA (Nemesis) id 1N1d7s-1qIGOS1LNA-012BxD; Thu, 20 Apr 2023 11:48:04 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=s29768273; t=1681984084; i=lukasstraub2@web.de; bh=t+LreNTwhEDOCl9wopvzlvV3nV6+vyqsz+LJ3YLrwmk=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=uIkgJeooMPauOrVuUpzt6iC4HOPbarxcCnFnlFZFqUSvQBZ6BuT6+cmHq+HEZDGzI T9qbPkf2l4bQ2glKI644D3BNOGqr6UVeT9J03dlwGDMUMmYLRYbEjaudljrRy2z8sf 4FVTzN4pfRxsfzrmFzUNWe0EvYLRNLIVMqCWLxpqFdPDHjE/BBrdq/LsZqWFZ/NML/ zlbhnumQa03t6bu/5e2wdptgOImbW9tVN7kkd6Btdq8jnuoT3Jmjjv3WyFOmG+y46n /BIF8VcktIDga86e8GGF9Ti0S0l+lgNNMlZ/AvyrKGbIPikaoS5EvG+xji3eGuKWKV FiFGnYdCLKZeg== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Date: Thu, 20 Apr 2023 11:48:03 +0200 From: Lukas Straub To: qemu-devel Cc: Juan Quintela , Peter Xu , Thomas Huth , Laurent Vivier , Paolo Bonzini Subject: [PATCH v2 04/13] ram.c: Reset result after sending queued data Message-ID: <01e40e659d664ec12470fb6495f00f1ee78d5cb3.1681983401.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/kyBS=5mWfb_ii4L98I+T7_/"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:AlsPIqmGfukBd0RPCof/ZnptuG8lsIX9owHKDAK8zXZnbtdpsE8 +X/DvtxUEIBmpAnxKj1kn2TGJr3mHUmXc8WEvIcezhYW90rsw742Vf+x5SWpTWeWVm5IoM8 nsype4/MCbKP4Mr5SQnI0bG0QKXzGwdx2c6r0NeM+25k9cjPkqRHOSoMjhajmBeQuVR50iU Bsz+Ldk2jDAVhWROdR4Aw== UI-OutboundReport: notjunk:1;M01:P0:Ketu+ru3RgQ=;GFBfzbgVBkEbRFyNDZQlMvH+dM+ Byuwhh26zqbtB/AfPeQXy/O6pvI9ixUX0dR5p48JQi4POxrM2gDZKPspUuzVDDUZptmeCaqG0 uNI/uozfiPTjPgMRxagOJTNJV7ggad9CiNL16Xn6LMFMf/76X5Dt+HfbS5DJs5GmmiD9Zqxw4 IAIcjoB5ZUEU4LoTRgsW1SpmHhQxHdxg0/ffy2XE3RXbhnyqwJ9OwkhSIHrVXBTjOk6FKUIiM 9CoILnblMA/Z6kFqmCa0rgO1ObDm0zUVWVXfxH0tzRlNwCucExDCI1Zwbfvw+AKwxlAE0+iLZ xkPu08Wc71kmcVpdcfSQKkxNDVt0FFGl1GtZiHkjjBoyiPdh4QCCd8hD3xXKWQDxjEaIQf1c3 EVqoMsLSPz5vxz1TqunBe9wBRPO0iljyHSwyX9/Cktk40Ro88Gkw1CoHvQu+f8zJicZGXg0J2 JhHd4y6EPnlgdzFhyJ5h+QOnU6HdLCK3pyudrSCRYq+nWb/0hqgahfbasAykrB7ZOHirXLz3Z t3zNbYnKX4wCjNDTmsXsYzZcGUsH7wEjT2Ixq13G+nhiFAfhxq8zq//8TkWOFOYkzU8moO/xm R/Wy9XP04mmEYV3xzlcmSBbL9LcFsa+4NcgStPQGGbTZEU3QPIzD0+cBlKNiHflKS0zbJBmk+ Hu6VeOXNRWWBOmstFVmPQS0yOHak+16eLfb/ljzmk1CrS5V28aqdOy7Rqz48Xc7jZXfbWP4rM LyO5Er3Hos+drNR541kXm3VYSenlnDNA1Zcjt3+ZeMDvtFTSmAhte36C1VAmMNkSnXnykoaVo LZEzzIaJFknmev/V/fAzNSqBwJV+DjSnUsHgvOqiwodQnbgBtnbB65c6rKEFEi02vbwFQSaOa ePUUbwog5Lma+JFKFF5jSL0o5U4XHefoIM5Hpeo3nyFFLIDTXRFWDe7haGDD8/6dHs9zyR0Fu iECqjg== Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=212.227.15.14; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1681984106686100002 --Sig_/kyBS=5mWfb_ii4L98I+T7_/ Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" And take the param->mutex lock for the whole section to ensure thread-safety. Now, it is explicitly clear if there is no queued data to send. Before, this was handled by param->file stream being empty and thus qemu_put_qemu_file() not sending anything. This will be used in the next commits to move save_page_header() out of compress code. Signed-off-by: Lukas Straub Reviewed-by: Juan Quintela --- migration/ram.c | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/migration/ram.c b/migration/ram.c index 820b4ebaeb..5ca0f115cf 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -1519,6 +1519,13 @@ update_compress_thread_counts(const CompressParam *p= aram, int bytes_xmit) static bool save_page_use_compression(RAMState *rs); +static inline void compress_reset_result(CompressParam *param) +{ + param->result =3D RES_NONE; + param->block =3D NULL; + param->offset =3D 0; +} + static void flush_compressed_data(RAMState *rs) { MigrationState *ms =3D migrate_get_current(); @@ -1540,13 +1547,16 @@ static void flush_compressed_data(RAMState *rs) for (idx =3D 0; idx < thread_count; idx++) { qemu_mutex_lock(&comp_param[idx].mutex); if (!comp_param[idx].quit) { - len =3D qemu_put_qemu_file(ms->to_dst_file, comp_param[idx].fi= le); + CompressParam *param =3D &comp_param[idx]; + len =3D qemu_put_qemu_file(ms->to_dst_file, param->file); + compress_reset_result(param); + /* * it's safe to fetch zero_page without holding comp_done_lock * as there is no further request submitted to the thread, * i.e, the thread should be waiting for a request at this poi= nt. */ - update_compress_thread_counts(&comp_param[idx], len); + update_compress_thread_counts(param, len); } qemu_mutex_unlock(&comp_param[idx].mutex); } @@ -1571,15 +1581,17 @@ static int compress_page_with_multi_thread(RAMBlock= *block, ram_addr_t offset) retry: for (idx =3D 0; idx < thread_count; idx++) { if (comp_param[idx].done) { - comp_param[idx].done =3D false; - bytes_xmit =3D qemu_put_qemu_file(ms->to_dst_file, - 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); + CompressParam *param =3D &comp_param[idx]; + qemu_mutex_lock(¶m->mutex); + param->done =3D false; + bytes_xmit =3D qemu_put_qemu_file(ms->to_dst_file, param->file= ); + compress_reset_result(param); + set_compress_params(param, block, offset); + + update_compress_thread_counts(param, bytes_xmit); + qemu_cond_signal(¶m->cond); + qemu_mutex_unlock(¶m->mutex); pages =3D 1; - update_compress_thread_counts(&comp_param[idx], bytes_xmit); break; } } -- 2.40.0 --Sig_/kyBS=5mWfb_ii4L98I+T7_/ Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmRBClMACgkQNasLKJxd slgBpA/+OgeaPmPVXas+NfbEXADUppcJHhp6vTW2Y72prv6MNTCOwAWCqfRfi/rQ 2Sh3unQI4Agi9/XSyWg7oD2RNsSYlGJB7N5dVh4B2BUVyrFoZGe2JcATv6xe79Ew jqu3KG0a1LzLlOWWITchgILmcBp5QxOUo+3HecZ2lhIo1yCdeajoZBW/fHq9P+p7 SM4QmdKMJBEPL/5QdzG/QOhOeUNgEsKHCxLgsVjErwDAN8aytCsBI2qa6TiaC4Qb toWssViDt7knujnx5ZF6F8NwBEl8EFzOxhnS6su98REeaQ/0ibIkBCMwceQ3NSRL h4S7FSP1tr8YWq9pDutH9sPXYfUC9Lk9C9Jr7iEqFQewXtRmSB0T0fnedgGn6lm/ gqIX6RcfFJQ1ye+CL2MMWw/akpH6OiU2MTXysBKEllWpY1qYsnP3z6Nt4CD8hqjQ JMthSscKrNthZabiUwT1nz7jD0OzQuuL/BhNApYPNiamvtbv7rb8Vbq7sPPuyA9+ Es1vIHDnTxR/6+GM2mtPjnH3dwm66noOiYgcs3DXCTp4iEEsP+n435nPNVv1Ggp7 uh5GVMx8DKTeKQcsNPFCV6ps1/PCD5NH9NUCb1kUkgJ0Vm3Z+5z5nuPlkca/sX2J IqlH5VMEt+UhXNLuSg3OAfyJhHuxzmZ0WBuGPO/oDHfO4eJIQu8= =2UQN -----END PGP SIGNATURE----- --Sig_/kyBS=5mWfb_ii4L98I+T7_/-- From nobody Mon May 13 04:50:12 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1681984114; cv=none; d=zohomail.com; s=zohoarc; b=IQsZBJDCbOhk9pkyPLy0vCg2LYK2MGQw98sOhRB3kOK+WQ669EmXpEVXX5Z0KTQ2aWEkMJX9HGZ4YengbkC5G/3LZS8pBjEkZ/NVhhtSjtdAc9KEkXyf/IqXvZlKkMpAs4tqUiBHkOud3UmUv/ASoe/Sa32yFXHwpGsA7sD429g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1681984114; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=evBUdpyCTS5iRQMKO0OS2/8vQKYOel2tPRlD5OKpAaU=; b=KSF1oGEYY81KMSWSryegA9GihvImGspKfUgkMo4JUP86UV7e0u0ejjgInW3EisOY6dQwg7R29aJXX/erhvbeH3Dp7FkBccYf09ccACtETj8JF1qG8jOq1Uki1fkIgwboEzfVmM3wCMMBDNtdZFNIRF2/wJ7HdDAIw3VXkyta4qM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1681984114209817.9167603083181; Thu, 20 Apr 2023 02:48:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ppQtq-00075v-SB; Thu, 20 Apr 2023 05:48:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ppQti-0006nL-4b for qemu-devel@nongnu.org; Thu, 20 Apr 2023 05:48:14 -0400 Received: from mout.web.de ([212.227.15.14]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ppQtg-00083A-DQ for qemu-devel@nongnu.org; Thu, 20 Apr 2023 05:48:13 -0400 Received: from gecko.fritz.box ([82.207.254.123]) by smtp.web.de (mrweb006 [213.165.67.108]) with ESMTPSA (Nemesis) id 1M604t-1pwJa84C4J-007I00; Thu, 20 Apr 2023 11:48:08 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=s29768273; t=1681984088; i=lukasstraub2@web.de; bh=+fdw9q3h4EKpOAB+Z4itrIGw77JL1zPkXvsYNoHRZyM=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=XiUUrDdl9HOzgHAqAyOVwEUQv+nq0lsuCjE5f97PCX6rMfuEQC8cJ8ygcLtQuSWy4 j6NU7aMS0jcCSbpc1VlmMNjmTCw25J94KccH3pEioy3xLSq3u5nQTavlZU4QOC5UsN lkZ814h33Uuhy1TKzSe4d4EnuHwvjZcP2NhECK31vuoGxYXY/zu0xMFh4uR9azZit1 5GSboTpZQGTVV3kd6YDZsCq0NFAg2RtYpQd6YL1x4Xt8T6rtFtEY5g7QBZDlJXfl6o QWfKJ7Y0KBEHTJ4BpYlv0NyZ2tzj6vHm+0Ic9BoeEihkE8mQ7wsZPASR4A8XLjZk8t qFK80tJVmnz8g== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Date: Thu, 20 Apr 2023 11:48:06 +0200 From: Lukas Straub To: qemu-devel Cc: Juan Quintela , Peter Xu , Thomas Huth , Laurent Vivier , Paolo Bonzini Subject: [PATCH v2 05/13] ram.c: Do not call save_page_header() from compress threads Message-ID: <11f3eccee34665a352dd2917c5a662dab8ad528f.1681983401.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/9TFDw7wf8Ylnou9Au6mArZY"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:Jco2ACVW/KFDiJbCeHHxX+KeybfArKxTb4WTcfFhfDqEj0UjZ8u xnxIr0QkbCCIqk4HvjQ46TPcuHigd6dQarpJzks3ezmkXun9FsrtXMgACmCLLJIUA+K/M4R RY+xB0YHJqZKE/FeitxEdeLTfFdwkdrYUH4iFRpDkfBaw/Nf29oUrn/r6VuiR2sk/SP8PHN KdQXw3H8VcSt6G6FaPvGQ== UI-OutboundReport: notjunk:1;M01:P0:hrLN5Vi/40M=;NbZc95AqKigOq1hufRt+yPtqHZA qCJ41xDEnoHej1XCMwSesa4sDSWxZp87RPdLOHYV0H2HBZ3LCnerYYXohAGguGsOq28Y+lDVl oIAwdcYHlJSWYHjeEpGFaZjoV+AhCvTInVbyksUfFjaxqv77RkXkkTLIeLWWDS6WkoGffVTs+ nLdCi40Qr7iprHH7McT4Pm/yMyN6IqEZdIpzq9AWdnYtw1xamiqVsGbxlTqRZNRCUHcboEE4+ w8fBvCQCPZJhUsyMOkKKzkNTfX1kyu35xfbTVjNqjLF+cF0IzMCS37SF9zhjFECA1q/WQka3E YMRAj8AAi62FqRYVCzyqXaQ/GjI778zcpVi+6k1tXIJq6NL3LW1vvgi3jKtupn+ElJ/moekgw YndVSqi8JimcEgWOkO99EvQcswf8tJgofAm3ULSbCPPMpKgcYZoF3lkKvb0+Lz4pA3iBz0NcC f4quNjIVsH1kAm2dO3iuh3NBFVbu+y8kC/OtOs2y3SXXS8CxdcwgSuWDZgi5iXe/aYksMQXQS 32TuiWaE1x+xP110M6GnGx5RAIVKiLIVYNUB+HebrdCS/QwT34Vo4gvP6DoHhgW+hncDw7Cax /DFJDM86ZpCM8yuJR9tS1KK/hTIqUFF8DUhPl+yYVwDobQYJax9LpOy7QI0q/6KIZJS/dIQMk U5MZWxFnP1z0GRGJH3kMxNewkj6HdJgBa+hdryR0thwaUy86Hz2RXprnvGFPKQBMxO0xvLLc+ cpObjKhQ7kPZ0PGt3Ffe8AC0FXnCgHE8JoKKSHb9ho9RbtBO0RQSLhSSohbKlG6AcT5bpBOxc DvT/ud++fUr6b4CR2T451QqZ57FwmSpREs+r3VLNQF+RO5Xl+3gDJV1O/oypRsFYwDH8MT0I0 Z9Ij9pi1Sj6NBGxJd6yhFD0mRnPxb1jv7SrcT3+HSfARJSPjKINlIZibPd4T8/AE+PO3zPuen sVfV8mcHnHH6J44PYtHCWUh+Dfk= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=212.227.15.14; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1681984116034100002 --Sig_/9TFDw7wf8Ylnou9Au6mArZY Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" save_page_header() accesses several global variables, so calling it from multiple threads is pretty ugly. Instead, call save_page_header() before writing out the compressed data from the compress buffer to the migration stream. This also makes the core compress code more independend from ram.c. Signed-off-by: Lukas Straub Reviewed-by: Juan Quintela --- migration/ram.c | 44 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/migration/ram.c b/migration/ram.c index 5ca0f115cf..d248e1f062 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -1476,17 +1476,13 @@ static CompressResult do_compress_ram_page(QEMUFile= *f, z_stream *stream, RAMBlock *block, ram_addr_t off= set, uint8_t *source_buf) { - RAMState *rs =3D ram_state; - PageSearchStatus *pss =3D &rs->pss[RAM_CHANNEL_PRECOPY]; uint8_t *p =3D block->host + offset; int ret; - if (save_zero_page_to_file(pss, f, block, offset)) { + if (buffer_is_zero(p, TARGET_PAGE_SIZE)) { return RES_ZEROPAGE; } - save_page_header(pss, f, block, offset | RAM_SAVE_FLAG_COMPRESS_PAGE); - /* * copy it to a internal buffer to avoid it being modified by VM * so that we can catch up the error during compression and @@ -1526,9 +1522,40 @@ static inline void compress_reset_result(CompressPar= am *param) param->offset =3D 0; } -static void flush_compressed_data(RAMState *rs) +static int send_queued_data(CompressParam *param) { + PageSearchStatus *pss =3D &ram_state->pss[RAM_CHANNEL_PRECOPY]; MigrationState *ms =3D migrate_get_current(); + QEMUFile *file =3D ms->to_dst_file; + int len =3D 0; + + RAMBlock *block =3D param->block; + ram_addr_t offset =3D param->offset; + + if (param->result =3D=3D RES_NONE) { + return 0; + } + + assert(block =3D=3D pss->last_sent_block); + + if (param->result =3D=3D RES_ZEROPAGE) { + len +=3D save_page_header(pss, file, block, offset | RAM_SAVE_FLAG= _ZERO); + qemu_put_byte(file, 0); + len +=3D 1; + ram_release_page(block->idstr, offset); + } else if (param->result =3D=3D RES_COMPRESS) { + len +=3D save_page_header(pss, file, block, + offset | RAM_SAVE_FLAG_COMPRESS_PAGE); + len +=3D qemu_put_qemu_file(file, param->file); + } else { + abort(); + } + + return len; +} + +static void flush_compressed_data(RAMState *rs) +{ int idx, len, thread_count; if (!save_page_use_compression(rs)) { @@ -1548,7 +1575,7 @@ static void flush_compressed_data(RAMState *rs) qemu_mutex_lock(&comp_param[idx].mutex); if (!comp_param[idx].quit) { CompressParam *param =3D &comp_param[idx]; - len =3D qemu_put_qemu_file(ms->to_dst_file, param->file); + len =3D send_queued_data(param); compress_reset_result(param); /* @@ -1574,7 +1601,6 @@ static int compress_page_with_multi_thread(RAMBlock *= block, ram_addr_t offset) { int idx, thread_count, bytes_xmit =3D -1, pages =3D -1; bool wait =3D migrate_compress_wait_thread(); - MigrationState *ms =3D migrate_get_current(); thread_count =3D migrate_compress_threads(); qemu_mutex_lock(&comp_done_lock); @@ -1584,7 +1610,7 @@ retry: CompressParam *param =3D &comp_param[idx]; qemu_mutex_lock(¶m->mutex); param->done =3D false; - bytes_xmit =3D qemu_put_qemu_file(ms->to_dst_file, param->file= ); + bytes_xmit =3D send_queued_data(param); compress_reset_result(param); set_compress_params(param, block, offset); -- 2.40.0 --Sig_/9TFDw7wf8Ylnou9Au6mArZY Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmRBClYACgkQNasLKJxd slhXhw//eiO38kZivgoS3QGUz9bFtebu2EJgY1eP6sOUuZqQaprwI0Aq/CCVtI7T xD80jXPuPlhwz4hJzualuFTChjmd9H8v84tHGatWZoszjJXOJh+ZyKLiVDr0mzAp mSdh5hPblQzYojQMylZR37h2+LTO9VEb1L6FPT9ZLNc3chW1vPnN5WHjxItNOppo sJrLVmRdwAoWs1Alh+0Jli7nA6uyJOTOBtvduCXgluw2RxB7F8rj3K6VEn49OFrZ 7VWdRv2yi5AvPl/8g806ZZedSn3YmWHdnWuQbaOj8GEnh+etrNmuIgNGuWoqY9QM S9IUTQmRxAhf7xISusbtUMgJbWuSDdn30mVXqFVS0dlMzkP9fJy+ue0BylaLO2TE SNkr4wbzo5Kgn0IuyL0dYdkHYeITlH9LuG7qCmFPmTNvYmxYkSW6B6djnPs4scah yJBFCNxGbfSo1R/QG1OJDGcCLmJFe4NbTkZ+Qt0GyIYTUHLbGRSuEc/Yf9Qdfmo+ u1V3StLA2gl6hdD0YHhMPuogxtEW9kw+yQJHL5E8f3Ns18H8Z/7J98RQ4XpkVJh/ VdQhIOyIzlWmbrofLeQJzFZLbsAcH5mqZlbMxAotxVKo0bCVocT2/iBm7rlNJ9xR yji9MNFwzdDz3ZMXdLeEgYS4HCta/1Bph7NYthnCiAtrwXnLj4A= =QJrG -----END PGP SIGNATURE----- --Sig_/9TFDw7wf8Ylnou9Au6mArZY-- From nobody Mon May 13 04:50:12 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1681984163; cv=none; d=zohomail.com; s=zohoarc; b=PXZ6S3pVjcxoEbsFr1g/WrVDZkdgqpBUjZ5UTBkSmi3/1lDTrrRZD2lBx85X2b/t14iFDXhr04v//4rJEz3IEkf2Q9p/rNqseSCfITi/dKo9DrdcYSt6TORYrC4elV4BQGBw0TpSFX2nTpmtjS/oDzDe4myH698TzDX66/w6XkY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1681984163; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Nnn/PlPmUw1R8Nd8PAjmmEOOiFfEPOtxzVRj7BAdGUM=; b=YeZaS0rAu8ELELIixWGEm1jlanuCdyFHa9knoEA2U2Xw5NM6QA2Hltey0jDdchVyPpf/BEB9ZwIUxHRksxMMEy2eKZiLax1eFB3qUtr33SlN6Ss9XUMR7JUWQxlrW+AYy0yUctUS2W/O4X71I3EsPtNwbKu/JZpfH2AHuoaT5ic= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1681984163976109.67514282739592; Thu, 20 Apr 2023 02:49:23 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ppQtt-0007Op-RL; Thu, 20 Apr 2023 05:48:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ppQtr-00079h-UP for qemu-devel@nongnu.org; Thu, 20 Apr 2023 05:48:23 -0400 Received: from mout.web.de ([212.227.15.3]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ppQtl-000848-C4 for qemu-devel@nongnu.org; Thu, 20 Apr 2023 05:48:22 -0400 Received: from gecko.fritz.box ([82.207.254.123]) by smtp.web.de (mrweb005 [213.165.67.108]) with ESMTPSA (Nemesis) id 1Mt8kX-1q99hi2Em1-00tR9A; Thu, 20 Apr 2023 11:48:11 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=s29768273; t=1681984091; i=lukasstraub2@web.de; bh=PE/+RPtZ58nDtwqM02B/f1sR/LpHOgbdvtCrUvSs5Vw=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=BmkuCidWQO2uw8qgazUrnGxXpiJOMAJfhEXKFZhtnsqhlJgMpBz5QU0jR/IT8IZRU gL1nRJiV+qvX+AscZO/MOQBNcVkGcAUOn5DThBdhZ+AxXqhSIINRynHSIXL2HKJTKT g9tRAUFXxEDjm0ZpjLN8IdbdGZrvmu8UoRCn4jW39PPEuwru5OGJ8PiAX6FhZm+qK5 BgLV7IeacFOVSns1/dnhvIceAP8OlVoGoodIhWtTW5K/wEAE8/i9gsjX8MR4MYBFAh 4yNk4Kxsi2pSHLJp3sL6uRTreMnALUb4FAp1Aa2QcE7+0/lqOMWbLPLORXcYxPqaGY rP5ptt4SA0i6w== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Date: Thu, 20 Apr 2023 11:48:10 +0200 From: Lukas Straub To: qemu-devel Cc: Juan Quintela , Peter Xu , Thomas Huth , Laurent Vivier , Paolo Bonzini Subject: [PATCH v2 06/13] ram.c: Call update_compress_thread_counts from compress_send_queued_data Message-ID: In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/UrVxLMVCj9g+5EYApw70dko"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:RhZnjKHprqgazYTV1zVudc/4tkllovOkx3q1qgiyEjdmUJjXTf5 uMQEyw2dzncdqqf/v8qvGow56P1U5j1VvQBa1IO9xqpyPYA/cG/XJyS68uzNfMMRkiUYA+r ETNwWETy9jkcdcuIpG1H3bW5YTagK//aBYKFswsoIm8i4Hno8ucH78Psy/I8D0Qwx4E3Knq 5SSy2EOeXKeX4+Yoqn49A== UI-OutboundReport: notjunk:1;M01:P0:GeJZdyX0q7Y=;XFgMhJqAyLPCy6w0meht5jSEi4W 1DSa9RhsFxugh0BVEcjT82qydLG+et4x1JlaPxpQ96PL6RKdrs3R2nsQ1qj99gE3V+PUsY+xe TMoMW6NQBpi+ZXco2+A2v82CcMcJI7QNnJW/HITYznT80lWh2+7sSMJiZZsihSs2PfPJO0RaE 4QBwUPUFGmmJ6gQe4eI5ZO5S0hdOeeBEl01e3vEbaJte1w09+OutMhWp7nz55++MIdVVa3sDc 1sjtlHaGJxIR3krTiLwRLn00PMlmGCRAdRzkeLQipLrwIYKNE0KuCynHAhfVfwLfx7ps+kij4 C1UdhK/IwUL2XYInT7VaUlVp1eUojR15gCdvKCwav9h8hLAJRmdavV7znGA4QqA/FDGt1PJTO C8MwFIve/p70hpNBRJzokYPYWVVY+tieu8qOVhhwkW2Gd/aZfWpjPAt5WMba065aEBVBUI1hc Yr5BxNEZrpB29pk2xPLhgG1WHZrXQHnkYjspKXv/IfgWSi1uo6IXfBSVeTnRfwU1jUOTLrMoL DcLr5fsLknKyWYdZ/hz9+trGtGDeBhnMTu6esatUcG5Nb3k3KerBhBotMBhbt1DTOWXRqeoBu p2gEA98u9DCmjFjgVIoYAv80HQxfWOrbOnolgdYiH4QxO3SuJL+SUVcLmS3H2TGRVQSut8RaS CyHw0A5Bu+VsqoR+xZDqyucnRdf6T7niND+DW07qNuGTP55TyviJqNL4cu253Z6lvRgD4B+Se QczWM/XmeQiYlOU1LuQRuX3OQ0oE9QixTVbfclqi9edYz5CcVvPaiVDp31X9qa2f87ln7rImw BtBKiMSy5XDShVZZ/lC1jn+pL4kCijHVq2E7ogi72LllJMtCsrMOR3ZhLHFyWLFy2K9jUdHL6 a2w/bwvKK/Nx/HJCrj9RyGWcrNFqcuATfrM+GG9JUjdEMeUc5RUCU66HRFIGjjTQj/OAZQMCN kJ5QWrkDzXantKCp37PMRj/mB/I= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=212.227.15.3; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -21 X-Spam_score: -2.2 X-Spam_bar: -- X-Spam_report: (-2.2 / 5.0 requ) BAYES_00=-1.9, DKIM_INVALID=0.1, DKIM_SIGNED=0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1681984164880100005 --Sig_/UrVxLMVCj9g+5EYApw70dko Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This makes the core compress code more independend from ram.c. Signed-off-by: Lukas Straub Reviewed-by: Juan Quintela --- migration/ram.c | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/migration/ram.c b/migration/ram.c index d248e1f062..3894d0ae79 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -1551,12 +1551,14 @@ static int send_queued_data(CompressParam *param) abort(); } + update_compress_thread_counts(param, len); + return len; } static void flush_compressed_data(RAMState *rs) { - int idx, len, thread_count; + int idx, thread_count; if (!save_page_use_compression(rs)) { return; @@ -1575,15 +1577,8 @@ static void flush_compressed_data(RAMState *rs) qemu_mutex_lock(&comp_param[idx].mutex); if (!comp_param[idx].quit) { CompressParam *param =3D &comp_param[idx]; - len =3D send_queued_data(param); + send_queued_data(param); compress_reset_result(param); - - /* - * it's safe to fetch zero_page without holding comp_done_lock - * as there is no further request submitted to the thread, - * i.e, the thread should be waiting for a request at this poi= nt. - */ - update_compress_thread_counts(param, len); } qemu_mutex_unlock(&comp_param[idx].mutex); } @@ -1599,7 +1594,7 @@ static inline void set_compress_params(CompressParam = *param, RAMBlock *block, static int compress_page_with_multi_thread(RAMBlock *block, ram_addr_t off= set) { - int idx, thread_count, bytes_xmit =3D -1, pages =3D -1; + int idx, thread_count, pages =3D -1; bool wait =3D migrate_compress_wait_thread(); thread_count =3D migrate_compress_threads(); @@ -1610,11 +1605,10 @@ retry: CompressParam *param =3D &comp_param[idx]; qemu_mutex_lock(¶m->mutex); param->done =3D false; - bytes_xmit =3D send_queued_data(param); + send_queued_data(param); compress_reset_result(param); set_compress_params(param, block, offset); - update_compress_thread_counts(param, bytes_xmit); qemu_cond_signal(¶m->cond); qemu_mutex_unlock(¶m->mutex); pages =3D 1; -- 2.40.0 --Sig_/UrVxLMVCj9g+5EYApw70dko Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmRBCloACgkQNasLKJxd slhG8hAAr3Wcz8MwrTgcCcLx7DVeBtSEup65A+YirFw89XqtBXMKKvYzLoHG7Emd +N+Nnb1lzV9QmCIFydBHOCtefXu7DOx4MTJr8C8ezEBzDr3EXx1h1vNKoN2UhUqk Ci5C7b/ScUCCKBS1u9kLba/CZyoCJE6EOR5MaTOC4mFkcjv7v12I9dSjrGK/n74O W8KIBT79CatCgQ9KjocCWyJxRLh9WRGdnt55XgFn5PXQbU4RfelHJbHkM/y3ldo0 cb1tw+obOa7Kxf6MpACGEGRlhfUReBexpdcVyh0OgvHD3GK0+G7ovezh3nyIPWzU ZnHkF2OtaWgHHbJ3s5OnWqQJDaXeEYiFf0UdWCHRL0yD+Bd/cmvEqQ1YHjMKobKh c8F1yFsLUvOLUdM83NtHQftT/dnXzPtOIEfOaTHPc6o7NsuSIcwsYKpLWOLJDiF+ ZFiGGOIaDxvMJRD81LLKOYWRVvzSPQKzAxcbd/Gi1tJG6h7vC2nl4DD6u0wi5IgJ JQ1TjM/uGmHJxVHilvq5DMD7UQ1ZY4sXRHYBOmIAb2FqVLu2e1piYgjZd27CNCT+ s1xq4OuMmeOKKhCBpYbt1xew4+cedFlrwE/pu1mN6L0wwRZB3ySmsYw0Ra3LjwAW YSJg7ryFss8prWxDhMUUi01ZCHQ4M6XdBERD6RWevuUDJB1Vr6k= =bxif -----END PGP SIGNATURE----- --Sig_/UrVxLMVCj9g+5EYApw70dko-- From nobody Mon May 13 04:50:12 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1681984128; cv=none; d=zohomail.com; s=zohoarc; b=bPpwwiEi17bXrAzGETM7P3Dt/tyKIGms55La54j3AZwAvI8v+xXA/6eQ9BNw3kKCY+VePhIEiuk8MCfU2BE+bMWq/T3n82KRNyBhDAGfUjtgbNTKeN/+TnnXnXTTQN8d9UQ5UJApE2K2Yw7nfrjVcEuX0azJRjmyTMVA7GXbJTI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1681984128; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=qLmCA7bZQMKU9ZSQE1reONxvDFeqZpGnRbdaMhWad9w=; b=GKxJWcyi0JK9sY0Smk2gPgO519LT5LADP9M7BrH0U+Q0W9G32P9tekV7Z2BURa0bNhLO5mxzALk4VOgUnW4EkIt1mF/UddfbwPi63jZ3bA2X1LpHAtTEGO7pDc+M4R9bcwv8+hNAhW9M5+fmQu+g8wthPWfQAsD6i5ts1wQQYZg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 16819841286001013.7970558148108; Thu, 20 Apr 2023 02:48:48 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ppQtu-0007Rv-IF; Thu, 20 Apr 2023 05:48:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ppQts-0007I9-RI for qemu-devel@nongnu.org; Thu, 20 Apr 2023 05:48:24 -0400 Received: from mout.web.de ([212.227.15.14]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ppQtn-00084P-Pf for qemu-devel@nongnu.org; Thu, 20 Apr 2023 05:48:24 -0400 Received: from gecko.fritz.box ([82.207.254.123]) by smtp.web.de (mrweb006 [213.165.67.108]) with ESMTPSA (Nemesis) id 1M6HKG-1pw2b90En2-0070vH; Thu, 20 Apr 2023 11:48:15 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=s29768273; t=1681984095; i=lukasstraub2@web.de; bh=FpIxYaKLOgIitA+qBmFyXqZmZVeuU6FI1vEEvwT3GlU=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=TL7AXGJpKrJ5R2VllQozULxNiZZ3rzYgk4EA6XQHSKcWd0UglzrUiUxIasZqqiZ51 OAgKzFY3/8mvwBKf7I5TwAv7Wa0CBhzInLJ88Fbw6BpOT85JUDscCXEXTlNJ5UdzOv n9Pa6Lsi+cECrLtX9/qCKjW4CANtsMtAZl5UZErH5re+vevZMEvlY5w3Ez5kcNhde/ LtFKFjJD26+pxEMDW4i8kvkxRuQiLZWMpUoNwSsmQK5hqUFiVE67zuRC5dut/qCxm6 C78M+RBs6anEmbwSnZEhkZhneiuFCrUmJauBUG+jLzVQIZtBHYAtQo8fSpTvuWUrQe l9yWjx9rWJJAQ== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Date: Thu, 20 Apr 2023 11:48:13 +0200 From: Lukas Straub To: qemu-devel Cc: Juan Quintela , Peter Xu , Thomas Huth , Laurent Vivier , Paolo Bonzini Subject: [PATCH v2 07/13] ram.c: Remove last ram.c dependency from the core compress code Message-ID: <5951bf117606dde2183abead9ce34944734042dd.1681983401.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/oEiVX2y3PYT8AUY4zKBlCk7"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:IDfVGZf31l/HbmuGxozOTCdz4Dhqsb/BlP7/bthMcNamgWxbYS6 D9VJPDeN2+p7x92siiZUXCCUNr0M+/sGZLWez9yzIQcQmx7WFv5Dh/gfxiTyg7f3D6ZPxi5 a0bUqsnlS0wZTqk2DueP7artW3zS21AbjVY62p54BtOu2ZcTcQgK574CSMhaeiKl6PqWEFZ JLcNc6wXcuI+PYLJ0ATBw== UI-OutboundReport: notjunk:1;M01:P0:YKOva09f4v8=;rEEFE0UdM/S34FztTcdGE21eS7Z 0lXRXRfu7vGgHxS5W10MLFGScBzwqPxtvYvgzhijTShD1L5dBDuSLKbgeUtKLgq99IQ/+tDwZ VryOoWLdWrycaBys81eCZcL+Snrfmwx8UKBuoihK2JOl4JHbTah2j1CKJcsivpoHZxPhKITEx /WZdGqCvYl/7uqnK8noHoVXFKZt+pj34GPf/J2Bt0DWdeMil2LVH5VfoUh+GUPCijK5XjfNIC HjpIbTUetDn18suRd7XVThmazMAPAyanihi7UlK90qLa2yi89wa+cRelmV8c9LnT+tq0F9K0Z 6u3NHS6yL0xffbXAyzAFe5VSHYoLfzo1SCs3i3KFuqTIflgd5ECN/S5H00sQxNHWftIpWmYb+ iNWLTfbhDsFg+bsk782f7L1uCnI60vWJa7sF2Tj9BGHbrL9k7wHCZJBg2VqR4GGLWP6yCcyRI XHxZHV8FsWwulI6nttmtOL9QWqS6AgtAsgMy7DYz5S9cH9QJsxB+WWe7edw5wUbZ/YMGhgoN+ PnAXaEGzkE3mskK21d9UoEeixKYcZUmV8BAKcn4hGs4HpQA+lokz6ToqQTNZzhVZQrCINcWgd /0Cg4nfXZ2R5Gk5yjV8kmuFDk+r7W6xyP3kix63gZqv+8vYFyKhoh9sRjFZ9Mi3ydZ/8x3H6I VllcFWmIiESWJDgdHBGgjhBl1ZP5oVccD9gNQMyeLfWgLs7PPVCvroCxN9vjHXUzBsECgvCpy cU9r9CGNqo2nR9LrrKBs7pCV7hKpeyghWPOyN3A7Veee4Lynb3WWH0+QIqSSOtjxy8nB1rBCM uWx+G0NZawC6hCFNu56BzNk872KikidrzfNgbjs9rLD+9pbvIcp8uZdt2j5nZE9bGsQcWAmIA 0KKpsu1sNVLmj7aCk40mqmjIFm/rTDU76TZtmn1ib3u+uJrDBL0yeAlhGqjkLAhIHrXcyyXWk TWs+uIeFv5rEcdwIQaKfTH/98dU= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=212.227.15.14; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1681984130705100007 --Sig_/oEiVX2y3PYT8AUY4zKBlCk7 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Make compression interfaces take send_queued_data() as an argument. Remove save_page_use_compression() from flush_compressed_data(). This removes the last ram.c dependency from the core compress code. Signed-off-by: Lukas Straub Reviewed-by: Juan Quintela --- migration/ram.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/migration/ram.c b/migration/ram.c index 3894d0ae79..bd3773d4c4 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -1556,13 +1556,10 @@ static int send_queued_data(CompressParam *param) return len; } -static void flush_compressed_data(RAMState *rs) +static void flush_compressed_data(int (send_queued_data(CompressParam *))) { int idx, thread_count; - if (!save_page_use_compression(rs)) { - return; - } thread_count =3D migrate_compress_threads(); qemu_mutex_lock(&comp_done_lock); @@ -1584,6 +1581,15 @@ static void flush_compressed_data(RAMState *rs) } } +static void ram_flush_compressed_data(RAMState *rs) +{ + if (!save_page_use_compression(rs)) { + return; + } + + flush_compressed_data(send_queued_data); +} + static inline void set_compress_params(CompressParam *param, RAMBlock *blo= ck, ram_addr_t offset) { @@ -1592,7 +1598,8 @@ static inline void set_compress_params(CompressParam = *param, RAMBlock *block, param->trigger =3D true; } -static int compress_page_with_multi_thread(RAMBlock *block, ram_addr_t off= set) +static int compress_page_with_multi_thread(RAMBlock *block, ram_addr_t off= set, + int (send_queued_data(CompressParam *))) { int idx, thread_count, pages =3D -1; bool wait =3D migrate_compress_wait_thread(); @@ -1673,7 +1680,7 @@ static int find_dirty_block(RAMState *rs, PageSearchS= tatus *pss) * Also If xbzrle is on, stop using the data compression at th= is * point. In theory, xbzrle can do better than compression. */ - flush_compressed_data(rs); + ram_flush_compressed_data(rs); /* Hit the end of the list */ pss->block =3D QLIST_FIRST_RCU(&ram_list.blocks); @@ -2363,11 +2370,11 @@ static bool save_compress_page(RAMState *rs, PageSe= archStatus *pss, * much CPU resource. */ if (block !=3D pss->last_sent_block) { - flush_compressed_data(rs); + ram_flush_compressed_data(rs); return false; } - if (compress_page_with_multi_thread(block, offset) > 0) { + if (compress_page_with_multi_thread(block, offset, send_queued_data) >= 0) { return true; } @@ -3419,7 +3426,7 @@ static int ram_save_iterate(QEMUFile *f, void *opaque) * page is sent in one chunk. */ if (migrate_postcopy_ram()) { - flush_compressed_data(rs); + ram_flush_compressed_data(rs); } /* @@ -3512,7 +3519,7 @@ static int ram_save_complete(QEMUFile *f, void *opaqu= e) } qemu_mutex_unlock(&rs->bitmap_mutex); - flush_compressed_data(rs); + ram_flush_compressed_data(rs); ram_control_after_iterate(f, RAM_CONTROL_FINISH); } -- 2.40.0 --Sig_/oEiVX2y3PYT8AUY4zKBlCk7 Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmRBCl0ACgkQNasLKJxd slgvig//UsAYZIHxCfpj0fbSA5mfLOf6Ztq/iCUqltdWWs2M55yY8fywNGa9uMgy 1tpenMHoOFTJ9cggFo0Ocry9sISwTb13f7mbtA+P4KCq/FyaO2k6EscF+uwWfiCr 4emlK0EElCFXriFNnbSnw6VFhaGL1MZVeCxoVyEMlc1DofJSKdoLWZXIW49jDMsR qGuhD/TRpcEZSUNg3vp6lRz6bmKXO1yZ6GrOjj++R4jsD562MTBI8XKCB9ehfdB+ /80+7t6cvikopxHuDkAveEERK9/4WYo7aWuOFikB+oDbVSto58WQvXoX2/ok+OaA f7/dDe+X4fftZ3kg7CUEcV2uEFlJ6CuM2DzAtWVkEQQ5Q2e3y1L1XubkodUfhuVz WrdL83r97pa4gy5dzNnUUmjgJUPmucm+wP9+jVfQirSR50ckEnLIFSoMXmMIYEL5 H2yb8jsppL75kFRO5N95NKVcY1un+DZVTb0NeYxYbOfu9fy1NM3jFtbtZMfbzh5F Vxlwn/S9+adcp+NjtJlYxFhDvbV7xW6/vlsaDQA4/n6vsFLclXUVO7lM6mQrh/4a jwv9gsC1ysZMzZi6qXofPorTq2aW1niX+mk6PCELpjKy+CTKGAbLSYV68JqiI+wH 38Qf+LMHiR3oXj24kMZCcxxc1SVi9TgE2XguQTZCR1iIQvt4rC4= =dqZ3 -----END PGP SIGNATURE----- --Sig_/oEiVX2y3PYT8AUY4zKBlCk7-- From nobody Mon May 13 04:50:12 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1681984120; cv=none; d=zohomail.com; s=zohoarc; b=eEBcuBfQCbJ2JppG2gX5xXMOW0vffXj4IrHcVfFY3kL6dQiTUUmj53EhZJptUkt5gbM9JHPfHK0pTF2iT2niTPzh8MsTQszNBbt2zX0yn+gu465Z0ey5KqQGi3SZrsGyRJCOSHvCXIm2RdfZaSYHP0vXzaeF12uFFtx0F8k0sFE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1681984120; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=UYqKWQWBwuq0N9oV1s9RjsYIC3AtxqGytWzLQLfREts=; b=kf80aWzaXElF8i90OwV2y6diPVjXl+wa6x9zUXHkOIvcKLASh2PW50TkWZx8WjF+rBUapFLF8exb/wzGs23SBU0mUnsmGu731pMetKY8b7/kUpLQTaonQ8zPK08rKaziQGrwsDPjo6LBvlEa7XhHH6bqkE1dqwp1VFsbo9qzXlA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1681984120150163.6731854110527; Thu, 20 Apr 2023 02:48:40 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ppQu0-0007c1-24; Thu, 20 Apr 2023 05:48:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ppQtv-0007Qt-3g for qemu-devel@nongnu.org; Thu, 20 Apr 2023 05:48:27 -0400 Received: from mout.web.de ([212.227.15.14]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ppQts-00084f-Fh for qemu-devel@nongnu.org; Thu, 20 Apr 2023 05:48:25 -0400 Received: from gecko.fritz.box ([82.207.254.123]) by smtp.web.de (mrweb005 [213.165.67.108]) with ESMTPSA (Nemesis) id 1MCogm-1pyGaQ2jZ2-008vMa; Thu, 20 Apr 2023 11:48:18 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=s29768273; t=1681984098; i=lukasstraub2@web.de; bh=YroYbJOy5NFzUwYNflZa/C0S/1laMdwdzrpEmu6bYX0=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=as+Bc6pXP8hF3suvBxBd1Yv1Cw1W43ltWhiJLznuyQd9zhfyv4umrjK+jbAhsStWU vvEfglXCq/ThSw4lCWO/uAsZtj7Vuv3oaQtPl313ssVai6Zb94rP2L5gCawmw9k3SC 8kIzDFUhvRKMYrpAt/aXpIRPDgfRgC/FZ/F8HBnO4Z3UKEv2ZcjrIP0Ry1ltXVMMOl 4O3Bs27W+eESfK5Oo6FHxpk+AgTTEkDj7KLl7SGizfboSxO+7poJYtOEMTeNLNXF2p xuE0I8HLIk3hyNq1IAh8VSxJzO7PcrNs2w8uZN3L2dyXhz1FU/17DISbV/5RqqO/LG 39oq3zFnFAFOA== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Date: Thu, 20 Apr 2023 11:48:17 +0200 From: Lukas Straub To: qemu-devel Cc: Juan Quintela , Peter Xu , Thomas Huth , Laurent Vivier , Paolo Bonzini Subject: [PATCH v2 08/13] ram.c: Introduce whitespace (squash with next patch) Message-ID: In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/RY_lY_XodF=gayUNjo9NMq7"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:e+yRir1HNVw4KLruiSp0BKoStcoktBM0DsFRScdfE9RO1OfwZ4y yOTqyVsAo+l/dGKzc60Xnb5qMYRQzQZQiPaF43Z3G724RWfmkxmxoujq4WOOAB7o/hrpeBA YF1GA967wJw9V8gs4DMNOkoiWsa30Tpfb4ImGuz8ltC3Kv1+82HvmiibSTX1xMT7VwjpIWE jLMQIGSoygF9vTuxGX56g== UI-OutboundReport: notjunk:1;M01:P0:bey7fd+HshQ=;8p7hMsmDtBBlQK7i54Oi2l9fJBo 3E0i4Sdy0jq/OFVi38Uf3ma2xw0YrzAvjyU8Vn/SRFrKocykI3NrV8Mhd4OogxJLG20Yk/i05 ThfI/B6gfizxP/H+ZHtf2IEhCPcc/a3a0oaWD6eoHVmUGTAKkR9c9Q7tewo0M0gUmt83oGi5O QDcI81BPH991rLUF9Olyh405eYaIKktnNOjl62VDBJeoqEDRjNW6bkKi6y1QPkNjqIAh95O0d Deey5njDd/KClFqMXknGV4EeEkhsHTwXOGMNRwNevAMuEQib0cg0HTaStWlB7g4WzoCfpRehG gEjDsb33XhpkGKMs5Xzst8p9SspqmW0DSdzsoFz6BMtYOerLe6eqs0XP04rDOmtWbTE/AL0uX mHSF34dupgr2keEWh/0toT6kouaRSIjMpw8Y4ki7Mp1k8+Z30Kv9AjjZyp2hd4nlzcLvZluEu /Fdr5Uv3Gt7/wa5Z224S5yB7peuqmhzshsh2PUibQt3cpTBtPUQoOsTmo0jzKPRFUV1KVeSMj 3TPgZMODN3pDdEWvCEz97cEC+KcG0/UQW2Bpbf1qpZED/oakm3172EaR/mSuhoam3+Q4rCbft 8TNFeES1knZf/kF+HyZO77tVZiBX3KvT1q7JwB2u415su7pHGPfe962aXBEWHWvpfT5ct8Asr bW5WmA2xMK7a674ZVygOnTrTafdG8qRqdUCtoXSR2ykkpYw0psJebDeU8ksmRCg/rU/10/pb9 S9FF8XxTwaVPI++7W7JCgorlg9VYS0jdY05Nca+qoh5z1X5Ks5jejvH52LyAJYsmSOCMTpajt aQxNJrGykp03UzjFQdUpHXifnqOPVUMUcphPSopeIOh2Rz4JXELicZoPOdDjaS5cVR+CFOhIC TKSzIXVD24GQMayr7SXJMikrfge4TerwlehfhVDg9XdM07jjmbdAiy4M0ThWXQ12LQLC8x7rs STE7Vpi1RyiUI80WE33BGN0uCFw= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=212.227.15.14; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1681984121270100001 --Sig_/RY_lY_XodF=gayUNjo9NMq7 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Introduce whitespace to make it easier to reroll the series. Signed-off-by: Lukas Straub --- migration/ram.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/migration/ram.c b/migration/ram.c index bd3773d4c4..b95c5c720d 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -602,6 +602,12 @@ static void *do_data_compress(void *opaque) return NULL; } + + +/* split */ + + + static void compress_threads_save_cleanup(void) { int i, thread_count; @@ -641,6 +647,12 @@ static void compress_threads_save_cleanup(void) comp_param =3D NULL; } + + +/* split */ + + + static int compress_threads_save_setup(void) { int i, thread_count; -- 2.40.0 --Sig_/RY_lY_XodF=gayUNjo9NMq7 Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmRBCmEACgkQNasLKJxd slg4KA//ZzT+m01syvHwtoMHdI/BOCEIZvfy+7iEKSCH1UN+E6S0Xv29NsYXqIWY hENMOy7qDGM647kc2+WIvIy44GwhywFbrmrnydKQGSL/ovUsRglmT7Y0eRLH/zii BU0DjVit+hYQlSw1ZrcxdIA/RNbMfzMk11PO6lif7r/PC1xWNAadvkpd53EIdjds S8PS4xz1mhu1mf9H9MLvQd0L1xRvkjsfbjG2beXsQiJKTSBw/ODHGH6DYjxe9QZw tFPIBahP30bcPyl5kBwpgjccXnqBzU5QmKvQ2Sl2prBMEMc2xUrM7L47KDpICii2 /pP9RROXyUFjaDUencNhMfZqxvD87oatzwRQmxgOvjiCz4zxa33TTzTJIH8WRAoF lV3pkO6IjLwAkgOFS3WUV4fBbXpsS/1fg1CMvfGzWGMXDHnVHzanBU9jHh7UHpbE QOa64wi1f4yaRBmt3NK+VAnkeSZVfN9ymusOD+wtukTi8ew4bVA7whHUtp/yMOWc xn4BnxSSuhJPg0QrnNMO+MCBicB2zXnu2ttRO+ihiLE/m/N3PKARIKvBxKMbkFW4 SXN8OrKqz6TbmkweXkhBU13e19YmDR9i/JT7G2e9Y4I4FUUcDQIRiQBFLN+E4ouR 5O0KpVYNly57CGQSWBOZGTB0/EiGF403VP9sD4yRZz6M36J1FZ0= =XG6r -----END PGP SIGNATURE----- --Sig_/RY_lY_XodF=gayUNjo9NMq7-- From nobody Mon May 13 04:50:12 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1681984166; cv=none; d=zohomail.com; s=zohoarc; b=S3UBMSGQKKiNXlm3JZ0lU9poJrxCmBEDSEsGJGjb7WMiZBJUyPa+5qqQERwist3/u7AcFit0K21LV8RzV6Y1Yym/R+R7D8FISEic1FdmezEkzlmGgxiRMhC4fjNwqxW+Il8nTaOG+tqkPG+z6/KGWPvqZBIv836vCvzqw3rAGjU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1681984166; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Z3nAYfANxoV5VMAOrktcoAh+7nc41Se+PAHIvjnuP+c=; b=bmyAPS3orghxtkLwAyotHRHIy+W0Y+ZAy0NU+W9W74RVxMLy7VprVBhDjeSOREcC7uH8ig3hXKfJRnXtKEpIrfaoKnBO49hgAgMZeyxHr50GZqp2c8mE7BzKMYESybiqzhzXA0JyjoiQ5W1LObdPIlSIJJl0bIjRQpHMYI/Z5VA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1681984166705780.0143079980302; Thu, 20 Apr 2023 02:49:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ppQu1-0007jF-4F; Thu, 20 Apr 2023 05:48:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ppQtx-0007Y4-Ma for qemu-devel@nongnu.org; Thu, 20 Apr 2023 05:48:29 -0400 Received: from mout.web.de ([212.227.15.14]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ppQtu-00085S-JJ for qemu-devel@nongnu.org; Thu, 20 Apr 2023 05:48:29 -0400 Received: from gecko.fritz.box ([82.207.254.123]) by smtp.web.de (mrweb005 [213.165.67.108]) with ESMTPSA (Nemesis) id 1MjPQ6-1qaLEN41Fa-00l0tp; Thu, 20 Apr 2023 11:48:22 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=s29768273; t=1681984102; i=lukasstraub2@web.de; bh=dUcsp5TXjJ48yXDmXsxRqZtqur4JwDVKvi45MBfIF38=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=XHtoR46bXAhJIv1Q1xpbC93h5KAYLdVtP0Q04kowSR0u60uK4a63gIStkUkA9M70n 8zdQid5GbhMLrqnL47J/ApruTg86ZNZ65qrgqqBUNQbbzcoON4hUwwEnfPCga1OZIX WuPud+4O3ILlCA2xUYMcz/EMxVNyLSTtSckK9UIk5u1M/wpBTnaeRFeqGTWMAxLgTy 159YeCjRGqNBiaKBkt2KAxtfhDAe3J4hCrVqPEyn2TQkhIJK0c3wlF2cWFIH374Mcf U1mO9B+LN9SOsvHQCM0Be5KR/QE2uwkF0T/ZwuT2ImtcIS07lmPVuovMD5ak2tIxLl dGfkLx/dLeVSA== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Date: Thu, 20 Apr 2023 11:48:20 +0200 From: Lukas Straub To: qemu-devel Cc: Juan Quintela , Peter Xu , Thomas Huth , Laurent Vivier , Paolo Bonzini Subject: [PATCH v2 09/13] ram.c: Move core compression code into its own file Message-ID: <7b975990410b4e1a073abcc46df3f5cfab30dc05.1681983401.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/agoQQVyL5ote8N4/DuaQqqZ"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:vKhVr5T9Aeih9+r0uqXGu/IzyX5gzD+5xwWKQA2LIXYIGYCaR60 oRq53eSxi3rvYNkxUlgT0cLCxuR2O34MBp+BY2DfEorgh20iRwZdF9uRMd1Xo5IVWor198H hSRq1niLxuVrGiaY0BMmbNI0/J5pz3Hz7y9ANuDovpgesdnLvtrMYoY/VLbtZGEvdNwPMW7 Re74iCyUX8+cXlR7jtCfA== UI-OutboundReport: notjunk:1;M01:P0:F4MD+Fvwd3w=;2qv2Ofgcq33C5HGbbZ6IQ/d5aps xwGL4LJj+jSAVL3LTv/AlQDKks4Li1aItr63MniuVolEmkgyp7b7NETJ1lEhZ7YKWXTus3Mbe G2glXFdaikyMHt4SWGYn+LIvBLuAnoLWc7MikSxB1jFR8PXuH86bvkNNVHO6lkw62JN+CHOqI +0TI+MR9sd5eXu4UDazztcsZpWvmV7Ojfzamm2ayR/7yisZc3qTduygkIaXl1/sMs3/LuE8uL mYT7SLbbu8EZSC6purPwvrl/x8zy4cMeA9Ds7mElrVeM+pj3aOoT2cPSav09dnn+slgSrgBoY vpQzHiy62/6a0MJXj+Mv5r0uulfxHQ6VxeJm6TwHHVWmh/HYIOUEdlL9yF7fPk0UIPhCdEA94 O3i1exp3nP3GVpQKtTnmZxrNIT22AEGxzO5qZmcmAXUDp//QVAGuuRdvHJz0DXBVAIRb+7Zmt t0xap4eJAZxR9o8Ri0HXUqo58FfIQP7QxuxlsdKZSACfZN5dkRcsEXo6Gd5M9+m6D1VX5Jgl6 v7r6yF2xp0GKA9+mYXSFyA+l8JOtMtoroeuae2pIpyIvIs54G5N5SuyL1dvpTUgUm6tKoOmhR eRYU+n4TC7sSkkQx8QSTW3I2T2aqU/4YPiV7DE2wjuWrxtljsHUd6IjEKk3K0VF7U3elbFIpG +tmVwgGWSdsc9qnlyZli10/ldoAdDjpjWoF7jZpB1Bk8xk2YyqyTBBdIooorpn93wEMp5b5HU cEStzodop5Vh5SAMJz2HOiBTvvTZIfyodVb9y1WhShx+Z0MtnqIFz/qmS27QTLijOGDaHC34I 6oE9f7++YKJVV7N82IoaFwLzMTfOw1ujkROtlKgDgAwyWFzca9QJT4MRhE+YScrH+HXTPL+5v UrbxiY1hOPpnB+9E6O8aaJbdr0GxTR9fnRVTmVlWe86eMnawvu3AIx0C5GxcYi7Mff8rynpoL Y4N3AnwQCu9IpsVD8bX25T+uKnk= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=212.227.15.14; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1681984168227100015 --Sig_/agoQQVyL5ote8N4/DuaQqqZ Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" No functional changes intended. Signed-off-by: Lukas Straub --- migration/meson.build | 5 +- migration/ram-compress.c | 273 +++++++++++++++++++++++++++++++++++++++ migration/ram-compress.h | 65 ++++++++++ migration/ram.c | 256 +----------------------------------- 4 files changed, 343 insertions(+), 256 deletions(-) create mode 100644 migration/ram-compress.c create mode 100644 migration/ram-compress.h diff --git a/migration/meson.build b/migration/meson.build index 0d1bb9f96e..262e3c9754 100644 --- a/migration/meson.build +++ b/migration/meson.build @@ -36,4 +36,7 @@ endif softmmu_ss.add(when: zstd, if_true: files('multifd-zstd.c')) specific_ss.add(when: 'CONFIG_SOFTMMU', - if_true: files('dirtyrate.c', 'ram.c', 'target.c')) + if_true: files('dirtyrate.c', + 'ram.c', + 'ram-compress.c', + 'target.c')) diff --git a/migration/ram-compress.c b/migration/ram-compress.c new file mode 100644 index 0000000000..77902a1d65 --- /dev/null +++ b/migration/ram-compress.c @@ -0,0 +1,273 @@ +/* + * QEMU System Emulator + * + * Copyright (c) 2003-2008 Fabrice Bellard + * Copyright (c) 2011-2015 Red Hat Inc + * + * Authors: + * Juan Quintela + * + * Permission is hereby granted, free of charge, to any person obtaining a= copy + * of this software and associated documentation files (the "Software"), t= o deal + * in the Software without restriction, including without limitation the r= ights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or se= ll + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included= in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS= OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OT= HER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING= FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS = IN + * THE SOFTWARE. + */ + +#include "qemu/osdep.h" +#include "qemu/cutils.h" + +#include "ram-compress.h" + +#include "qemu/error-report.h" +#include "migration.h" +#include "io/channel-null.h" +#include "exec/ram_addr.h" + +CompressionStats compression_counters; + +static CompressParam *comp_param; +static QemuThread *compress_threads; +/* comp_done_cond is used to wake up the migration thread when + * one of the compression threads has finished the compression. + * comp_done_lock is used to co-work with comp_done_cond. + */ +static QemuMutex comp_done_lock; +static QemuCond comp_done_cond; + +static CompressResult do_compress_ram_page(QEMUFile *f, z_stream *stream, + RAMBlock *block, ram_addr_t off= set, + uint8_t *source_buf); + +static void *do_data_compress(void *opaque) +{ + CompressParam *param =3D opaque; + RAMBlock *block; + ram_addr_t offset; + CompressResult result; + + qemu_mutex_lock(¶m->mutex); + while (!param->quit) { + if (param->trigger) { + block =3D param->block; + offset =3D param->offset; + param->trigger =3D false; + qemu_mutex_unlock(¶m->mutex); + + result =3D do_compress_ram_page(param->file, ¶m->stream, + block, offset, param->originbuf); + + qemu_mutex_lock(&comp_done_lock); + param->done =3D true; + param->result =3D result; + qemu_cond_signal(&comp_done_cond); + qemu_mutex_unlock(&comp_done_lock); + + qemu_mutex_lock(¶m->mutex); + } else { + qemu_cond_wait(¶m->cond, ¶m->mutex); + } + } + qemu_mutex_unlock(¶m->mutex); + + return NULL; +} + +void compress_threads_save_cleanup(void) +{ + int i, thread_count; + + if (!migrate_use_compression() || !comp_param) { + return; + } + + thread_count =3D migrate_compress_threads(); + for (i =3D 0; i < thread_count; i++) { + /* + * we use it as a indicator which shows if the thread is + * properly init'd or not + */ + if (!comp_param[i].file) { + break; + } + + qemu_mutex_lock(&comp_param[i].mutex); + comp_param[i].quit =3D true; + qemu_cond_signal(&comp_param[i].cond); + qemu_mutex_unlock(&comp_param[i].mutex); + + qemu_thread_join(compress_threads + i); + qemu_mutex_destroy(&comp_param[i].mutex); + qemu_cond_destroy(&comp_param[i].cond); + deflateEnd(&comp_param[i].stream); + g_free(comp_param[i].originbuf); + qemu_fclose(comp_param[i].file); + comp_param[i].file =3D NULL; + } + qemu_mutex_destroy(&comp_done_lock); + qemu_cond_destroy(&comp_done_cond); + g_free(compress_threads); + g_free(comp_param); + compress_threads =3D NULL; + comp_param =3D NULL; +} + +int compress_threads_save_setup(void) +{ + int i, thread_count; + + if (!migrate_use_compression()) { + return 0; + } + thread_count =3D migrate_compress_threads(); + compress_threads =3D g_new0(QemuThread, thread_count); + comp_param =3D g_new0(CompressParam, thread_count); + qemu_cond_init(&comp_done_cond); + qemu_mutex_init(&comp_done_lock); + for (i =3D 0; i < thread_count; i++) { + comp_param[i].originbuf =3D g_try_malloc(TARGET_PAGE_SIZE); + if (!comp_param[i].originbuf) { + goto exit; + } + + if (deflateInit(&comp_param[i].stream, + migrate_compress_level()) !=3D Z_OK) { + g_free(comp_param[i].originbuf); + goto exit; + } + + /* comp_param[i].file is just used as a dummy buffer to save data, + * set its ops to empty. + */ + comp_param[i].file =3D qemu_file_new_output( + QIO_CHANNEL(qio_channel_null_new())); + comp_param[i].done =3D true; + comp_param[i].quit =3D false; + qemu_mutex_init(&comp_param[i].mutex); + qemu_cond_init(&comp_param[i].cond); + qemu_thread_create(compress_threads + i, "compress", + do_data_compress, comp_param + i, + QEMU_THREAD_JOINABLE); + } + return 0; + +exit: + compress_threads_save_cleanup(); + return -1; +} + +static CompressResult do_compress_ram_page(QEMUFile *f, z_stream *stream, + RAMBlock *block, ram_addr_t off= set, + uint8_t *source_buf) +{ + uint8_t *p =3D block->host + offset; + int ret; + + if (buffer_is_zero(p, TARGET_PAGE_SIZE)) { + return RES_ZEROPAGE; + } + + /* + * copy it to a internal buffer to avoid it being modified by VM + * so that we can catch up the error during compression and + * decompression + */ + memcpy(source_buf, p, TARGET_PAGE_SIZE); + ret =3D qemu_put_compression_data(f, stream, source_buf, TARGET_PAGE_S= IZE); + if (ret < 0) { + qemu_file_set_error(migrate_get_current()->to_dst_file, ret); + error_report("compressed data failed!"); + return RES_NONE; + } + return RES_COMPRESS; +} + +static inline void compress_reset_result(CompressParam *param) +{ + param->result =3D RES_NONE; + param->block =3D NULL; + param->offset =3D 0; +} + +void flush_compressed_data(int (send_queued_data(CompressParam *))) +{ + int idx, thread_count; + + thread_count =3D migrate_compress_threads(); + + qemu_mutex_lock(&comp_done_lock); + for (idx =3D 0; idx < thread_count; idx++) { + while (!comp_param[idx].done) { + qemu_cond_wait(&comp_done_cond, &comp_done_lock); + } + } + qemu_mutex_unlock(&comp_done_lock); + + for (idx =3D 0; idx < thread_count; idx++) { + qemu_mutex_lock(&comp_param[idx].mutex); + if (!comp_param[idx].quit) { + CompressParam *param =3D &comp_param[idx]; + send_queued_data(param); + compress_reset_result(param); + } + qemu_mutex_unlock(&comp_param[idx].mutex); + } +} + +static inline void set_compress_params(CompressParam *param, RAMBlock *blo= ck, + ram_addr_t offset) +{ + param->block =3D block; + param->offset =3D offset; + param->trigger =3D true; +} + +int compress_page_with_multi_thread(RAMBlock *block, ram_addr_t offset, + int (send_queued_data(CompressParam *))) +{ + int idx, thread_count, pages =3D -1; + bool wait =3D migrate_compress_wait_thread(); + + thread_count =3D migrate_compress_threads(); + qemu_mutex_lock(&comp_done_lock); +retry: + for (idx =3D 0; idx < thread_count; idx++) { + if (comp_param[idx].done) { + CompressParam *param =3D &comp_param[idx]; + qemu_mutex_lock(¶m->mutex); + param->done =3D false; + send_queued_data(param); + compress_reset_result(param); + set_compress_params(param, block, offset); + + qemu_cond_signal(¶m->cond); + qemu_mutex_unlock(¶m->mutex); + pages =3D 1; + break; + } + } + + /* + * wait for the free thread if the user specifies 'compress-wait-threa= d', + * otherwise we will post the page out in the main thread as normal pa= ge. + */ + if (pages < 0 && wait) { + qemu_cond_wait(&comp_done_cond, &comp_done_lock); + goto retry; + } + qemu_mutex_unlock(&comp_done_lock); + + return pages; +} diff --git a/migration/ram-compress.h b/migration/ram-compress.h new file mode 100644 index 0000000000..06570a799c --- /dev/null +++ b/migration/ram-compress.h @@ -0,0 +1,65 @@ +/* + * QEMU System Emulator + * + * Copyright (c) 2003-2008 Fabrice Bellard + * Copyright (c) 2011-2015 Red Hat Inc + * + * Authors: + * Juan Quintela + * + * Permission is hereby granted, free of charge, to any person obtaining a= copy + * of this software and associated documentation files (the "Software"), t= o deal + * in the Software without restriction, including without limitation the r= ights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or se= ll + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included= in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS= OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OT= HER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING= FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS = IN + * THE SOFTWARE. + */ + +#ifndef QEMU_MIGRATION_COMPRESS_H +#define QEMU_MIGRATION_COMPRESS_H + +#include "qemu-file.h" + +enum CompressResult { + RES_NONE =3D 0, + RES_ZEROPAGE =3D 1, + RES_COMPRESS =3D 2 +}; +typedef enum CompressResult CompressResult; + +struct CompressParam { + bool done; + bool quit; + bool trigger; + CompressResult result; + QEMUFile *file; + QemuMutex mutex; + QemuCond cond; + RAMBlock *block; + ram_addr_t offset; + + /* internally used fields */ + z_stream stream; + uint8_t *originbuf; +}; +typedef struct CompressParam CompressParam; + +void compress_threads_save_cleanup(void); +int compress_threads_save_setup(void); + +void flush_compressed_data(int (send_queued_data(CompressParam *))); +int compress_page_with_multi_thread(RAMBlock *block, ram_addr_t offset, + int (send_queued_data(CompressParam *))); + +#endif diff --git a/migration/ram.c b/migration/ram.c index b95c5c720d..42d6a54132 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -32,8 +32,8 @@ #include "qemu/bitmap.h" #include "qemu/madvise.h" #include "qemu/main-loop.h" -#include "io/channel-null.h" #include "xbzrle.h" +#include "ram-compress.h" #include "ram.h" #include "migration.h" #include "migration/register.h" @@ -491,32 +491,6 @@ typedef struct MigrationOps MigrationOps; MigrationOps *migration_ops; -CompressionStats compression_counters; - -enum CompressResult { - RES_NONE =3D 0, - RES_ZEROPAGE =3D 1, - RES_COMPRESS =3D 2 -}; -typedef enum CompressResult CompressResult; - -struct CompressParam { - bool done; - bool quit; - bool trigger; - CompressResult result; - QEMUFile *file; - QemuMutex mutex; - QemuCond cond; - RAMBlock *block; - ram_addr_t offset; - - /* internally used fields */ - z_stream stream; - uint8_t *originbuf; -}; -typedef struct CompressParam CompressParam; - struct DecompressParam { bool done; bool quit; @@ -529,15 +503,6 @@ struct DecompressParam { }; typedef struct DecompressParam DecompressParam; -static CompressParam *comp_param; -static QemuThread *compress_threads; -/* comp_done_cond is used to wake up the migration thread when - * one of the compression threads has finished the compression. - * comp_done_lock is used to co-work with comp_done_cond. - */ -static QemuMutex comp_done_lock; -static QemuCond comp_done_cond; - static QEMUFile *decomp_file; static DecompressParam *decomp_param; static QemuThread *decompress_threads; @@ -546,10 +511,6 @@ static QemuCond decomp_done_cond; static int ram_save_host_page_urgent(PageSearchStatus *pss); -static CompressResult do_compress_ram_page(QEMUFile *f, z_stream *stream, - RAMBlock *block, ram_addr_t off= set, - uint8_t *source_buf); - /* NOTE: page is the PFN not real ram_addr_t. */ static void pss_init(PageSearchStatus *pss, RAMBlock *rb, ram_addr_t page) { @@ -568,39 +529,7 @@ static bool pss_overlap(PageSearchStatus *pss1, PageSe= archStatus *pss2) (pss1->host_page_start =3D=3D pss2->host_page_start); } -static void *do_data_compress(void *opaque) -{ - CompressParam *param =3D opaque; - RAMBlock *block; - ram_addr_t offset; - CompressResult result; - qemu_mutex_lock(¶m->mutex); - while (!param->quit) { - if (param->trigger) { - block =3D param->block; - offset =3D param->offset; - param->trigger =3D false; - qemu_mutex_unlock(¶m->mutex); - - result =3D do_compress_ram_page(param->file, ¶m->stream, - block, offset, param->originbuf); - - qemu_mutex_lock(&comp_done_lock); - param->done =3D true; - param->result =3D result; - qemu_cond_signal(&comp_done_cond); - qemu_mutex_unlock(&comp_done_lock); - - qemu_mutex_lock(¶m->mutex); - } else { - qemu_cond_wait(¶m->cond, ¶m->mutex); - } - } - qemu_mutex_unlock(¶m->mutex); - - return NULL; -} @@ -608,44 +537,7 @@ static void *do_data_compress(void *opaque) -static void compress_threads_save_cleanup(void) -{ - int i, thread_count; - - if (!migrate_use_compression() || !comp_param) { - return; - } - - thread_count =3D migrate_compress_threads(); - for (i =3D 0; i < thread_count; i++) { - /* - * we use it as a indicator which shows if the thread is - * properly init'd or not - */ - if (!comp_param[i].file) { - break; - } - - qemu_mutex_lock(&comp_param[i].mutex); - comp_param[i].quit =3D true; - qemu_cond_signal(&comp_param[i].cond); - qemu_mutex_unlock(&comp_param[i].mutex); - qemu_thread_join(compress_threads + i); - qemu_mutex_destroy(&comp_param[i].mutex); - qemu_cond_destroy(&comp_param[i].cond); - deflateEnd(&comp_param[i].stream); - g_free(comp_param[i].originbuf); - qemu_fclose(comp_param[i].file); - comp_param[i].file =3D NULL; - } - qemu_mutex_destroy(&comp_done_lock); - qemu_cond_destroy(&comp_done_cond); - g_free(compress_threads); - g_free(comp_param); - compress_threads =3D NULL; - comp_param =3D NULL; -} @@ -653,49 +545,7 @@ static void compress_threads_save_cleanup(void) -static int compress_threads_save_setup(void) -{ - int i, thread_count; - if (!migrate_use_compression()) { - return 0; - } - thread_count =3D migrate_compress_threads(); - compress_threads =3D g_new0(QemuThread, thread_count); - comp_param =3D g_new0(CompressParam, thread_count); - qemu_cond_init(&comp_done_cond); - qemu_mutex_init(&comp_done_lock); - for (i =3D 0; i < thread_count; i++) { - comp_param[i].originbuf =3D g_try_malloc(TARGET_PAGE_SIZE); - if (!comp_param[i].originbuf) { - goto exit; - } - - if (deflateInit(&comp_param[i].stream, - migrate_compress_level()) !=3D Z_OK) { - g_free(comp_param[i].originbuf); - goto exit; - } - - /* comp_param[i].file is just used as a dummy buffer to save data, - * set its ops to empty. - */ - comp_param[i].file =3D qemu_file_new_output( - QIO_CHANNEL(qio_channel_null_new())); - comp_param[i].done =3D true; - comp_param[i].quit =3D false; - qemu_mutex_init(&comp_param[i].mutex); - qemu_cond_init(&comp_param[i].cond); - qemu_thread_create(compress_threads + i, "compress", - do_data_compress, comp_param + i, - QEMU_THREAD_JOINABLE); - } - return 0; - -exit: - compress_threads_save_cleanup(); - return -1; -} /** * save_page_header: write page header to wire @@ -1484,32 +1334,6 @@ static int ram_save_multifd_page(QEMUFile *file, RAM= Block *block, return 1; } -static CompressResult do_compress_ram_page(QEMUFile *f, z_stream *stream, - RAMBlock *block, ram_addr_t off= set, - uint8_t *source_buf) -{ - uint8_t *p =3D block->host + offset; - int ret; - - if (buffer_is_zero(p, TARGET_PAGE_SIZE)) { - return RES_ZEROPAGE; - } - - /* - * copy it to a internal buffer to avoid it being modified by VM - * so that we can catch up the error during compression and - * decompression - */ - memcpy(source_buf, p, TARGET_PAGE_SIZE); - ret =3D qemu_put_compression_data(f, stream, source_buf, TARGET_PAGE_S= IZE); - if (ret < 0) { - qemu_file_set_error(migrate_get_current()->to_dst_file, ret); - error_report("compressed data failed!"); - return RES_NONE; - } - return RES_COMPRESS; -} - static void update_compress_thread_counts(const CompressParam *param, int bytes_xmit) { @@ -1527,13 +1351,6 @@ update_compress_thread_counts(const CompressParam *p= aram, int bytes_xmit) static bool save_page_use_compression(RAMState *rs); -static inline void compress_reset_result(CompressParam *param) -{ - param->result =3D RES_NONE; - param->block =3D NULL; - param->offset =3D 0; -} - static int send_queued_data(CompressParam *param) { PageSearchStatus *pss =3D &ram_state->pss[RAM_CHANNEL_PRECOPY]; @@ -1568,31 +1385,6 @@ static int send_queued_data(CompressParam *param) return len; } -static void flush_compressed_data(int (send_queued_data(CompressParam *))) -{ - int idx, thread_count; - - thread_count =3D migrate_compress_threads(); - - qemu_mutex_lock(&comp_done_lock); - for (idx =3D 0; idx < thread_count; idx++) { - while (!comp_param[idx].done) { - qemu_cond_wait(&comp_done_cond, &comp_done_lock); - } - } - qemu_mutex_unlock(&comp_done_lock); - - for (idx =3D 0; idx < thread_count; idx++) { - qemu_mutex_lock(&comp_param[idx].mutex); - if (!comp_param[idx].quit) { - CompressParam *param =3D &comp_param[idx]; - send_queued_data(param); - compress_reset_result(param); - } - qemu_mutex_unlock(&comp_param[idx].mutex); - } -} - static void ram_flush_compressed_data(RAMState *rs) { if (!save_page_use_compression(rs)) { @@ -1602,52 +1394,6 @@ static void ram_flush_compressed_data(RAMState *rs) flush_compressed_data(send_queued_data); } -static inline void set_compress_params(CompressParam *param, RAMBlock *blo= ck, - ram_addr_t offset) -{ - param->block =3D block; - param->offset =3D offset; - param->trigger =3D true; -} - -static int compress_page_with_multi_thread(RAMBlock *block, ram_addr_t off= set, - int (send_queued_data(CompressParam *))) -{ - int idx, thread_count, pages =3D -1; - bool wait =3D migrate_compress_wait_thread(); - - thread_count =3D migrate_compress_threads(); - qemu_mutex_lock(&comp_done_lock); -retry: - for (idx =3D 0; idx < thread_count; idx++) { - if (comp_param[idx].done) { - CompressParam *param =3D &comp_param[idx]; - qemu_mutex_lock(¶m->mutex); - param->done =3D false; - send_queued_data(param); - compress_reset_result(param); - set_compress_params(param, block, offset); - - qemu_cond_signal(¶m->cond); - qemu_mutex_unlock(¶m->mutex); - pages =3D 1; - break; - } - } - - /* - * wait for the free thread if the user specifies 'compress-wait-threa= d', - * otherwise we will post the page out in the main thread as normal pa= ge. - */ - if (pages < 0 && wait) { - qemu_cond_wait(&comp_done_cond, &comp_done_lock); - goto retry; - } - qemu_mutex_unlock(&comp_done_lock); - - return pages; -} - #define PAGE_ALL_CLEAN 0 #define PAGE_TRY_AGAIN 1 #define PAGE_DIRTY_FOUND 2 -- 2.40.0 --Sig_/agoQQVyL5ote8N4/DuaQqqZ Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmRBCmQACgkQNasLKJxd slhN9Q//ciDxSHYYU4yrh6gbtGEp3mcyok+VPRjtcC3s8RYMTkBA2IYWsXVtUv6C 5JmYyYVoI7xB69B1x0CEhhFLFlAJcgTdS6D224mabEtDvG3yvxI6h7qB64XhXmSi co4hhOqUPdiGpPE30obmS0s3L4R6VvY5u5O2jLpGlBBvznYW87rccCaEv3LjuEpx w8v0blTEn9hXuMZw5BrRnVB+pAqeIhiAv1A/yzkZpcMmDQM1BiLGoJPjhFpEMGON Tet8QGqt0lhhxwXJrZ/FPzXvcweWA6kOiC/Rq1ZUsF8NiZt8G1FqFrUO8ES5OHS7 YOgaUN0Y1hvlFiMwfAjCd62aAh2P1aRY8Dn/cuHcUKWSvb102QEbmVE5xtHMPy1I JIUUnXLT8bhyTwqANYtib6sfXxkP1NdHreLilg8HFMZbAmjeg+vGv/0enZMNYz3k K1lKoBNY1l/LmBrjFSX6hCRqIV2YfyWx+npN6hWRgx2AoFksW6hgcypLafi0wVmv RVCnkI8yAqxbiYkoDpxvUqHYifQqPdKyFE2yGPnbiNQ2Qm3eUTCHzuURtTnX56X2 wYTImd3ta51u3NTp8zDgfHmSsnrC9AKsvx9GoLQGyxzSQzPPWVVHzHoDSmVPjJfv C3Orndkuz2f+Nyt/4V9j0G+tTuqpmvSsOHm81DRNlvnKxQoFEtM= =neV7 -----END PGP SIGNATURE----- --Sig_/agoQQVyL5ote8N4/DuaQqqZ-- From nobody Mon May 13 04:50:12 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1681984173; cv=none; d=zohomail.com; s=zohoarc; b=CYXDosbI880EPpjJ2mxwsg49qqSoLwMW8U8PEfXn7odoqwugr4tUEQKvNqYng4XGcS7hBtkAn7IkqoaIeeo2G3lEMYGujjsmLr9zBssZWR/iyA86Ew8S2WF8XuV2R2a5Of1vg8bE+JSca5j7y2lBVbGA5MqTLlKBzgFBuhcE8vg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1681984173; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=rSNcGtHPt9OHq/e0aP0luGQ6I2o5WZFe2JPQyYZ1ATE=; b=GlQpR9JYs0TdRV4uPnJgd1PGeBhsyZyflXnH6MN6cW1gmsGtXPA/kVvu9/TCEkg4TDSfmKYWAOJCW+Zl1RrANlxhKYF6Z+6/r84x4vhA74x4u10AEO4zJNNXoQgLyIPnnphSgWiuk8BnuBnOJj9bb05vOCunL2JI9ofC1ttxmJ4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1681984173642476.59426188387897; Thu, 20 Apr 2023 02:49:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ppQu4-0007vI-CR; Thu, 20 Apr 2023 05:48:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ppQtz-0007df-Lk for qemu-devel@nongnu.org; Thu, 20 Apr 2023 05:48:32 -0400 Received: from mout.web.de ([212.227.15.14]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ppQty-000866-4Q for qemu-devel@nongnu.org; Thu, 20 Apr 2023 05:48:31 -0400 Received: from gecko.fritz.box ([82.207.254.123]) by smtp.web.de (mrweb005 [213.165.67.108]) with ESMTPSA (Nemesis) id 1MaHWj-1plz2K1ma5-00WCrT; Thu, 20 Apr 2023 11:48:25 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=s29768273; t=1681984105; i=lukasstraub2@web.de; bh=KUBsNEdVYLT7okRgGGCyMsgCGPVFEjmzuOl8jovNUi8=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=jdMWhMeGvl550SfrUTafc9fYeu0K3C9shMvYx7GmtwJ/QPbgN5oG7+OfuG5ha1kse ftYc/k2yYtJg4druBe3hhz1rpnSGq65qg5vQ8T+JPdF8+viA2vXtCLLK63rFdAFkiO vUXZsCSrzxUV8RkX0iC5HMOLXAkeo3vVNWJWLnllzUrDBnaD/QnLCM1xlAX3GrudoT Pn1qb2PvKDJGlXc6209X54aVNMroOjMtyiWsbKDlt1uS6JnwgaEdJbCA/gAjJJDeM7 +fLrIux6rPLq8mUNHToDq5a3D2sNf+IVic88Y9Q4s4QutN68fDlzNy7VuuF6t23wyd I7LF3LNpwzLvw== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Date: Thu, 20 Apr 2023 11:48:24 +0200 From: Lukas Straub To: qemu-devel Cc: Juan Quintela , Peter Xu , Thomas Huth , Laurent Vivier , Paolo Bonzini Subject: [PATCH v2 10/13] ram.c: Remove whitespace (squash with previous patch) Message-ID: In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/vhy6HXgVKnRipTWMMxuKJ0k"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:XoB+sasPT/4fx5VBA+rYuwuXPFJeuzLjleOuyPvUZAINyyZb7no 3nHmQRD8CBvRT9S4QNuytLNdZVFsdCQWdDJlxA6f62/3rF0AoAFiNE+oksXz/bT9TqM1OnE UhZb6BPB6qoBJQ9NZa2oDKKwlPJaHbO9OJq7Ij/PLm707D4+rjePWVWumbkEW7eYlw2W6Nu DcNf/VwTivFqNNZzcSbJA== UI-OutboundReport: notjunk:1;M01:P0:Y6uO0l3txys=;UF0HUGnwii8AegVE4nQk/42tuyB wNauOTKSd38tCnrO1KJ1ocq8EkSR79YH9zdhNhgCIr6/ReMgsToNwJT7OZA8k/cB6iXbQJZ7G 2HF1ZqlmMCwHwfd22EcGhJTiu0ljWYhaKurePAhD4QZ4CDGXs9SXzBlNot6ZV26IMjk72Glrz HqTUU9nmZjFGeAcvPMjehRwLsvtHzd0+rSdzEmwdirkibYUc4esSxJxKS5ONMqDaQoEnRElNp cLAP0KY89+WEdRac1sbI+R9lfXm0VZ6X8+wt4bd+8hNYGXCDrQbH9PhZi5gHxGc2cUl/GC5VS JJZN6Go/uMgWJN1UKE61RSvP18NUHlXKBdG+Z41rYFyhaNTmRNJA1tod8WVFtRoVqpvWSVPuw VKQe5cR+r8C7HE9vtgKp4XnFKRNBrBeVFbGohV3wrGjhq1FYvWagPIo7nUXH+fAcV8yBimTgy uWoY9ndUpp1dPJFT0YoElWb2CVr851lGPzrULfDMIIsM9ooqD8lqEl1DsMOzL54Ajc/lONEix RPRKzHNHYA8wq/gQ1+HmWTuUSuv4VUp/Cd7Ho0waW7mS3gAj5/O9Sbh3jcs1HgCxpweypCYXN 4A99xdwmzHfI6LpRy1ekz9qIs3LOkotskMwOaoPAgywu/qNQ5WCFcCTgvmgqtSY6DCezOx2iN zcLFaOSWvIm+5yEFYakwC/4lW8pkWJLgUDuOdaWfQ1WujRIVAjIdLFHnhZywBHESKpzYUp5ZA 67amwZYziYeeZbN4x+s/6d0MU4r8GWsIa6G1jhV/e3y+gvGBn+lLu4vL6q4Puk+O1lCRpvkWB Gb1sp8hFfn472pWBlu366MyL1QQbLS0n3x1Y/e1IAQ9S4b84lLW0uqH89h9PTy1eEFzQ9V0Q+ At9GYj1AhZ0EXur3zaRUgoCRGy/FLE9irgAAoRgT2jZpdV7Q4K3DIotaVYxd8j8Nl78dO8SHl pPywtQ== Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=212.227.15.14; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1681984174178100001 --Sig_/vhy6HXgVKnRipTWMMxuKJ0k Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Lukas Straub --- migration/ram.c | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/migration/ram.c b/migration/ram.c index 42d6a54132..7be09c18e3 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -529,24 +529,6 @@ static bool pss_overlap(PageSearchStatus *pss1, PageSe= archStatus *pss2) (pss1->host_page_start =3D=3D pss2->host_page_start); } - - - - -/* split */ - - - - - - - -/* split */ - - - - - /** * save_page_header: write page header to wire * -- 2.40.0 --Sig_/vhy6HXgVKnRipTWMMxuKJ0k Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmRBCmgACgkQNasLKJxd slh2bQ/9F9maf2Oe1GFfD0JoGvv9H1bOU6o7wQ2oHHhxFp5WQSUnh59wfbaTfREw UwviioywMY7Q/meTUcRrVsCPSVKUEmCuLAp/e4uncRHpvr1wUnABukPJRmm1cXOB i6nqR16y54rogx3f5GpDg+/Oir5acg+1CBWcBOVOY0aik+NRiqXF3uZK6FsAZthg mCZnR6bDp9Y2+TW2Uh4HWL+6KcNoGzYa1l/18UWsyuAC8/SuYbgoWkeYzVClUzky 5XGStUhm7eia9tq2yvx1uhWUCu+bKatTKhvMdDhEIj3GYS9bDC/ggFfJKOlkZPU0 SLjFM+Fh5tSarv/lni6rcJbEOEnOss/yl+7K+kPTcWYYz1yRTYXSIaFzHV59cR8L hil2Wq0R59e+ozz+dnzqu8PoPXpck8+hZqEvqi9aREuE/kbaeEgKawZNTsTsssVY 6MazhCrq7Khvcl2mSdrS2CJ26MmhRyiY1Rstm7aVydTvMrPkSsIx1P+oYP1alvkU MHClfFBs9JR2QwWJYR8A8iUapdxjIzbS9KizA5NLHmfyZxe55CGwWYHq+uQPaxta 4JN0QlhIMkZD4XZf5D/0zA0CgQcz+bkBwMsEHUAdqjI6Moep+b2d+B8XeBlGlSnm TFWWrosABcAoZCYXtYUzIa7yhp+qF5ID0IRNxf/1SRTdIaKHgdk= =QBrI -----END PGP SIGNATURE----- --Sig_/vhy6HXgVKnRipTWMMxuKJ0k-- From nobody Mon May 13 04:50:12 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1681984173; cv=none; d=zohomail.com; s=zohoarc; b=HD5xdunFIU4qPDeyHAOJLneQWIGu3lyQGHbsSV7Jp6IA0lsWd7a5SIf4SiHzX6Y8HKSDiIf7x04p1ZE662dXy160erLFY1yynFORU7xix3RrL7pSPlBvYT6XnDpozTosmLoq5wFYlC8cgHz20hlKaW7dlrBr+4QcwZP6+vcLZeg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1681984173; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=qcLvveQRBGG+H5jw3MykARyaI8kg6flKB+lVvwDTv1g=; b=H6klO5wAGjSb3gOAYW4HR1DpitXAaJaAJyp1LJ6E/3XGIWArb6Jp+8q8NaAjyo0f5pl2/ZqGtwWktx520W+TR6OS8661pWfsulQoPkILHxIkpiJDCcB6CfDAUVA6D/OVCLUmyadM2LagcFFfYfJDIEKbH9gFAonfJ8visw/4FQM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1681984173629108.54786621922176; Thu, 20 Apr 2023 02:49:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ppQuI-0000vQ-7G; Thu, 20 Apr 2023 05:48:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ppQuH-0000ms-9U for qemu-devel@nongnu.org; Thu, 20 Apr 2023 05:48:49 -0400 Received: from mout.web.de ([212.227.15.14]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ppQu1-00086e-Q6 for qemu-devel@nongnu.org; Thu, 20 Apr 2023 05:48:48 -0400 Received: from gecko.fritz.box ([82.207.254.123]) by smtp.web.de (mrweb005 [213.165.67.108]) with ESMTPSA (Nemesis) id 1M9ZZo-1puxDN1HFs-005ZNU; Thu, 20 Apr 2023 11:48:29 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=s29768273; t=1681984109; i=lukasstraub2@web.de; bh=Gsmw9eMQx3TZL80xvncJQwGRFpgxSnMogsfuhEDYJ94=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=NADXDMQG2c1QSRJip7DPXoRoAPljB1nuy6o41XyDxfLrw26hmg5Pum0F4o7dEb9Ki D5O1SS4pdJclahazqt4fURszgyHwo3LzllYtV/OCG/Dy9ONCtSDSwv0XNBnZpHkEV4 DcADniX5p5VXRhsn10mts+P/4V7qxRZJEh5TBsu6BL4XcHEn9GDxzMCNJAbaKNXrXj TDTX0nBufPf+N1RUVSCkKLnj7s+x/lRRI/XGrdEt41m1xMY9gx1G/R9perHN3WtVwR ZI+L+zbdFX7PaxJxTlzP+QUcZn7xOBaLnJurrOz5I2fd25XZjEMEZpPN66ZIVkafNZ b1NUEvF8GZ4JA== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Date: Thu, 20 Apr 2023 11:48:28 +0200 From: Lukas Straub To: qemu-devel Cc: Juan Quintela , Peter Xu , Thomas Huth , Laurent Vivier , Paolo Bonzini Subject: [PATCH v2 11/13] ram.c: Move core decompression code into its own file Message-ID: In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/U6NL63nOtzsbCI8/s4_1BUL"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:TO3qrIqpNLkpbJqKIo0cBY+WVido7I0umxJ1sePQeFAJt2Y+UAi x81Y/Y4rV7G5BX4jFUmCbLtDFHhscY1kc4sX+XEb8nRC322cES8nj90UwNmFeAY+IMtA3vM XYbTXcJ3WilaWT0sPbBRvbSqZCCy5FykOAYgAXqdUYuEebtxsvcHmAO67EglZLiwUNHVamV O6UX6VDr66VmTssuOAo+Q== UI-OutboundReport: notjunk:1;M01:P0:Z3MbpmsLamc=;uvEBGsrl00cD/+cjzRFV0fqSklX yaXwho8y5UnEFb3jlMBdSVtcd54oFdCefqrgedGsgBqBI+hqucqvYw0/THfWmK5nTKWwFq7GG ZjzOIwCrP3D2FW1U5biRnLaOc2H4WqVjCALPchfEI3sC7gn4yvCYUajtFS51HmdyeZP5hj4z5 YtMR4kFTgkW3qCUlC9DY4+sOrO0ZBaSYAfVrBacze/Y+Tj/3V/c4qCQO3yjQrWrBXGMG3RTfg liO5O4zszbxFS5LPOLQHZAVKRENru57Tp6k0AxF5KcZL5XeUfV4KCZZGtquU+GdMuVLlD9CuB sR3VoGAkUWdcP+t3lz01OPZ4QYMOe7nGIuG9F66BWcFS9qfqRx/aANVo4ZzaFL1zBunmaS+kw Ue6yBjPjThl/qOfd81FxhWPAa9HTc+r2hg8yvP5g0lgB8uVM8DaSa7onglcb9SU5yHTbd+dvr yw2QwRHKw9ttfKR2zOTEdMOlS6lRJzV9Z3LVt5z4xBEToM00JX1N4Wf1JWq6CQVOiseJDIA/+ nAY/9WJo8VvjglZ3H3Kd2GWpSXPWb5ZaXSTuVwxScMSBmBLpTXRLjGDuA+l+TyKYVgjubSul9 vq7tYaGjiFoGx5CTuzxdiLBaPv0ycxoaxXc3tRmUIOLz4PM5Y/3dzsF7xNWayHUEiaOg/fdM5 u0E2M2DLPO9M7+FydENNVALDJYmWh17m9rxe10a6kLMjB0XlQ2nQmmm6n8ZlGkz5I2w3fqv9b 8649Tk1e7E2uQGKh3qYaSpbhKWWO0qKf4u9QB5l71PK6DRfGeob0ewr+Bk0lGJanj+foQ60Az 189u6FcemnRDM+xa/PGRqqqGkhJBvk/5rBppTzFp3aBEyJJG8QUJzOD8kXUuyNRUTFkufiZX9 rKI2StKAzTI0GymaSlaV7alBQ8c1nVjiZNVtYQKiSUFiLLUFL/94qYrXgfyQ6bmzunWxF6YXO 0CA5lFR09Qa/c4+gKx44xA/LVgs= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=212.227.15.14; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1681984175256100005 --Sig_/U6NL63nOtzsbCI8/s4_1BUL Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" No functional changes intended. Signed-off-by: Lukas Straub Reviewed-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Juan Quintela --- migration/ram-compress.c | 203 ++++++++++++++++++++++++++++++++++++++ migration/ram-compress.h | 5 + migration/ram.c | 204 --------------------------------------- 3 files changed, 208 insertions(+), 204 deletions(-) diff --git a/migration/ram-compress.c b/migration/ram-compress.c index 77902a1d65..f75b8c3079 100644 --- a/migration/ram-compress.c +++ b/migration/ram-compress.c @@ -47,6 +47,24 @@ static QemuThread *compress_threads; static QemuMutex comp_done_lock; static QemuCond comp_done_cond; +struct DecompressParam { + bool done; + bool quit; + QemuMutex mutex; + QemuCond cond; + void *des; + uint8_t *compbuf; + int len; + z_stream stream; +}; +typedef struct DecompressParam DecompressParam; + +static QEMUFile *decomp_file; +static DecompressParam *decomp_param; +static QemuThread *decompress_threads; +static QemuMutex decomp_done_lock; +static QemuCond decomp_done_cond; + static CompressResult do_compress_ram_page(QEMUFile *f, z_stream *stream, RAMBlock *block, ram_addr_t off= set, uint8_t *source_buf); @@ -271,3 +289,188 @@ retry: return pages; } + +/* return the size after decompression, or negative value on error */ +static int +qemu_uncompress_data(z_stream *stream, uint8_t *dest, size_t dest_len, + const uint8_t *source, size_t source_len) +{ + int err; + + err =3D inflateReset(stream); + if (err !=3D Z_OK) { + return -1; + } + + stream->avail_in =3D source_len; + stream->next_in =3D (uint8_t *)source; + stream->avail_out =3D dest_len; + stream->next_out =3D dest; + + err =3D inflate(stream, Z_NO_FLUSH); + if (err !=3D Z_STREAM_END) { + return -1; + } + + return stream->total_out; +} + +static void *do_data_decompress(void *opaque) +{ + DecompressParam *param =3D opaque; + unsigned long pagesize; + uint8_t *des; + int len, ret; + + qemu_mutex_lock(¶m->mutex); + while (!param->quit) { + if (param->des) { + des =3D param->des; + len =3D param->len; + param->des =3D 0; + qemu_mutex_unlock(¶m->mutex); + + pagesize =3D TARGET_PAGE_SIZE; + + ret =3D qemu_uncompress_data(¶m->stream, des, pagesize, + param->compbuf, len); + if (ret < 0 && migrate_get_current()->decompress_error_check) { + error_report("decompress data failed"); + qemu_file_set_error(decomp_file, ret); + } + + qemu_mutex_lock(&decomp_done_lock); + param->done =3D true; + qemu_cond_signal(&decomp_done_cond); + qemu_mutex_unlock(&decomp_done_lock); + + qemu_mutex_lock(¶m->mutex); + } else { + qemu_cond_wait(¶m->cond, ¶m->mutex); + } + } + qemu_mutex_unlock(¶m->mutex); + + return NULL; +} + +int wait_for_decompress_done(void) +{ + int idx, thread_count; + + if (!migrate_use_compression()) { + return 0; + } + + thread_count =3D migrate_decompress_threads(); + qemu_mutex_lock(&decomp_done_lock); + for (idx =3D 0; idx < thread_count; idx++) { + while (!decomp_param[idx].done) { + qemu_cond_wait(&decomp_done_cond, &decomp_done_lock); + } + } + qemu_mutex_unlock(&decomp_done_lock); + return qemu_file_get_error(decomp_file); +} + +void compress_threads_load_cleanup(void) +{ + int i, thread_count; + + if (!migrate_use_compression()) { + return; + } + thread_count =3D migrate_decompress_threads(); + for (i =3D 0; i < thread_count; i++) { + /* + * we use it as a indicator which shows if the thread is + * properly init'd or not + */ + if (!decomp_param[i].compbuf) { + break; + } + + qemu_mutex_lock(&decomp_param[i].mutex); + decomp_param[i].quit =3D true; + qemu_cond_signal(&decomp_param[i].cond); + qemu_mutex_unlock(&decomp_param[i].mutex); + } + for (i =3D 0; i < thread_count; i++) { + if (!decomp_param[i].compbuf) { + break; + } + + qemu_thread_join(decompress_threads + i); + qemu_mutex_destroy(&decomp_param[i].mutex); + qemu_cond_destroy(&decomp_param[i].cond); + inflateEnd(&decomp_param[i].stream); + g_free(decomp_param[i].compbuf); + decomp_param[i].compbuf =3D NULL; + } + g_free(decompress_threads); + g_free(decomp_param); + decompress_threads =3D NULL; + decomp_param =3D NULL; + decomp_file =3D NULL; +} + +int compress_threads_load_setup(QEMUFile *f) +{ + int i, thread_count; + + if (!migrate_use_compression()) { + return 0; + } + + thread_count =3D migrate_decompress_threads(); + decompress_threads =3D g_new0(QemuThread, thread_count); + decomp_param =3D g_new0(DecompressParam, thread_count); + qemu_mutex_init(&decomp_done_lock); + qemu_cond_init(&decomp_done_cond); + decomp_file =3D f; + for (i =3D 0; i < thread_count; i++) { + if (inflateInit(&decomp_param[i].stream) !=3D Z_OK) { + goto exit; + } + + decomp_param[i].compbuf =3D g_malloc0(compressBound(TARGET_PAGE_SI= ZE)); + qemu_mutex_init(&decomp_param[i].mutex); + qemu_cond_init(&decomp_param[i].cond); + decomp_param[i].done =3D true; + decomp_param[i].quit =3D false; + qemu_thread_create(decompress_threads + i, "decompress", + do_data_decompress, decomp_param + i, + QEMU_THREAD_JOINABLE); + } + return 0; +exit: + compress_threads_load_cleanup(); + return -1; +} + +void decompress_data_with_multi_threads(QEMUFile *f, void *host, int len) +{ + int idx, thread_count; + + thread_count =3D migrate_decompress_threads(); + QEMU_LOCK_GUARD(&decomp_done_lock); + while (true) { + for (idx =3D 0; idx < thread_count; idx++) { + if (decomp_param[idx].done) { + decomp_param[idx].done =3D false; + qemu_mutex_lock(&decomp_param[idx].mutex); + qemu_get_buffer(f, decomp_param[idx].compbuf, len); + decomp_param[idx].des =3D host; + decomp_param[idx].len =3D len; + qemu_cond_signal(&decomp_param[idx].cond); + qemu_mutex_unlock(&decomp_param[idx].mutex); + break; + } + } + if (idx < thread_count) { + break; + } else { + qemu_cond_wait(&decomp_done_cond, &decomp_done_lock); + } + } +} diff --git a/migration/ram-compress.h b/migration/ram-compress.h index 06570a799c..6f7fe2f472 100644 --- a/migration/ram-compress.h +++ b/migration/ram-compress.h @@ -62,4 +62,9 @@ void flush_compressed_data(int (send_queued_data(Compress= Param *))); int compress_page_with_multi_thread(RAMBlock *block, ram_addr_t offset, int (send_queued_data(CompressParam *))); +int wait_for_decompress_done(void); +void compress_threads_load_cleanup(void); +int compress_threads_load_setup(QEMUFile *f); +void decompress_data_with_multi_threads(QEMUFile *f, void *host, int len); + #endif diff --git a/migration/ram.c b/migration/ram.c index 7be09c18e3..1e5dede6f0 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -491,24 +491,6 @@ typedef struct MigrationOps MigrationOps; MigrationOps *migration_ops; -struct DecompressParam { - bool done; - bool quit; - QemuMutex mutex; - QemuCond cond; - void *des; - uint8_t *compbuf; - int len; - z_stream stream; -}; -typedef struct DecompressParam DecompressParam; - -static QEMUFile *decomp_file; -static DecompressParam *decomp_param; -static QemuThread *decompress_threads; -static QemuMutex decomp_done_lock; -static QemuCond decomp_done_cond; - static int ram_save_host_page_urgent(PageSearchStatus *pss); /* NOTE: page is the PFN not real ram_addr_t. */ @@ -3467,192 +3449,6 @@ void ram_handle_compressed(void *host, uint8_t ch, = uint64_t size) } } -/* return the size after decompression, or negative value on error */ -static int -qemu_uncompress_data(z_stream *stream, uint8_t *dest, size_t dest_len, - const uint8_t *source, size_t source_len) -{ - int err; - - err =3D inflateReset(stream); - if (err !=3D Z_OK) { - return -1; - } - - stream->avail_in =3D source_len; - stream->next_in =3D (uint8_t *)source; - stream->avail_out =3D dest_len; - stream->next_out =3D dest; - - err =3D inflate(stream, Z_NO_FLUSH); - if (err !=3D Z_STREAM_END) { - return -1; - } - - return stream->total_out; -} - -static void *do_data_decompress(void *opaque) -{ - DecompressParam *param =3D opaque; - unsigned long pagesize; - uint8_t *des; - int len, ret; - - qemu_mutex_lock(¶m->mutex); - while (!param->quit) { - if (param->des) { - des =3D param->des; - len =3D param->len; - param->des =3D 0; - qemu_mutex_unlock(¶m->mutex); - - pagesize =3D TARGET_PAGE_SIZE; - - ret =3D qemu_uncompress_data(¶m->stream, des, pagesize, - param->compbuf, len); - if (ret < 0 && migrate_get_current()->decompress_error_check) { - error_report("decompress data failed"); - qemu_file_set_error(decomp_file, ret); - } - - qemu_mutex_lock(&decomp_done_lock); - param->done =3D true; - qemu_cond_signal(&decomp_done_cond); - qemu_mutex_unlock(&decomp_done_lock); - - qemu_mutex_lock(¶m->mutex); - } else { - qemu_cond_wait(¶m->cond, ¶m->mutex); - } - } - qemu_mutex_unlock(¶m->mutex); - - return NULL; -} - -static int wait_for_decompress_done(void) -{ - int idx, thread_count; - - if (!migrate_use_compression()) { - return 0; - } - - thread_count =3D migrate_decompress_threads(); - qemu_mutex_lock(&decomp_done_lock); - for (idx =3D 0; idx < thread_count; idx++) { - while (!decomp_param[idx].done) { - qemu_cond_wait(&decomp_done_cond, &decomp_done_lock); - } - } - qemu_mutex_unlock(&decomp_done_lock); - return qemu_file_get_error(decomp_file); -} - -static void compress_threads_load_cleanup(void) -{ - int i, thread_count; - - if (!migrate_use_compression()) { - return; - } - thread_count =3D migrate_decompress_threads(); - for (i =3D 0; i < thread_count; i++) { - /* - * we use it as a indicator which shows if the thread is - * properly init'd or not - */ - if (!decomp_param[i].compbuf) { - break; - } - - qemu_mutex_lock(&decomp_param[i].mutex); - decomp_param[i].quit =3D true; - qemu_cond_signal(&decomp_param[i].cond); - qemu_mutex_unlock(&decomp_param[i].mutex); - } - for (i =3D 0; i < thread_count; i++) { - if (!decomp_param[i].compbuf) { - break; - } - - qemu_thread_join(decompress_threads + i); - qemu_mutex_destroy(&decomp_param[i].mutex); - qemu_cond_destroy(&decomp_param[i].cond); - inflateEnd(&decomp_param[i].stream); - g_free(decomp_param[i].compbuf); - decomp_param[i].compbuf =3D NULL; - } - g_free(decompress_threads); - g_free(decomp_param); - decompress_threads =3D NULL; - decomp_param =3D NULL; - decomp_file =3D NULL; -} - -static int compress_threads_load_setup(QEMUFile *f) -{ - int i, thread_count; - - if (!migrate_use_compression()) { - return 0; - } - - thread_count =3D migrate_decompress_threads(); - decompress_threads =3D g_new0(QemuThread, thread_count); - decomp_param =3D g_new0(DecompressParam, thread_count); - qemu_mutex_init(&decomp_done_lock); - qemu_cond_init(&decomp_done_cond); - decomp_file =3D f; - for (i =3D 0; i < thread_count; i++) { - if (inflateInit(&decomp_param[i].stream) !=3D Z_OK) { - goto exit; - } - - decomp_param[i].compbuf =3D g_malloc0(compressBound(TARGET_PAGE_SI= ZE)); - qemu_mutex_init(&decomp_param[i].mutex); - qemu_cond_init(&decomp_param[i].cond); - decomp_param[i].done =3D true; - decomp_param[i].quit =3D false; - qemu_thread_create(decompress_threads + i, "decompress", - do_data_decompress, decomp_param + i, - QEMU_THREAD_JOINABLE); - } - return 0; -exit: - compress_threads_load_cleanup(); - return -1; -} - -static void decompress_data_with_multi_threads(QEMUFile *f, - void *host, int len) -{ - int idx, thread_count; - - thread_count =3D migrate_decompress_threads(); - QEMU_LOCK_GUARD(&decomp_done_lock); - while (true) { - for (idx =3D 0; idx < thread_count; idx++) { - if (decomp_param[idx].done) { - decomp_param[idx].done =3D false; - qemu_mutex_lock(&decomp_param[idx].mutex); - qemu_get_buffer(f, decomp_param[idx].compbuf, len); - decomp_param[idx].des =3D host; - decomp_param[idx].len =3D len; - qemu_cond_signal(&decomp_param[idx].cond); - qemu_mutex_unlock(&decomp_param[idx].mutex); - break; - } - } - if (idx < thread_count) { - break; - } else { - qemu_cond_wait(&decomp_done_cond, &decomp_done_lock); - } - } -} - static void colo_init_ram_state(void) { ram_state_init(&ram_state); -- 2.40.0 --Sig_/U6NL63nOtzsbCI8/s4_1BUL Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmRBCmwACgkQNasLKJxd slgr2A//TRgD6sbVJHWSmyqfztVkTzJ8NTq512tCIOAxMUAsGlcjJa2o/Mehe7yi DiNggTQGjU+wyBaQCzSvqmT0Zfe3u9HS3Q8e7HJ06Yfhi+5TBzbGptnq8SNrmWQ/ BwYAaK6YuDbSuVKJWgmnkencMn9fFLment9Z4dPN415rMl0rcIjI8S/YBSHE6zoN xboW/5rKq0y/6iqM7lE7oOUL8KhsBDyyx5j+4B2U1KxbrDHGgpIzzNimh5sE99qd TO3Kw+JvbifRu2oIna5KY9uYM+aEi/7qCYBcqYZuSJeRATojKd9y5qrNISB+LnvW wAvI1lPxaMXTsqtqPg3nxEYkSFdg48fNSkExfT20yeUZ6yRb13Fm+5qE4ba/KooI TWaMva1lzBPKJGlkSKe8MHagqtwxDJ5AeBYAwJVZAUJ/FC1KyREu8GH3kxMI47Wp VKx1KZCeeTNABoRSNRJWBlSF5JruuqVCm4EN2TwtaPKZTNgLWagtYuKAt5Ht5Hwe Fux0ARcR5dHgLFVplOMMbTbUG1EiGtM7pVNr1Bd4Njh/1BAK9GVo4Im528osBu15 786STHbM19Um42YVIw0XSBeAcTZPGKO3ckViyXT0J49ZWRbKyzPUjOlEYJdsysoG +ieZylTk3e+NcI+4AIq734OEvK2Zkc/k35s9Cc5l1E7TRm9j1pg= =exuG -----END PGP SIGNATURE----- --Sig_/U6NL63nOtzsbCI8/s4_1BUL-- From nobody Mon May 13 04:50:12 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1681984129; cv=none; d=zohomail.com; s=zohoarc; b=kBektiokEfUEGBPtZUGJTlGkha5Y75ElB+RRiLxVXWIKjS9CHBgch5zZL7Qnbrk7cCHu00d3+Aufl4DJ7Njursqpch2tUYQVy70Qz11oDgpHBpPY6LBoqgswBtHlkFf4v7+v4fvtzg22m+16J9yB9qsyL1NWVCaJGztJTgFi5M8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1681984129; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=5vHkyRt04+N64ogmGHnCoSzrE+62lf4BfvLMKkFGRk8=; b=KaTW0rEnyj0dKNkc6Ak2MbFO1A8g2fKLpfS8h10tjklp6iIReXEjEcgvLEfX3zFjTuRILvZJLle+G8THPAW2FLAQ8dAM6A+K3kd/KOty9fOGl526C+46FjSb3OBMHMOtds/VLd5ET2pwAlsRDyHf4F5KGiGNW2kfpkBd1i/mKIA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1681984129729877.2270226510125; Thu, 20 Apr 2023 02:48:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ppQu9-0008K6-E8; Thu, 20 Apr 2023 05:48:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ppQu8-0008J7-KF for qemu-devel@nongnu.org; Thu, 20 Apr 2023 05:48:40 -0400 Received: from mout.web.de ([212.227.15.3]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ppQu5-00087A-4L for qemu-devel@nongnu.org; Thu, 20 Apr 2023 05:48:39 -0400 Received: from gecko.fritz.box ([82.207.254.123]) by smtp.web.de (mrweb006 [213.165.67.108]) with ESMTPSA (Nemesis) id 1MIyeU-1padqM3JL0-00KqcE; Thu, 20 Apr 2023 11:48:32 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=s29768273; t=1681984112; i=lukasstraub2@web.de; bh=7h79kP+bT+k+N43aX2DF0RGfUeiCf5v/5+k+1WZ+DXA=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=FKppr4bs3g09xAzhuFIfcCFvZbuybGqTgDhN/rULjKuFDpCDYoNR7yAtj0mKKtR9E 1lSD8cM/LD7jCSvDyOPYLhr8PCPMmYe/rQrCkbU+JPhn3yT2hwnXjAJe+zG7aKY+GP b4F3SG7SNnyT1v26W4xNynoQf8TdeI6yleTNohOEfquyaHU0PerLV2/ydNS7BMP/F3 wAUrBy31SK7aOaW+ibrOLruMvi7kbmdsZNIhSelPni9hhZ6GCZ8rnCUQryU0hs0KZQ cczlR8lSQGr+312EkkP8nFf7TaXEB12GJZzfLtBzh7VOIhb9ghC4Q0sf5S7cRZwcb6 hS8JZBZ8SADjw== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Date: Thu, 20 Apr 2023 11:48:31 +0200 From: Lukas Straub To: qemu-devel Cc: Juan Quintela , Peter Xu , Thomas Huth , Laurent Vivier , Paolo Bonzini Subject: [PATCH v2 12/13] ram compress: Assert that the file buffer matches the result Message-ID: In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/REPNuIYz/TrBygJ._t_sDNN"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:KOEZwfREKrCZj+lAWIhp9tBF0GlL/wWrCoxWiMksGtU8IZG45NH YnnqtqUs8XggFL10cHOO/Lp7mFhtqvS6GClJ6U7RpParl1zCIiX/JabgIu3tJe4p4DUPCw+ DGxOoGgZySFgfJXAgKm3kbBXm6XmMBCVSCOYzNDmH7DmKA2KGwlknJvlOOhstuWdTH8LfE2 9j/fuwWaxeLbUGnFa3K0Q== UI-OutboundReport: notjunk:1;M01:P0:MFmT6NGFs4s=;f3VTh7wZBY0bPA1oDZ2Z4XqA4Mv GeI8TsUKiG5VJvNiUleOyLn/8trZfhmNBThlbQBKLw0lrkmXhr8NRtjOLw5B4FVvnI81aGhO3 TahqUaY2i+PNVo7JPSodx3GBrv7bRDbwHZ5vfrIy48EEXlDKCgGbYbWzjafiNArQ8EuJ5c2qv vkD/BAJisRI+pRoy82y/vaFBzgukf6IEaJh8lK5bwNnSGngW1A5m7aEtSGoge8/4M+RiBBquB llyhK1Vrgxv86xsFsC+hnKzAl7lB+m5qXaSf4A7lReTi/zGmv3M6uYHTFbJbJHbA0ZRA2VQ+F bA5FjvNb+7MOES6yg3xuXWhtVqPsf+oi9hHpLUcdoWj9aPlTyim6PchgXoeXDGckzh+QmR5Pa LGBjDnP2lzSbzl96q8VRS/MMKKi/4jRJL1lVvBsiLziZ1/j3iCHB6uT4e/Wh2qsdxyFVSI+1Z AtarBRzgyr6P7JI6Bwmb/EOLAoSq2OcgIbUG0lC27yqYPW1LJ02Fl91jxnrLJpSifWIMz1Wzw mJcoAoJF6iOzPHROgyxpAWUSnSCcYIONXaoqkYP2qxhnpgGmVjZAHw5W2gBJlC2834cawCDP5 MQmnHk+hsLNBVE3KgcjJ5K25ROBmkxpF1WS8hBPRZUvbIoG0JbjR/STXttYE8F09FcYCPM4gS un2vKpI/yoxV6qPfsgdAkR7tg3mddO62/3wZpWeXp7cJ2jwbff9jXpN/jiMublHnqT4QIY61H dp39XRoh/c0WET9GrKIzDeQX2gx9/HeDacMB18dUwVpIZMCMziCQUkG+TCoyvKYcsRn/MoDdA 1YAK6Q4kvns5DlyXKt+I/8f77KBgy8NzzidLjHW7GdoIrhjDDroqKZPk/9pKfmQ8Rq0f1XZ7r ZZ3sfTUKK2piRTxfQuMt3kzn8Ax8DioBLTmEFKVT/hi0KoT48xjBV7OOC8jgTGasOBqn9UJS3 QPtA399JKaJXpyLxSx0s0X8HA4E= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=212.227.15.3; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1681984130040100003 --Sig_/REPNuIYz/TrBygJ._t_sDNN Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Before this series, "nothing to send" was handled by the file buffer being empty. Now it is tracked via param->result. Assert that the file buffer state matches the result. Signed-off-by: Lukas Straub Reviewed-by: Juan Quintela --- migration/qemu-file.c | 11 +++++++++++ migration/qemu-file.h | 1 + migration/ram-compress.c | 5 +++++ migration/ram.c | 2 ++ 4 files changed, 19 insertions(+) diff --git a/migration/qemu-file.c b/migration/qemu-file.c index 102ab3b439..2b3f3f8549 100644 --- a/migration/qemu-file.c +++ b/migration/qemu-file.c @@ -887,6 +887,17 @@ int qemu_put_qemu_file(QEMUFile *f_des, QEMUFile *f_sr= c) return len; } +/* + * Check if the writable buffer is empty + */ + +bool qemu_file_buffer_empty(QEMUFile *file) +{ + assert(qemu_file_is_writable(file)); + + return !file->iovcnt; +} + /* * Get a string whose length is determined by a single preceding byte * A preallocated 256 byte buffer must be passed in. diff --git a/migration/qemu-file.h b/migration/qemu-file.h index 9d0155a2a1..15e5f189f0 100644 --- a/migration/qemu-file.h +++ b/migration/qemu-file.h @@ -113,6 +113,7 @@ size_t qemu_get_buffer_in_place(QEMUFile *f, uint8_t **= buf, size_t size); ssize_t qemu_put_compression_data(QEMUFile *f, z_stream *stream, const uint8_t *p, size_t size); int qemu_put_qemu_file(QEMUFile *f_des, QEMUFile *f_src); +bool qemu_file_buffer_empty(QEMUFile *file); /* * Note that you can only peek continuous bytes from where the current poi= nter diff --git a/migration/ram-compress.c b/migration/ram-compress.c index f75b8c3079..b75a9d2b9a 100644 --- a/migration/ram-compress.c +++ b/migration/ram-compress.c @@ -193,6 +193,8 @@ static CompressResult do_compress_ram_page(QEMUFile *f,= z_stream *stream, uint8_t *p =3D block->host + offset; int ret; + assert(qemu_file_buffer_empty(f)); + if (buffer_is_zero(p, TARGET_PAGE_SIZE)) { return RES_ZEROPAGE; } @@ -207,6 +209,7 @@ static CompressResult do_compress_ram_page(QEMUFile *f,= z_stream *stream, if (ret < 0) { qemu_file_set_error(migrate_get_current()->to_dst_file, ret); error_report("compressed data failed!"); + qemu_fflush(f); return RES_NONE; } return RES_COMPRESS; @@ -238,6 +241,7 @@ void flush_compressed_data(int (send_queued_data(Compre= ssParam *))) if (!comp_param[idx].quit) { CompressParam *param =3D &comp_param[idx]; send_queued_data(param); + assert(qemu_file_buffer_empty(param->file)); compress_reset_result(param); } qemu_mutex_unlock(&comp_param[idx].mutex); @@ -267,6 +271,7 @@ retry: qemu_mutex_lock(¶m->mutex); param->done =3D false; send_queued_data(param); + assert(qemu_file_buffer_empty(param->file)); compress_reset_result(param); set_compress_params(param, block, offset); diff --git a/migration/ram.c b/migration/ram.c index 1e5dede6f0..ccfedf4fb5 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -1332,11 +1332,13 @@ static int send_queued_data(CompressParam *param) assert(block =3D=3D pss->last_sent_block); if (param->result =3D=3D RES_ZEROPAGE) { + assert(qemu_file_buffer_empty(param->file)); len +=3D save_page_header(pss, file, block, offset | RAM_SAVE_FLAG= _ZERO); qemu_put_byte(file, 0); len +=3D 1; ram_release_page(block->idstr, offset); } else if (param->result =3D=3D RES_COMPRESS) { + assert(!qemu_file_buffer_empty(param->file)); len +=3D save_page_header(pss, file, block, offset | RAM_SAVE_FLAG_COMPRESS_PAGE); len +=3D qemu_put_qemu_file(file, param->file); -- 2.40.0 --Sig_/REPNuIYz/TrBygJ._t_sDNN Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmRBCm8ACgkQNasLKJxd sljJFhAAmgdOmZIBnb95ZwPFmy1pcfwh1hUrJZ3Tlgiy4XDGnSAeHSwdcsfi/VM6 di2NnHQPnx5L6ka2NLjmNvbPQPAAS68/HxBN9QdfC3EVqN+rhkRbKt/XRyei855z e9Hzx524ooVL+eVianaF1kdsGAty/j53fbwgDz5AD1aY4RA8ZFJPEkLo3bHWc/Cu LtI8PJFdBn94WNX5xnTa05LGLhvT2tusVH/FxkH/8lxhHB7inVwp/PQ7YKuWobXz mpoVTJYtN5u6Hcm9L5nSLjg8BlKO+idJb0UOEU6AM4a+/X4Rbwuc88nIViEB9L3l Ea+cPTUrjXjeXzo7ue8LGQggnp8nF7NKH02Zj45w/aKItVgwOMOD7u+ZaSYC2bIf XhuOxp6LbPmfU5tI1aEiI1HMgtxhm8u8dx6vTltTZV2kSm3cW9pWglaUwbc3E+0r +6tdy1bJ5d245s8meei5uQ6Ri9j3VsuUfw6IHj9T2qtc66K+ZNSX9gHC13eDvgMd E76g3VQthkbCtqEHGJArhFfgLf/EzgcrECNj9cEu+7Wl9Up6Ek8we9f2qAaWZQXm 4IrRQFJ5+kUNYYsfrcrsx/DSjZmXZOtFDhfEwr4hGzUx5eSBYu8YL4HsxxyZNGtE /K9aufjPyzKzJ8cU/SZ2///ZOxnspGH+4CtiP+J6v2WHYZ51/sM= =d9yD -----END PGP SIGNATURE----- --Sig_/REPNuIYz/TrBygJ._t_sDNN-- From nobody Mon May 13 04:50:12 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1681984205; cv=none; d=zohomail.com; s=zohoarc; b=jWDwCSXeZumQBeKPrHNr1MH8qn5DvdGG+vDpqEimJQdgrPX1LEyQks34DKnLPtHGWaFwEjZuJG40N2SfmOloBb+S6VCLGhmcB3oITtAVWhM7lmMcWMuXYIGV9qNjcgBurWdg63Ou9muovpus1VvYybVz1QoFAPg0QqWUS72iJfI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1681984205; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=CJwqDs8Sm/6NSr2QnhR00jPd7aDVej/RTwiaE+jRLSw=; b=di8ZHxz8cIBNiP76PWIj61RbTAVXRbAYoouUW7hwQcw7He8yhWZvVTiviVbpbOQPoS+JT912YUiCP0Et94JToZWN4PcNE8VEmes6rAlkbDnENgZ/XnsrzRiGS8/cBmZx4ujL5Hnj1QbA8+yIhyU3dAiNbD06wofmLl3uSXhiGP4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1681984205607358.2981294793551; Thu, 20 Apr 2023 02:50:05 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ppQuD-00006B-1B; Thu, 20 Apr 2023 05:48:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ppQuB-0008Kb-V4 for qemu-devel@nongnu.org; Thu, 20 Apr 2023 05:48:43 -0400 Received: from mout.web.de ([212.227.15.14]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ppQu9-000880-56 for qemu-devel@nongnu.org; Thu, 20 Apr 2023 05:48:42 -0400 Received: from gecko.fritz.box ([82.207.254.123]) by smtp.web.de (mrweb005 [213.165.67.108]) with ESMTPSA (Nemesis) id 1M2gkl-1pt0Cx19rT-004Dmk; Thu, 20 Apr 2023 11:48:36 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=s29768273; t=1681984116; i=lukasstraub2@web.de; bh=9f3AZYiitU7Qh41SKHS0+4Flkwj5FIcZQc8op6FZ0Bo=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=MkUcgHjLUHIdxYqLLF1v2hHyXl4ikvGp5cPy+yUYvkFzUfE9BVVDfmLJjqP4IdCOW hQwrcJNAC9M/jxdivyz8YIzR2VmbBPnuJt3OZvEwZJlZMLv0BynyniitunapTSDE1w wTDOup1bL1wfi+He1P645smvnKfZRNwu8IqYAuFjqGGRq+Spzp6KxpkVXwnwNAWce1 GGajf/I656wyUIcOUpnt7DvxKlfeOPYyqtqbuanSCcEXO2d3KCp+6FnIdbifpyrg66 ELiAIGzgewF4HqTYff3duxiQGNX3oRMrRx78I2ZhtlwxeNoJQlHaIp3CJCp9QyEKyw uwWs2uBg/40hA== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Date: Thu, 20 Apr 2023 11:48:35 +0200 From: Lukas Straub To: qemu-devel Cc: Juan Quintela , Peter Xu , Thomas Huth , Laurent Vivier , Paolo Bonzini Subject: [PATCH v2 13/13] ram-compress.c: Make target independent Message-ID: In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/4OnApqrtn.GN3J2BgK0vZ9z"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:/gQU3KFnA6P2Llk+Y4Mea+re6rhK2VrtDaMbKS6AQU4mhieBcvy AUhokhnPHKL90mBBnn8FSkctajds4N4/pnF3g2KNfY2A/Re7BQ2/EWjmDzTcM9KDegG+tr0 B93saWI8rOKwjoUWB1LmNgxd53gnOKQXhw/OIYMP9uP5Ioo3AXufi0189WzRNxPDtqXbFuP 2U70QBN2wMCMOn1jqOBTQ== UI-OutboundReport: notjunk:1;M01:P0:UCcDTG+bZwA=;ndWUvhLrg8MJnzom/y4S5AWKgXM VqOJ7OLF6QskxF4XYHNS4wI5aGc3GzhstEkdqLvY6pNs59nVpNYK9SK00Eiu5godtBVzwpFpU rNVgXbuSw+vBKwpN1KtwCpCOm+SDjsxaWnpKRo8NE3frRES1tntUKPUZi3miHOBsh0mljIyKh HAho3d5oHk6fZgUdh/4yyVwC65HxbflnrqYcAOFsbH+3QXzigdn39gLCzmjPFynyGSjsFV62T gIXOyd+R11tusmwM7MJcuSAZQ+xTHTqAZBgMXiem+3tViaT4U2eH/Tis4XqjwmdTMhLBI6cX8 i5CQHUt17R2ZLAvRESCubM81EGKlTM+povIgyzYTB/YZV87CUYVvTXNKXe++v4aLDBxgqovZ3 D9zls6lStn7wbVnw235EMHws71BbH4JIyxerZqNg+cRpIDz+reF8X9J+HqYM7QXhm/94DRowM ZsEV7OAh37Zp5RF/ZHkjD7nmYFYlKMwY0fjAheZbXiVeMmJnCGYZPHakKackhrWlq/YjFOELK EDiYCiDNaCNEcPzuevgt775yMSF38GHkY2euZ+i9BGfI3YGv6PvwOv/opzwpRl17qRl18AtR/ v59BgYvHqejOGaCzlQ/e2OCtXm+SXuzaQXhmTVOM81vZkjSyuJlYqLfPz4WaGQVtyQwOVtwZT Ig4YCbPyG/OHUu09CnKBJdCzh35ooh7YJFD5AxWuVrENN4lDVyJ1bzDIoIVQxvnFj4ec9QQ5+ r7yScD09LkFqvT2RhsR44+1ahjJrE6fh8GYxb401zdt6f6i27qn2NsLatBDD1vAwmwsxk+h3c NfSMGE1hU7vSeS+54L1pMuLvEKs+QzAXB9fETa1RcQo0Jow+mSRsu1jG8vLzh01x0qi6K4Xtn 58mxvsaqLf9fDGoqy7lFSPlvgDin7tETH17Qn+uIihys3NWYS+64f9ag52lUwynmBzF9EkFf/ H/3E9f05CjCL8NFqetE0sNVboS0= Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=212.227.15.14; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1681984207195100003 --Sig_/4OnApqrtn.GN3J2BgK0vZ9z Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Make ram-compress.c target independent. Signed-off-by: Lukas Straub Reviewed-by: Juan Quintela --- migration/meson.build | 2 +- migration/ram-compress.c | 17 ++++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/migration/meson.build b/migration/meson.build index 262e3c9754..16f642031c 100644 --- a/migration/meson.build +++ b/migration/meson.build @@ -22,6 +22,7 @@ softmmu_ss.add(files( 'migration.c', 'multifd.c', 'multifd-zlib.c', + 'ram-compress.c', 'postcopy-ram.c', 'savevm.c', 'socket.c', @@ -38,5 +39,4 @@ softmmu_ss.add(when: zstd, if_true: files('multifd-zstd.c= ')) specific_ss.add(when: 'CONFIG_SOFTMMU', if_true: files('dirtyrate.c', 'ram.c', - 'ram-compress.c', 'target.c')) diff --git a/migration/ram-compress.c b/migration/ram-compress.c index b75a9d2b9a..9f03c3cc66 100644 --- a/migration/ram-compress.c +++ b/migration/ram-compress.c @@ -34,7 +34,8 @@ #include "qemu/error-report.h" #include "migration.h" #include "io/channel-null.h" -#include "exec/ram_addr.h" +#include "exec/target_page.h" +#include "exec/ramblock.h" CompressionStats compression_counters; @@ -155,7 +156,7 @@ int compress_threads_save_setup(void) qemu_cond_init(&comp_done_cond); qemu_mutex_init(&comp_done_lock); for (i =3D 0; i < thread_count; i++) { - comp_param[i].originbuf =3D g_try_malloc(TARGET_PAGE_SIZE); + comp_param[i].originbuf =3D g_try_malloc(qemu_target_page_size()); if (!comp_param[i].originbuf) { goto exit; } @@ -191,11 +192,12 @@ static CompressResult do_compress_ram_page(QEMUFile *= f, z_stream *stream, uint8_t *source_buf) { uint8_t *p =3D block->host + offset; + size_t page_size =3D qemu_target_page_size(); int ret; assert(qemu_file_buffer_empty(f)); - if (buffer_is_zero(p, TARGET_PAGE_SIZE)) { + if (buffer_is_zero(p, page_size)) { return RES_ZEROPAGE; } @@ -204,8 +206,8 @@ static CompressResult do_compress_ram_page(QEMUFile *f,= z_stream *stream, * so that we can catch up the error during compression and * decompression */ - memcpy(source_buf, p, TARGET_PAGE_SIZE); - ret =3D qemu_put_compression_data(f, stream, source_buf, TARGET_PAGE_S= IZE); + memcpy(source_buf, p, page_size); + ret =3D qemu_put_compression_data(f, stream, source_buf, page_size); if (ret < 0) { qemu_file_set_error(migrate_get_current()->to_dst_file, ret); error_report("compressed data failed!"); @@ -335,7 +337,7 @@ static void *do_data_decompress(void *opaque) param->des =3D 0; qemu_mutex_unlock(¶m->mutex); - pagesize =3D TARGET_PAGE_SIZE; + pagesize =3D qemu_target_page_size(); ret =3D qemu_uncompress_data(¶m->stream, des, pagesize, param->compbuf, len); @@ -438,7 +440,8 @@ int compress_threads_load_setup(QEMUFile *f) goto exit; } - decomp_param[i].compbuf =3D g_malloc0(compressBound(TARGET_PAGE_SI= ZE)); + size_t compbuf_size =3D compressBound(qemu_target_page_size()); + decomp_param[i].compbuf =3D g_malloc0(compbuf_size); qemu_mutex_init(&decomp_param[i].mutex); qemu_cond_init(&decomp_param[i].cond); decomp_param[i].done =3D true; -- 2.40.0 --Sig_/4OnApqrtn.GN3J2BgK0vZ9z Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmRBCnMACgkQNasLKJxd slgWphAAp5Ndy2bRvUh9EXdZSkljtWBlE7zAvciJY7+NmSLQ4Yn06ZoKBInCJcTf ufEdiHQAKqUmG3Z0yjgQBPX9mUgugcBSYUeXjkz3hkDMEVuGIyz0da7ltTXxv9AD 25vXEHjvnWFUbWbD26o2/BKDLBjKEzqgE+qcx1dXQHBDr6k1drHZyxPAMPlQa1yw QxX+Q27kHim+STANO9M8r0LOTHrqlzbjJl4oYvHioD6Z5Z56uDWwpLAEUgxTvEhG e6NtzglQ7yfnh4gH6xk6FCGu8orwKQk66wj48J2FhFoWrGI4CRGoTFuwfbwF+vUX CYA8kSJ8Tbrp+iO5jIvTvarLkyn49iQ1xaLlQ0asbutk5K/2NS2+fXYGw5r5ZXni vNCPgKyQ5MNTaY7bTttjyCIXv3Bm8mswb0Lf2UH8yh81OecS+SIJ3PPECx5gir8f uOYrUg0cVdXPIoZ95xjTVKfjEQWJC4qEnyAry5hzkYdsAJSYJG3bCG/0gpIrgPXG ufxjys6dvP6zf64gDU33s/NWn1RjyTaJxCHXNk94sMkfOMSmMuT4RjV9LRNjPJgc IVRDRhT+OujPQk7C1MVgwBM0m+s50b1VfURa+TJ/CoWI+VCzMYIo0AQNFsh6VtDB sN4Cwi9XVEYWXYhUeXQMr7H4sgUfzThNwsyC5FY0gUZVSYxOQ5o= =0x5l -----END PGP SIGNATURE----- --Sig_/4OnApqrtn.GN3J2BgK0vZ9z-- From nobody Mon May 13 04:50:12 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1681984828; cv=none; d=zohomail.com; s=zohoarc; b=UrMBqtSYtkHegi9y5ZEh6tKAgVQD4C+K5oQh+LXuz6H7hMmycs6ffgctnD/blH57nhtoBiFiSsgaM19eqIg3QCtxSi6+0Aq9jt7KwvDsQ7+Qxgke4Dudg6uMIxlZmkK3jhTp/F7Dh9EClj4pykmbJVhULGXNY6XuyaQ0IFNamXs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1681984828; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=SEcAMsdEBnh4IsgpG+GC3+7GwIUwt4JCJ4gj3RXKvWM=; b=d25nGJ+y6oKEa0vHtBiUdRCeO2BYJ2zEoImmsvDUpq9fv0/aU4vf7OQTI40URpHm8Qnnx5gBInC8JIIVhoDKvUyW6C3NScccAUCKr4gz+PnEDJ0jHB9MtDCiEu4F+l8mKx9U35wEcl9fYHqClecPh5xpJqaHORl3wmZgVd6mhhU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=lukasstraub2@web.de; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1681984828292662.8269961049801; Thu, 20 Apr 2023 03:00:28 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ppR5F-0005Kr-FN; Thu, 20 Apr 2023 06:00:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ppR5E-0005KN-0L for qemu-devel@nongnu.org; Thu, 20 Apr 2023 06:00:08 -0400 Received: from mout.web.de ([212.227.17.11]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ppR5B-00020S-Os for qemu-devel@nongnu.org; Thu, 20 Apr 2023 06:00:07 -0400 Received: from gecko.fritz.box ([82.207.254.123]) by smtp.web.de (mrweb106 [213.165.67.124]) with ESMTPSA (Nemesis) id 1M28SB-1prLpJ18KP-002Ftu; Thu, 20 Apr 2023 12:00:00 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=s29768273; t=1681984800; i=lukasstraub2@web.de; bh=BVMIw9f2vEQVx3bM1fGGYzyeAeVl7JmqJxoQqPQyLQ8=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=B+zWA8wUSSJ8QkgnpSfWpSZ0WTXVVsm5xOVP7kg0FFxcIdn4FCdKl4cDlin7nYeOk WFCLAFvn1FFGFD3ymIvOXCAGZFdyPE3wvWzkk3RJiBsX474WT9nL91LkuyjrQjjdyL TCAiZVFrzfvRrwArpIl+3daVIcldylQHNf1ydcbVtqmQWz6x+yMn3R3Y1biyq4MEhj +qXf58z/cpdTiOqgI8Bv7fElJ9ej5HbnMKn/fkxlrGvomc3o1WYm2pzbMxJLaMQbOI FNRk9g4MoxoXGRGd9xI5mS4QZNrSM6e4Qm7MFIq42nsnVG8qTPWWQ2M/iI3Lm58KJc hFKfe/ECnG/8Q== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Date: Thu, 20 Apr 2023 11:59:50 +0200 From: Lukas Straub To: qemu-devel Cc: Juan Quintela , Peter Xu , Thomas Huth , Laurent Vivier , Paolo Bonzini Subject: [PATCH v2 14/13] migration: Initialize and cleanup decompression in migration.c Message-ID: <20230420095950.057fe69b@gecko.fritz.box> In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/g9sAJUQMVyim7aEjGTneSAK"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:jw6QGYHn938aAmgOQhFjuOjrGU1XVCqJuYXTw9i49+6sFWnLVtT Lowl+ayFxROyzPlf6c0jWVamyvFSH2Ej7yAxqjs67OOEjb/icPUnGyAtjT3ezi+HKaO4FoJ gvodZdRVIBPZQ8IkbDG59ygHT9I/NyX0E6f1JjxEcYnXel1zBrPBh8CplvZN+GyBcOR5xKq AnIPw1k691vkcZnCTm1Yw== UI-OutboundReport: notjunk:1;M01:P0:sQ28WGfYoOk=;uLIKtIzhAubnz8KxgpIBW+1EdMB aCQMtaf8kWPpmJ289i4OrxEr1YkRJfwpYjQVbhCU6Jyn3OTLLe+z/jSXAXektm6ge0nhmL0As Ixl7fM8iWeZ9/9RQoWN+FXaoU5PEwlcoBFliYuvW5U00Xbnlq/0GE1VcpdA/1bFlnnDpVbhNy NNu6r4wtZlYzAxOAObc8hN+UU6TxHFi/xLh6q64UpeJ0OxWyR0ecDfPpr2c1BakKookNFBz6i vq3dNO9Djqvpkk0JIb+h5tLyUTp3EpGxNwPNgv3kvcBRbJLvwV4YIbwJ2RiSfUE4itXa7Hhqt 5WR9VIIoI3msD6is1AnuE1korYdXBx8kLjA/nlX8pHTSf3HrPbMJ5Bb7HhzTSDb8iJMSnzthd L7RGsHJiOQpLEkTxoSg664oNKprYdmQwo9Eb83ToNWQxY1fTVT3fH0pI2XFDjTcPdYMG0j2CX iYzw0kn3tDQ5bA/Y6Hn/t9k1gb+5Loi553pJM7mvqYxEryvVPTm8SFOp7JchKr6Q38yLi7rmC 7fnEZFwuFLppM0hi1+Phm+XWgsV4vPSu/cJ9UsLbBU7GCW4dNXkcm/cgjMgLi3YD+SgHN3tbn SUfEf2xp+Dpc72w7n6Sd6PI1oOfRdL6rOtst/sqtPNPTQun3Y5nl4/LqtneJzDLzPoHSJRF3r QB2PEhQ1YrpupxY6HvPJR1HzQWhfhDFAAamqN52/S1uwolV5hhtBWdu0YeXnIV0WgtApqY8DS 9XLyrDHjlEhxdQHMTHiYDhnhzePZJLzqdR6pGsBOo7z3Gz5xQLycOLHEcLju7S2lG0fxa32Ob VedMfzX0kh0eU8eX/qZH7e6E1e/gcOqQ7PfB54pp5y2x+cjSJy2qpOjstadhWOPGYi1Ln0l9U D493mkAqLAj8BDoEqids+yBMrSc7cjSvXgVKcPVOH7DaVp6QHOqZJh2pOJ7xrMDwKsViVRc81 cq3r1g== Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=212.227.17.11; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1681984829484100001 --Sig_/g9sAJUQMVyim7aEjGTneSAK Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This fixes compress with colo. Signed-off-by: Lukas Straub Reviewed-by: Juan Quintela --- Oops, this one slipped trough migration/migration.c | 9 +++++++++ migration/ram.c | 5 ----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/migration/migration.c b/migration/migration.c index bda4789193..e7d082a208 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -26,6 +26,7 @@ #include "sysemu/cpu-throttle.h" #include "rdma.h" #include "ram.h" +#include "ram-compress.h" #include "migration/global_state.h" #include "migration/misc.h" #include "migration.h" @@ -316,6 +317,7 @@ void migration_incoming_state_destroy(void) struct MigrationIncomingState *mis =3D migration_incoming_get_current(= ); =20 multifd_load_cleanup(); + compress_threads_load_cleanup(); =20 if (mis->to_src_file) { /* Tell source that we are done */ @@ -598,6 +600,12 @@ process_incoming_migration_co(void *opaque) Error *local_err =3D NULL; =20 assert(mis->from_src_file); + + if (compress_threads_load_setup(mis->from_src_file)) { + error_report("Failed to setup decompress threads"); + goto fail; + } + mis->migration_incoming_co =3D qemu_coroutine_self(); mis->largest_page_size =3D qemu_ram_pagesize_largest(); postcopy_state_set(POSTCOPY_INCOMING_NONE); @@ -663,6 +671,7 @@ fail: qemu_fclose(mis->from_src_file); =20 multifd_load_cleanup(); + compress_threads_load_cleanup(); =20 exit(EXIT_FAILURE); } diff --git a/migration/ram.c b/migration/ram.c index ccfedf4fb5..344f326065 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -3560,10 +3560,6 @@ void colo_release_ram_cache(void) */ static int ram_load_setup(QEMUFile *f, void *opaque) { - if (compress_threads_load_setup(f)) { - return -1; - } - xbzrle_load_setup(); ramblock_recv_map_init(); =20 @@ -3579,7 +3575,6 @@ static int ram_load_cleanup(void *opaque) } =20 xbzrle_load_cleanup(); - compress_threads_load_cleanup(); =20 RAMBLOCK_FOREACH_NOT_IGNORED(rb) { g_free(rb->receivedmap); --=20 2.40.0 --Sig_/g9sAJUQMVyim7aEjGTneSAK Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmRBDRYACgkQNasLKJxd sljC2Q/8CqOt2SRBtzQFLfmbQDPy000NZDusQhc4lp3+aS9mkfu8hr3ftcidM4fy zxwA1zei6qksdjK3lfq3lk5s6nkmOX7nK4/DCH5QZAINK8M4GlHt6OmZMp48334v FjlDI09CPhlvJhvX/OCh0LCQyxHFAxZhfbDGaONbeknPMeTei+ywo1TgYJNinEL7 O7PdmQC/MJMkRoA8+Ko+uyDe3fIg8uDoIku+c9bfqoTjQy/Cl8jWaaZs4UxP+rCZ n6SA3rcEzan0H6L1QA/jd6Bh2FH+a3Pk/3wUfcRzWdA2qhDBI1N5tLlNu8aIC4pE fPUkBeMsowvXTUh0k3BKxn6ua+J422zByek58nHkuw0h2EV6mKo8jrOsPGefJJhp hQaGQQeSVDE7gWq57laYQI100XcnW7DYzPdZ+iLsJp93gqVNaddQwNNeOsKSKAnR j7LaDtSlqauYI4XQOoYOpXmHgmMvraVqzYpJVXDdgNJoJMl2dOtJOPJkn13/YOcY 8sZdKwJU95yqWDlja6sSUA+0FLqvweZU04QQtDGEw/gmhdx6JWv3ZxXQ6yDr6SYf yFjstAZSfJGJ/DrUGHF5ELwTMgjp2UiFBqrXC4wfAkZg02pH9+Cv8yBsYaEldz2N 1KNflE74CUs6YctzG5CHbzhTecAv071uZDIwfTbFgAQIOPkoNQY= =t18t -----END PGP SIGNATURE----- --Sig_/g9sAJUQMVyim7aEjGTneSAK--