[libvirt] [PATCH 3/3] qemu: Add support for setting vCPU and I/O thread scheduler setting
Martin Kletzander
mkletzan at redhat.com
Tue Jan 20 14:48:15 UTC 2015
On Mon, Jan 19, 2015 at 10:33:52PM -0500, John Ferlan wrote:
>
>
>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 at redhat.com>
>> ---
>> 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??
>
There's nothing needed there, IIUC.
>> 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...
>
Yes, this will look way better in v2.
>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 :-)
>
I'm not sure anyone will use that, but it there is demand, then I have
no problem adding that as well.
>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__ */
>>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20150120/4d547a74/attachment-0001.sig>
More information about the libvir-list
mailing list