From nobody Sat Feb 7 04:55:13 2026 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=quarantine dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1768659118; cv=none; d=zohomail.com; s=zohoarc; b=JHk0w43pscoo7g34+9+tpvBwbDmSexPzRQWIdXNsYf3EU0kZjmzemeUZL2mS7ADDQWrlyc07kpy6aULaTcCFMVAu+trrvm2QZnjdmMWkfahIrVcHRE75Z0uEswsQhhMPJZdwF43KcoR32OZ6bYcDjQQ/OpAgttZxMD4Fnd6gKUg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768659118; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=lnMKUyxF6wlRJPiJZ0WtYkfE2uPGowCOM6UjVwMUYMc=; b=c0Hf27YDlIlYmFu9mtXdViXnZyHTMEqt6IjXuBFwvRlHVw3Rfpa/aDT/rO4u14+1SZ9YtL3v8emZyBIIaeFSXr6Jv47nuXKXLVJjzGUWHGM2++pXAwe4Y32EOU5BkcPbFjEkpieR6rICEJTKA0S70QrwWUgcRK9lqxH12zD0BiY= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768659118919205.99339837013633; Sat, 17 Jan 2026 06:11:58 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vh706-0007aq-Ib; Sat, 17 Jan 2026 09:10:02 -0500 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 1vh6zo-0007Vz-Rr for qemu-devel@nongnu.org; Sat, 17 Jan 2026 09:09:47 -0500 Received: from mout.web.de ([212.227.17.12]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vh6zn-0002ap-6T for qemu-devel@nongnu.org; Sat, 17 Jan 2026 09:09:44 -0500 Received: from [127.0.1.1] ([217.247.100.70]) by smtp.web.de (mrweb106 [213.165.67.124]) with ESMTPSA (Nemesis) id 1MLRUX-1vOlC91x5f-00YF19; Sat, 17 Jan 2026 15:09:34 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=web.de; s=s29768273; t=1768658974; x=1769263774; i=lukasstraub2@web.de; bh=lnMKUyxF6wlRJPiJZ0WtYkfE2uPGowCOM6UjVwMUYMc=; h=X-UI-Sender-Class:From:Date:Subject:MIME-Version:Content-Type: Content-Transfer-Encoding:Message-Id:References:In-Reply-To:To:Cc: cc:content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=DlHxkH7HOnVR9QOx4fK0KSq/NFGij7TTaU0ybrJrhCwMjCslBmr/3IBTAR+PYV2C 4wxOkEOUYYCIri39bcRaS//WeMuRiZ4VxVn5qEKLISihOxeokjvhaYltoVgD0wTG4 59BIaBKkpQICpxXrynXzRZg1nJ5FLcIPlxFFO2fKND8QMNl6ZOxchMevcUvCq8q62 GjXa8zwU5OV2yZgw1UwPlK8GYATgA1L+aFR0WQVg5bLi+xWR9BvkbUc9egtBq90ZI NcSIelwE0Ao+gN21wdfJZDvOtHUBwVPU29YhZuZEmJU1knCMxdZLjgnV6YzFn/8FX NuG5zxFs9Lgyzek/XQ== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 From: Lukas Straub Date: Sat, 17 Jan 2026 15:09:08 +0100 Subject: [PATCH v2 1/8] MAINTAINERS: Add myself as maintainer for COLO migration framework MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260117-colo_unit_test_multifd-v2-1-ab521777fa51@web.de> References: <20260117-colo_unit_test_multifd-v2-0-ab521777fa51@web.de> In-Reply-To: <20260117-colo_unit_test_multifd-v2-0-ab521777fa51@web.de> To: qemu-devel@nongnu.org Cc: Peter Xu , Fabiano Rosas , Laurent Vivier , Paolo Bonzini , Zhang Chen , Hailiang Zhang , Markus Armbruster , Lukas Straub X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=547; i=lukasstraub2@web.de; h=from:subject:message-id; bh=B7l5lXeDfyFh891yX0/RL7d7jcBb8MS3vxtis6zPlOc=; b=owEBbQKS/ZANAwAKATWrCyicXbJYAcsmYgBpa5gbdwbEIfXmcKRoA1Q6fhM4AEHSxSnk2Add+ v8/Wd9q5IqJAjMEAAEKAB0WIQSD+rFYoNm4+3Jij6Q1qwsonF2yWAUCaWuYGwAKCRA1qwsonF2y WByREACaorG1P778JkGkiDkFPVlbmlPhsuyPskBOyb/xd2idcMzENeoxBkPJCa0iieqUOx/+uqj Gfx3BhT74BeBzZhrteCvJM4GY0T8g2IPEXIAC2TJlZlZoK8PRiR4fhOj8g4SCcYf0yUWlE4s8Hk yJ8d5pUXKizd8sVo+c7QIpZl7zifSjI6oABlROB2818AWWvRw/Y92QIy5urv1pg4qVCkhzZkr7Q scFTtulwnIHkfkDuRUFiAi2ZmPRHxTj2VTa5WzE5ClVF3rwvxp9pDM1odZCc+qG9FWXke63edWr qUr4wm9FQJZkjUMOF/DxMT+eM6BUWjs0LfsLEFyiyDBwv2FQtypVQFE4YSEJZ2IPPCpXtWcAvg+ Qg64MGAeq6c5uBdjNZdETqE8TH+Bakox+okrHb65oskq1nR0O8VsqsDK4d26yiGFftEeJ7eFM5b vW2LHsnBUKkzeJCHL8z4BuWhIu7ocNegd3i+W8Fl16U30Mt03pORCxXDV4+RYlUqgID5Mih4zOi BPNpISNrurr+yL0esHt+V/YPP7N/wDv+T4dJ7LzrlFiG8Vay8qivPs1fOYeoMLyeYbnEe/VDFlG 2DWUG+zh5lbpnOcxvmt58U4qeP3G12efbr4/JNbmF1Xqiglb/pA7kUNXWASasggNddBJJA+TYSw SLKg5zsk6Ofiteg== X-Developer-Key: i=lukasstraub2@web.de; a=openpgp; fpr=83FAB158A0D9B8FB72628FA435AB0B289C5DB258 X-Provags-ID: V03:K1:fP3ZmO5NIsZFZSCS+L8rHEO7bQMJ/m2OcOElWHRvHEPk/0nLL1x Wb1NKBllo62GlAt+2EgW+GwpLOR3CKZbfI+yHg5oD6/5cUj2pz0VqwZ+KRiyh8bL4+uSoTx vSdx1wO7ccxH0MmiHyxurh6W9chMcwkAgPP/Gr2pAyRtQdWbhjpbqdzqLx4THfPa0h30ie8 0oi5F7poa2bTSmyu86vNw== UI-OutboundReport: notjunk:1;M01:P0:f7haSNVYDKc=;Izy5UU7bNO2JTBCuGdKKW7BWpfq 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 XjcuLZBYr1ymQfuBdEO3TFrc213rKPqo1Gz2or 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 (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.12; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 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, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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: qemu development 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-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1768659121247158500 I am ready to maintain it. Signed-off-by: Lukas Straub Reviewed-by: Peter Xu Reviewed-by: Zhang Chen --- MAINTAINERS | 1 + 1 file changed, 1 insertion(+) diff --git a/MAINTAINERS b/MAINTAINERS index de8246c3ffdbfb73d8d3df06cb1fffd80a707522..38691feea8941635c7ce45f30a8= 22030016e922f 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3835,6 +3835,7 @@ F: qapi/yank.json =20 COLO Framework M: Hailiang Zhang +M: Lukas Straub S: Maintained F: migration/colo* F: include/migration/colo.h --=20 2.39.5 From nobody Sat Feb 7 04:55:13 2026 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=quarantine dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1768659192; cv=none; d=zohomail.com; s=zohoarc; b=Mrfa6HvI6kGbK/B0GlJToSeRHNVN0ikQd1dOiT7bOeTIXq9E4OnUXhrMGbt1n0Buo5eLxBBSSpkDKJH96Bvr2kGrSyNJHyendbkCTXY0xlykDntT8mJYNCoh1gbJvW7IDWEiFe9EuqU21+ThwPihveh0qJa85MO+lyVmLCAr4OE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768659192; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=3TmbXJbcC5dTi+rX4IClFisOQdgZFG3ImhLkNgl+bNc=; b=BWheE0C00l4a1K3sp9zMVucwH/Cl3r0YxLTbKaHE/B7qsplWmgeBSix1TOs6WSpIO7CeLWtMXHUf5sDZ+mqP/K6DpsoEJn70eJ4+eZcqX25KWymcE94f3hLhicehBIzcEGLqnxHaMWnH55FErsw1rFJ70PQDv1wT8orudslQMrE= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768659192146237.81869589272856; Sat, 17 Jan 2026 06:13:12 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vh70S-0007kO-L2; Sat, 17 Jan 2026 09:10:24 -0500 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 1vh6zp-0007WF-Mf for qemu-devel@nongnu.org; Sat, 17 Jan 2026 09:09:48 -0500 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 1vh6zn-0002bD-6w for qemu-devel@nongnu.org; Sat, 17 Jan 2026 09:09:44 -0500 Received: from [127.0.1.1] ([217.247.100.70]) by smtp.web.de (mrweb106 [213.165.67.124]) with ESMTPSA (Nemesis) id 1MDvDi-1vZS1q3Enc-007fJE; Sat, 17 Jan 2026 15:09:34 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=web.de; s=s29768273; t=1768658974; x=1769263774; i=lukasstraub2@web.de; bh=3TmbXJbcC5dTi+rX4IClFisOQdgZFG3ImhLkNgl+bNc=; h=X-UI-Sender-Class:From:Date:Subject:MIME-Version:Content-Type: Content-Transfer-Encoding:Message-Id:References:In-Reply-To:To:Cc: cc:content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=BgR4EHpZKVB+ptFcju4naGQIofxXpMFS/VI104rDbB3Ra8ab92gUWLP/pKPeFbJE UPYzegG7P40Gl9iVbgVtTBgT8CUAuvruHfhBrSI3xVtxi9cAKdwlgHrPboNanYQgh 7iredPPej9edcluOFWvDgSYvMQ46OEAj55smbUHo87kxfcv7ZvmCWMkdRi1GHu3we ajmgeVk4AQwRupDaJViweCMSvk8L8N/k1YrTSgZJkcyXMTn0qBuTao30sJyKXITSB IICTUaqXwlzWsy7R3udIFALxJJY54yRgXg05ACmDzhFf9+q6L8zTgv3XWmXXPgd3o LFbUBlvXeipez5BUWQ== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 From: Lukas Straub Date: Sat, 17 Jan 2026 15:09:09 +0100 Subject: [PATCH v2 2/8] MAINTAINERS: Remove Hailiang Zhang from COLO migration framework MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260117-colo_unit_test_multifd-v2-2-ab521777fa51@web.de> References: <20260117-colo_unit_test_multifd-v2-0-ab521777fa51@web.de> In-Reply-To: <20260117-colo_unit_test_multifd-v2-0-ab521777fa51@web.de> To: qemu-devel@nongnu.org Cc: Peter Xu , Fabiano Rosas , Laurent Vivier , Paolo Bonzini , Zhang Chen , Hailiang Zhang , Markus Armbruster , Lukas Straub X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=657; i=lukasstraub2@web.de; h=from:subject:message-id; bh=8BO4SS+x3Jail3800Bz6gqn48I2qQl3v4b0zLdzfvgU=; b=owEBbQKS/ZANAwAKATWrCyicXbJYAcsmYgBpa5gbB8cDI68epdQ3LGManIKUZkRf6Y+sn37aM /s6sxgg4OWJAjMEAAEKAB0WIQSD+rFYoNm4+3Jij6Q1qwsonF2yWAUCaWuYGwAKCRA1qwsonF2y WD5vD/4zrHDIOqxNgOSsoiUhluLKs3jMwH7010iHiRd51WzF8NafGXz5gUEyTVRSIbOMnviIZb/ kXGvdOcwkwVRKJ3U7wz0IYppc7Fu4TOECFXHRBsjAtv529x9QfgWnTY/J8tFloXIUIjocOkVfUl cJrm/uMp6RL00XVEYv1dyB2Mp3/DXdZrie0Jdd75K5cILss59WMfIghNBuo9eMuB3nCLoIk4TX4 kB7LjwfdId0zYZW6H0eHZQCfMAFQJb6jImJ55OB+ujhLCs2UAg1lNQaglVAbbpnNqZWLqCy7MIw B9tUKGK6NohKtkyJ2cZnbcTxMYruXtmKgCL6Psl1X156JLkFS8vsSGZdvbfNyNcglMuEpREittz f3voTeIXTQ2Fz2xVnyAIsxl3JXXoiNp2w/jnp/TFr5k7CUn4UDfRB+8kCRy99BCzJzjZ9e2lvCT CaC/f2sIhKfNgJ/dF4PpaVvi2BHjWRk62jwU5s11JK/OGFWZIxJHqUr5hClRTmMFaJjbBOYBr9Z ifap34LkUKUlKIO4FoUYllfaGvcrgzxm2dYa+DEhME8Wjas7l77EUlDouFSYtUD1JRQbTYGvlw9 oQZHB4rJeO8V5IJS0j3yuc5L6LtI7etV97FOnHtwIyx7DcRbhj76jeQ3lqA4CuaswWIVO3u8gl0 J4Bps73ivnt4/Kg== X-Developer-Key: i=lukasstraub2@web.de; a=openpgp; fpr=83FAB158A0D9B8FB72628FA435AB0B289C5DB258 X-Provags-ID: V03:K1:3Bw+korEzPtYYUQXXTlO5/NUxA61xFvrZYH5EzAmwvH3Bx8qZJP zX/zhzjhbLE/rxe1LfwJj/MSetW0JpRqIGXYPc2D/DhFmKdPvhIPwSj7bX4xVr2SVvXK44a /9uSGipbcJlwdaNpgxwx1JbnC9dJNL1O81DUgl0L2N8h7tHTqVC9vVTJBpPTNHe73YVBiTY cbJz5Ck5k7ezFzIGcZURw== UI-OutboundReport: notjunk:1;M01:P0:u9rT3H3oX2o=;pVKdvtJO2WShJ2zkNYc+0ZKviaa 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 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 (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: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 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, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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: qemu development 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-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1768659193927158500 His last email to the mailing list is from December 2021: https://lore.kernel.org/qemu-devel/20211214075424.6920-1-zhanghailiang@xfus= ion.com/ Signed-off-by: Lukas Straub Reviewed-by: Peter Xu Reviewed-by: Zhang Chen --- MAINTAINERS | 1 - 1 file changed, 1 deletion(-) diff --git a/MAINTAINERS b/MAINTAINERS index 38691feea8941635c7ce45f30a822030016e922f..563804345fec68ee72793dbb7c1= b7e5be4c32083 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3834,7 +3834,6 @@ F: include/qemu/yank.h F: qapi/yank.json =20 COLO Framework -M: Hailiang Zhang M: Lukas Straub S: Maintained F: migration/colo* --=20 2.39.5 From nobody Sat Feb 7 04:55:13 2026 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=quarantine dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1768659033; cv=none; d=zohomail.com; s=zohoarc; b=FqamwM2qEFSIKOqDM3guajAn6SpfBhdNAnd4DNT8SBSzjpoDOQzzZD0Jc6Jc0Qi9m4eT0j3vMETrmHOdRZrFtohQaMBw6ZTVK8BafvHjCqRjE6TOYtYgeT473bMXC7YXHje3CctUHDV05uG3y6BJHtMcB/LDZyfJIu7SPXFM/BM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768659033; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=FpNK1t9Pyzk1GtTohgZn5ss6d9KC39cjvTauvs/5kOI=; b=kwyB2krwMMpRtVBaEhz6IQb8KLOT/fF6YPuxIZJDDRI6LjoBoNALs6Ae9fft2qT7xvPCbef9OT5HdYflsWd8wTiKyeAhLqpUuBFD4RE1+qrbZ6z8jId1NOAxHnuTcM6Qg7l0kGr/k/HamunolTNrB2wwCUXSW1XGg4wvB7YA0sg= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768659033367968.7825870116855; Sat, 17 Jan 2026 06:10:33 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vh700-0007Xl-DQ; Sat, 17 Jan 2026 09:09:56 -0500 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 1vh6zj-0007VL-F8 for qemu-devel@nongnu.org; Sat, 17 Jan 2026 09:09:42 -0500 Received: from mout.web.de ([212.227.17.12]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vh6zh-0002T9-GT for qemu-devel@nongnu.org; Sat, 17 Jan 2026 09:09:39 -0500 Received: from [127.0.1.1] ([217.247.100.70]) by smtp.web.de (mrweb106 [213.165.67.124]) with ESMTPSA (Nemesis) id 1MRk4e-1vE3pF0BLe-00NYpm; Sat, 17 Jan 2026 15:09:35 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=web.de; s=s29768273; t=1768658975; x=1769263775; i=lukasstraub2@web.de; bh=FpNK1t9Pyzk1GtTohgZn5ss6d9KC39cjvTauvs/5kOI=; h=X-UI-Sender-Class:From:Date:Subject:MIME-Version:Content-Type: Content-Transfer-Encoding:Message-Id:References:In-Reply-To:To:Cc: cc:content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=wUR+pTzywHjqJxjFVbwJldAIOss/n1mhlCxupNlzl76d8mvbp/vVPnNWfkBicX2a G0cb7zaUqkOBEICxpGVuF7oU4/nPHGp5A8utxYk54ffVzyA448/QIV//jJozKRxLv uATEC+uvvyw2UIFZYZ0NWTfl7yNPrpSTovKOTBgv2ZI38kPDAIuah8fd6Q1PsgS7o O5k1jkUS3TibqyiKsgOfqnM+NzPq6+BMHnXBfoEqaHzmYv066qVJb1ooSiq/UwHPx wXbnyCXqZz5t9PJT1Xd6F0nGJJiOXtx53oDnnH+//ERxcnbPj+ermlG/+cSeoL03Q sQLh0WDZtxBx9gKDeA== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 From: Lukas Straub Date: Sat, 17 Jan 2026 15:09:10 +0100 Subject: [PATCH v2 3/8] Move ram state receive into multifd_ram_state_recv() MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260117-colo_unit_test_multifd-v2-3-ab521777fa51@web.de> References: <20260117-colo_unit_test_multifd-v2-0-ab521777fa51@web.de> In-Reply-To: <20260117-colo_unit_test_multifd-v2-0-ab521777fa51@web.de> To: qemu-devel@nongnu.org Cc: Peter Xu , Fabiano Rosas , Laurent Vivier , Paolo Bonzini , Zhang Chen , Hailiang Zhang , Markus Armbruster , Lukas Straub X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1215; i=lukasstraub2@web.de; h=from:subject:message-id; bh=Mj50C/e2pQMojt6scYosf/diMLC11NkCGVS67VKjm9I=; b=owEBbQKS/ZANAwAKATWrCyicXbJYAcsmYgBpa5gbUXN31RjqMKFrDbp3jgddmc0ZTlIFvCndw 42kWkm0SviJAjMEAAEKAB0WIQSD+rFYoNm4+3Jij6Q1qwsonF2yWAUCaWuYGwAKCRA1qwsonF2y WLHOEACb+8C4tcE8zoKp2r66yHy2skPsRyb2PgiBQuM5PSSWUZYdjmQ+FYfaFjE+mY/Qr1320j0 CVM0/sNsVVfUozEiez7tLle5SnJps5aUuMrvR97/HStxxHvsxuEJMbwm1Tpy87IN9LIZXhBbGh8 en/IlfLZOEFecFyAhADLQ93rxacAm5BYQjnT1ZNg8ulEGoKjO0JwjsXZ0wPATmxTx4Zn/ka33A9 6EBE4I4c2GQoL7L2M3EYux9gmmAJuXYd62Woo0WmyQAckHDfPhmmo1/Sm5quuEKr8WBHUXQID0k fye8knUtA+teP+EAVCDFLwCQ8XkBPkBFK5mw9X3b2DWOKUTgc2SKsZdwk/Nm4s4d08ZNTuWOFli I+QjBQf1ar68vz2yOSkNHYKsiAetpzUANrvO08pfwfrqhU7VWpgBc0HfbZZ6mHBfL6cv4qwtMpC VnJ7GlxtKeg5gCFfOeC6cECGvTie9EaqmTMnfreyIDffRg7XnuyAhlVrCGyKBsQFjgiazYrFOE0 2Cg1DGqMplHjmFTAV4zll7wtjKpiEL1H8AeqaYf/Tjp5N28p18E1FpXZCGAAxXcWvhZu+EcEgW9 aezn37aDQAZ18DgoaU65DjfVFTS1fGuEI5is0xb7t8czFt14z+Xq8czJDeHCC2ZBbEPi5FldSAy eHO2qMwFweIe6hg== X-Developer-Key: i=lukasstraub2@web.de; a=openpgp; fpr=83FAB158A0D9B8FB72628FA435AB0B289C5DB258 X-Provags-ID: V03:K1:UBBh2/9BN2Vv6BIdtivV7cptpR/4F5jWKUUMoEsPVoJMbaesweH M3J+jvLQ4kx1M9Um/3o1hHpmjWBDY2GT5UmBrkApUS/B61bsb7Ep97ULnNsH1PdcmLnpH+5 JRHL5ZTAI7ECFfdtidJd2sGm/feXHh6h/jQha0xTScCnya3McOkryPmgUIc0jx81tpvE8nT VOZdV0ijTWGUG0EVb7dig== UI-OutboundReport: notjunk:1;M01:P0:WnVNAd5PRdU=;rHZbHatchNeNLcpVt/FvnqU5AjY 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 rcyi5WYY5XTz0X+MEoW9Bi1dK2WnR 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 (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.12; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 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, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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: qemu development 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-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1768659034886158500 This is in preparation for the next patch. Signed-off-by: Lukas Straub Reviewed-by: Peter Xu --- migration/multifd.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/migration/multifd.c b/migration/multifd.c index bf6da85af8a1e207235ce06b8dbace33beded6d8..8e71171fb7a17726ba7eb0705e2= 93c41e8aa32ec 100644 --- a/migration/multifd.c +++ b/migration/multifd.c @@ -1265,6 +1265,15 @@ static int multifd_device_state_recv(MultiFDRecvPara= ms *p, Error **errp) return ret; } =20 +static int multifd_ram_state_recv(MultiFDRecvParams *p, Error **errp) +{ + int ret; + + ret =3D multifd_recv_state->ops->recv(p, errp); + + return ret; +} + static void *multifd_recv_thread(void *opaque) { MigrationState *s =3D migrate_get_current(); @@ -1399,7 +1408,7 @@ static void *multifd_recv_thread(void *opaque) assert(use_packets); ret =3D multifd_device_state_recv(p, &local_err); } else { - ret =3D multifd_recv_state->ops->recv(p, &local_err); + ret =3D multifd_ram_state_recv(p, &local_err); } if (ret !=3D 0) { break; --=20 2.39.5 From nobody Sat Feb 7 04:55:13 2026 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=quarantine dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1768659196; cv=none; d=zohomail.com; s=zohoarc; b=G0VtmP3jbs4d9p2JbOQr/tYoMfRAZ+QmJQ/0/CVlefqApq7ZYa7xAG1dsXyBIwX4XiJ1hJr1GygCPGL/9MXIqrMZm/oHUfO8nxDytmPDiDV+6BqCJ3ZXD+SVfMjRQSm6FZQmppPFDwFpsw27WeXDwcfIheJa2Do9eHi3ryvaJLo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768659196; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=w2r8bkR7RlW4NZ+SMP6LZqpIB8Sn/8gVNZAjtN04PI8=; b=eb+1B2MuFEyBWYmuaOkibd1Dg1dyIohvmr9w9bSCK3S9EoVNbFGcEMMhKtBU4m2iUrf7lilpu4G7nHgzVCl23wGRIvOCcMiHkHeMA5GVsb5VMDhrQQeUNJIr0rL46gfwqU9/0dKYQMfZkJaOQlf4TE9dRuH96Mx194BRutNR/gQ= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768659196735626.7645111051717; Sat, 17 Jan 2026 06:13:16 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vh70R-0007jb-U6; Sat, 17 Jan 2026 09:10:23 -0500 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 1vh6zo-0007Vx-Lb for qemu-devel@nongnu.org; Sat, 17 Jan 2026 09:09:44 -0500 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 1vh6zl-0002Y6-EL for qemu-devel@nongnu.org; Sat, 17 Jan 2026 09:09:44 -0500 Received: from [127.0.1.1] ([217.247.100.70]) by smtp.web.de (mrweb106 [213.165.67.124]) with ESMTPSA (Nemesis) id 1MgANA-1wIu2r1W4k-00iMyk; Sat, 17 Jan 2026 15:09:35 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=web.de; s=s29768273; t=1768658975; x=1769263775; i=lukasstraub2@web.de; bh=w2r8bkR7RlW4NZ+SMP6LZqpIB8Sn/8gVNZAjtN04PI8=; h=X-UI-Sender-Class:From:Date:Subject:MIME-Version:Content-Type: Content-Transfer-Encoding:Message-Id:References:In-Reply-To:To:Cc: cc:content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=pQVrY491VrdaEQwYoMxa9uO8CrhL3hPWJL+a2ZA58dmzM1xU9nlVbHUnUp4f36Ye lhr79Mo7FX7av9BDiJjsq2/D3dVQ7MnW3hHQRc63FTB/P5v7kUTzlzqaLghaktkWp chu5wGm8huE8mzdm7WT66nOQLDWDts9NHJr6kAZ2cdclUtE8N1qjlq73D1LpLcgcE PgAmjLDj9LVdYlCFB1AeB5VAEsSRnNwMK74y1jxWxjhVo3NGwWm6HCtgLnkdk76lg Sa57g79nGLlXY3/jzUKfxmo8bkjgfqYm5p/RXtw5A59ebeUnK7UUpZyiq7yyQhGqR X7JBx3EJClPj+t8esg== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 From: Lukas Straub Date: Sat, 17 Jan 2026 15:09:11 +0100 Subject: [PATCH v2 4/8] multifd: Add COLO support MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260117-colo_unit_test_multifd-v2-4-ab521777fa51@web.de> References: <20260117-colo_unit_test_multifd-v2-0-ab521777fa51@web.de> In-Reply-To: <20260117-colo_unit_test_multifd-v2-0-ab521777fa51@web.de> To: qemu-devel@nongnu.org Cc: Peter Xu , Fabiano Rosas , Laurent Vivier , Paolo Bonzini , Zhang Chen , Hailiang Zhang , Markus Armbruster , Lukas Straub , Juan Quintela X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6500; i=lukasstraub2@web.de; h=from:subject:message-id; bh=SKX0paz3JMTU/nE8nfcjnRfRq9nlVBXZdFYjuY4Q1dI=; b=owEBbQKS/ZANAwAKATWrCyicXbJYAcsmYgBpa5gb7uMkvkFn6zkDQ7Pb5+0KH9i7bS/L0mF6H TDMJJwtz3yJAjMEAAEKAB0WIQSD+rFYoNm4+3Jij6Q1qwsonF2yWAUCaWuYGwAKCRA1qwsonF2y WEN8EAC7wiYFiRfkzP3tiDgJieOJ2sYghmZQoVf76c1kgDkp57SBpeh+RhLDIrtoH6F1XqyG0RH Q8yN4gQFV/N062zeoJnJzHN1j8fNEqAvwD+nUn4vAPtglYToSd6mHLgbZtltPyYgqGEadCefLYy 7DAWn2x23YD2WLhW0ivpcczs6QliqmvmafmEo6c/UG2g62FX2lQaHH1TktJ4BJeza/8cIJ3UAr7 cB3NN5p07flBNC+bnOdngPEtrZBaqG+LjtuscbGaWHJUax/sQqsdh2dq7GQCNhbLBLL7eatqVom efnI/PfsP79fuMYvIyLuDvkX/iLYTllVN8toB7g7BBR6I60wFsVzewoTL7guF3zNVuwhyOipuR4 vevTniwYwir9C3iBpVGeBOq+xQE/TEJOJs6hdsIshsaOqn7PKFkJsNNmGRZB9Y7ZqxBSR6ZVTOZ T8iaoGx8ELI2IZ1lZeTazUISe7qCf92axqwcGfDLMVbpb1vUJ4oeDLWQTeRxrRBM/6U0WI8J8KZ BW5c8FJ/nu6Nnw9JeXT7kg5zTMqVnrh19W9Nodvlez00dFFgsx2vquFwK0vgYUPBp4DnBbsz9H1 5pCsN166+4O4rufjzXHE7PdVRO+YI30FLyQT4H0AEcPDfG+n4g9+hISNAwq/ErmePQgqLP053+u PvQN4UBxNM1VvCQ== X-Developer-Key: i=lukasstraub2@web.de; a=openpgp; fpr=83FAB158A0D9B8FB72628FA435AB0B289C5DB258 X-Provags-ID: V03:K1:pVMFzmchPVNPPlwBYkKL0f40ZjVFueBXDAg4qZvCW8JaPtyJ2Fh ITuRZvlR4tqDT4y3MzGBgrlWYsS2TnfnVXSWv9OD2rrV1NqTXCONLBdJUxPKRkoBErnBzLZ aVUpf4CekqXvZPIQ11NE+0kpUXv2UbvFlRQ67kBMg9wyE4DctNxi2Wl+Rf3MPimhD/IaDKT F73OUVWymA127jJf0m69A== UI-OutboundReport: notjunk:1;M01:P0:ejBYPJfkpzU=;n14Rq6bgvYt2W5voX1svqh4BwX6 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 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 (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: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 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, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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: qemu development 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-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1768659197667158500 Like in the normal ram_load() path, put the received pages into the colo cache and mark the pages in the bitmap so that they will be flushed to the guest later. Multifd with COLO is useful to reduce the VM pause time during checkpointing for latency sensitive workloads. In such workloads the worst-case latency is especially important. Also, multifd migration is the preferred way to do migration nowadays and t= his allows to use multifd compression with COLO. Benchmark: Cluster nodes - Intel Xenon E5-2630 v3 - 48Gb RAM - 10G Ethernet Guest - Windows Server 2016 - 6Gb RAM - 4 cores Workload - Upload a file to the guest with SMB to simulate moderate memory dirtying - Measure the memory transfer time portion of each checkpoint - 600ms COLO checkpoint interval Results Plain idle mean: 4.50ms 99per: 10.33ms load mean: 24.30ms 99per: 78.05ms Multifd-4 idle mean: 6.48ms 99per: 10.41ms load mean: 14.12ms 99per: 31.27ms Evaluation While multifd has slightly higher latency when the guest idles, it is 10ms faster under load and more importantly it's worst case latency is less than 1/2 of plain under load as can be seen in the 99. Percentile. Signed-off-by: Juan Quintela Signed-off-by: Lukas Straub --- MAINTAINERS | 1 + migration/meson.build | 2 +- migration/multifd-colo.c | 49 ++++++++++++++++++++++++++++++++++++++++++++= ++++ migration/multifd-colo.h | 26 +++++++++++++++++++++++++ migration/multifd.c | 12 ++++++++++++ migration/multifd.h | 1 + 6 files changed, 90 insertions(+), 1 deletion(-) diff --git a/MAINTAINERS b/MAINTAINERS index 563804345fec68ee72793dbb7c1b7e5be4c32083..dbb217255c2cf35dc0ce971c202= 1b130fac5469b 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3837,6 +3837,7 @@ COLO Framework M: Lukas Straub S: Maintained F: migration/colo* +F: migration/multifd-colo.* F: include/migration/colo.h F: include/migration/failover.h F: docs/COLO-FT.txt diff --git a/migration/meson.build b/migration/meson.build index 16909d54c5110fc5d8187fd3a68c4a5b08b59ea7..1e59fe4f1f0bbfffed90df38e8f= 39fa87bceb9b9 100644 --- a/migration/meson.build +++ b/migration/meson.build @@ -40,7 +40,7 @@ system_ss.add(files( ), gnutls, zlib) =20 if get_option('replication').allowed() - system_ss.add(files('colo-failover.c', 'colo.c')) + system_ss.add(files('colo-failover.c', 'colo.c', 'multifd-colo.c')) else system_ss.add(files('colo-stubs.c')) endif diff --git a/migration/multifd-colo.c b/migration/multifd-colo.c new file mode 100644 index 0000000000000000000000000000000000000000..d8d98e79b12ed52c41f341052a6= 82d7786e221b5 --- /dev/null +++ b/migration/multifd-colo.c @@ -0,0 +1,49 @@ +/* + * SPDX-License-Identifier: GPL-2.0-or-later + * + * multifd colo implementation + * + * Copyright (c) Lukas Straub + * + * This work is licensed under the terms of the GNU GPL, version 2 or late= r. + * See the COPYING file in the top-level directory. + */ + +#include "qemu/osdep.h" +#include "exec/target_page.h" +#include "qemu/error-report.h" +#include "qapi/error.h" +#include "ram.h" +#include "multifd.h" +#include "options.h" +#include "io/channel-socket.h" +#include "migration/colo.h" +#include "multifd-colo.h" +#include "system/ramblock.h" + +void multifd_colo_prepare_recv(MultiFDRecvParams *p) +{ + assert(p->block->colo_cache); + + /* + * While we're still in precopy state (not yet in colo state), we copy + * received pages to both guest and cache. No need to set dirty bits, + * since guest and cache memory are in sync. + */ + if (migration_incoming_in_colo_state()) { + colo_record_bitmap(p->block, p->normal, p->normal_num); + } + p->host =3D p->block->colo_cache; +} + +void multifd_colo_process_recv(MultiFDRecvParams *p) +{ + if (!migration_incoming_in_colo_state()) { + for (int i =3D 0; i < p->normal_num; i++) { + void *guest =3D p->block->host + p->normal[i]; + void *cache =3D p->host + p->normal[i]; + memcpy(guest, cache, multifd_ram_page_size()); + } + } + p->host =3D p->block->host; +} diff --git a/migration/multifd-colo.h b/migration/multifd-colo.h new file mode 100644 index 0000000000000000000000000000000000000000..82eaf3f48c47de2f090f9de52f9= d57a337d4754a --- /dev/null +++ b/migration/multifd-colo.h @@ -0,0 +1,26 @@ +/* + * SPDX-License-Identifier: GPL-2.0-or-later + * + * multifd colo header + * + * Copyright (c) Lukas Straub + * + * This work is licensed under the terms of the GNU GPL, version 2 or late= r. + * See the COPYING file in the top-level directory. + */ + +#ifndef QEMU_MIGRATION_MULTIFD_COLO_H +#define QEMU_MIGRATION_MULTIFD_COLO_H + +#ifdef CONFIG_REPLICATION + +void multifd_colo_prepare_recv(MultiFDRecvParams *p); +void multifd_colo_process_recv(MultiFDRecvParams *p); + +#else + +static inline void multifd_colo_prepare_recv(MultiFDRecvParams *p) {} +static inline void multifd_colo_process_recv(MultiFDRecvParams *p) {} + +#endif +#endif diff --git a/migration/multifd.c b/migration/multifd.c index 8e71171fb7a17726ba7eb0705e293c41e8aa32ec..6c85acec3bac134e85cfcee0d32= 057134f5af8d1 100644 --- a/migration/multifd.c +++ b/migration/multifd.c @@ -29,6 +29,7 @@ #include "qemu-file.h" #include "trace.h" #include "multifd.h" +#include "multifd-colo.h" #include "threadinfo.h" #include "options.h" #include "qemu/yank.h" @@ -1269,7 +1270,18 @@ static int multifd_ram_state_recv(MultiFDRecvParams = *p, Error **errp) { int ret; =20 + if (migrate_colo()) { + multifd_colo_prepare_recv(p); + } + ret =3D multifd_recv_state->ops->recv(p, errp); + if (ret !=3D 0) { + return ret; + } + + if (migrate_colo()) { + multifd_colo_process_recv(p); + } =20 return ret; } diff --git a/migration/multifd.h b/migration/multifd.h index 9b6d81e7ede024f05d4cd235de95e73840d0bbc4..7036f438fade1baed2442bfdcf8= b5d6397c4a448 100644 --- a/migration/multifd.h +++ b/migration/multifd.h @@ -280,6 +280,7 @@ typedef struct { /* ramblock */ RAMBlock *block; /* ramblock host address */ + /* or points to the corresponding address in the colo cache */ uint8_t *host; /* buffers to recv */ struct iovec *iov; --=20 2.39.5 From nobody Sat Feb 7 04:55:13 2026 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=quarantine dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1768659349; cv=none; d=zohomail.com; s=zohoarc; b=Yb4ScjQ+V93ICDmtLn44QeEO096WAKG+9Kkzvz4m6JwY28OAs+851IygV16izbuqxX3Q9ai+7mWxREKsx6FX1cyNmEzZHX9p3C7rH3/SDLTpOeZlIXXHVJIqw/bGq/SZJarsf+WljlPaJST6lwgJcKA5aelVv049HLGsOS1MxmM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768659349; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=sY5U6tkhVqUdCuq/PtEYepJ63eDBszrJPvN5TBPfsdM=; b=a8MveqRkTEDMVRcNy8mogjF3jl14uTl8HY0BqhkNtK4OTHyqRyeRW5twSUNp4X7ZVTafwvtgEJ0dH7eIqzP67GDWbOb0sQ7NdqiBajbeYDOHjN58rLK2SximZrwZhpRoPhOYqM5h+CDQZFEx/jl2NoYs0iAovDaIzbfpiMKF/gY= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768659349137960.6822247941882; Sat, 17 Jan 2026 06:15:49 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vh701-0007ZO-3J; Sat, 17 Jan 2026 09:09:58 -0500 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 1vh6zn-0007Vu-Nl for qemu-devel@nongnu.org; Sat, 17 Jan 2026 09:09:44 -0500 Received: from mout.web.de ([212.227.17.12]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vh6zl-0002Z0-EB for qemu-devel@nongnu.org; Sat, 17 Jan 2026 09:09:43 -0500 Received: from [127.0.1.1] ([217.247.100.70]) by smtp.web.de (mrweb106 [213.165.67.124]) with ESMTPSA (Nemesis) id 1N6bCu-1vsblh2eA2-00r8QA; Sat, 17 Jan 2026 15:09:35 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=web.de; s=s29768273; t=1768658975; x=1769263775; i=lukasstraub2@web.de; bh=sY5U6tkhVqUdCuq/PtEYepJ63eDBszrJPvN5TBPfsdM=; h=X-UI-Sender-Class:From:Date:Subject:MIME-Version:Content-Type: Content-Transfer-Encoding:Message-Id:References:In-Reply-To:To:Cc: cc:content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=ZYcWS/bnAC89Tk8if8Rba3us6trv7e8pXDGdICRtJo+juECzF4XidEgw9NWeLUJH +yOdgLymYVwp+BJbTwwRiLvaa7SsHtj3HF5TJA4m/dEvbPrkpBlVGSBVWdgPIXnDs jDzey7RYsUw1EK4jpXFVLOLg61dHDXFC+KDFF/+3OrFWrvGzSHxm+vwfoJuYKU1Js aYQJOJQdzI4qsqfggrZ3Y4Wyvv3MIk1HmgyK09Rh9vaJYgrk8k1YtOdQZLiuRkHM+ her2NEhYpK9tYjyjARffPY+kqWQXoIVtttUG7hC5lxsSYwZ65THBjv6JvMs3CRojf 4a0Clfu481IXCdrzoA== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 From: Lukas Straub Date: Sat, 17 Jan 2026 15:09:12 +0100 Subject: [PATCH v2 5/8] migration-test: Add COLO migration unit test MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260117-colo_unit_test_multifd-v2-5-ab521777fa51@web.de> References: <20260117-colo_unit_test_multifd-v2-0-ab521777fa51@web.de> In-Reply-To: <20260117-colo_unit_test_multifd-v2-0-ab521777fa51@web.de> To: qemu-devel@nongnu.org Cc: Peter Xu , Fabiano Rosas , Laurent Vivier , Paolo Bonzini , Zhang Chen , Hailiang Zhang , Markus Armbruster , Lukas Straub X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=12402; i=lukasstraub2@web.de; h=from:subject:message-id; bh=97WW2FsFUoW7E0Z8lUFQmJQQp+dc0Wwh8C2s6P2aMDY=; b=owEBbQKS/ZANAwAKATWrCyicXbJYAcsmYgBpa5gb2RALg3uJb+xMs7RZbV+CU7wnamdNTQ+Oh S7xmyVkuf2JAjMEAAEKAB0WIQSD+rFYoNm4+3Jij6Q1qwsonF2yWAUCaWuYGwAKCRA1qwsonF2y WMq9D/sHwfh2L7KOOJY4ZPTgEAERUvF69Syq52NpZtIgQV6iXJ/VimRaB377QTkoa5oJbqGtCvq Kh3MoVWqvq8K2NRFY2ZOSh5qUc77klhIZV8svd7VTv3u1BKyLRcwZlB7XqHwh7vjAhzlLW75qTE 7wGLooLmd83oM2rj5/ZoZQf5ZRA23mhgf9DXELyaCBmdsRake5T2QbGorxX1QqJX/XeNbVtEp9E tRhS9u1Z+9h3olegaXXv2eAkCF62alRQiRKx3eArNv25h3OwQAbc67POkyS9MYeeVfsyPW9xthR 5clIp+ggr203HYnfxqFhd9/XTYi6KLpVXrSFpgyee2zjfdEXdOThLpLElBxvxylWtCfTFNmfhxg lGKsUTyAX/84J2GBKE1SzS19guCWWMxv1Bhq7TwQCclNyVyQMxTFFjCJdLOSTVytIt1NpRiajiv ulaXbhS5J+6+yl+i64wQ0RETWbv4cn4vzUaFhXMWXTEN0E5lVJelc0pFH2NPyhUdqkE6+o6ohFU dPXARDFkWeF1onM0rzm9dBzxestchOqL/jqW8OtMVHXcxt0tZlpKg2CzJaH5H+UCcZFMx9NxFkW gaw3N5t81fvldOG31E7LQ17P/C4UuLydnnVVwEJM9CSStFgO8Ra0UPTljTVmqjhqnOxGhEsXSpx m7Y8Ub71+xzMrZw== X-Developer-Key: i=lukasstraub2@web.de; a=openpgp; fpr=83FAB158A0D9B8FB72628FA435AB0B289C5DB258 X-Provags-ID: V03:K1:2M0uyHlZQlPmJc2YlupLhtMSzrB5g2I6RwJDwAbuEjpOiaetA3p 9TbmqJSccZ1lCru7r76Z1FIC8uDRXZXLkyyWAsgsurRPOblruTBHnwdJ+s+S7NPAYOrARVS Kffx2TgpUjEkpOukh2Kl/qiSABRrqwUaBRYZlvF3Es7/1LIRewf1zgrrQTKNFTj32wIjS2k ddQvpPhaqYA3uqBmu8ONw== UI-OutboundReport: notjunk:1;M01:P0:gMb5PuJwo34=;fl7ZCe3XMm7jG2zF4pYU8bar2Nz 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 ySLfFSHEqkLPkcxTAn6/A9I3ghum8 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 (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.12; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 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, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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: qemu development 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-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1768659350701158500 Add a COLO migration test for COLO migration and failover. COLO does not support q35 machine at this time. Signed-off-by: Lukas Straub --- MAINTAINERS | 1 + tests/qtest/meson.build | 7 ++- tests/qtest/migration-test.c | 1 + tests/qtest/migration/colo-tests.c | 113 +++++++++++++++++++++++++++++++++= ++++ tests/qtest/migration/framework.c | 87 +++++++++++++++++++++++++++- tests/qtest/migration/framework.h | 10 ++++ 6 files changed, 217 insertions(+), 2 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS index dbb217255c2cf35dc0ce971c2021b130fac5469b..92ca20c9d4186a08519d15bfe8c= bd583ab061a8b 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3840,6 +3840,7 @@ F: migration/colo* F: migration/multifd-colo.* F: include/migration/colo.h F: include/migration/failover.h +F: tests/qtest/migration/colo-tests.c F: docs/COLO-FT.txt =20 COLO Proxy diff --git a/tests/qtest/meson.build b/tests/qtest/meson.build index 0f053fb56de5806d3c213e3a26c0b19998ae151a..d0129af4431bb08a94a918a1e40= a8f657059d764 100644 --- a/tests/qtest/meson.build +++ b/tests/qtest/meson.build @@ -367,6 +367,11 @@ if gnutls.found() endif endif =20 +migration_colo_files =3D [] +if get_option('replication').allowed() + migration_colo_files =3D [files('migration/colo-tests.c')] +endif + qtests =3D { 'aspeed_hace-test': files('aspeed-hace-utils.c', 'aspeed_hace-test.c'), 'aspeed_smc-test': files('aspeed-smc-utils.c', 'aspeed_smc-test.c'), @@ -378,7 +383,7 @@ qtests =3D { 'migration/migration-util.c') + dbus_vmstate1, 'erst-test': files('erst-test.c'), 'ivshmem-test': [rt, '../../contrib/ivshmem-server/ivshmem-server.c'], - 'migration-test': test_migration_files + migration_tls_files, + 'migration-test': test_migration_files + migration_tls_files + migration= _colo_files, 'pxe-test': files('boot-sector.c'), 'pnv-xive2-test': files('pnv-xive2-common.c', 'pnv-xive2-flush-sync.c', 'pnv-xive2-nvpg_bar.c'), diff --git a/tests/qtest/migration-test.c b/tests/qtest/migration-test.c index 08936871741535c926eeac40a7d7c3f461c72fd0..e582f05c7dc2673dbd05a936df8= feb6c964b5bbc 100644 --- a/tests/qtest/migration-test.c +++ b/tests/qtest/migration-test.c @@ -55,6 +55,7 @@ int main(int argc, char **argv) migration_test_add_precopy(env); migration_test_add_cpr(env); migration_test_add_misc(env); + migration_test_add_colo(env); =20 ret =3D g_test_run(); =20 diff --git a/tests/qtest/migration/colo-tests.c b/tests/qtest/migration/col= o-tests.c new file mode 100644 index 0000000000000000000000000000000000000000..5004f581e4d9e4e6f54eee6d70a= 9307b7fd123be --- /dev/null +++ b/tests/qtest/migration/colo-tests.c @@ -0,0 +1,113 @@ +/* + * SPDX-License-Identifier: GPL-2.0-or-later + * + * QTest testcases for COLO migration + * + * Copyright (c) 2025 Lukas Straub + * + * This work is licensed under the terms of the GNU GPL, version 2 or late= r. + * See the COPYING file in the top-level directory. + * + */ + +#include "qemu/osdep.h" +#include "libqtest.h" +#include "migration/framework.h" +#include "migration/migration-qmp.h" +#include "migration/migration-util.h" +#include "qemu/module.h" + +static void test_colo_plain_common(MigrateCommon *args, + bool failover_during_checkpoint, + bool primary_failover) +{ + args->listen_uri =3D "tcp:127.0.0.1:0"; + test_colo_common(args, failover_during_checkpoint, primary_failover); +} + +static void *hook_start_multifd(QTestState *from, QTestState *to) +{ + return migrate_hook_start_precopy_tcp_multifd_common(from, to, "none"); +} + +static void test_colo_multifd_common(MigrateCommon *args, + bool failover_during_checkpoint, + bool primary_failover) +{ + args->listen_uri =3D "defer"; + args->start_hook =3D hook_start_multifd; + args->start.caps[MIGRATION_CAPABILITY_MULTIFD] =3D true; + test_colo_common(args, failover_during_checkpoint, primary_failover); +} + +static void test_colo_plain_primary_failover(char *name, MigrateCommon *ar= gs) +{ + test_colo_plain_common(args, false, true); +} + +static void test_colo_plain_secondary_failover(char *name, MigrateCommon *= args) +{ + test_colo_plain_common(args, false, false); +} + +static void test_colo_multifd_primary_failover(char *name, MigrateCommon *= args) +{ + test_colo_multifd_common(args, false, true); +} + +static void test_colo_multifd_secondary_failover(char *name, + MigrateCommon *args) +{ + test_colo_multifd_common(args, false, false); +} + +static void test_colo_plain_primary_failover_checkpoint(char *name, + MigrateCommon *arg= s) +{ + test_colo_plain_common(args, true, true); +} + +static void test_colo_plain_secondary_failover_checkpoint(char *name, + MigrateCommon *a= rgs) +{ + test_colo_plain_common(args, true, false); +} + +static void test_colo_multifd_primary_failover_checkpoint(char *name, + MigrateCommon *a= rgs) +{ + test_colo_multifd_common(args, true, true); +} + +static void test_colo_multifd_secondary_failover_checkpoint(char *name, + MigrateCommon = *args) +{ + test_colo_multifd_common(args, true, false); +} + +void migration_test_add_colo(MigrationTestEnv *env) +{ + if (!env->full_set) { + return; + } + + migration_test_add("/migration/colo/plain/primary_failover", + test_colo_plain_primary_failover); + migration_test_add("/migration/colo/plain/secondary_failover", + test_colo_plain_secondary_failover); + + migration_test_add("/migration/colo/multifd/primary_failover", + test_colo_multifd_primary_failover); + migration_test_add("/migration/colo/multifd/secondary_failover", + test_colo_multifd_secondary_failover); + + migration_test_add("/migration/colo/plain/primary_failover_checkpoint", + test_colo_plain_primary_failover_checkpoint); + migration_test_add("/migration/colo/plain/secondary_failover_checkpoin= t", + test_colo_plain_secondary_failover_checkpoint); + + migration_test_add("/migration/colo/multifd/primary_failover_checkpoin= t", + test_colo_multifd_primary_failover_checkpoint); + migration_test_add("/migration/colo/multifd/secondary_failover_checkpo= int", + test_colo_multifd_secondary_failover_checkpoint); +} diff --git a/tests/qtest/migration/framework.c b/tests/qtest/migration/fram= ework.c index 57d3b9b7c5a269d31659971e308367bd916d28f6..fe34e7cc7a1a4eeb8d5219f5473= 3bbd8446b0e4e 100644 --- a/tests/qtest/migration/framework.c +++ b/tests/qtest/migration/framework.c @@ -315,7 +315,7 @@ int migrate_args(char **from, char **to, const char *ur= i, MigrateStart *args) if (strcmp(arch, "i386") =3D=3D 0 || strcmp(arch, "x86_64") =3D=3D 0) { memory_size =3D "150M"; =20 - if (g_str_equal(arch, "i386")) { + if (g_str_equal(arch, "i386") || args->force_pc_machine) { machine_alias =3D "pc"; } else { machine_alias =3D "q35"; @@ -1066,6 +1066,91 @@ void *migrate_hook_start_precopy_tcp_multifd_common(= QTestState *from, return NULL; } =20 +int test_colo_common(MigrateCommon *args, bool failover_during_checkpoint, + bool primary_failover) +{ + QTestState *from, *to; + void *data_hook =3D NULL; + + /* + * For the COLO test, both VMs will run in parallel. Thus both VMs wan= t to + * open the image read/write at the same time. Using read-only=3Don is= not + * possible here, because ide-hd does not support read-only backing im= age. + * + * So use -snapshot, where each qemu instance creates its own writable + * snapshot internally while leaving the real image read-only. + */ + args->start.opts_source =3D "-snapshot"; + args->start.opts_target =3D "-snapshot"; + + /* + * COLO migration code logs many errors when the migration socket + * is shut down, these are expected so we hide them here. + */ + args->start.hide_stderr =3D true; + + /* + * COLO currently does not work with Q35 machine + */ + args->start.force_pc_machine =3D true; + + args->start.oob =3D true; + args->start.caps[MIGRATION_CAPABILITY_X_COLO] =3D true; + + if (migrate_start(&from, &to, args->listen_uri, &args->start)) { + return -1; + } + + migrate_set_parameter_int(from, "x-checkpoint-delay", 300); + + if (args->start_hook) { + data_hook =3D args->start_hook(from, to); + } + + migrate_ensure_converge(from); + wait_for_serial("src_serial"); + + migrate_qmp(from, to, args->connect_uri, NULL, "{}"); + + wait_for_migration_status(from, "colo", NULL); + wait_for_resume(to, &dst_state); + + wait_for_serial("src_serial"); + wait_for_serial("dest_serial"); + + /* wait for 3 checkpoints */ + for (int i =3D 0; i < 3; i++) { + qtest_qmp_eventwait(to, "RESUME"); + wait_for_serial("src_serial"); + wait_for_serial("dest_serial"); + } + + if (failover_during_checkpoint) { + qtest_qmp_eventwait(to, "STOP"); + } + if (primary_failover) { + qtest_qmp_assert_success(from, "{'exec-oob': 'yank', 'id': 'yank-c= md', " + "'arguments': {'instances':" + "[{'type': 'migration'}]}}= "); + qtest_qmp_assert_success(from, "{'execute': 'x-colo-lost-heartbeat= '}"); + wait_for_serial("src_serial"); + } else { + qtest_qmp_assert_success(to, "{'exec-oob': 'yank', 'id': 'yank-cmd= ', " + "'arguments': {'instances':" + "[{'type': 'migration'}]}}"); + qtest_qmp_assert_success(to, "{'execute': 'x-colo-lost-heartbeat'}= "); + wait_for_serial("dest_serial"); + } + + if (args->end_hook) { + args->end_hook(from, to, data_hook); + } + + migrate_end(from, to, !primary_failover); + + return 0; +} + QTestMigrationState *get_src(void) { return &src_state; diff --git a/tests/qtest/migration/framework.h b/tests/qtest/migration/fram= ework.h index 2ef0f57962605c9e3bc7b7de48e52351e5389138..75088c5fb098a0f95acb1e23585= d3b6e8307451e 100644 --- a/tests/qtest/migration/framework.h +++ b/tests/qtest/migration/framework.h @@ -139,6 +139,9 @@ typedef struct { /* Do not connect to target monitor and qtest sockets in qtest_init */ bool defer_target_connect; =20 + /* Use pc machine for x86_64 */ + bool force_pc_machine; + /* * Migration capabilities to be set in both source and * destination. For unilateral capabilities, use @@ -248,6 +251,8 @@ void test_postcopy_common(MigrateCommon *args); void test_postcopy_recovery_common(MigrateCommon *args); int test_precopy_common(MigrateCommon *args); void test_file_common(MigrateCommon *args, bool stop_src); +int test_colo_common(MigrateCommon *args, bool failover_during_checkpoint, + bool colo_primary_failover); void *migrate_hook_start_precopy_tcp_multifd_common(QTestState *from, QTestState *to, const char *method); @@ -267,5 +272,10 @@ void migration_test_add_file(MigrationTestEnv *env); void migration_test_add_precopy(MigrationTestEnv *env); void migration_test_add_cpr(MigrationTestEnv *env); void migration_test_add_misc(MigrationTestEnv *env); +#ifdef CONFIG_REPLICATION +void migration_test_add_colo(MigrationTestEnv *env); +#else +static inline void migration_test_add_colo(MigrationTestEnv *env) {}; +#endif =20 #endif /* TEST_FRAMEWORK_H */ --=20 2.39.5 From nobody Sat Feb 7 04:55:13 2026 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=quarantine dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1768659111; cv=none; d=zohomail.com; s=zohoarc; b=YNw3C/Jr3R+8vycX99d9qvgQonVgmbLLJ0r+nFjnyGgjG9ZC8Bw/PMCZEEuTNtL8hAXu0UpoTG8yhP13ygrW3nRB+74GTBkvWZomPNuDWBSgmaXNZRrcqg6RKgUDqgBu6EdF/ZNywzv88K+WUcbdIKPrbSu+xfKQLAk/PCT95e4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768659111; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=nH3sh1xczQwx2gp6W0Kk44Ik/tTnLbaCZmGy1OyzQcY=; b=aEO6aHWHZNzz6QYNEYSdWTsr9Ge4R/hg0tWfjlcZ5BCPgF8aSon7dtZjOueHnxst60slBzp4fvIYHXLwisDS9lCUQTmHVahDid22tbBVzTFN2XUNhYVETHyaKq2ufI1wCbf6xEKnLLu1/W/I+8x0plf1/qG3pER7m8JIJUfM17I= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768659111188999.0398430293735; Sat, 17 Jan 2026 06:11:51 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vh70E-0007bU-Pm; Sat, 17 Jan 2026 09:10:13 -0500 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 1vh6zt-0007XT-Br for qemu-devel@nongnu.org; Sat, 17 Jan 2026 09:09:51 -0500 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 1vh6zo-0002dC-DU for qemu-devel@nongnu.org; Sat, 17 Jan 2026 09:09:48 -0500 Received: from [127.0.1.1] ([217.247.100.70]) by smtp.web.de (mrweb106 [213.165.67.124]) with ESMTPSA (Nemesis) id 1MPKB5-1vSaPK3l77-00R6wX; Sat, 17 Jan 2026 15:09:35 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=web.de; s=s29768273; t=1768658976; x=1769263776; i=lukasstraub2@web.de; bh=nH3sh1xczQwx2gp6W0Kk44Ik/tTnLbaCZmGy1OyzQcY=; h=X-UI-Sender-Class:From:Date:Subject:MIME-Version:Content-Type: Content-Transfer-Encoding:Message-Id:References:In-Reply-To:To:Cc: cc:content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=XGm6zOe9ciVwHmqmqQFrQ6n3LOQXbZC7c5cDuq4SB/+AyreL5Y/DHg3zyA33aEL/ vqpwED9ib6Los3Gul/1GXpj9sHsQJvtK/tgrbf9dM1moxR6UcUtaV0RS1Yv6xXLyN SelUQZayGEXuSL9UnywtQ4aQNbqofxdYDS3XfgvUMb4cmpU09nb5wmmFOCFrYe4wp 6aoYvx7b3TSFS1nZf6/1zkqZKvJLEa01jpfKfeKY2oPgOFbo3hQZYQg9+4oTxGqtg X9gd+zBhgkCYOODXL9ntd6sQknhMGlDIHGhmo57927QEV+dDc7ZsNroQ8arZbolKg f8eRVxYzjxmLd/6q3A== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 From: Lukas Straub Date: Sat, 17 Jan 2026 15:09:13 +0100 Subject: [PATCH v2 6/8] Convert colo main documentation to restructuredText MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260117-colo_unit_test_multifd-v2-6-ab521777fa51@web.de> References: <20260117-colo_unit_test_multifd-v2-0-ab521777fa51@web.de> In-Reply-To: <20260117-colo_unit_test_multifd-v2-0-ab521777fa51@web.de> To: qemu-devel@nongnu.org Cc: Peter Xu , Fabiano Rosas , Laurent Vivier , Paolo Bonzini , Zhang Chen , Hailiang Zhang , Markus Armbruster , Lukas Straub X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=41495; i=lukasstraub2@web.de; h=from:subject:message-id; bh=YJQfUKWQVDE0ct3mb1xHyRqZ/iGHN9n06ZGd9aorab4=; b=owEBbQKS/ZANAwAKATWrCyicXbJYAcsmYgBpa5gcpAk0tOIjw9hXA+dsHEdwfoekCK+Sdhd1u 6nEHuW1EA+JAjMEAAEKAB0WIQSD+rFYoNm4+3Jij6Q1qwsonF2yWAUCaWuYHAAKCRA1qwsonF2y WBUREACmdjv0ILJv3e3F7WuBWVssRT0lXuv8r9SH7EyfI++zHadEEmq8fgzwAwiy5Ybu+6xVJdq 7I64UyBw9OrDoOZn0xU4PKXmrTZHG+ZCQbFCr3G2iu5BcL7zEHYOpVdQGwq2QMEuLm3h/NUGbyN jblWIiFTAZx9qY27qE+jvoaTN/793aY7DdOD4Y0TkxkrasxkUitK9Kni7YZ6ncI82w/1DZcZkjL S1WRqhpwt1WzFiEX43YzGi4Nc5KNVC3sY0z6ZGO44VuWf1eyuZzIGUgXtDV6TJRFG87nmay4b3J L8Aa6wrhNNm7iwb535evPsaFsXpeTG9xIl/qzVHstI2ELbJrhwGxCaYk3u3SB72K3FknmFY2NkZ LfGhqaISUyi5V8B/bMvNo//l0LtZNvpIQDW6LmQnXWGWEiGWdYBQ37jwC1yppdFEbKQTS9Ia4HI mJ8MhnTH4IO5CNB1iKiFeSE8YH/XxpZA2sRP2mmNy8DZNA3+5fW6xqfveZ6uzD7OzMwlYBfoRU9 oWmCR+x/2tA8vJlTZHr3G9eOu8/bEllWN1taZp4DufUW3ptFn+lZbuyuVTRUIneT2mR3rUlLEza KrzAV4E/U1KNEw5/XhWmFfgsCObrvNC0jcaQz1WeGk25w+5lcsecrLjgL0natMPuJ2C+mBqmLCw 3tLq9xUl6W36F3A== X-Developer-Key: i=lukasstraub2@web.de; a=openpgp; fpr=83FAB158A0D9B8FB72628FA435AB0B289C5DB258 X-Provags-ID: V03:K1:BFiGeiXm/DBqRrj//sQfZoQaCsn2eBECsXtHnEl+4SIJlZud2dk bSxYxgtnFnaWNQ1svvdgZUuJzARc8TXvk4QXp+f8AGzq1HEfIjSDuI1oM+hHhDvLUFdtFp1 XVqLW+xoDq19PD09KQu+oys/tweS0oQECLpV5rwoJjMp48JMr+7gcNvWmAIY2mCFY8CbY5R p21XsN8KEsDAlwUXjKUMg== UI-OutboundReport: notjunk:1;M01:P0:OEzoxCi4NFw=;hVatmTC3N0ehnpM6ckpSsBXqj0Z 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 hfBkhzHA= 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 (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: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 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, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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: qemu development 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-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1768659113429158500 Signed-off-by: Lukas Straub --- MAINTAINERS | 2 +- docs/COLO-FT.txt | 334 ------------------------------------------ docs/system/index.rst | 1 + docs/system/qemu-colo.rst | 361 ++++++++++++++++++++++++++++++++++++++++++= ++++ 4 files changed, 363 insertions(+), 335 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS index 92ca20c9d4186a08519d15bfe8cbd583ab061a8b..4c30dc50d15c74b317443e43920= e01b4560b03a5 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3841,7 +3841,7 @@ F: migration/multifd-colo.* F: include/migration/colo.h F: include/migration/failover.h F: tests/qtest/migration/colo-tests.c -F: docs/COLO-FT.txt +F: docs/devel/qemu-colo.rst =20 COLO Proxy M: Zhang Chen diff --git a/docs/COLO-FT.txt b/docs/COLO-FT.txt deleted file mode 100644 index 2283a09c080b8996f9767eeb415e8d4fbdc940af..000000000000000000000000000= 0000000000000 --- a/docs/COLO-FT.txt +++ /dev/null @@ -1,334 +0,0 @@ -COarse-grained LOck-stepping Virtual Machines for Non-stop Service ----------------------------------------- -Copyright (c) 2016 Intel Corporation -Copyright (c) 2016 HUAWEI TECHNOLOGIES CO., LTD. -Copyright (c) 2016 Fujitsu, Corp. - -This work is licensed under the terms of the GNU GPL, version 2 or later. -See the COPYING file in the top-level directory. - -This document gives an overview of COLO's design and how to use it. - -=3D=3D Background =3D=3D -Virtual machine (VM) replication is a well known technique for providing -application-agnostic software-implemented hardware fault tolerance, -also known as "non-stop service". - -COLO (COarse-grained LOck-stepping) is a high availability solution. -Both primary VM (PVM) and secondary VM (SVM) run in parallel. They receive= the -same request from client, and generate response in parallel too. -If the response packets from PVM and SVM are identical, they are released -immediately. Otherwise, a VM checkpoint (on demand) is conducted. - -=3D=3D Architecture =3D=3D - -The architecture of COLO is shown in the diagram below. -It consists of a pair of networked physical nodes: -The primary node running the PVM, and the secondary node running the SVM -to maintain a valid replica of the PVM. -PVM and SVM execute in parallel and generate output of response packets for -client requests according to the application semantics. - -The incoming packets from the client or external network are received by t= he -primary node, and then forwarded to the secondary node, so that both the P= VM -and the SVM are stimulated with the same requests. - -COLO receives the outbound packets from both the PVM and SVM and compares = them -before allowing the output to be sent to clients. - -The SVM is qualified as a valid replica of the PVM, as long as it generates -identical responses to all client requests. Once the differences in the ou= tputs -are detected between the PVM and SVM, COLO withholds transmission of the -outbound packets until it has successfully synchronized the PVM state to t= he SVM. - - Primary Node = Secondary Node -+------------+ +-----------------------+ +------------------------+= +------------+ -| | | HeartBeat +<----->+ HeartBeat |= | | -| Primary VM | +-----------+-----------+ +-----------+------------+= |Secondary VM| -| | | | = | | -| | +-----------|-----------+ +-----------|------------+= | | -| | |QEMU +---v----+ | |QEMU +----v---+ |= | | -| | | |Failover| | | |Failover| |= | | -| | | +--------+ | | +--------+ |= | | -| | | +---------------+ | | +---------------+ |= | | -| | | | VM Checkpoint +-------------->+ VM Checkpoint | |= | | -| | | +---------------+ | | +---------------+ |= | | -|Requests<--------------------------\ /-----------------\ /---------------= ------>Requests| -| | | ^ ^ | | | | |= | | -|Responses+---------------------\ /-|-|------------\ /--------------------= -----+Responses| -| | | | | | | | | | | | | |= | | -| | | +-----------+ | | | | | | | | | | +----------+ |= | | -| | | | COLO disk | | | | | | | | | | | | COLO disk| |= | | -| | | | Manager +---------------------------->| Manager | |= | | -| | | ++----------+ v v | | | | | v v | +---------++ |= | | -| | | |+-----------+-+-+-++| | ++-+--+-+---------+ | |= | | -| | | || COLO Proxy || | | COLO Proxy | | |= | | -| | | || (compare packet || | |(adjust sequence | | |= | | -| | | ||and mirror packet)|| | | and ACK) | | |= | | -| | | |+------------+---+-+| | +-----------------+ | |= | | -+------------+ +-----------------------+ +------------------------+= +------------+ -+------------+ | | | | = +------------+ -| VM Monitor | | | | | = | VM Monitor | -+------------+ | | | | = +------------+ -+---------------------------------------+ +-------------------------= ---------------+ -| Kernel | | | | | Kernel | = | -+---------------------------------------+ +-------------------------= ---------------+ - | | | | - +--------------v+ +---------v---+--+ +------------------+ +v---= ----------+ - | Storage | |External Network| | External Network | | S= torage | - +---------------+ +----------------+ +------------------+ +----= ----------+ - - -=3D=3D Components introduction =3D=3D - -You can see there are several components in COLO's diagram of architecture. -Their functions are described below. - -HeartBeat: -Runs on both the primary and secondary nodes, to periodically check platfo= rm -availability. When the primary node suffers a hardware fail-stop failure, -the heartbeat stops responding, the secondary node will trigger a failover -as soon as it determines the absence. - -COLO disk Manager: -When primary VM writes data into image, the colo disk manager captures thi= s data -and sends it to secondary VM's which makes sure the context of secondary V= M's -image is consistent with the context of primary VM 's image. -For more details, please refer to docs/block-replication.txt. - -Checkpoint/Failover Controller: -Modifications of save/restore flow to realize continuous migration, -to make sure the state of VM in Secondary side is always consistent with V= M in -Primary side. - -COLO Proxy: -Delivers packets to Primary and Secondary, and then compare the responses = from -both side. Then decide whether to start a checkpoint according to some rul= es. -Please refer to docs/colo-proxy.txt for more information. - -Note: -HeartBeat has not been implemented yet, so you need to trigger failover pr= ocess -by using 'x-colo-lost-heartbeat' command. - -=3D=3D COLO operation status =3D=3D - -+-----------------+ -| | -| Start COLO | -| | -+--------+--------+ - | - | Main qmp command: - | migrate-set-capabilities with x-colo - | migrate - | - v -+--------+--------+ -| | -| COLO running | -| | -+--------+--------+ - | - | Main qmp command: - | x-colo-lost-heartbeat - | or - | some error happened - v -+--------+--------+ -| | send qmp event: -| COLO failover | COLO_EXIT -| | -+-----------------+ - -COLO use the qmp command to switch and report operation status. -The diagram just shows the main qmp command, you can get the detail -in test procedure. - -=3D=3D Test procedure =3D=3D -Note: Here we are running both instances on the same host for testing, -change the IP Addresses if you want to run it on two hosts. Initially -127.0.0.1 is the Primary Host and 127.0.0.2 is the Secondary Host. - -=3D=3D Startup qemu =3D=3D -1. Primary: -Note: Initially, $imagefolder/primary.qcow2 needs to be copied to all host= s. -You don't need to change any IP's here, because 0.0.0.0 listens on any -interface. The chardev's with 127.0.0.1 IP's loopback to the local qemu -instance. - -# imagefolder=3D"/mnt/vms/colo-test-primary" - -# qemu-system-x86_64 -enable-kvm -cpu qemu64,kvmclock=3Don -m 512 -smp 1 -= qmp stdio \ - -device piix3-usb-uhci -device usb-tablet -name primary \ - -netdev tap,id=3Dhn0,vhost=3Doff,helper=3D/usr/lib/qemu/qemu-bridge-hel= per \ - -device rtl8139,id=3De0,netdev=3Dhn0 \ - -chardev socket,id=3Dmirror0,host=3D0.0.0.0,port=3D9003,server=3Don,wai= t=3Doff \ - -chardev socket,id=3Dcompare1,host=3D0.0.0.0,port=3D9004,server=3Don,wa= it=3Don \ - -chardev socket,id=3Dcompare0,host=3D127.0.0.1,port=3D9001,server=3Don,= wait=3Doff \ - -chardev socket,id=3Dcompare0-0,host=3D127.0.0.1,port=3D9001 \ - -chardev socket,id=3Dcompare_out,host=3D127.0.0.1,port=3D9005,server=3D= on,wait=3Doff \ - -chardev socket,id=3Dcompare_out0,host=3D127.0.0.1,port=3D9005 \ - -object filter-mirror,id=3Dm0,netdev=3Dhn0,queue=3Dtx,outdev=3Dmirror0 \ - -object filter-redirector,netdev=3Dhn0,id=3Dredire0,queue=3Drx,indev=3D= compare_out \ - -object filter-redirector,netdev=3Dhn0,id=3Dredire1,queue=3Drx,outdev= =3Dcompare0 \ - -object iothread,id=3Diothread1 \ - -object colo-compare,id=3Dcomp0,primary_in=3Dcompare0-0,secondary_in=3D= compare1,\ -outdev=3Dcompare_out0,iothread=3Diothread1 \ - -drive if=3Dide,id=3Dcolo-disk0,driver=3Dquorum,read-pattern=3Dfifo,vot= e-threshold=3D1,\ -children.0.file.filename=3D$imagefolder/primary.qcow2,children.0.driver=3D= qcow2 -S - -2. Secondary: -Note: Active and hidden images need to be created only once and the -size should be the same as primary.qcow2. Again, you don't need to change -any IP's here, except for the $primary_ip variable. - -# imagefolder=3D"/mnt/vms/colo-test-secondary" -# primary_ip=3D127.0.0.1 - -# qemu-img create -f qcow2 $imagefolder/secondary-active.qcow2 10G - -# qemu-img create -f qcow2 $imagefolder/secondary-hidden.qcow2 10G - -# qemu-system-x86_64 -enable-kvm -cpu qemu64,kvmclock=3Don -m 512 -smp 1 -= qmp stdio \ - -device piix3-usb-uhci -device usb-tablet -name secondary \ - -netdev tap,id=3Dhn0,vhost=3Doff,helper=3D/usr/lib/qemu/qemu-bridge-hel= per \ - -device rtl8139,id=3De0,netdev=3Dhn0 \ - -chardev socket,id=3Dred0,host=3D$primary_ip,port=3D9003,reconnect-ms= =3D1000 \ - -chardev socket,id=3Dred1,host=3D$primary_ip,port=3D9004,reconnect-ms= =3D1000 \ - -object filter-redirector,id=3Df1,netdev=3Dhn0,queue=3Dtx,indev=3Dred0 \ - -object filter-redirector,id=3Df2,netdev=3Dhn0,queue=3Drx,outdev=3Dred1= \ - -object filter-rewriter,id=3Drew0,netdev=3Dhn0,queue=3Dall \ - -drive if=3Dnone,id=3Dparent0,file.filename=3D$imagefolder/primary.qcow= 2,driver=3Dqcow2 \ - -drive if=3Dnone,id=3Dchilds0,driver=3Dreplication,mode=3Dsecondary,fil= e.driver=3Dqcow2,\ -top-id=3Dcolo-disk0,file.file.filename=3D$imagefolder/secondary-active.qco= w2,\ -file.backing.driver=3Dqcow2,file.backing.file.filename=3D$imagefolder/seco= ndary-hidden.qcow2,\ -file.backing.backing=3Dparent0 \ - -drive if=3Dide,id=3Dcolo-disk0,driver=3Dquorum,read-pattern=3Dfifo,vot= e-threshold=3D1,\ -children.0=3Dchilds0 \ - -incoming tcp:0.0.0.0:9998 - - -3. On Secondary VM's QEMU monitor, issue command -{"execute":"qmp_capabilities"} -{"execute": "migrate-set-capabilities", "arguments": {"capabilities": [ {"= capability": "x-colo", "state": true } ] } } -{"execute": "nbd-server-start", "arguments": {"addr": {"type": "inet", "da= ta": {"host": "0.0.0.0", "port": "9999"} } } } -{"execute": "nbd-server-add", "arguments": {"device": "parent0", "writable= ": true } } - -Note: - a. The qmp command nbd-server-start and nbd-server-add must be run - before running the qmp command migrate on primary QEMU - b. Active disk, hidden disk and nbd target's length should be the - same. - c. It is better to put active disk and hidden disk in ramdisk. They - will be merged into the parent disk on failover. - -4. On Primary VM's QEMU monitor, issue command: -{"execute":"qmp_capabilities"} -{"execute": "human-monitor-command", "arguments": {"command-line": "drive_= add -n buddy driver=3Dreplication,mode=3Dprimary,file.driver=3Dnbd,file.hos= t=3D127.0.0.2,file.port=3D9999,file.export=3Dparent0,node-name=3Dreplicatio= n0"}} -{"execute": "x-blockdev-change", "arguments":{"parent": "colo-disk0", "nod= e": "replication0" } } -{"execute": "migrate-set-capabilities", "arguments": {"capabilities": [ {"= capability": "x-colo", "state": true } ] } } -{"execute": "migrate", "arguments": {"uri": "tcp:127.0.0.2:9998" } } - - Note: - a. There should be only one NBD Client for each primary disk. - b. The qmp command line must be run after running qmp command line in - secondary qemu. - -5. After the above steps, you will see, whenever you make changes to PVM, = SVM will be synced. -You can issue command '{ "execute": "migrate-set-parameters" , "arguments"= :{ "x-checkpoint-delay": 2000 } }' -to change the idle checkpoint period time - -6. Failover test -You can kill one of the VMs and Failover on the surviving VM: - -If you killed the Secondary, then follow "Primary Failover". After that, -if you want to resume the replication, follow "Primary resume replication" - -If you killed the Primary, then follow "Secondary Failover". After that, -if you want to resume the replication, follow "Secondary resume replicatio= n" - -=3D=3D Primary Failover =3D=3D -The Secondary died, resume on the Primary - -{"execute": "x-blockdev-change", "arguments":{ "parent": "colo-disk0", "ch= ild": "children.1"} } -{"execute": "human-monitor-command", "arguments":{ "command-line": "drive_= del replication0" } } -{"execute": "object-del", "arguments":{ "id": "comp0" } } -{"execute": "object-del", "arguments":{ "id": "iothread1" } } -{"execute": "object-del", "arguments":{ "id": "m0" } } -{"execute": "object-del", "arguments":{ "id": "redire0" } } -{"execute": "object-del", "arguments":{ "id": "redire1" } } -{"execute": "x-colo-lost-heartbeat" } - -=3D=3D Secondary Failover =3D=3D -The Primary died, resume on the Secondary and prepare to become the new Pr= imary - -{"execute": "nbd-server-stop"} -{"execute": "x-colo-lost-heartbeat"} - -{"execute": "object-del", "arguments":{ "id": "f2" } } -{"execute": "object-del", "arguments":{ "id": "f1" } } -{"execute": "chardev-remove", "arguments":{ "id": "red1" } } -{"execute": "chardev-remove", "arguments":{ "id": "red0" } } - -{"execute": "chardev-add", "arguments":{ "id": "mirror0", "backend": {"typ= e": "socket", "data": {"addr": { "type": "inet", "data": { "host": "0.0.0.0= ", "port": "9003" } }, "server": true } } } } -{"execute": "chardev-add", "arguments":{ "id": "compare1", "backend": {"ty= pe": "socket", "data": {"addr": { "type": "inet", "data": { "host": "0.0.0.= 0", "port": "9004" } }, "server": true } } } } -{"execute": "chardev-add", "arguments":{ "id": "compare0", "backend": {"ty= pe": "socket", "data": {"addr": { "type": "inet", "data": { "host": "127.0.= 0.1", "port": "9001" } }, "server": true } } } } -{"execute": "chardev-add", "arguments":{ "id": "compare0-0", "backend": {"= type": "socket", "data": {"addr": { "type": "inet", "data": { "host": "127.= 0.0.1", "port": "9001" } }, "server": false } } } } -{"execute": "chardev-add", "arguments":{ "id": "compare_out", "backend": {= "type": "socket", "data": {"addr": { "type": "inet", "data": { "host": "127= .0.0.1", "port": "9005" } }, "server": true } } } } -{"execute": "chardev-add", "arguments":{ "id": "compare_out0", "backend": = {"type": "socket", "data": {"addr": { "type": "inet", "data": { "host": "12= 7.0.0.1", "port": "9005" } }, "server": false } } } } - -=3D=3D Primary resume replication =3D=3D -Resume replication after new Secondary is up. - -Start the new Secondary (Steps 2 and 3 above), then on the Primary: -{"execute": "drive-mirror", "arguments":{ "device": "colo-disk0", "job-id"= : "resync", "target": "nbd://127.0.0.2:9999/parent0", "mode": "existing", "= format": "raw", "sync": "full"} } - -Wait until disk is synced, then: -{"execute": "stop"} -{"execute": "block-job-cancel", "arguments":{ "device": "resync"} } - -{"execute": "human-monitor-command", "arguments":{ "command-line": "drive_= add -n buddy driver=3Dreplication,mode=3Dprimary,file.driver=3Dnbd,file.hos= t=3D127.0.0.2,file.port=3D9999,file.export=3Dparent0,node-name=3Dreplicatio= n0"}} -{"execute": "x-blockdev-change", "arguments":{ "parent": "colo-disk0", "no= de": "replication0" } } - -{"execute": "object-add", "arguments":{ "qom-type": "filter-mirror", "id":= "m0", "netdev": "hn0", "queue": "tx", "outdev": "mirror0" } } -{"execute": "object-add", "arguments":{ "qom-type": "filter-redirector", "= id": "redire0", "netdev": "hn0", "queue": "rx", "indev": "compare_out" } } -{"execute": "object-add", "arguments":{ "qom-type": "filter-redirector", "= id": "redire1", "netdev": "hn0", "queue": "rx", "outdev": "compare0" } } -{"execute": "object-add", "arguments":{ "qom-type": "iothread", "id": "iot= hread1" } } -{"execute": "object-add", "arguments":{ "qom-type": "colo-compare", "id": = "comp0", "primary_in": "compare0-0", "secondary_in": "compare1", "outdev": = "compare_out0", "iothread": "iothread1" } } - -{"execute": "migrate-set-capabilities", "arguments":{ "capabilities": [ {"= capability": "x-colo", "state": true } ] } } -{"execute": "migrate", "arguments":{ "uri": "tcp:127.0.0.2:9998" } } - -Note: -If this Primary previously was a Secondary, then we need to insert the -filters before the filter-rewriter by using the -""insert": "before", "position": "id=3Drew0"" Options. See below. - -=3D=3D Secondary resume replication =3D=3D -Become Primary and resume replication after new Secondary is up. Note -that now 127.0.0.1 is the Secondary and 127.0.0.2 is the Primary. - -Start the new Secondary (Steps 2 and 3 above, but with primary_ip=3D127.0.= 0.2), -then on the old Secondary: -{"execute": "drive-mirror", "arguments":{ "device": "colo-disk0", "job-id"= : "resync", "target": "nbd://127.0.0.1:9999/parent0", "mode": "existing", "= format": "raw", "sync": "full"} } - -Wait until disk is synced, then: -{"execute": "stop"} -{"execute": "block-job-cancel", "arguments":{ "device": "resync" } } - -{"execute": "human-monitor-command", "arguments":{ "command-line": "drive_= add -n buddy driver=3Dreplication,mode=3Dprimary,file.driver=3Dnbd,file.hos= t=3D127.0.0.1,file.port=3D9999,file.export=3Dparent0,node-name=3Dreplicatio= n0"}} -{"execute": "x-blockdev-change", "arguments":{ "parent": "colo-disk0", "no= de": "replication0" } } - -{"execute": "object-add", "arguments":{ "qom-type": "filter-mirror", "id":= "m0", "insert": "before", "position": "id=3Drew0", "netdev": "hn0", "queue= ": "tx", "outdev": "mirror0" } } -{"execute": "object-add", "arguments":{ "qom-type": "filter-redirector", "= id": "redire0", "insert": "before", "position": "id=3Drew0", "netdev": "hn0= ", "queue": "rx", "indev": "compare_out" } } -{"execute": "object-add", "arguments":{ "qom-type": "filter-redirector", "= id": "redire1", "insert": "before", "position": "id=3Drew0", "netdev": "hn0= ", "queue": "rx", "outdev": "compare0" } } -{"execute": "object-add", "arguments":{ "qom-type": "iothread", "id": "iot= hread1" } } -{"execute": "object-add", "arguments":{ "qom-type": "colo-compare", "id": = "comp0", "primary_in": "compare0-0", "secondary_in": "compare1", "outdev": = "compare_out0", "iothread": "iothread1" } } - -{"execute": "migrate-set-capabilities", "arguments":{ "capabilities": [ {"= capability": "x-colo", "state": true } ] } } -{"execute": "migrate", "arguments":{ "uri": "tcp:127.0.0.1:9998" } } - -=3D=3D TODO =3D=3D -1. Support shared storage. -2. Develop the heartbeat part. -3. Reduce checkpoint VM=E2=80=99s downtime while doing checkpoint. diff --git a/docs/system/index.rst b/docs/system/index.rst index 427b020483104f6589878bbf255a367ae114c61b..6268c41aea9c74dc3e59d896b5a= e082360bfbb1a 100644 --- a/docs/system/index.rst +++ b/docs/system/index.rst @@ -41,3 +41,4 @@ or Hypervisor.Framework. igvm vm-templating sriov + qemu-colo diff --git a/docs/system/qemu-colo.rst b/docs/system/qemu-colo.rst new file mode 100644 index 0000000000000000000000000000000000000000..5b00c6c4c2679153f398ed5a85a= 5d9cc515630e6 --- /dev/null +++ b/docs/system/qemu-colo.rst @@ -0,0 +1,361 @@ +Qemu COLO Fault Tolerance +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D + +| Copyright (c) 2016 Intel Corporation +| Copyright (c) 2016 HUAWEI TECHNOLOGIES CO., LTD. +| Copyright (c) 2016 Fujitsu, Corp. +| Copyright (c) 2026 Lukas Straub + +This work is licensed under the terms of the GNU GPL, version 2 or later. +See the COPYING file in the top-level directory. + +This document gives an overview of COLO's design and how to use it. + +Background +---------- +Virtual machine (VM) replication is a well known technique for providing +application-agnostic software-implemented hardware fault tolerance, +also known as "non-stop service". + +COLO (COarse-grained LOck-stepping) is a high availability solution. +Both primary VM (PVM) and secondary VM (SVM) run in parallel. They receive= the +same request from client, and generate response in parallel too. +If the response packets from PVM and SVM are identical, they are released +immediately. Otherwise, a VM checkpoint (on demand) is conducted. + +Architecture +------------ +The architecture of COLO is shown in the diagram below. +It consists of a pair of networked physical nodes: +The primary node running the PVM, and the secondary node running the SVM +to maintain a valid replica of the PVM. +PVM and SVM execute in parallel and generate output of response packets for +client requests according to the application semantics. + +The incoming packets from the client or external network are received by t= he +primary node, and then forwarded to the secondary node, so that both the P= VM +and the SVM are stimulated with the same requests. + +COLO receives the outbound packets from both the PVM and SVM and compares = them +before allowing the output to be sent to clients. + +The SVM is qualified as a valid replica of the PVM, as long as it generates +identical responses to all client requests. Once the differences in the ou= tputs +are detected between the PVM and SVM, COLO withholds transmission of the +outbound packets until it has successfully synchronized the PVM state to t= he SVM. + +Overview:: + + Primary Node = Secondary Node + +------------+ +-----------------------+ +---------------------= ---+ +------------+ + | | | HeartBeat +<----->+ HeartBeat = | | | + | Primary VM | +-----------+-----------+ +-----------+---------= ---+ |Secondary VM| + | | | | = | | + | | +-----------|-----------+ +-----------|---------= ---+ | | + | | |QEMU +---v----+ | |QEMU +----v---+ = | | | + | | | |Failover| | | |Failover| = | | | + | | | +--------+ | | +--------+ = | | | + | | | +---------------+ | | +---------------+ = | | | + | | | | VM Checkpoint +-------------->+ VM Checkpoint | = | | | + | | | +---------------+ | | +---------------+ = | | | + |Requests<--------------------------\ /-----------------\ /-----------= ---------->Requests| + | | | ^ ^ | | | | = | | | + |Responses+---------------------\ /-|-|------------\ /----------------= ---------+Responses| + | | | | | | | | | | | | | = | | | + | | | +-----------+ | | | | | | | | | | +---------= -+ | | | + | | | | COLO disk | | | | | | | | | | | | COLO dis= k| | | | + | | | | Manager +---------------------------->| Manager = | | | | + | | | ++----------+ v v | | | | | v v | +---------= ++ | | | + | | | |+-----------+-+-+-++| | ++-+--+-+---------+ = | | | | + | | | || COLO Proxy || | | COLO Proxy | = | | | | + | | | || (compare packet || | |(adjust sequence | = | | | | + | | | ||and mirror packet)|| | | and ACK) | = | | | | + | | | |+------------+---+-+| | +-----------------+ = | | | | + +------------+ +-----------------------+ +---------------------= ---+ +------------+ + +------------+ | | | = | +------------+ + | VM Monitor | | | | = | | VM Monitor | + +------------+ | | | = | +------------+ + +---------------------------------------+ +---------------------= -------------------+ + | Kernel | | | | | Kernel = | | + +---------------------------------------+ +---------------------= -------------------+ + | | | | + +--------------v+ +---------v---+--+ +------------------+ += v-------------+ + | Storage | |External Network| | External Network | |= Storage | + +---------------+ +----------------+ +------------------+ += --------------+ + +Components introduction +^^^^^^^^^^^^^^^^^^^^^^^ +You can see there are several components in COLO's diagram of architecture. +Their functions are described below. + +HeartBeat +~~~~~~~~~ +Runs on both the primary and secondary nodes, to periodically check platfo= rm +availability. When the primary node suffers a hardware fail-stop failure, +the heartbeat stops responding, the secondary node will trigger a failover +as soon as it determines the absence. + +COLO disk Manager +~~~~~~~~~~~~~~~~~ +When primary VM writes data into image, the colo disk manager captures thi= s data +and sends it to secondary VM's which makes sure the context of secondary V= M's +image is consistent with the context of primary VM 's image. +For more details, please refer to docs/block-replication.txt. + +Checkpoint/Failover Controller +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Modifications of save/restore flow to realize continuous migration, +to make sure the state of VM in Secondary side is always consistent with V= M in +Primary side. + +COLO Proxy +~~~~~~~~~~ +Delivers packets to Primary and Secondary, and then compare the responses = from +both side. Then decide whether to start a checkpoint according to some rul= es. +Please refer to docs/colo-proxy.txt for more information. + +Note: +HeartBeat has not been implemented yet, so you need to trigger failover pr= ocess +by using 'x-colo-lost-heartbeat' command. + +COLO operation status +^^^^^^^^^^^^^^^^^^^^^ + +Overview:: + + +-----------------+ + | | + | Start COLO | + | | + +--------+--------+ + | + | Main qmp command: + | migrate-set-capabilities with x-colo + | migrate + | + v + +--------+--------+ + | | + | COLO running | + | | + +--------+--------+ + | + | Main qmp command: + | x-colo-lost-heartbeat + | or + | some error happened + v + +--------+--------+ + | | send qmp event: + | COLO failover | COLO_EXIT + | | + +-----------------+ + + +COLO use the qmp command to switch and report operation status. +The diagram just shows the main qmp command, you can get the detail +in test procedure. + +Test procedure +-------------- +Note: Here we are running both instances on the same host for testing, +change the IP Addresses if you want to run it on two hosts. Initially +``127.0.0.1`` is the Primary Host and ``127.0.0.2`` is the Secondary Host. + +Startup qemu +^^^^^^^^^^^^ +**1. Primary**: +Note: Initially, ``$imagefolder/primary.qcow2`` needs to be copied to all = hosts. +You don't need to change any IP's here, because ``0.0.0.0`` listens on any +interface. The chardev's with ``127.0.0.1`` IP's loopback to the local qemu +instance:: + + # imagefolder=3D"/mnt/vms/colo-test-primary" + + # qemu-system-x86_64 -enable-kvm -cpu qemu64,kvmclock=3Don -m 512 -smp= 1 -qmp stdio \ + -device piix3-usb-uhci -device usb-tablet -name primary \ + -netdev tap,id=3Dhn0,vhost=3Doff,helper=3D/usr/lib/qemu/qemu-bridge= -helper \ + -device rtl8139,id=3De0,netdev=3Dhn0 \ + -chardev socket,id=3Dmirror0,host=3D0.0.0.0,port=3D9003,server=3Don= ,wait=3Doff \ + -chardev socket,id=3Dcompare1,host=3D0.0.0.0,port=3D9004,server=3Do= n,wait=3Don \ + -chardev socket,id=3Dcompare0,host=3D127.0.0.1,port=3D9001,server= =3Don,wait=3Doff \ + -chardev socket,id=3Dcompare0-0,host=3D127.0.0.1,port=3D9001 \ + -chardev socket,id=3Dcompare_out,host=3D127.0.0.1,port=3D9005,serve= r=3Don,wait=3Doff \ + -chardev socket,id=3Dcompare_out0,host=3D127.0.0.1,port=3D9005 \ + -object filter-mirror,id=3Dm0,netdev=3Dhn0,queue=3Dtx,outdev=3Dmirr= or0 \ + -object filter-redirector,netdev=3Dhn0,id=3Dredire0,queue=3Drx,inde= v=3Dcompare_out \ + -object filter-redirector,netdev=3Dhn0,id=3Dredire1,queue=3Drx,outd= ev=3Dcompare0 \ + -object iothread,id=3Diothread1 \ + -object colo-compare,id=3Dcomp0,primary_in=3Dcompare0-0,secondary_i= n=3Dcompare1,\ + outdev=3Dcompare_out0,iothread=3Diothread1 \ + -drive if=3Dide,id=3Dcolo-disk0,driver=3Dquorum,read-pattern=3Dfifo= ,vote-threshold=3D1,\ + children.0.file.filename=3D$imagefolder/primary.qcow2,children.0.drive= r=3Dqcow2 -S + + +**2. Secondary**: +Note: Active and hidden images need to be created only once and the +size should be the same as ``primary.qcow2``. Again, you don't need to cha= nge +any IP's here, except for the ``$primary_ip`` variable:: + + # imagefolder=3D"/mnt/vms/colo-test-secondary" + # primary_ip=3D127.0.0.1 + + # qemu-img create -f qcow2 $imagefolder/secondary-active.qcow2 10G + + # qemu-img create -f qcow2 $imagefolder/secondary-hidden.qcow2 10G + + # qemu-system-x86_64 -enable-kvm -cpu qemu64,kvmclock=3Don -m 512 -smp= 1 -qmp stdio \ + -device piix3-usb-uhci -device usb-tablet -name secondary \ + -netdev tap,id=3Dhn0,vhost=3Doff,helper=3D/usr/lib/qemu/qemu-bridge= -helper \ + -device rtl8139,id=3De0,netdev=3Dhn0 \ + -chardev socket,id=3Dred0,host=3D$primary_ip,port=3D9003,reconnect-= ms=3D1000 \ + -chardev socket,id=3Dred1,host=3D$primary_ip,port=3D9004,reconnect-= ms=3D1000 \ + -object filter-redirector,id=3Df1,netdev=3Dhn0,queue=3Dtx,indev=3Dr= ed0 \ + -object filter-redirector,id=3Df2,netdev=3Dhn0,queue=3Drx,outdev=3D= red1 \ + -object filter-rewriter,id=3Drew0,netdev=3Dhn0,queue=3Dall \ + -drive if=3Dnone,id=3Dparent0,file.filename=3D$imagefolder/primary.= qcow2,driver=3Dqcow2 \ + -drive if=3Dnone,id=3Dchilds0,driver=3Dreplication,mode=3Dsecondary= ,file.driver=3Dqcow2,\ + top-id=3Dcolo-disk0,file.file.filename=3D$imagefolder/secondary-active= .qcow2,\ + file.backing.driver=3Dqcow2,file.backing.file.filename=3D$imagefolder/= secondary-hidden.qcow2,\ + file.backing.backing=3Dparent0 \ + -drive if=3Dide,id=3Dcolo-disk0,driver=3Dquorum,read-pattern=3Dfifo= ,vote-threshold=3D1,\ + children.0=3Dchilds0 \ + -incoming tcp:0.0.0.0:9998 + + +**3.** On Secondary VM's QEMU monitor, issue command:: + + {"execute":"qmp_capabilities"} + {"execute": "migrate-set-capabilities", "arguments": {"capabilities": = [ {"capability": "x-colo", "state": true } ] } } + {"execute": "nbd-server-start", "arguments": {"addr": {"type": "inet",= "data": {"host": "0.0.0.0", "port": "9999"} } } } + {"execute": "nbd-server-add", "arguments": {"device": "parent0", "writ= able": true } } + +Note: + a. The qmp command ``nbd-server-start`` and ``nbd-server-add`` must be r= un + before running the qmp command migrate on primary QEMU + b. Active disk, hidden disk and nbd target's length should be the + same. + c. It is better to put active disk and hidden disk in ramdisk. They + will be merged into the parent disk on failover. + +**4.** On Primary VM's QEMU monitor, issue command:: + + {"execute":"qmp_capabilities"} + {"execute": "human-monitor-command", "arguments": {"command-line": "dr= ive_add -n buddy driver=3Dreplication,mode=3Dprimary,file.driver=3Dnbd,file= .host=3D127.0.0.2,file.port=3D9999,file.export=3Dparent0,node-name=3Dreplic= ation0"}} + {"execute": "x-blockdev-change", "arguments":{"parent": "colo-disk0", = "node": "replication0" } } + {"execute": "migrate-set-capabilities", "arguments": {"capabilities": = [ {"capability": "x-colo", "state": true } ] } } + {"execute": "migrate", "arguments": {"uri": "tcp:127.0.0.2:9998" } } + +Note: + a. There should be only one NBD Client for each primary disk. + b. The qmp command line must be run after running qmp command line in + secondary qemu. + +**5.** After the above steps, you will see, whenever you make changes to P= VM, SVM will be synced. +You can issue command ``{ "execute": "migrate-set-parameters" , "arguments= ":{ "x-checkpoint-delay": 2000 } }`` +to change the idle checkpoint period time + +Failover test +^^^^^^^^^^^^^ +You can kill one of the VMs and Failover on the surviving VM: + +If you killed the Secondary, then follow "Primary Failover". +After that, if you want to resume the replication, follow "Primary resume = replication" + +If you killed the Primary, then follow "Secondary Failover". +After that, if you want to resume the replication, follow "Secondary resum= e replication" + +Primary Failover +~~~~~~~~~~~~~~~~ +The Secondary died, resume on the Primary:: + + {"execute": "x-blockdev-change", "arguments":{ "parent": "colo-disk0",= "child": "children.1"} } + {"execute": "human-monitor-command", "arguments":{ "command-line": "dr= ive_del replication0" } } + {"execute": "object-del", "arguments":{ "id": "comp0" } } + {"execute": "object-del", "arguments":{ "id": "iothread1" } } + {"execute": "object-del", "arguments":{ "id": "m0" } } + {"execute": "object-del", "arguments":{ "id": "redire0" } } + {"execute": "object-del", "arguments":{ "id": "redire1" } } + {"execute": "x-colo-lost-heartbeat" } + +Secondary Failover +~~~~~~~~~~~~~~~~~~ +The Primary died, resume on the Secondary and prepare to become the new Pr= imary:: + + {"execute": "nbd-server-stop"} + {"execute": "x-colo-lost-heartbeat"} + + {"execute": "object-del", "arguments":{ "id": "f2" } } + {"execute": "object-del", "arguments":{ "id": "f1" } } + {"execute": "chardev-remove", "arguments":{ "id": "red1" } } + {"execute": "chardev-remove", "arguments":{ "id": "red0" } } + + {"execute": "chardev-add", "arguments":{ "id": "mirror0", "backend": {= "type": "socket", "data": {"addr": { "type": "inet", "data": { "host": "0.0= .0.0", "port": "9003" } }, "server": true } } } } + {"execute": "chardev-add", "arguments":{ "id": "compare1", "backend": = {"type": "socket", "data": {"addr": { "type": "inet", "data": { "host": "0.= 0.0.0", "port": "9004" } }, "server": true } } } } + {"execute": "chardev-add", "arguments":{ "id": "compare0", "backend": = {"type": "socket", "data": {"addr": { "type": "inet", "data": { "host": "12= 7.0.0.1", "port": "9001" } }, "server": true } } } } + {"execute": "chardev-add", "arguments":{ "id": "compare0-0", "backend"= : {"type": "socket", "data": {"addr": { "type": "inet", "data": { "host": "= 127.0.0.1", "port": "9001" } }, "server": false } } } } + {"execute": "chardev-add", "arguments":{ "id": "compare_out", "backend= ": {"type": "socket", "data": {"addr": { "type": "inet", "data": { "host": = "127.0.0.1", "port": "9005" } }, "server": true } } } } + {"execute": "chardev-add", "arguments":{ "id": "compare_out0", "backen= d": {"type": "socket", "data": {"addr": { "type": "inet", "data": { "host":= "127.0.0.1", "port": "9005" } }, "server": false } } } } + +Primary resume replication +~~~~~~~~~~~~~~~~~~~~~~~~~~ +Resume replication after new Secondary is up. + +Start the new Secondary (Steps 2 and 3 above), then on the Primary:: + + {"execute": "drive-mirror", "arguments":{ "device": "colo-disk0", "job= -id": "resync", "target": "nbd://127.0.0.2:9999/parent0", "mode": "existing= ", "format": "raw", "sync": "full"} } + +Wait until disk is synced, then:: + + {"execute": "stop"} + {"execute": "block-job-cancel", "arguments":{ "device": "resync"} } + + {"execute": "human-monitor-command", "arguments":{ "command-line": "dr= ive_add -n buddy driver=3Dreplication,mode=3Dprimary,file.driver=3Dnbd,file= .host=3D127.0.0.2,file.port=3D9999,file.export=3Dparent0,node-name=3Dreplic= ation0"}} + {"execute": "x-blockdev-change", "arguments":{ "parent": "colo-disk0",= "node": "replication0" } } + + {"execute": "object-add", "arguments":{ "qom-type": "filter-mirror", "= id": "m0", "netdev": "hn0", "queue": "tx", "outdev": "mirror0" } } + {"execute": "object-add", "arguments":{ "qom-type": "filter-redirector= ", "id": "redire0", "netdev": "hn0", "queue": "rx", "indev": "compare_out" = } } + {"execute": "object-add", "arguments":{ "qom-type": "filter-redirector= ", "id": "redire1", "netdev": "hn0", "queue": "rx", "outdev": "compare0" } } + {"execute": "object-add", "arguments":{ "qom-type": "iothread", "id": = "iothread1" } } + {"execute": "object-add", "arguments":{ "qom-type": "colo-compare", "i= d": "comp0", "primary_in": "compare0-0", "secondary_in": "compare1", "outde= v": "compare_out0", "iothread": "iothread1" } } + + {"execute": "migrate-set-capabilities", "arguments":{ "capabilities": = [ {"capability": "x-colo", "state": true } ] } } + {"execute": "migrate", "arguments":{ "uri": "tcp:127.0.0.2:9998" } } + +Note: +If this Primary previously was a Secondary, then we need to insert the +filters before the filter-rewriter by using the +""insert": "before", "position": "id=3Drew0"" Options. See below. + +Secondary resume replication +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Become Primary and resume replication after new Secondary is up. Note +that now 127.0.0.1 is the Secondary and 127.0.0.2 is the Primary. + +Start the new Secondary (Steps 2 and 3 above, but with primary_ip=3D127.0.= 0.2), +then on the old Secondary:: + + {"execute": "drive-mirror", "arguments":{ "device": "colo-disk0", "job= -id": "resync", "target": "nbd://127.0.0.1:9999/parent0", "mode": "existing= ", "format": "raw", "sync": "full"} } + +Wait until disk is synced, then:: + + {"execute": "stop"} + {"execute": "block-job-cancel", "arguments":{ "device": "resync" } } + + {"execute": "human-monitor-command", "arguments":{ "command-line": "dr= ive_add -n buddy driver=3Dreplication,mode=3Dprimary,file.driver=3Dnbd,file= .host=3D127.0.0.1,file.port=3D9999,file.export=3Dparent0,node-name=3Dreplic= ation0"}} + {"execute": "x-blockdev-change", "arguments":{ "parent": "colo-disk0",= "node": "replication0" } } + + {"execute": "object-add", "arguments":{ "qom-type": "filter-mirror", "= id": "m0", "insert": "before", "position": "id=3Drew0", "netdev": "hn0", "q= ueue": "tx", "outdev": "mirror0" } } + {"execute": "object-add", "arguments":{ "qom-type": "filter-redirector= ", "id": "redire0", "insert": "before", "position": "id=3Drew0", "netdev": = "hn0", "queue": "rx", "indev": "compare_out" } } + {"execute": "object-add", "arguments":{ "qom-type": "filter-redirector= ", "id": "redire1", "insert": "before", "position": "id=3Drew0", "netdev": = "hn0", "queue": "rx", "outdev": "compare0" } } + {"execute": "object-add", "arguments":{ "qom-type": "iothread", "id": = "iothread1" } } + {"execute": "object-add", "arguments":{ "qom-type": "colo-compare", "i= d": "comp0", "primary_in": "compare0-0", "secondary_in": "compare1", "outde= v": "compare_out0", "iothread": "iothread1" } } + + {"execute": "migrate-set-capabilities", "arguments":{ "capabilities": = [ {"capability": "x-colo", "state": true } ] } } + {"execute": "migrate", "arguments":{ "uri": "tcp:127.0.0.1:9998" } } + +TODO +---- +1. Support shared storage. +2. Develop the heartbeat part. +3. Reduce checkpoint VM=E2=80=99s downtime while doing checkpoint. --=20 2.39.5 From nobody Sat Feb 7 04:55:13 2026 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=quarantine dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1768659307; cv=none; d=zohomail.com; s=zohoarc; b=J3KHLKnrwDX+qpJ2oCfzhJShKLIQuo0bBQFEEi57tIni32BQ0pMamtGtpkuOSm6T21CFFi5AXsl8qWsX2OJprKWqB64E82sp3bvUS9tj6Ajoy4CRiv27Uy2YoFIPlhS+IvrxsbhXSqcstbbW2gdCJhrp6ZFwRlSospFdJhBR0tc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768659307; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=jmmCkmbM6P+Pz3osqXiFsq/n2vXEQZ2GzxUnCFZCFHg=; b=iAZMYUny/109DjdY0tWUc3vXFPGGOUFqcBdaSJck5ygUqDwjw+tT2tCgpQFwMORp1Jz2BNsms7YRW+Li0saj8wBcNND63FhvP81yKAbOfS5HP+V9l3FMCHNtdnhg8qMdr/LoeO5SI1DU2KrvmhS5dQ1FSxH4cRwqgdyHLUt2NIw= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768659307982760.173870460213; Sat, 17 Jan 2026 06:15:07 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vh703-0007aZ-Pr; Sat, 17 Jan 2026 09:09:59 -0500 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 1vh6zo-0007Vy-RS for qemu-devel@nongnu.org; Sat, 17 Jan 2026 09:09:47 -0500 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 1vh6zm-0002aB-Hj for qemu-devel@nongnu.org; Sat, 17 Jan 2026 09:09:44 -0500 Received: from [127.0.1.1] ([217.247.100.70]) by smtp.web.de (mrweb106 [213.165.67.124]) with ESMTPSA (Nemesis) id 1Mkmvd-1w5Tup0nzb-00di8t; Sat, 17 Jan 2026 15:09:36 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=web.de; s=s29768273; t=1768658976; x=1769263776; i=lukasstraub2@web.de; bh=jmmCkmbM6P+Pz3osqXiFsq/n2vXEQZ2GzxUnCFZCFHg=; h=X-UI-Sender-Class:From:Date:Subject:MIME-Version:Content-Type: Content-Transfer-Encoding:Message-Id:References:In-Reply-To:To:Cc: cc:content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=sbv7nMd2eyE4HHpi76Uvc+uk72owMK2zrZedBsAaesXDa7Ps2pMIL0xEtJBivfEu def5nVHGqHyw8CWLP37UmVAj+VN4tXL7sj2QLmwwdSfMBrRrdLcJfLAVsmmbIpONf Femr7FYH+0TwOxmE7F4Y9OY1w00g0UZWQeGIVZqFfYpYtN/FO8sMq9sYnB/M0Rxac CWOXTP6thYrirZQifgxOBkx49MSc0C2lVeniI49mlrLR8EgASIFV49rrfzA2THWwJ GpAXkQqfAoFt/XKtl6YSxnf39FKmrwpC+JlDg80wLemoIzpwGU5pPBI+3kQr2up6Q TShrGhvW5KiemBqiAA== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 From: Lukas Straub Date: Sat, 17 Jan 2026 15:09:14 +0100 Subject: [PATCH v2 7/8] qemu-colo.rst: Miscellaneous changes MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260117-colo_unit_test_multifd-v2-7-ab521777fa51@web.de> References: <20260117-colo_unit_test_multifd-v2-0-ab521777fa51@web.de> In-Reply-To: <20260117-colo_unit_test_multifd-v2-0-ab521777fa51@web.de> To: qemu-devel@nongnu.org Cc: Peter Xu , Fabiano Rosas , Laurent Vivier , Paolo Bonzini , Zhang Chen , Hailiang Zhang , Markus Armbruster , Lukas Straub X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3149; i=lukasstraub2@web.de; h=from:subject:message-id; bh=jCYaZBUHDqTrqK9kYrWH9VDRWkB0ZIX+kmVIzl/UR4k=; b=owEBbQKS/ZANAwAKATWrCyicXbJYAcsmYgBpa5gcrEz0TtgBauRU1l73mg/56Fr82w1jVBn9n 0S7VtHyK7KJAjMEAAEKAB0WIQSD+rFYoNm4+3Jij6Q1qwsonF2yWAUCaWuYHAAKCRA1qwsonF2y WBYVEACCoGIN3W93uYYZdbrV2ZhkE3EDc6vDJNl2rBZHSQAEr7hh4mb9F6iz6o9ei+O8CsmP9gH sibN8m0myS1rMisq4uFldezTHIb937oveYH0USMVkux+ePT1Y9cBDIXCKNwMKoPPKx26ygpTHIF jzkHbMULhhYdE6ADRL5i5GyFrq+iIbBN/BteL9FaXOhhBzOOG9omsN6FKdDHvPv8mv5ESTyR4XX jpE6xc0AFp9DuFx8L1wjpT7P4AM/ffn6VFYlfKmpvxI3Z/r6zV1Dl5G7UeXLUwu4M0erD1A8c46 6V24kkjm4CDihFJHSblqPD5moEWwUEFFeUMCpqTHzlcQMYvVC5hHXtoA0EpTgTN6tBtkBP4isEG khDOUX52OMFjr2ylARFY+Dd07h9YxK0A1O6Gw8qm48RrxarneAk0Glu2XCQiqaopgYgMIz24ZNV 8mcxu7kQ2Bc2ZFa6BJDgYrPf6QUpXb6zXD24drTWOv5CFG+0PeWI+L/2Y3ThcixVg4OUoPt6UxB PpwMlphPtBixySIIgmQE0ddLU/Dnk9QP9aG+PkfBo0pBouBe7G9lTqpRfQtFvsO8URX6A48+ZtR bUuXvrrPmauyWIu7urvyfoDfv+OtK7UC7PddHl/BjILMeoJme0OGiOFVjD3X4SUkbEeLUpDbqmL +G3mmdQoQk8D1dw== X-Developer-Key: i=lukasstraub2@web.de; a=openpgp; fpr=83FAB158A0D9B8FB72628FA435AB0B289C5DB258 X-Provags-ID: V03:K1:J+kwkHdP4KZqgPIWdQ9s2k0JATJAWadKUiFjyU/JCb6GlsNZUP7 IQ4CchqWW6LoZ+LfwJLt2O0BIcEjZvp7AadECFKh4tU7rYpbHiS2d+QtGG3Je16Ck4i42S6 v6wwscpyVp28KPohgvFTzQ5C2WX1323Tv5f8Z9gbRQWh3x5AJYOInk8cEnWwC5yOTVaeR1w k5ucH7sOv0PEUNyiUw97w== UI-OutboundReport: notjunk:1;M01:P0:9LVts7/GUgk=;aoyeOmugaQJZL0+yLVaV+pgYTKU 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 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 (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: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 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, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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: qemu development 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-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1768659310105158500 Signed-off-by: Lukas Straub --- docs/system/qemu-colo.rst | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/docs/system/qemu-colo.rst b/docs/system/qemu-colo.rst index 5b00c6c4c2679153f398ed5a85a5d9cc515630e6..2052e207e57afdd3ab3ab1a447d= 55f5e2e5b5b87 100644 --- a/docs/system/qemu-colo.rst +++ b/docs/system/qemu-colo.rst @@ -1,14 +1,6 @@ Qemu COLO Fault Tolerance =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D =20 -| Copyright (c) 2016 Intel Corporation -| Copyright (c) 2016 HUAWEI TECHNOLOGIES CO., LTD. -| Copyright (c) 2016 Fujitsu, Corp. -| Copyright (c) 2026 Lukas Straub - -This work is licensed under the terms of the GNU GPL, version 2 or later. -See the COPYING file in the top-level directory. - This document gives an overview of COLO's design and how to use it. =20 Background @@ -83,8 +75,8 @@ Overview:: | Storage | |External Network| | External Network | |= Storage | +---------------+ +----------------+ +------------------+ += --------------+ =20 -Components introduction -^^^^^^^^^^^^^^^^^^^^^^^ +Components +^^^^^^^^^^ You can see there are several components in COLO's diagram of architecture. Their functions are described below. =20 @@ -158,14 +150,14 @@ in test procedure. =20 Test procedure -------------- -Note: Here we are running both instances on the same host for testing, +Here we are running both instances on the same host for testing, change the IP Addresses if you want to run it on two hosts. Initially ``127.0.0.1`` is the Primary Host and ``127.0.0.2`` is the Secondary Host. =20 Startup qemu ^^^^^^^^^^^^ **1. Primary**: -Note: Initially, ``$imagefolder/primary.qcow2`` needs to be copied to all = hosts. +Initially, ``$imagefolder/primary.qcow2`` needs to be copied to all hosts. You don't need to change any IP's here, because ``0.0.0.0`` listens on any interface. The chardev's with ``127.0.0.1`` IP's loopback to the local qemu instance:: @@ -193,7 +185,7 @@ instance:: =20 =20 **2. Secondary**: -Note: Active and hidden images need to be created only once and the +Active and hidden images need to be created only once and the size should be the same as ``primary.qcow2``. Again, you don't need to cha= nge any IP's here, except for the ``$primary_ip`` variable:: =20 @@ -354,8 +346,10 @@ Wait until disk is synced, then:: {"execute": "migrate-set-capabilities", "arguments":{ "capabilities": = [ {"capability": "x-colo", "state": true } ] } } {"execute": "migrate", "arguments":{ "uri": "tcp:127.0.0.1:9998" } } =20 -TODO ----- -1. Support shared storage. -2. Develop the heartbeat part. -3. Reduce checkpoint VM=E2=80=99s downtime while doing checkpoint. +| Copyright (c) 2016 Intel Corporation +| Copyright (c) 2016 HUAWEI TECHNOLOGIES CO., LTD. +| Copyright (c) 2016 Fujitsu, Corp. +| Copyright (c) 2026 Lukas Straub + +This work is licensed under the terms of the GNU GPL, version 2 or later. +See the COPYING file in the top-level directory. \ No newline at end of file --=20 2.39.5 From nobody Sat Feb 7 04:55:13 2026 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=quarantine dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1768659307; cv=none; d=zohomail.com; s=zohoarc; b=HMCb1RUfBARWEVmmFzmrbL9mC7zbuSYV2dRpjee5L+E/Rgy19AWWCW3bgFVvx+mi2vHgwxlN7uYZp4bZUQ3KUc84ALFfLxnpsPxr/QzWQvGI1jkxFeGEy8Ngx/Re5zJJ7McF8NqjpSgXwflTYzrJmFI8evKiVmGjq1oGxkSE9dY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768659307; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=L+V4Gt5CUA9qShPGb1rbeQo/4nry+EVAZ8+KEKy/8m8=; b=lpBpBWUFf0/7iLy8KOP4J7lsjOiOUBxaI62RMTRPf2nX6+wGFayagmXWj3og8tROxcDyOj5AvhnJe4TDrC+eXQZ3NAgPugOuxsGS599yGGfYvJna2dJpVoGEI/qcbaKRUJb1O0GGd2jKx9AyWWHcWdeXW9sTxK8cBbo24pgKgpM= 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=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1768659307732340.1082481016116; Sat, 17 Jan 2026 06:15:07 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vh70R-0007il-MY; Sat, 17 Jan 2026 09:10:23 -0500 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 1vh6zn-0007Vt-F4 for qemu-devel@nongnu.org; Sat, 17 Jan 2026 09:09:44 -0500 Received: from mout.web.de ([212.227.17.12]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vh6zl-0002YD-8o for qemu-devel@nongnu.org; Sat, 17 Jan 2026 09:09:42 -0500 Received: from [127.0.1.1] ([217.247.100.70]) by smtp.web.de (mrweb106 [213.165.67.124]) with ESMTPSA (Nemesis) id 1MHEbq-1vcjGy1v5U-004O36; Sat, 17 Jan 2026 15:09:36 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=web.de; s=s29768273; t=1768658976; x=1769263776; i=lukasstraub2@web.de; bh=L+V4Gt5CUA9qShPGb1rbeQo/4nry+EVAZ8+KEKy/8m8=; h=X-UI-Sender-Class:From:Date:Subject:MIME-Version:Content-Type: Content-Transfer-Encoding:Message-Id:References:In-Reply-To:To:Cc: cc:content-transfer-encoding:content-type:date:from:message-id: mime-version:reply-to:subject:to; b=VrYzS9rZEfONyFcq4EUfwlSvhlSCPSFrJz+1UnRI741x0svJfMXHP4F8I2iEOlqj fK5vumjgO0/a+EUymcHW1AQAuXLNnpj6QS1L4VYf0Yx5LET72xiGtniL+dEouAR9y sJjSSLhxXILBvawXFEDWSGct4iz6yUF6K68YLKZZ8ADhA/8jlm9eDaG0ObEnW2VJ6 euv1TALiS7Hk6s1geo7GZCPUMui8qHlfJSbl8/R964eudqqifumRD6nQT+FTz+qDM YrpvVX48ALQ3Ogt7AQzecLnhWSFswiZqC7jB8nhhkIPwjGCqNJY2TyfB1PwZEa6G3 HSn6Psets/AgczFQmQ== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 From: Lukas Straub Date: Sat, 17 Jan 2026 15:09:15 +0100 Subject: [PATCH v2 8/8] qemu-colo.rst: Simplify the block replication setup MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260117-colo_unit_test_multifd-v2-8-ab521777fa51@web.de> References: <20260117-colo_unit_test_multifd-v2-0-ab521777fa51@web.de> In-Reply-To: <20260117-colo_unit_test_multifd-v2-0-ab521777fa51@web.de> To: qemu-devel@nongnu.org Cc: Peter Xu , Fabiano Rosas , Laurent Vivier , Paolo Bonzini , Zhang Chen , Hailiang Zhang , Markus Armbruster , Lukas Straub X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4390; i=lukasstraub2@web.de; h=from:subject:message-id; bh=Wy3VAnO0m0QZdX/VzG9DsOeurIr2LUv0/r/nVf1KFJA=; b=owEBbQKS/ZANAwAKATWrCyicXbJYAcsmYgBpa5gcXxtGDunTet0q2hWSXJ8MVACWa/Vlrn15F 4uJW9Xn8SKJAjMEAAEKAB0WIQSD+rFYoNm4+3Jij6Q1qwsonF2yWAUCaWuYHAAKCRA1qwsonF2y WEWID/9+dnUOkM7VIj5qMP/f3Lzh7wPWJsj/3+NvQUVjeyL2N3kECsXf5p13qYauxDd91Fxnbrh XCw8Ftz6GbIwThJcvpJqCHqfxDLIJlC2rJHHm5EwLaFDV5Fk3UbOSdfgjZz8/tczqD02Tl05yHW CySmY8Yfjws56EgucL/JAOPadVLZd+PgHHJj6Ua9RFwo9ru3kjKwKSjaNuc0exgX3BZrg+AZyGS 8xK0csOysJx3KpGSVbxY4oW/sij+jOJv3BaBrTQcLzgnmAfhu2JjV0W89H4rKarxFkdH09zzG+2 1RIkUFWHUYMIlJIE1YIiDyr+AaBA9//zRZ7e0ftWSQnsTj/lKGRdll31MfDU3X9nHDg9jCEUEOA wZigKys4hQRvfUNiTAQR5XlEs7weZxc4HPFp+9Hi4HYhMlCDnDcHSvaVVzy6GH7vijW+D1ZJT8P rru2g8ZFy5aL4XHmRkX0nENasE1/feZ4XAhqfYoZRyAC16u6uvf7Cr45OqI9rWyvZHxn4BtyMfr n1dV4jZYOy3XB32O+XJvHKVLtiyFRXb8EU3dpK1g1p+O1ARhrfLsUlBj6BWjKne8LFkQfSPeZYC nbjToK2KlCTX8DcYco5NkzES++VaGotRQqZaznj9mLyJIHC/87f8M9NR3HC32noyA0Bg9hhfG21 cfqujE8m1qbHWHA== X-Developer-Key: i=lukasstraub2@web.de; a=openpgp; fpr=83FAB158A0D9B8FB72628FA435AB0B289C5DB258 X-Provags-ID: V03:K1:sbqTXSiBn5cJl5m1SGU6Sxm5esa0mR4rY5WY1VCh8H2KvWzdR0b CQkdYEXPHTUMe+ye3TeuA0EbacWfO4YtcVS05Ze6dxUkUyZSgFps4UHMVuhhmogeRmjgRaX yPrsSycXpjw955ryS/R14avP4vuyGn8TJtB3bYkM/g2oJYwLwOeqL1jxDaUS62p0coeO4Sh vSKnlgCSLcOEyF1Bm6mVQ== UI-OutboundReport: notjunk:1;M01:P0:N1WPQfWgbCM=;yYfb/Kx3uVA0nUKYYZI2Tqu+gt1 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 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 (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.12; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 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, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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: qemu development 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-ZohoMail-DKIM: pass (identity lukasstraub2@web.de) X-ZM-MESSAGEID: 1768659308328158500 On the primary side we don't actually need the replication block driver, since it only passes trough all IO. So simplify the setup and also use 'blockdev-add' instead of 'human-monitor-command'. Signed-off-by: Lukas Straub Tested-by: Lukas Straub --- docs/system/qemu-colo.rst | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/system/qemu-colo.rst b/docs/system/qemu-colo.rst index 2052e207e57afdd3ab3ab1a447d55f5e2e5b5b87..7e361998d871b2c9a0e8065a15c= 004a9d841958b 100644 --- a/docs/system/qemu-colo.rst +++ b/docs/system/qemu-colo.rst @@ -233,8 +233,8 @@ Note: **4.** On Primary VM's QEMU monitor, issue command:: =20 {"execute":"qmp_capabilities"} - {"execute": "human-monitor-command", "arguments": {"command-line": "dr= ive_add -n buddy driver=3Dreplication,mode=3Dprimary,file.driver=3Dnbd,file= .host=3D127.0.0.2,file.port=3D9999,file.export=3Dparent0,node-name=3Dreplic= ation0"}} - {"execute": "x-blockdev-change", "arguments":{"parent": "colo-disk0", = "node": "replication0" } } + {"execute": "blockdev-add", "arguments": {"driver": "nbd", "node-name"= : "nbd0", "server": {"type": "inet", "host": "127.0.0.2", "port": "9999"}, = "export": "parent0", "detect-zeroes": "on"} } + {"execute": "x-blockdev-change", "arguments":{"parent": "colo-disk0", = "node": "nbd0" } } {"execute": "migrate-set-capabilities", "arguments": {"capabilities": = [ {"capability": "x-colo", "state": true } ] } } {"execute": "migrate", "arguments": {"uri": "tcp:127.0.0.2:9998" } } =20 @@ -262,7 +262,7 @@ Primary Failover The Secondary died, resume on the Primary:: =20 {"execute": "x-blockdev-change", "arguments":{ "parent": "colo-disk0",= "child": "children.1"} } - {"execute": "human-monitor-command", "arguments":{ "command-line": "dr= ive_del replication0" } } + {"execute": "blockdev-del", "arguments": {"node-name": "nbd0"} } {"execute": "object-del", "arguments":{ "id": "comp0" } } {"execute": "object-del", "arguments":{ "id": "iothread1" } } {"execute": "object-del", "arguments":{ "id": "m0" } } @@ -302,8 +302,8 @@ Wait until disk is synced, then:: {"execute": "stop"} {"execute": "block-job-cancel", "arguments":{ "device": "resync"} } =20 - {"execute": "human-monitor-command", "arguments":{ "command-line": "dr= ive_add -n buddy driver=3Dreplication,mode=3Dprimary,file.driver=3Dnbd,file= .host=3D127.0.0.2,file.port=3D9999,file.export=3Dparent0,node-name=3Dreplic= ation0"}} - {"execute": "x-blockdev-change", "arguments":{ "parent": "colo-disk0",= "node": "replication0" } } + {"execute": "blockdev-add", "arguments": {"driver": "nbd", "node-name"= : "nbd0", "server": {"type": "inet", "host": "127.0.0.2", "port": "9999"}, = "export": "parent0", "detect-zeroes": "on"} } + {"execute": "x-blockdev-change", "arguments":{ "parent": "colo-disk0",= "node": "nbd0" } } =20 {"execute": "object-add", "arguments":{ "qom-type": "filter-mirror", "= id": "m0", "netdev": "hn0", "queue": "tx", "outdev": "mirror0" } } {"execute": "object-add", "arguments":{ "qom-type": "filter-redirector= ", "id": "redire0", "netdev": "hn0", "queue": "rx", "indev": "compare_out" = } } @@ -334,8 +334,8 @@ Wait until disk is synced, then:: {"execute": "stop"} {"execute": "block-job-cancel", "arguments":{ "device": "resync" } } =20 - {"execute": "human-monitor-command", "arguments":{ "command-line": "dr= ive_add -n buddy driver=3Dreplication,mode=3Dprimary,file.driver=3Dnbd,file= .host=3D127.0.0.1,file.port=3D9999,file.export=3Dparent0,node-name=3Dreplic= ation0"}} - {"execute": "x-blockdev-change", "arguments":{ "parent": "colo-disk0",= "node": "replication0" } } + {"execute": "blockdev-add", "arguments": {"driver": "nbd", "node-name"= : "nbd0", "server": {"type": "inet", "host": "127.0.0.1", "port": "9999"}, = "export": "parent0", "detect-zeroes": "on"} } + {"execute": "x-blockdev-change", "arguments":{ "parent": "colo-disk0",= "node": "nbd0" } } =20 {"execute": "object-add", "arguments":{ "qom-type": "filter-mirror", "= id": "m0", "insert": "before", "position": "id=3Drew0", "netdev": "hn0", "q= ueue": "tx", "outdev": "mirror0" } } {"execute": "object-add", "arguments":{ "qom-type": "filter-redirector= ", "id": "redire0", "insert": "before", "position": "id=3Drew0", "netdev": = "hn0", "queue": "rx", "indev": "compare_out" } } --=20 2.39.5