From nobody Wed May 1 12:14:27 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 1497359137363243.12752067968927; Tue, 13 Jun 2017 06:05:37 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id C1BF86DDBB; Tue, 13 Jun 2017 13:05: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 3F51196EBE; Tue, 13 Jun 2017 13:05:30 +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 C31074A48F; Tue, 13 Jun 2017 13:05:29 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v5DD5NS2016123 for ; Tue, 13 Jun 2017 09:05:23 -0400 Received: by smtp.corp.redhat.com (Postfix) id 464E68E4A4; Tue, 13 Jun 2017 13:05:23 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id C4AE4906F1 for ; Tue, 13 Jun 2017 13:05:22 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com C1BF86DDBB Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx04.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 C1BF86DDBB From: Michal Privoznik To: libvir-list@redhat.com Date: Tue, 13 Jun 2017 15:05:10 +0200 Message-Id: <9556feb89cabf54a4e306aa73dcfe34ec62dc130.1497358985.git.mprivozn@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 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.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Tue, 13 Jun 2017 13:05:33 +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 Reviewed-by: John Ferlan --- src/qemu/qemu_process.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 4a66f0d5d..59cca2736 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -3283,6 +3283,31 @@ qemuProcessReconnectCheckMemAliasOrderMismatch(virDo= mainObjPtr vm) } =20 =20 +static bool +qemuProcessNeedHugepagesPath(virDomainDefPtr def) +{ + const long system_pagesize =3D virGetSystemPageSizeKB(); + size_t i; + + if (def->mem.source =3D=3D VIR_DOMAIN_MEMORY_SOURCE_FILE) + return true; + + for (i =3D 0; i < def->mem.nhugepages; i++) { + if (def->mem.hugepages[i].size !=3D system_pagesize) + return true; + } + + for (i =3D 0; i < def->nmems; i++) { + if (def->mems[i]->model =3D=3D VIR_DOMAIN_MEMORY_MODEL_DIMM && + def->mems[i]->pagesize && + def->mems[i]->pagesize !=3D system_pagesize) + return true; + } + + return false; +} + + static int qemuProcessBuildDestroyHugepagesPath(virQEMUDriverPtr driver, virDomainObjPtr vm, @@ -3291,9 +3316,13 @@ qemuProcessBuildDestroyHugepagesPath(virQEMUDriverPt= r driver, virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); char *hugepagePath =3D NULL; size_t i; + bool shouldBuild =3D false; int ret =3D -1; =20 - if (vm->def->mem.nhugepages) { + if (build) + shouldBuild =3D qemuProcessNeedHugepagesPath(vm->def); + + if (!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 Wed May 1 12:14:27 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 1497359140031298.83558365579256; Tue, 13 Jun 2017 06:05:40 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id BC5E2DC8FC; Tue, 13 Jun 2017 13:05:34 +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 85B388FDEC; Tue, 13 Jun 2017 13:05:34 +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 3E43B4A494; Tue, 13 Jun 2017 13:05:34 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v5DD5VHK016153 for ; Tue, 13 Jun 2017 09:05:31 -0400 Received: by smtp.corp.redhat.com (Postfix) id C682D8E4A4; Tue, 13 Jun 2017 13:05:31 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.192]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3FFAE90700 for ; Tue, 13 Jun 2017 13:05:23 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com BC5E2DC8FC Authentication-Results: ext-mx09.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx09.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 BC5E2DC8FC From: Michal Privoznik To: libvir-list@redhat.com Date: Tue, 13 Jun 2017 15:05:11 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 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.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Tue, 13 Jun 2017 13:05:35 +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 Reviewed-by: John Ferlan --- src/qemu/qemu_hotplug.c | 3 +++ src/qemu/qemu_process.c | 25 +++++++++++++++++++------ src/qemu/qemu_process.h | 5 +++++ 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 96f3f4579..0b8d3d80f 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -2258,6 +2258,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 59cca2736..85b800da3 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -3284,7 +3284,8 @@ qemuProcessReconnectCheckMemAliasOrderMismatch(virDom= ainObjPtr vm) =20 =20 static bool -qemuProcessNeedHugepagesPath(virDomainDefPtr def) +qemuProcessNeedHugepagesPath(virDomainDefPtr def, + virDomainMemoryDefPtr mem) { const long system_pagesize =3D virGetSystemPageSizeKB(); size_t i; @@ -3304,13 +3305,20 @@ qemuProcessNeedHugepagesPath(virDomainDefPtr def) return true; } =20 + if (mem && + mem->model =3D=3D VIR_DOMAIN_MEMORY_MODEL_DIMM && + mem->pagesize && + mem->pagesize !=3D system_pagesize) + return true; + return false; } =20 =20 -static int +int qemuProcessBuildDestroyHugepagesPath(virQEMUDriverPtr driver, virDomainObjPtr vm, + virDomainMemoryDefPtr mem, bool build) { virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); @@ -3320,7 +3328,7 @@ qemuProcessBuildDestroyHugepagesPath(virQEMUDriverPtr= driver, int ret =3D -1; =20 if (build) - shouldBuild =3D qemuProcessNeedHugepagesPath(vm->def); + shouldBuild =3D qemuProcessNeedHugepagesPath(vm->def, mem); =20 if (!build || shouldBuild) { for (i =3D 0; i < cfg->nhugetlbfs; i++) { @@ -3331,6 +3339,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"), @@ -3504,7 +3517,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, @@ -5572,7 +5585,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 @@ -6259,7 +6272,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 c38310b47..667d5c53d 100644 --- a/src/qemu/qemu_process.h +++ b/src/qemu/qemu_process.h @@ -38,6 +38,11 @@ int qemuProcessStopCPUs(virQEMUDriverPtr driver, virDomainPausedReason reason, qemuDomainAsyncJob asyncJob); =20 +int qemuProcessBuildDestroyHugepagesPath(virQEMUDriverPtr driver, + virDomainObjPtr vm, + virDomainMemoryDefPtr mem, + bool build); + void qemuProcessAutostartAll(virQEMUDriverPtr driver); void qemuProcessReconnectAll(virConnectPtr conn, virQEMUDriverPtr driver); =20 --=20 2.13.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list