On Thu, Feb 18, 2021 at 14:30:56 +0100, Michal Privoznik wrote:
New virHostMemGetTHPSize() is introduced which allows caller to
obtain THP PMD (Page Middle Directory) size, which is equal to
the minimal size that THP can use, taken from kernel doc
(Documentation/admin-guide/mm/transhuge.rst):
Some userspace (such as a test program, or an optimized memory allocation
library) may want to know the size (in bytes) of a transparent hugepage::
cat /sys/kernel/mm/transparent_hugepage/hpage_pmd_size
Since this size depends on the host architecture and the kernel
it won't change whilst libvirtd is running. Therefore, we can use
virOnce() and cache the value. Of course, we can be running under
kernel that has THP disabled or has no notion of THP at all. In
that case a negative value is returned to signal error.
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
---
src/libvirt_private.syms | 1 +
src/util/virhostmem.c | 63 ++++++++++++++++++++++++++++++++++++++++
src/util/virhostmem.h | 3 ++
tests/domaincapsmock.c | 9 ++++++
4 files changed, 76 insertions(+)
[...]
diff --git a/src/util/virhostmem.c b/src/util/virhostmem.c
index ae42978ed2..ef7b97806f 100644
--- a/src/util/virhostmem.c
+++ b/src/util/virhostmem.c
@@ -45,11 +45,14 @@
#include "virstring.h"
#include "virnuma.h"
#include "virlog.h"
+#include "virthread.h"
#define VIR_FROM_THIS VIR_FROM_NONE
VIR_LOG_INIT("util.hostmem");
+static unsigned long long virHostTHPPMDSize;
Please add a comment that it's in kiB.
+static virOnceControl virHostMemGetTHPSizeOnce =
VIR_ONCE_CONTROL_INITIALIZER;