From nobody Sun May 5 09:32:24 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 149685076260946.86667693470213; Wed, 7 Jun 2017 08:52:42 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 0CA8981255; Wed, 7 Jun 2017 15:52:40 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id D8CAD17114; Wed, 7 Jun 2017 15:52:39 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 49CDE180BAF9; Wed, 7 Jun 2017 15:52:39 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v57FoQmH030977 for ; Wed, 7 Jun 2017 11:50:26 -0400 Received: by smtp.corp.redhat.com (Postfix) id 5193317997; Wed, 7 Jun 2017 15:50:26 +0000 (UTC) Received: from moe.brq.redhat.com (dhcp129-131.brq.redhat.com [10.34.129.131]) by smtp.corp.redhat.com (Postfix) with ESMTP id CD5A217A8D for ; Wed, 7 Jun 2017 15:50:25 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 0CA8981255 Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 0CA8981255 From: Michal Privoznik To: libvir-list@redhat.com Date: Wed, 7 Jun 2017 17:50:20 +0200 Message-Id: <76136d25ada283e56980dba94945c7ed00d7dbce.1496850190.git.mprivozn@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 1/2] qemuProcessBuildDestroyHugepagesPath: create path more frequently X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Wed, 07 Jun 2017 15:52:40 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" https://bugzilla.redhat.com/show_bug.cgi?id=3D1455819 Currently, the per-domain path for huge pages mmap() for qemu is created iff domain has memoryBacking and hugepages in it configured. However, this alone is not enough because there can be a DIMM module with hugepages configured too. Signed-off-by: Michal Privoznik --- src/qemu/qemu_process.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 32ba8e373..a219a8080 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -3289,11 +3289,33 @@ qemuProcessBuildDestroyHugepagesPath(virQEMUDriverP= tr driver, bool build) { virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); + const long system_pagesize =3D virGetSystemPageSizeKB(); char *hugepagePath =3D NULL; size_t i; + bool shouldBuild =3D false; int ret =3D -1; =20 - if (vm->def->mem.nhugepages) { + if (vm->def->mem.source =3D=3D VIR_DOMAIN_MEMORY_SOURCE_FILE) + shouldBuild =3D true; + + for (i =3D 0; !shouldBuild && i < vm->def->mem.nhugepages; i++) { + if (vm->def->mem.hugepages[i].size !=3D system_pagesize) { + shouldBuild =3D true; + break; + } + } + + for (i =3D 0; !shouldBuild && vm->def->nmems; i++) { + if (vm->def->mems[i]->model =3D=3D VIR_DOMAIN_MEMORY_MODEL_DIMM && + vm->def->mems[i]->pagesize && + vm->def->mems[i]->pagesize !=3D system_pagesize) { + shouldBuild =3D true; + break; + } + } + + if (!build || + (build && shouldBuild)) { for (i =3D 0; i < cfg->nhugetlbfs; i++) { VIR_FREE(hugepagePath); hugepagePath =3D qemuGetDomainHugepagePath(vm->def, &cfg->huge= tlbfs[i]); --=20 2.13.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sun May 5 09:32:24 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1496850634800348.38049706712; Wed, 7 Jun 2017 08:50:34 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 2790481F01; Wed, 7 Jun 2017 15:50:30 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id BA042179C4; Wed, 7 Jun 2017 15:50:29 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 24F0D4A48D; Wed, 7 Jun 2017 15:50:29 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v57FoRja030987 for ; Wed, 7 Jun 2017 11:50:27 -0400 Received: by smtp.corp.redhat.com (Postfix) id 3B91717978; Wed, 7 Jun 2017 15:50:27 +0000 (UTC) Received: from moe.brq.redhat.com (dhcp129-131.brq.redhat.com [10.34.129.131]) by smtp.corp.redhat.com (Postfix) with ESMTP id B79E417A8D for ; Wed, 7 Jun 2017 15:50:26 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 2790481F01 Authentication-Results: ext-mx03.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx03.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 2790481F01 From: Michal Privoznik To: libvir-list@redhat.com Date: Wed, 7 Jun 2017 17:50:21 +0200 Message-Id: <3acc0147e67fba0c4888eefa5cfa6b765c52bfa1.1496850190.git.mprivozn@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 2/2] qemuDomainAttachMemory: Crate hugepage dir if needed X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Wed, 07 Jun 2017 15:50:31 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" https://bugzilla.redhat.com/show_bug.cgi?id=3D1455819 It may happen that a domain is started without any huge pages. However, user might try to attach a DIMM module later. DIMM backed by huge pages (why would somebody want to mix regular and huge pages is beyond me). Therefore we have to create the dir if we haven't done so far. Signed-off-by: Michal Privoznik --- src/qemu/qemu_hotplug.c | 3 +++ src/qemu/qemu_process.c | 20 ++++++++++++++++---- src/qemu/qemu_process.h | 5 +++++ 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 4a7d99725..62472aef8 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -2254,6 +2254,9 @@ qemuDomainAttachMemory(virQEMUDriverPtr driver, priv->qemuCaps, vm->def, mem, NULL, true= ) < 0) goto cleanup; =20 + if (qemuProcessBuildDestroyHugepagesPath(driver, vm, mem, true) < 0) + goto cleanup; + if (qemuDomainNamespaceSetupMemory(driver, vm, mem) < 0) goto cleanup; teardowndevice =3D true; diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index a219a8080..823a1385f 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -3283,9 +3283,10 @@ qemuProcessReconnectCheckMemAliasOrderMismatch(virDo= mainObjPtr vm) } =20 =20 -static int +int qemuProcessBuildDestroyHugepagesPath(virQEMUDriverPtr driver, virDomainObjPtr vm, + virDomainMemoryDefPtr mem, bool build) { virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); @@ -3314,6 +3315,12 @@ qemuProcessBuildDestroyHugepagesPath(virQEMUDriverPt= r driver, } } =20 + if (mem && + mem->model =3D=3D VIR_DOMAIN_MEMORY_MODEL_DIMM && + mem->pagesize && + mem->pagesize !=3D system_pagesize) + shouldBuild =3D true; + if (!build || (build && shouldBuild)) { for (i =3D 0; i < cfg->nhugetlbfs; i++) { @@ -3324,6 +3331,11 @@ qemuProcessBuildDestroyHugepagesPath(virQEMUDriverPt= r driver, goto cleanup; =20 if (build) { + if (virFileExists(hugepagePath)) { + ret =3D 0; + goto cleanup; + } + if (virFileMakePathWithMode(hugepagePath, 0700) < 0) { virReportSystemError(errno, _("Unable to create %s"), @@ -3497,7 +3509,7 @@ qemuProcessReconnect(void *opaque) goto cleanup; } =20 - if (qemuProcessBuildDestroyHugepagesPath(driver, obj, true) < 0) + if (qemuProcessBuildDestroyHugepagesPath(driver, obj, NULL, true) < 0) goto error; =20 if ((qemuDomainAssignAddresses(obj->def, priv->qemuCaps, @@ -5541,7 +5553,7 @@ qemuProcessPrepareHost(virQEMUDriverPtr driver, NULL) < 0) goto cleanup; =20 - if (qemuProcessBuildDestroyHugepagesPath(driver, vm, true) < 0) + if (qemuProcessBuildDestroyHugepagesPath(driver, vm, NULL, true) < 0) goto cleanup; =20 /* Ensure no historical cgroup for this VM is lying around bogus @@ -6225,7 +6237,7 @@ void qemuProcessStop(virQEMUDriverPtr driver, goto endjob; } =20 - qemuProcessBuildDestroyHugepagesPath(driver, vm, false); + qemuProcessBuildDestroyHugepagesPath(driver, vm, NULL, false); =20 vm->def->id =3D -1; =20 diff --git a/src/qemu/qemu_process.h b/src/qemu/qemu_process.h index 830d8cef8..b63784152 100644 --- a/src/qemu/qemu_process.h +++ b/src/qemu/qemu_process.h @@ -192,4 +192,9 @@ int qemuProcessRefreshDisks(virQEMUDriverPtr driver, virDomainObjPtr vm, qemuDomainAsyncJob asyncJob); =20 +int qemuProcessBuildDestroyHugepagesPath(virQEMUDriverPtr driver, + virDomainObjPtr vm, + virDomainMemoryDefPtr mem, + bool build); + #endif /* __QEMU_PROCESS_H__ */ --=20 2.13.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list