[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