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

Roman Bogorodskiy posted 2 patches 6 years, 11 months ago
[libvirt] [PATCH v2 1/2] bhyve: add CPU topology support
Posted by Roman Bogorodskiy 6 years, 11 months ago
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@gmail.com>
---
 src/bhyve/bhyve_capabilities.c                |  7 +++--
 src/bhyve/bhyve_capabilities.h                |  1 +
 src/bhyve/bhyve_command.c                     | 26 ++++++++++++++++++-
 ...yvexml2argv-cputopology-nvcpu-mismatch.xml | 26 +++++++++++++++++++
 .../bhyvexml2argv-cputopology.args            |  9 +++++++
 .../bhyvexml2argv-cputopology.ldargs          |  3 +++
 .../bhyvexml2argv-cputopology.xml             | 26 +++++++++++++++++++
 tests/bhyvexml2argvtest.c                     |  8 +++++-
 8 files changed, 102 insertions(+), 4 deletions(-)
 create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-cputopology-nvcpu-mismatch.xml
 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_capabilities.c b/src/bhyve/bhyve_capabilities.c
index e13085b1d5..a3229cea75 100644
--- a/src/bhyve/bhyve_capabilities.c
+++ b/src/bhyve/bhyve_capabilities.c
@@ -227,7 +227,7 @@ bhyveProbeCapsDeviceHelper(unsigned int *caps,
 }
 
 static int
-bhyveProbeCapsRTC_UTC(unsigned int *caps, char *binary)
+bhyveProbeCapsFromHelp(unsigned int *caps, char *binary)
 {
     char *help;
     virCommandPtr cmd = NULL;
@@ -244,6 +244,9 @@ bhyveProbeCapsRTC_UTC(unsigned int *caps, char *binary)
     if (strstr(help, "-u:") != NULL)
         *caps |= BHYVE_CAP_RTC_UTC;
 
+    if (strstr(help, "sockets=n][,cores=n][,threads=n") != NULL)
+        *caps |= BHYVE_CAP_CPUTOPOLOGY;
+
  out:
     VIR_FREE(help);
     virCommandFree(cmd);
@@ -314,7 +317,7 @@ virBhyveProbeCaps(unsigned int *caps)
     if (binary == NULL)
         goto out;
 
-    if ((ret = bhyveProbeCapsRTC_UTC(caps, binary)))
+    if ((ret = bhyveProbeCapsFromHelp(caps, binary)))
         goto out;
 
     if ((ret = bhyveProbeCapsAHCI32Slot(caps, binary)))
diff --git a/src/bhyve/bhyve_capabilities.h b/src/bhyve/bhyve_capabilities.h
index 0e310e6eda..873bc9c12d 100644
--- a/src/bhyve/bhyve_capabilities.h
+++ b/src/bhyve/bhyve_capabilities.h
@@ -49,6 +49,7 @@ typedef enum {
     BHYVE_CAP_LPC_BOOTROM = 1 << 3,
     BHYVE_CAP_FBUF = 1 << 4,
     BHYVE_CAP_XHCI = 1 << 5,
+    BHYVE_CAP_CPUTOPOLOGY = 1 << 6,
 } virBhyveCapsFlags;
 
 int virBhyveProbeGrubCaps(virBhyveGrubCapsFlags *caps);
diff --git a/src/bhyve/bhyve_command.c b/src/bhyve/bhyve_command.c
index e3f7ded7db..802997bd2d 100644
--- a/src/bhyve/bhyve_command.c
+++ b/src/bhyve/bhyve_command.c
@@ -462,12 +462,36 @@ virBhyveProcessBuildBhyveCmd(virConnectPtr conn,
     size_t i;
     bool add_lpc = false;
     int nusbcontrollers = 0;
+    unsigned int nvcpus = virDomainDefGetVcpus(def);
 
     virCommandPtr cmd = virCommandNew(BHYVE);
 
     /* CPUs */
     virCommandAddArg(cmd, "-c");
-    virCommandAddArgFormat(cmd, "%d", virDomainDefGetVcpus(def));
+    if (def->cpu && def->cpu->sockets) {
+        if (nvcpus != def->cpu->sockets * def->cpu->cores * def->cpu->threads) {
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                           _("Invalid CPU topology: total number of vCPUs "
+                             "must equal the product of sockets, cores, "
+                             "and threads"));
+            goto error;
+        }
+
+        if ((bhyveDriverGetCaps(conn) & BHYVE_CAP_CPUTOPOLOGY) != 0) {
+            virCommandAddArgFormat(cmd, "cpus=%d,sockets=%d,cores=%d,threads=%d",
+                                   nvcpus,
+                                   def->cpu->sockets,
+                                   def->cpu->cores,
+                                   def->cpu->threads);
+        } else {
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                           _("Installed bhyve binary does not support "
+                             "defining CPU topology"));
+            goto error;
+        }
+    } else {
+        virCommandAddArgFormat(cmd, "%d", nvcpus);
+    }
 
     /* Memory */
     virCommandAddArg(cmd, "-m");
diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-cputopology-nvcpu-mismatch.xml b/tests/bhyvexml2argvdata/bhyvexml2argv-cputopology-nvcpu-mismatch.xml
new file mode 100644
index 0000000000..5bd05fb7da
--- /dev/null
+++ b/tests/bhyvexml2argvdata/bhyvexml2argv-cputopology-nvcpu-mismatch.xml
@@ -0,0 +1,26 @@
+<domain type='bhyve'>
+  <name>bhyve</name>
+  <uuid>df3be7e7-a104-11e3-aeb0-50e5492bd3dc</uuid>
+  <memory>219136</memory>
+  <vcpu>4</vcpu>
+  <cpu>
+    <topology sockets='1' cores='2' threads='1'/>
+  </cpu>
+  <os>
+    <type>hvm</type>
+  </os>
+  <devices>
+    <disk type='file'>
+      <driver name='file' type='raw'/>
+      <source file='/tmp/freebsd.img'/>
+      <target dev='hda' bus='sata'/>
+      <address type='drive' controller='0' bus='0' target='2' unit='0'/>
+    </disk>
+    <interface type='bridge'>
+      <mac address='52:54:00:b9:94:02'/>
+      <model type='virtio'/>
+      <source bridge="virbr0"/>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
+    </interface>
+  </devices>
+</domain>
diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-cputopology.args b/tests/bhyvexml2argvdata/bhyvexml2argv-cputopology.args
new file mode 100644
index 0000000000..2d175a4178
--- /dev/null
+++ b/tests/bhyvexml2argvdata/bhyvexml2argv-cputopology.args
@@ -0,0 +1,9 @@
+/usr/sbin/bhyve \
+-c cpus=2,sockets=1,cores=2,threads=1 \
+-m 214 \
+-u \
+-H \
+-P \
+-s 0:0,hostbridge \
+-s 2:0,ahci,hd:/tmp/freebsd.img \
+-s 3:0,virtio-net,faketapdev,mac=52:54:00:b9:94:02 bhyve
diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-cputopology.ldargs b/tests/bhyvexml2argvdata/bhyvexml2argv-cputopology.ldargs
new file mode 100644
index 0000000000..32538b558e
--- /dev/null
+++ b/tests/bhyvexml2argvdata/bhyvexml2argv-cputopology.ldargs
@@ -0,0 +1,3 @@
+/usr/sbin/bhyveload \
+-m 214 \
+-d /tmp/freebsd.img bhyve
diff --git a/tests/bhyvexml2argvdata/bhyvexml2argv-cputopology.xml b/tests/bhyvexml2argvdata/bhyvexml2argv-cputopology.xml
new file mode 100644
index 0000000000..83c7d423c4
--- /dev/null
+++ b/tests/bhyvexml2argvdata/bhyvexml2argv-cputopology.xml
@@ -0,0 +1,26 @@
+<domain type='bhyve'>
+  <name>bhyve</name>
+  <uuid>df3be7e7-a104-11e3-aeb0-50e5492bd3dc</uuid>
+  <memory>219136</memory>
+  <vcpu>2</vcpu>
+  <cpu>
+    <topology sockets='1' cores='2' threads='1'/>
+  </cpu>
+  <os>
+    <type>hvm</type>
+  </os>
+  <devices>
+    <disk type='file'>
+      <driver name='file' type='raw'/>
+      <source file='/tmp/freebsd.img'/>
+      <target dev='hda' bus='sata'/>
+      <address type='drive' controller='0' bus='0' target='2' unit='0'/>
+    </disk>
+    <interface type='bridge'>
+      <mac address='52:54:00:b9:94:02'/>
+      <model type='virtio'/>
+      <source bridge="virbr0"/>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
+    </interface>
+  </devices>
+</domain>
diff --git a/tests/bhyvexml2argvtest.c b/tests/bhyvexml2argvtest.c
index b08b1675f3..6d5f19e2c6 100644
--- a/tests/bhyvexml2argvtest.c
+++ b/tests/bhyvexml2argvtest.c
@@ -176,7 +176,8 @@ mymain(void)
     driver.grubcaps = BHYVE_GRUB_CAP_CONSDEV;
     driver.bhyvecaps = BHYVE_CAP_RTC_UTC | BHYVE_CAP_AHCI32SLOT | \
                        BHYVE_CAP_NET_E1000 | BHYVE_CAP_LPC_BOOTROM | \
-                       BHYVE_CAP_FBUF | BHYVE_CAP_XHCI;
+                       BHYVE_CAP_FBUF | BHYVE_CAP_XHCI | \
+                       BHYVE_CAP_CPUTOPOLOGY;
 
     DO_TEST("base");
     DO_TEST("wired");
@@ -207,6 +208,8 @@ mymain(void)
     DO_TEST("vnc-vgaconf-off");
     DO_TEST("vnc-vgaconf-io");
     DO_TEST("vnc-autoport");
+    DO_TEST("cputopology");
+    DO_TEST_FAILURE("cputopology-nvcpu-mismatch");
 
     /* Address allocation tests */
     DO_TEST("addr-single-sata-disk");
@@ -243,6 +246,9 @@ mymain(void)
     driver.bhyvecaps &= ~BHYVE_CAP_FBUF;
     DO_TEST_FAILURE("vnc");
 
+    driver.bhyvecaps &= ~BHYVE_CAP_CPUTOPOLOGY;
+    DO_TEST_FAILURE("cputopology");
+
     virObjectUnref(driver.caps);
     virObjectUnref(driver.xmlopt);
     virPortAllocatorRangeFree(driver.remotePorts);
-- 
2.17.0

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v2 1/2] bhyve: add CPU topology support
Posted by John Ferlan 6 years, 11 months ago

On 05/29/2018 12:57 PM, 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@gmail.com>
> ---
>  src/bhyve/bhyve_capabilities.c                |  7 +++--
>  src/bhyve/bhyve_capabilities.h                |  1 +
>  src/bhyve/bhyve_command.c                     | 26 ++++++++++++++++++-
>  ...yvexml2argv-cputopology-nvcpu-mismatch.xml | 26 +++++++++++++++++++
>  .../bhyvexml2argv-cputopology.args            |  9 +++++++
>  .../bhyvexml2argv-cputopology.ldargs          |  3 +++
>  .../bhyvexml2argv-cputopology.xml             | 26 +++++++++++++++++++
>  tests/bhyvexml2argvtest.c                     |  8 +++++-
>  8 files changed, 102 insertions(+), 4 deletions(-)
>  create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-cputopology-nvcpu-mismatch.xml
>  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_capabilities.c b/src/bhyve/bhyve_capabilities.c
> index e13085b1d5..a3229cea75 100644
> --- a/src/bhyve/bhyve_capabilities.c
> +++ b/src/bhyve/bhyve_capabilities.c
> @@ -227,7 +227,7 @@ bhyveProbeCapsDeviceHelper(unsigned int *caps,
>  }
>  
>  static int
> -bhyveProbeCapsRTC_UTC(unsigned int *caps, char *binary)
> +bhyveProbeCapsFromHelp(unsigned int *caps, char *binary)

Could have made this a separate just a name change patch

>  {
>      char *help;
>      virCommandPtr cmd = NULL;
> @@ -244,6 +244,9 @@ bhyveProbeCapsRTC_UTC(unsigned int *caps, char *binary)
>      if (strstr(help, "-u:") != NULL)
>          *caps |= BHYVE_CAP_RTC_UTC;
>  
> +    if (strstr(help, "sockets=n][,cores=n][,threads=n") != NULL)
> +        *caps |= BHYVE_CAP_CPUTOPOLOGY;
> +

I assume no concerns w/ i18n?  That is the help is always in English?

It's really a shame there's no other way to determine other than help
scraping. Other options would be the lack of "-c vcpus" in the output or
finding topology... Avoids using that long exact string.

Things seem find otherwise,

Reviewed-by: John Ferlan <jferlan@redhat.com>

John

[...]

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v2 1/2] bhyve: add CPU topology support
Posted by Roman Bogorodskiy 6 years, 11 months ago
  John Ferlan wrote:

> 
> 
> On 05/29/2018 12:57 PM, 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@gmail.com>
> > ---
> >  src/bhyve/bhyve_capabilities.c                |  7 +++--
> >  src/bhyve/bhyve_capabilities.h                |  1 +
> >  src/bhyve/bhyve_command.c                     | 26 ++++++++++++++++++-
> >  ...yvexml2argv-cputopology-nvcpu-mismatch.xml | 26 +++++++++++++++++++
> >  .../bhyvexml2argv-cputopology.args            |  9 +++++++
> >  .../bhyvexml2argv-cputopology.ldargs          |  3 +++
> >  .../bhyvexml2argv-cputopology.xml             | 26 +++++++++++++++++++
> >  tests/bhyvexml2argvtest.c                     |  8 +++++-
> >  8 files changed, 102 insertions(+), 4 deletions(-)
> >  create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-cputopology-nvcpu-mismatch.xml
> >  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_capabilities.c b/src/bhyve/bhyve_capabilities.c
> > index e13085b1d5..a3229cea75 100644
> > --- a/src/bhyve/bhyve_capabilities.c
> > +++ b/src/bhyve/bhyve_capabilities.c
> > @@ -227,7 +227,7 @@ bhyveProbeCapsDeviceHelper(unsigned int *caps,
> >  }
> >  
> >  static int
> > -bhyveProbeCapsRTC_UTC(unsigned int *caps, char *binary)
> > +bhyveProbeCapsFromHelp(unsigned int *caps, char *binary)
> 
> Could have made this a separate just a name change patch
> 
> >  {
> >      char *help;
> >      virCommandPtr cmd = NULL;
> > @@ -244,6 +244,9 @@ bhyveProbeCapsRTC_UTC(unsigned int *caps, char *binary)
> >      if (strstr(help, "-u:") != NULL)
> >          *caps |= BHYVE_CAP_RTC_UTC;
> >  
> > +    if (strstr(help, "sockets=n][,cores=n][,threads=n") != NULL)
> > +        *caps |= BHYVE_CAP_CPUTOPOLOGY;
> > +
> 
> I assume no concerns w/ i18n?  That is the help is always in English?

Yeah, there's no i18n for bhyve.

> It's really a shame there's no other way to determine other than help
> scraping. Other options would be the lack of "-c vcpus" in the output or
> finding topology... Avoids using that long exact string.

What is the issue with the long exact string? I guess it's worse
performance-wise, but probably not that critical compared to running the
bhyve binary... OTOH, checking it this way seems to be more
straightforward.

> Things seem find otherwise,
> 
> Reviewed-by: John Ferlan <jferlan@redhat.com>
> 
> John
> 
> [...]
> 

Roman Bogorodskiy
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v2 1/2] bhyve: add CPU topology support
Posted by John Ferlan 6 years, 11 months ago

On 06/07/2018 09:45 AM, Roman Bogorodskiy wrote:
>   John Ferlan wrote:
> 
>>
>>
>> On 05/29/2018 12:57 PM, 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@gmail.com>
>>> ---
>>>  src/bhyve/bhyve_capabilities.c                |  7 +++--
>>>  src/bhyve/bhyve_capabilities.h                |  1 +
>>>  src/bhyve/bhyve_command.c                     | 26 ++++++++++++++++++-
>>>  ...yvexml2argv-cputopology-nvcpu-mismatch.xml | 26 +++++++++++++++++++
>>>  .../bhyvexml2argv-cputopology.args            |  9 +++++++
>>>  .../bhyvexml2argv-cputopology.ldargs          |  3 +++
>>>  .../bhyvexml2argv-cputopology.xml             | 26 +++++++++++++++++++
>>>  tests/bhyvexml2argvtest.c                     |  8 +++++-
>>>  8 files changed, 102 insertions(+), 4 deletions(-)
>>>  create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-cputopology-nvcpu-mismatch.xml
>>>  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_capabilities.c b/src/bhyve/bhyve_capabilities.c
>>> index e13085b1d5..a3229cea75 100644
>>> --- a/src/bhyve/bhyve_capabilities.c
>>> +++ b/src/bhyve/bhyve_capabilities.c
>>> @@ -227,7 +227,7 @@ bhyveProbeCapsDeviceHelper(unsigned int *caps,
>>>  }
>>>  
>>>  static int
>>> -bhyveProbeCapsRTC_UTC(unsigned int *caps, char *binary)
>>> +bhyveProbeCapsFromHelp(unsigned int *caps, char *binary)
>>
>> Could have made this a separate just a name change patch
>>
>>>  {
>>>      char *help;
>>>      virCommandPtr cmd = NULL;
>>> @@ -244,6 +244,9 @@ bhyveProbeCapsRTC_UTC(unsigned int *caps, char *binary)
>>>      if (strstr(help, "-u:") != NULL)
>>>          *caps |= BHYVE_CAP_RTC_UTC;
>>>  
>>> +    if (strstr(help, "sockets=n][,cores=n][,threads=n") != NULL)
>>> +        *caps |= BHYVE_CAP_CPUTOPOLOGY;
>>> +
>>
>> I assume no concerns w/ i18n?  That is the help is always in English?
> 
> Yeah, there's no i18n for bhyve.
> 
>> It's really a shame there's no other way to determine other than help
>> scraping. Other options would be the lack of "-c vcpus" in the output or
>> finding topology... Avoids using that long exact string.
> 
> What is the issue with the long exact string? I guess it's worse
> performance-wise, but probably not that critical compared to running the
> bhyve binary... OTOH, checking it this way seems to be more
> straightforward.
> 

Fear of someone changing "something" in the string and that causing
problems. No one ever changes those strings though, right?  ;-)  The -c:
string text changed for that particular patch from " -c: # cpus (default
1)\n" to "-c: number of cpus and/or topology specification", so relying
on the current string never to change is a risk.  In the long run IDC
and it's not the time for length of compare - just the risk of change.
Your call.

John

>> Things seem find otherwise,
>>
>> Reviewed-by: John Ferlan <jferlan@redhat.com>
>>
>> John
>>
>> [...]
>>
> 
> Roman Bogorodskiy
> 

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v2 1/2] bhyve: add CPU topology support
Posted by Roman Bogorodskiy 6 years, 11 months ago
  John Ferlan wrote:

> On 06/07/2018 09:45 AM, Roman Bogorodskiy wrote:
> >   John Ferlan wrote:
> > 
> >>
> >>
> >> On 05/29/2018 12:57 PM, 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@gmail.com>
> >>> ---
> >>>  src/bhyve/bhyve_capabilities.c                |  7 +++--
> >>>  src/bhyve/bhyve_capabilities.h                |  1 +
> >>>  src/bhyve/bhyve_command.c                     | 26 ++++++++++++++++++-
> >>>  ...yvexml2argv-cputopology-nvcpu-mismatch.xml | 26 +++++++++++++++++++
> >>>  .../bhyvexml2argv-cputopology.args            |  9 +++++++
> >>>  .../bhyvexml2argv-cputopology.ldargs          |  3 +++
> >>>  .../bhyvexml2argv-cputopology.xml             | 26 +++++++++++++++++++
> >>>  tests/bhyvexml2argvtest.c                     |  8 +++++-
> >>>  8 files changed, 102 insertions(+), 4 deletions(-)
> >>>  create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-cputopology-nvcpu-mismatch.xml
> >>>  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_capabilities.c b/src/bhyve/bhyve_capabilities.c
> >>> index e13085b1d5..a3229cea75 100644
> >>> --- a/src/bhyve/bhyve_capabilities.c
> >>> +++ b/src/bhyve/bhyve_capabilities.c
> >>> @@ -227,7 +227,7 @@ bhyveProbeCapsDeviceHelper(unsigned int *caps,
> >>>  }
> >>>  
> >>>  static int
> >>> -bhyveProbeCapsRTC_UTC(unsigned int *caps, char *binary)
> >>> +bhyveProbeCapsFromHelp(unsigned int *caps, char *binary)
> >>
> >> Could have made this a separate just a name change patch
> >>
> >>>  {
> >>>      char *help;
> >>>      virCommandPtr cmd = NULL;
> >>> @@ -244,6 +244,9 @@ bhyveProbeCapsRTC_UTC(unsigned int *caps, char *binary)
> >>>      if (strstr(help, "-u:") != NULL)
> >>>          *caps |= BHYVE_CAP_RTC_UTC;
> >>>  
> >>> +    if (strstr(help, "sockets=n][,cores=n][,threads=n") != NULL)
> >>> +        *caps |= BHYVE_CAP_CPUTOPOLOGY;
> >>> +
> >>
> >> I assume no concerns w/ i18n?  That is the help is always in English?
> > 
> > Yeah, there's no i18n for bhyve.
> > 
> >> It's really a shame there's no other way to determine other than help
> >> scraping. Other options would be the lack of "-c vcpus" in the output or
> >> finding topology... Avoids using that long exact string.
> > 
> > What is the issue with the long exact string? I guess it's worse
> > performance-wise, but probably not that critical compared to running the
> > bhyve binary... OTOH, checking it this way seems to be more
> > straightforward.
> > 
> 
> Fear of someone changing "something" in the string and that causing
> problems. No one ever changes those strings though, right?  ;-)  The -c:
> string text changed for that particular patch from " -c: # cpus (default
> 1)\n" to "-c: number of cpus and/or topology specification", so relying
> on the current string never to change is a risk.  In the long run IDC
> and it's not the time for length of compare - just the risk of change.
> Your call.

Yes, I guess your suggestion to check absence "-c vcpus" is less error
prone for small formatting changes / extensions of the '-c' switch.

I've changed this check accordingly, and re-rolled commits to look like
1. function rename 2. topology support + driver page update 3. news
update.

I plan to push it today without sending out v3.

Thanks

> John
> 
> >> Things seem find otherwise,
> >>
> >> Reviewed-by: John Ferlan <jferlan@redhat.com>
> >>
> >> John
> >>
> >> [...]
> >>
> > 
> > Roman Bogorodskiy
> > 

Roman Bogorodskiy
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list