[libvirt] [PATCH 1/2] bhyve: add CPU topology support

Roman Bogorodskiy bogorodskiy at gmail.com
Tue May 29 15:06:39 UTC 2018


  Peter Krempa wrote:

> On Mon, May 28, 2018 at 20:27:50 +0400, Roman Bogorodskiy wrote:
> > Recently, bhyve started supporting specifying guest CPU topology.
> > It looks this way:
> > 
> >   bhyve -c cpus=C,sockets=S,cores=C,threads=T ...
> > 
> > The old behaviour with bhyve -c C, where C is a number of vCPUs, is
> > still supported.
> > 
> > So if we have CPU topology in the domain XML, use the new syntax,
> > otherwise keeps the old behaviour.
> > 
> > Signed-off-by: Roman Bogorodskiy <bogorodskiy at gmail.com>
> > ---
> >  src/bhyve/bhyve_capabilities.c                |  7 +++--
> >  src/bhyve/bhyve_capabilities.h                |  1 +
> >  src/bhyve/bhyve_command.c                     | 17 +++++++++++-
> >  .../bhyvexml2argv-cputopology.args            |  9 +++++++
> >  .../bhyvexml2argv-cputopology.ldargs          |  3 +++
> >  .../bhyvexml2argv-cputopology.xml             | 26 +++++++++++++++++++
> >  tests/bhyvexml2argvtest.c                     |  7 ++++-
> >  7 files changed, 66 insertions(+), 4 deletions(-)
> >  create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-cputopology.args
> >  create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-cputopology.ldargs
> >  create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-cputopology.xml
> 
> [...]
> 
> > diff --git a/src/bhyve/bhyve_command.c b/src/bhyve/bhyve_command.c
> > index e3f7ded7db..b319518520 100644
> > --- a/src/bhyve/bhyve_command.c
> > +++ b/src/bhyve/bhyve_command.c
> > @@ -467,7 +467,22 @@ virBhyveProcessBuildBhyveCmd(virConnectPtr conn,
> >  
> >      /* CPUs */
> >      virCommandAddArg(cmd, "-c");
> > -    virCommandAddArgFormat(cmd, "%d", virDomainDefGetVcpus(def));
> > +    if (def->cpu && def->cpu->sockets) {
> > +        if ((bhyveDriverGetCaps(conn) & BHYVE_CAP_CPUTOPOLOGY) != 0) {
> > +            virCommandAddArgFormat(cmd, "cpus=%d,sockets=%d,cores=%d,threads=%d",
> > +                                   virDomainDefGetVcpus(def),
> > +                                   def->cpu->sockets,
> > +                                   def->cpu->cores,
> > +                                   def->cpu->threads);
> 
> Note that libvirt XML->def conversion does not validate that def->nvcpus
> equals to def->cpu->sockets * def->cpu->cores * def->cpu->threads.
> 
> This is a historic artefact since qemu did not do it either. They
> started doing it just recently. It might be worth adding that check to
> be sure in the future.

Good point!
Indeed, bhyve validates CPU topology in a way you described, so it makes
sense to fail early instead of waiting the command to fail. I'll roll a
v2.

> > +        } else {
> > +            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> > +                           _("Installed bhyve binary does not support "
> > +                             "defining CPU topology"));
> > +            goto error;
> > +        }
> 
> The rest looks good to me, so ACK if you don't think the check for the
> topology<->vcpu count is important enough.



Roman Bogorodskiy
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 455 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20180529/a33a6bb1/attachment-0001.sig>


More information about the libvir-list mailing list