From nobody Wed Mar 12 17:48:23 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1741215451; cv=none; d=zohomail.com; s=zohoarc; b=Dcgt0eIRVqNzpMDp3/Bfcv/Vk2iBw/znYNcJbqtECsB5m5CzqgkoTrm0PS4l2k0rezlT8mSz//pb4mSZqttkeVVR74QGbrYWF9mJd0b2vSVLZGKGxGIYc6HSB5terzr+akfHL+e58Jg3Lh2N2Ge4Gqc4LGrOCfGs5pLGgU/gzNY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1741215451; h=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:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id; bh=lU68cTxoD9sU6/n4EnPcfTBPRFRK1BcovknNFoddA04=; b=dRWUvhl+J0uAF27J/U/bbHyMOvZC7MNkMcBwuEpC9xFJYFEPWyspnVqrTGXBZr4fjnXPzLlgdz+EP66kqDKQ5weQw/1ZhhQHi5qHcFiA2Ub4ZSkr7lKfPSgVCYjDDHfgEC6j/4mrQDq1Ml0y8koquQuWmGWKhOqB/bKKqlzHyyE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1741215451835185.32659541163935; Wed, 5 Mar 2025 14:57:31 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id BD290171B; Wed, 5 Mar 2025 17:57:30 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id DE2361531; Wed, 5 Mar 2025 17:50:57 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id F03C814E5; Wed, 5 Mar 2025 17:50:43 -0500 (EST) Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id F116C168D for ; Wed, 5 Mar 2025 17:50:25 -0500 (EST) Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-43bbb440520so44415985e9.2 for ; Wed, 05 Mar 2025 14:50:25 -0800 (PST) Received: from localhost (205-201-32-8.scinternet.net. [205.201.32.8]) by smtp.gmail.com with UTF8SMTPSA id 98e67ed59e1d1-2ff4e75f1f9sm1873459a91.6.2025.03.05.14.50.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 05 Mar 2025 14:50:24 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1741215025; x=1741819825; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=i1gseYQalvtfs9G82h4TbFUcqbcTtRc40fDePAttV5s=; b=MvCv5R+2PHRwnydR6YstUuXXmeEHWQkQC++RQN9BIW4dYbgyFqzA2y4S60jEjs6MoZ 6Ovgm4aeGlgK1yEow1YGW2Dg8ymdC3RWbzWfe3S+qOntH2LEND3uiIDHKYwbhMe45H0j NPQ1YboNJBLshIAde7iRjoY+U5cyewXWM6lMJsvEm20j3nTK7m6ansqmPhIe/s2pV53r 4g0H2zYCqbUo//9GxwNvMs6GAcsgfeXJEl82xX/BSob2OvM/ASotS/MvgXSKWxtgv1OK 8IXl0g9x6jB2hjlxPEg94S5gpEviuRqY5aB3bRagJDCzWGcGQyiXGWLKgmPY2fLSyKNf +DJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741215025; x=1741819825; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=i1gseYQalvtfs9G82h4TbFUcqbcTtRc40fDePAttV5s=; b=E9bZlo7sMUXX/bss0Rq9xwwtda513DeBepcrhexlpxnvbGkLSi+icZBXA66zjw6pIP sU0muMXm51CGTHUmyFZATarULOEOAizMKpRC4qkd2xMZfBAbs9gBatZs76gtSNVaedt+ hj//mb492XDtqCXoRb1wbQyxjR0HVOAB7vKpj44WdQS/onfNZOfAfYlMn1QjoofYQ2Rh xVd61Sklbhq2cWgswE/wAoiFfWR8DFCzFK4QYzznualaLdNG66H10MGu0AHQ7eYfFC9i x1tHB6NmFGaxDVd4pd4SO/GfgoTSTNgXVZMkzAk6aCSk8+aS3TlJK00xHsm96Se6aAGX WvlQ== X-Gm-Message-State: AOJu0YwgLyP7rNuvGaBkrUkfDdyv/I1dQORv0GScUJ1xCR2cgzLPN8tt F1dE+t0Z5pqG2wBnVNN3iz4C4teO3miUXJYpha0lxvlO8ixUOMBSJkEaUiAclurhP6nD8E52i2M e X-Gm-Gg: ASbGncsxP+pEss9hfpss2kQwOA5YMKllZHboa+UcqyTfhiHpKyfFEoPs6xE1gLxbRlE yFJ03brGvQZ5vy2HFtr4w/yMN0w7m09bAmBvfSfkr5w/gE+mcrCon9bHy/HkOfqem0F4LQ12b2J zbPAJTE6PdL7Mb52lFLu88OfV/AFB2wFhv/FlExNHARrYVuxndS62O2T+w8rlTnOsChlAbvqcDa 9Bk5SfXs0I3ncSJRMNF/2036gZFiA/7z+8aoF2d0FTxtr5VHSfK6gYZpN9m3t11uGOxj0mH584z o2z9NR0lth9mAExy1qW3tNpaKkoEcCt5ZJQ0yJA7GyzpvZTfqY8CzEVgkdO9gg0= X-Google-Smtp-Source: AGHT+IHJYM1wbbcrAtU7VhiWenQNDPJ+inoArNjRDUwZJ+Gcg05l2Q2bfneZMs8+h/AF+Z8cLdI8nw== X-Received: by 2002:a5d:6d0e:0:b0:390:e9b5:d69c with SMTP id ffacd0b85a97d-3911f756966mr5081503f8f.25.1741215024797; Wed, 05 Mar 2025 14:50:24 -0800 (PST) To: devel@lists.libvirt.org Subject: [PATCH V4 14/18] qemu: Support O_DIRECT with mapped-ram on restore Date: Wed, 5 Mar 2025 15:48:23 -0700 Message-ID: <20250305224957.5369-15-jfehlig@suse.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250305224957.5369-1-jfehlig@suse.com> References: <20250305224957.5369-1-jfehlig@suse.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: HIRNTXGOYFKKGMCSUEDYNHTWVGAV4WR6 X-Message-ID-Hash: HIRNTXGOYFKKGMCSUEDYNHTWVGAV4WR6 X-MailFrom: jfehlig@suse.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: farosas@suse.de X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Jim Fehlig via Devel Reply-To: Jim Fehlig X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1741215453531019100 Content-Type: text/plain; charset="utf-8" When using the mapped-ram migration capability, direct IO is enabled by setting the "direct-io" migration parameter to "true" and passing QEMU an additional fd with O_DIRECT set. Signed-off-by: Jim Fehlig --- src/qemu/qemu_migration.c | 11 ++++++----- src/qemu/qemu_process.c | 27 +++++++++++++++++++++++---- src/qemu/qemu_process.h | 6 ++++-- 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 4554a52165..6c8098c65d 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -3110,7 +3110,8 @@ qemuMigrationDstPrepareCleanup(virQEMUDriver *driver, } =20 static qemuProcessIncomingDef * -qemuMigrationDstPrepare(virDomainObj *vm, +qemuMigrationDstPrepare(virQEMUDriver *driver, + virDomainObj *vm, bool tunnel, const char *protocol, const char *listenAddress, @@ -3170,9 +3171,9 @@ qemuMigrationDstPrepare(virDomainObj *vm, migrateFrom =3D g_strdup_printf(incFormat, protocol, listenAddress= , port); } =20 - return qemuProcessIncomingDefNew(vm, listenAddress, + return qemuProcessIncomingDefNew(driver, vm, listenAddress, migrateFrom, fd, - NULL, NULL); + NULL, NULL, NULL); } =20 =20 @@ -3312,7 +3313,7 @@ qemuMigrationDstPrepareActive(virQEMUDriver *driver, goto error; stopProcess =3D true; =20 - if (!(incoming =3D qemuMigrationDstPrepare(vm, tunnel, protocol, + if (!(incoming =3D qemuMigrationDstPrepare(driver, vm, tunnel, protoco= l, listenAddress, port, &dataFD[0]))) goto error; @@ -3684,7 +3685,7 @@ qemuMigrationDstPrepareResume(virQEMUDriver *driver, =20 priv->origname =3D g_strdup(origname); =20 - if (!(incoming =3D qemuMigrationDstPrepare(vm, false, protocol, + if (!(incoming =3D qemuMigrationDstPrepare(driver, vm, false, protocol, listenAddress, port, NULL))) goto cleanup; =20 diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index cba44ec5c2..16bb961485 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -4841,13 +4841,16 @@ qemuProcessIncomingDefFree(qemuProcessIncomingDef *= inc) * qemuProcessIncomingDefFree will NOT close it. */ qemuProcessIncomingDef * -qemuProcessIncomingDefNew(virDomainObj *vm, +qemuProcessIncomingDefNew(virQEMUDriver *driver, + virDomainObj *vm, const char *listenAddress, const char *migrateFrom, int *fd, const char *path, - virQEMUSaveData *data) + virQEMUSaveData *data, + qemuMigrationParams *migParams) { + g_autoptr(virQEMUDriverConfig) cfg =3D virQEMUDriverGetConfig(driver); qemuDomainObjPrivate *priv =3D vm->privateData; qemuProcessIncomingDef *inc =3D NULL; =20 @@ -4860,9 +4863,25 @@ qemuProcessIncomingDefNew(virDomainObj *vm, =20 if (data && data->header.format =3D=3D QEMU_SAVE_FORMAT_SPARSE) { size_t offset =3D sizeof(virQEMUSaveHeader) + data->header.data_le= n; + bool directio =3D false; =20 inc->fdPassMigrate =3D qemuFDPassNew("libvirt-incoming-migrate", p= riv); - qemuFDPassAddFD(inc->fdPassMigrate, fd, "-fd"); + /* When using directio with mapped-ram, qemu needs an fd without + * O_DIRECT set for reading small bits of unaligned state. */ + if (qemuMigrationParamsGetBool(migParams, QEMU_MIGRATION_PARAM_DIR= ECT_IO, &directio) < 0) + goto error; + + if (directio) { + VIR_AUTOCLOSE bufferedFd =3D -1; + + if ((bufferedFd =3D qemuDomainOpenFile(cfg, NULL, path, O_RDON= LY, NULL)) < 0) + goto error; + + qemuFDPassAddFD(inc->fdPassMigrate, &bufferedFd, "-buffered-fd= "); + qemuFDPassAddFD(inc->fdPassMigrate, fd, "direct-io-fd"); + } else { + qemuFDPassAddFD(inc->fdPassMigrate, fd, "-buffered-fd"); + } inc->uri =3D g_strdup_printf("file:%s,offset=3D%#lx", qemuFDPassGetPath(inc->fdPassMigrate), = offset); } else { @@ -8531,7 +8550,7 @@ qemuProcessStartWithMemoryState(virConnectPtr conn, /* The fd passed to qemuProcessIncomingDefNew is used to create the mi= gration * URI, so it must be called after starting the decompression program. */ - incoming =3D qemuProcessIncomingDefNew(vm, NULL, "stdio", fd, path, da= ta); + incoming =3D qemuProcessIncomingDefNew(driver, vm, NULL, "stdio", fd, = path, data, migParams); if (!incoming) return -1; =20 diff --git a/src/qemu/qemu_process.h b/src/qemu/qemu_process.h index c51335ad7a..8f7b3f24c4 100644 --- a/src/qemu/qemu_process.h +++ b/src/qemu/qemu_process.h @@ -57,12 +57,14 @@ struct _qemuProcessIncomingDef { const char *path; /* path associated with fd */ }; =20 -qemuProcessIncomingDef *qemuProcessIncomingDefNew(virDomainObj *vm, +qemuProcessIncomingDef *qemuProcessIncomingDefNew(virQEMUDriver *driver, + virDomainObj *vm, const char *listenAddres= s, const char *migrateFrom, int *fd, const char *path, - virQEMUSaveData *data); + virQEMUSaveData *data, + qemuMigrationParams *mig= Params); =20 void qemuProcessIncomingDefFree(qemuProcessIncomingDef *inc); =20 --=20 2.43.0