[libvirt] [PATCH] add option to enforce minimal pagesize for hugetlbfs backed guests
Daniel P. Berrange
berrange at redhat.com
Tue Feb 11 14:46:43 UTC 2014
On Thu, Feb 06, 2014 at 11:48:51AM -0500, Marcelo Tosatti wrote:
>
>
> Require a minimal pagesize for hugetlbfs backed guests. Fail guest initialization
> if hugetlbfs mount is configured with smaller page size.
>
> Signed-off-by: Marcelo Tosatti <mtosatti at redhat.com>
>
>
> +#ifdef __linux__
> +
> +#include <sys/vfs.h>
> +
> +#define HUGETLBFS_MAGIC 0x958458f6
> +
> +static long gethugepagesize(const char *path)
> +{
> + struct statfs fs;
> + int ret;
> +
> + do {
> + ret = statfs(path, &fs);
> + } while (ret != 0 && errno == EINTR);
> +
> + if (ret != 0) {
> + perror(path);
> + return 0;
> + }
> +
> + if (fs.f_type != HUGETLBFS_MAGIC)
> + return 0;
> +
> + return fs.f_bsize;
> +}
> +#endif
> +
>
> int qemuProcessStart(virConnectPtr conn,
> virQEMUDriverPtr driver,
> @@ -3712,6 +3739,31 @@ int qemuProcessStart(virConnectPtr conn,
> "%s", _("Unable to set huge path in security driver"));
> goto cleanup;
> }
> +
> + if (vm->def->mem.page_size) {
> +#ifdef __linux__
> + unsigned long hpagesize = gethugepagesize(cfg->hugepagePath);
> +
> + if (!hpagesize) {
> + virReportError(VIR_ERR_INTERNAL_ERROR,
> + "%s", _("Unable to stat hugepage path"));
> + goto cleanup;
> + }
> +
> + hpagesize /= 1024;
> +
> + if (hpagesize < vm->def->mem.page_size) {
> + virReportError(VIR_ERR_INTERNAL_ERROR,
> + _("Error: hugetlbfs page size=%ld < pagesize=%lld"),
> + hpagesize, vm->def->mem.page_size);
> + goto cleanup;
> + }
> +#else
> + virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> + "%s", _("pagesize option unsupported"));
> + goto cleanup;
> +#endif
> + }
> }
IMHO all of this code is something that belongs in QEMU, with libvirt
telling QEMU what min page size it wants via a CLI arg.
Regards,
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list