mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 13:45:38 +00:00
conf: Add support for emulatorsched
Signed-off-by: Martin Kletzander <mkletzan@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
c79a39e60c
commit
842bc56ad2
@ -938,15 +938,19 @@
|
|||||||
<span class="since">Only QEMU driver support since 2.1.0</span>
|
<span class="since">Only QEMU driver support since 2.1.0</span>
|
||||||
</dd>
|
</dd>
|
||||||
|
|
||||||
<dt><code>vcpusched</code> and <code>iothreadsched</code></dt>
|
<dt><code>vcpusched</code>, <code>iothreadsched</code>
|
||||||
|
and <code>emulatorsched</code></dt>
|
||||||
<dd>
|
<dd>
|
||||||
The optional <code>vcpusched</code> and <code>iothreadsched</code>
|
The optional
|
||||||
elements specify the scheduler type
|
<code>vcpusched</code>, <code>iothreadsched</code>
|
||||||
|
and <code>emulatorsched</code> elements specify the scheduler type
|
||||||
(values <code>batch</code>, <code>idle</code>, <code>fifo</code>,
|
(values <code>batch</code>, <code>idle</code>, <code>fifo</code>,
|
||||||
<code>rr</code>) for particular vCPU and IOThread threads respecively.
|
<code>rr</code>) for particular vCPU, IOThread and emulator threads
|
||||||
The attributes <code>vcpus</code> and <code>iothreads</code> select
|
respecively. For <code>vcpusched</code> and <code>iothreadsched</code>
|
||||||
|
the attributes <code>vcpus</code> and <code>iothreads</code> select
|
||||||
which vCPUs/IOThreads this setting applies to, leaving them out sets the
|
which vCPUs/IOThreads this setting applies to, leaving them out sets the
|
||||||
default. Valid <code>vcpus</code> values start at 0 through one less
|
default. The element <code>emulatorsched</code> does not have that
|
||||||
|
attribute. Valid <code>vcpus</code> values start at 0 through one less
|
||||||
than the number of vCPU's defined for the
|
than the number of vCPU's defined for the
|
||||||
domain. Valid <code>iothreads</code> values are described in
|
domain. Valid <code>iothreads</code> values are described in
|
||||||
the <code>iothreadids</code>
|
the <code>iothreadids</code>
|
||||||
@ -958,6 +962,7 @@
|
|||||||
well (and is ignored for non-real-time ones). The value range
|
well (and is ignored for non-real-time ones). The value range
|
||||||
for the priority depends on the host kernel (usually 1-99).
|
for the priority depends on the host kernel (usually 1-99).
|
||||||
<span class="since">Since 1.2.13</span>
|
<span class="since">Since 1.2.13</span>
|
||||||
|
<code>emulatorsched</code> <span class="since">since 5.3.0</span>
|
||||||
</dd>
|
</dd>
|
||||||
|
|
||||||
<dt><code>cachetune</code><span class="since">Since 4.1.0</span></dt>
|
<dt><code>cachetune</code><span class="since">Since 4.1.0</span></dt>
|
||||||
|
@ -967,6 +967,11 @@
|
|||||||
<ref name="schedparam"/>
|
<ref name="schedparam"/>
|
||||||
</element>
|
</element>
|
||||||
</zeroOrMore>
|
</zeroOrMore>
|
||||||
|
<optional>
|
||||||
|
<element name="emulatorsched">
|
||||||
|
<ref name="schedparam"/>
|
||||||
|
</element>
|
||||||
|
</optional>
|
||||||
<zeroOrMore>
|
<zeroOrMore>
|
||||||
<element name="cachetune">
|
<element name="cachetune">
|
||||||
<attribute name="vcpus">
|
<attribute name="vcpus">
|
||||||
|
@ -3396,6 +3396,7 @@ void virDomainDefFree(virDomainDefPtr def)
|
|||||||
virDomainIOThreadIDDefArrayFree(def->iothreadids, def->niothreadids);
|
virDomainIOThreadIDDefArrayFree(def->iothreadids, def->niothreadids);
|
||||||
|
|
||||||
virBitmapFree(def->cputune.emulatorpin);
|
virBitmapFree(def->cputune.emulatorpin);
|
||||||
|
VIR_FREE(def->cputune.emulatorsched);
|
||||||
|
|
||||||
virDomainNumaFree(def->numa);
|
virDomainNumaFree(def->numa);
|
||||||
|
|
||||||
@ -18483,6 +18484,25 @@ virDomainSchedulerParseCommonAttrs(xmlNodePtr node,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
virDomainEmulatorSchedParse(xmlNodePtr node,
|
||||||
|
virDomainDefPtr def)
|
||||||
|
{
|
||||||
|
VIR_AUTOFREE(virDomainThreadSchedParamPtr) sched = NULL;
|
||||||
|
|
||||||
|
if (VIR_ALLOC(sched) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (virDomainSchedulerParseCommonAttrs(node,
|
||||||
|
&sched->policy,
|
||||||
|
&sched->priority) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
VIR_STEAL_PTR(def->cputune.emulatorsched, sched);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static virBitmapPtr
|
static virBitmapPtr
|
||||||
virDomainSchedulerParse(xmlNodePtr node,
|
virDomainSchedulerParse(xmlNodePtr node,
|
||||||
const char *name,
|
const char *name,
|
||||||
@ -19913,6 +19933,25 @@ virDomainDefParseXML(xmlDocPtr xml,
|
|||||||
}
|
}
|
||||||
VIR_FREE(nodes);
|
VIR_FREE(nodes);
|
||||||
|
|
||||||
|
if ((n = virXPathNodeSet("./cputune/emulatorsched", ctxt, &nodes)) < 0) {
|
||||||
|
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||||
|
_("cannot extract emulatorsched nodes"));
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (n) {
|
||||||
|
if (n > 1) {
|
||||||
|
virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||||
|
_("only one emulatorsched is supported"));
|
||||||
|
VIR_FREE(nodes);
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (virDomainEmulatorSchedParse(nodes[0], def) < 0)
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
VIR_FREE(nodes);
|
||||||
|
|
||||||
if ((n = virXPathNodeSet("./cputune/cachetune", ctxt, &nodes)) < 0) {
|
if ((n = virXPathNodeSet("./cputune/cachetune", ctxt, &nodes)) < 0) {
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||||
_("cannot extract cachetune nodes"));
|
_("cannot extract cachetune nodes"));
|
||||||
@ -27490,6 +27529,11 @@ virDomainCputuneDefFormat(virBufferPtr buf,
|
|||||||
VIR_FREE(cpumask);
|
VIR_FREE(cpumask);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (def->cputune.emulatorsched) {
|
||||||
|
virDomainSchedulerFormat(&childrenBuf, "emulator",
|
||||||
|
def->cputune.emulatorsched, 0, false);
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < def->maxvcpus; i++) {
|
for (i = 0; i < def->maxvcpus; i++) {
|
||||||
virDomainSchedulerFormat(&childrenBuf, "vcpu",
|
virDomainSchedulerFormat(&childrenBuf, "vcpu",
|
||||||
&def->vcpus[i]->sched, i, true);
|
&def->vcpus[i]->sched, i, true);
|
||||||
|
@ -2159,6 +2159,7 @@ struct _virDomainCputune {
|
|||||||
unsigned long long iothread_period;
|
unsigned long long iothread_period;
|
||||||
long long iothread_quota;
|
long long iothread_quota;
|
||||||
virBitmapPtr emulatorpin;
|
virBitmapPtr emulatorpin;
|
||||||
|
virDomainThreadSchedParamPtr emulatorsched;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
37
tests/genericxml2xmlindata/cputune.xml
Normal file
37
tests/genericxml2xmlindata/cputune.xml
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
<domain type='qemu'>
|
||||||
|
<name>QEMUGuest1</name>
|
||||||
|
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||||
|
<memory unit='KiB'>219100</memory>
|
||||||
|
<currentMemory unit='KiB'>219100</currentMemory>
|
||||||
|
<vcpu placement='static'>4</vcpu>
|
||||||
|
<iothreads>4</iothreads>
|
||||||
|
<cputune>
|
||||||
|
<shares>2048</shares>
|
||||||
|
<period>1000000</period>
|
||||||
|
<quota>-1</quota>
|
||||||
|
<vcpupin vcpu='0' cpuset='0'/>
|
||||||
|
<vcpupin vcpu='1' cpuset='1'/>
|
||||||
|
<emulatorpin cpuset='1'/>
|
||||||
|
<emulatorsched scheduler='fifo' priority='2'/>
|
||||||
|
<vcpusched vcpus='0-1' scheduler='fifo' priority='1'/>
|
||||||
|
<vcpusched vcpus='1-3,^1' scheduler='idle'/>
|
||||||
|
<iothreadsched iothreads='1,3' scheduler='batch'/>
|
||||||
|
<iothreadsched iothreads='2' scheduler='rr' priority='99'/>
|
||||||
|
</cputune>
|
||||||
|
<os>
|
||||||
|
<type arch='x86_64' machine='q35'>hvm</type>
|
||||||
|
<boot dev='hd'/>
|
||||||
|
</os>
|
||||||
|
<features>
|
||||||
|
<smm state='on'>
|
||||||
|
<tseg unit='MiB'>48</tseg>
|
||||||
|
</smm>
|
||||||
|
</features>
|
||||||
|
<clock offset='utc'/>
|
||||||
|
<on_poweroff>destroy</on_poweroff>
|
||||||
|
<on_reboot>restart</on_reboot>
|
||||||
|
<on_crash>destroy</on_crash>
|
||||||
|
<devices>
|
||||||
|
<emulator>/usr/bin/qemu-system-x86_64</emulator>
|
||||||
|
</devices>
|
||||||
|
</domain>
|
40
tests/genericxml2xmloutdata/cputune.xml
Normal file
40
tests/genericxml2xmloutdata/cputune.xml
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<domain type='qemu'>
|
||||||
|
<name>QEMUGuest1</name>
|
||||||
|
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||||
|
<memory unit='KiB'>219100</memory>
|
||||||
|
<currentMemory unit='KiB'>219100</currentMemory>
|
||||||
|
<vcpu placement='static'>4</vcpu>
|
||||||
|
<iothreads>4</iothreads>
|
||||||
|
<cputune>
|
||||||
|
<shares>2048</shares>
|
||||||
|
<period>1000000</period>
|
||||||
|
<quota>-1</quota>
|
||||||
|
<vcpupin vcpu='0' cpuset='0'/>
|
||||||
|
<vcpupin vcpu='1' cpuset='1'/>
|
||||||
|
<emulatorpin cpuset='1'/>
|
||||||
|
<emulatorsched scheduler='fifo' priority='2'/>
|
||||||
|
<vcpusched vcpus='0' scheduler='fifo' priority='1'/>
|
||||||
|
<vcpusched vcpus='1' scheduler='fifo' priority='1'/>
|
||||||
|
<vcpusched vcpus='2' scheduler='idle'/>
|
||||||
|
<vcpusched vcpus='3' scheduler='idle'/>
|
||||||
|
<iothreadsched iothreads='1' scheduler='batch'/>
|
||||||
|
<iothreadsched iothreads='2' scheduler='rr' priority='99'/>
|
||||||
|
<iothreadsched iothreads='3' scheduler='batch'/>
|
||||||
|
</cputune>
|
||||||
|
<os>
|
||||||
|
<type arch='x86_64' machine='q35'>hvm</type>
|
||||||
|
<boot dev='hd'/>
|
||||||
|
</os>
|
||||||
|
<features>
|
||||||
|
<smm state='on'>
|
||||||
|
<tseg unit='MiB'>48</tseg>
|
||||||
|
</smm>
|
||||||
|
</features>
|
||||||
|
<clock offset='utc'/>
|
||||||
|
<on_poweroff>destroy</on_poweroff>
|
||||||
|
<on_reboot>restart</on_reboot>
|
||||||
|
<on_crash>destroy</on_crash>
|
||||||
|
<devices>
|
||||||
|
<emulator>/usr/bin/qemu-system-x86_64</emulator>
|
||||||
|
</devices>
|
||||||
|
</domain>
|
@ -149,6 +149,8 @@ mymain(void)
|
|||||||
|
|
||||||
DO_TEST("launch-security-sev");
|
DO_TEST("launch-security-sev");
|
||||||
|
|
||||||
|
DO_TEST_DIFFERENT("cputune");
|
||||||
|
|
||||||
virObjectUnref(caps);
|
virObjectUnref(caps);
|
||||||
virObjectUnref(xmlopt);
|
virObjectUnref(xmlopt);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user