[libvirt PATCHv4 12/15] qemu: put virtiofsd in the emulator cgroup

Peter Krempa pkrempa at redhat.com
Wed Feb 26 08:49:11 UTC 2020


On Thu, Feb 20, 2020 at 15:32:49 +0100, Ján Tomko wrote:
> Wire up the code to put virtiofsd in the emulator cgroup on domain
> startup.
> 
> Signed-off-by: Ján Tomko <jtomko at redhat.com>
> ---
>  src/qemu/qemu_extdevice.c | 15 +++++++++++++++
>  src/qemu/qemu_virtiofs.c  | 28 ++++++++++++++++++++++++++++
>  src/qemu/qemu_virtiofs.h  |  6 ++++++
>  3 files changed, 49 insertions(+)

[...]

> @@ -271,5 +278,13 @@ qemuExtDevicesSetupCgroup(virQEMUDriverPtr driver,
>          qemuExtTPMSetupCgroup(driver, def, cgroup) < 0)
>          return -1;
>  
> +    for (i = 0; i < def->nfss; i++) {
> +        virDomainFSDefPtr fs = def->fss[i];
> +
> +        if (fs->fsdriver == VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS &&
> +            qemuVirtioFSSetupCgroup(driver, def, fs, cgroup) < 0)

While this is consistent with what we do with other cases of 'externa'
devices. I'm worried though that that stashing everything into a single
cgroup will not scale.


> +            return -1;
> +    }
> +
>      return 0;
>  }
> diff --git a/src/qemu/qemu_virtiofs.c b/src/qemu/qemu_virtiofs.c
> index 600a3644bd..9e354a30c6 100644
> --- a/src/qemu/qemu_virtiofs.c
> +++ b/src/qemu/qemu_virtiofs.c
> @@ -298,3 +298,31 @@ qemuVirtioFSStop(virQEMUDriverPtr driver,
>   cleanup:
>      virErrorRestore(&orig_err);
>  }
> +
> +
> +int
> +qemuVirtioFSSetupCgroup(virQEMUDriverPtr driver,
> +                        virDomainDefPtr def,
> +                        virDomainFSDefPtr fs,
> +                        virCgroupPtr cgroup)
> +{
> +    g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
> +    g_autofree char *pidfile = NULL;
> +    pid_t pid = -1;
> +    int rc;
> +
> +    if (!(pidfile = qemuVirtioFSCreatePidFilename(cfg, def, fs->info.alias)))
> +        return -1;
> +
> +    rc = virPidFileReadPathIfAlive(pidfile, &pid, NULL);
> +    if (rc < 0 || pid == (pid_t) -1) {
> +        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> +                       _("virtiofsd died unexpectedly"));
> +        return -1;
> +    }

Why don't we store the pid in the private data? Seems to be a waste of
cycles to read it here.

> +
> +    if (virCgroupAddProcess(cgroup, pid) < 0)
> +        return -1;
> +
> +    return 0;
> +}

Please consider storing the pid somewhere rather than looking it up.
With that:

Reviewed-by: Peter Krempa <pkrempa at redhat.com>

We can worry about the cgroup congestion later since that's
pre-existing.




More information about the libvir-list mailing list