On 01/13/2015 02:57 AM, Martin Kletzander wrote: > Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1178986 Could use a bit more details here. > > Signed-off-by: Martin Kletzander <mkletzan@xxxxxxxxxx> > --- > src/qemu/qemu_driver.c | 7 ++++- > src/qemu/qemu_process.c | 76 ++++++++++++++++++++++++++++++++++++++++++++++++- > src/qemu/qemu_process.h | 5 +++- > 3 files changed, 85 insertions(+), 3 deletions(-) > No change to qemu_hotplug necessary?? > diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c > index cdf4173..fdfd4e9 100644 > --- a/src/qemu/qemu_driver.c > +++ b/src/qemu/qemu_driver.c > @@ -1,7 +1,7 @@ > /* > * qemu_driver.c: core driver methods for managing qemu guests > * > - * Copyright (C) 2006-2014 Red Hat, Inc. > + * Copyright (C) 2006-2015 Red Hat, Inc. > * Copyright (C) 2006 Daniel P. Berrange > * > * This library is free software; you can redistribute it and/or > @@ -4491,6 +4491,11 @@ static int qemuDomainHotplugVcpus(virQEMUDriverPtr driver, > } > > virCgroupFree(&cgroup_vcpu); > + > + if (qemuProcessSetSchedParams(i, cpupids[i], > + vm->def->cputune.nvcpusched, > + vm->def->cputune.vcpusched) < 0) > + goto cleanup; > } > } else { > for (i = oldvcpus - 1; i >= nvcpus; i--) { > diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c > index c18204b..0d69c43 100644 > --- a/src/qemu/qemu_process.c > +++ b/src/qemu/qemu_process.c > @@ -1,7 +1,7 @@ > /* > * qemu_process.c: QEMU process management > * > - * Copyright (C) 2006-2014 Red Hat, Inc. > + * Copyright (C) 2006-2015 Red Hat, Inc. > * > * This library is free software; you can redistribute it and/or > * modify it under the terms of the GNU Lesser General Public > @@ -2574,6 +2574,76 @@ qemuProcessSetIOThreadsAffinity(virDomainObjPtr vm) > return ret; > } > > +/* Set Scheduler parameters for vCPU or I/O threads. */ > +int > +qemuProcessSetSchedParams(int id, > + pid_t pid, > + size_t nsp, > + virDomainThreadSchedParamPtr sp) > +{ > + int sched = 0; > + size_t i = 0; > + virDomainThreadSchedParamPtr s = NULL; > + > + for (i = 0; i < nsp; i++) { > + if (id != sp[i].id) > + continue; > + > + s = sp + i; > + break; > + } Ug. I think this would be easier with the bitmap like cpuset. I'll wait for your feedback on 2/3... Do you plan to add a new command 'vcpusched' (like vcpupin). It's something that's desired for IOThreads, so perhaps one of us gets to reuse code :-) John > + > + if (!s) > + return 0; > + > + switch (s->scheduler) { > + case VIR_DOMAIN_THREAD_SCHED_BATCH: > + sched = SCHED_BATCH; > + break; > + > + case VIR_DOMAIN_THREAD_SCHED_IDLE: > + sched = SCHED_IDLE; > + break; > + > + case VIR_DOMAIN_THREAD_SCHED_FIFO: > + sched = SCHED_FIFO; > + break; > + > + case VIR_DOMAIN_THREAD_SCHED_RR: > + sched = SCHED_RR; > + break; > + > + case VIR_DOMAIN_THREAD_SCHED_OTHER: > + case VIR_DOMAIN_THREAD_SCHED_LAST: > + return 0; > + } > + > + return virProcessSetScheduler(pid, sched, s->priority); > +} > + > +static int > +qemuProcessSetSchedulers(virDomainObjPtr vm) > +{ > + qemuDomainObjPrivatePtr priv = vm->privateData; > + size_t i = 0; > + > + for (i = 0; i < vm->def->vcpus; i++) { > + if (qemuProcessSetSchedParams(i, priv->vcpupids[i], > + vm->def->cputune.nvcpusched, > + vm->def->cputune.vcpusched) < 0) > + return -1; > + } > + > + for (i = 0; i < vm->def->iothreads; i++) { > + if (qemuProcessSetSchedParams(i, priv->iothreadpids[i], > + vm->def->cputune.niothreadsched, > + vm->def->cputune.iothreadsched) < 0) > + return -1; > + } > + > + return 0; > +} > + > static int > qemuProcessInitPasswords(virConnectPtr conn, > virQEMUDriverPtr driver, > @@ -4750,6 +4820,10 @@ int qemuProcessStart(virConnectPtr conn, > if (qemuProcessSetIOThreadsAffinity(vm) < 0) > goto cleanup; > > + VIR_DEBUG("Setting scheduler parameters"); > + if (qemuProcessSetSchedulers(vm) < 0) > + goto cleanup; > + > VIR_DEBUG("Setting any required VM passwords"); > if (qemuProcessInitPasswords(conn, driver, vm, asyncJob) < 0) > goto cleanup; > diff --git a/src/qemu/qemu_process.h b/src/qemu/qemu_process.h > index 5948ea4..2e1d393 100644 > --- a/src/qemu/qemu_process.h > +++ b/src/qemu/qemu_process.h > @@ -1,7 +1,7 @@ > /* > * qemu_process.h: QEMU process management > * > - * Copyright (C) 2006-2012 Red Hat, Inc. > + * Copyright (C) 2006-2012, 2015 Red Hat, Inc. > * > * This library is free software; you can redistribute it and/or > * modify it under the terms of the GNU Lesser General Public > @@ -104,4 +104,7 @@ virBitmapPtr qemuPrepareCpumap(virQEMUDriverPtr driver, > > int qemuProcessReadLog(int fd, char *buf, int buflen, int off, bool skipchar); > > +int qemuProcessSetSchedParams(int id, pid_t pid, size_t nsp, > + virDomainThreadSchedParamPtr sp); > + > #endif /* __QEMU_PROCESS_H__ */ > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list