mirror of https://gitee.com/openkylin/libvirt.git
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>
|
||||
</dd>
|
||||
|
||||
<dt><code>vcpusched</code> and <code>iothreadsched</code></dt>
|
||||
<dt><code>vcpusched</code>, <code>iothreadsched</code>
|
||||
and <code>emulatorsched</code></dt>
|
||||
<dd>
|
||||
The optional <code>vcpusched</code> and <code>iothreadsched</code>
|
||||
elements specify the scheduler type
|
||||
The optional
|
||||
<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>,
|
||||
<code>rr</code>) for particular vCPU and IOThread threads respecively.
|
||||
The attributes <code>vcpus</code> and <code>iothreads</code> select
|
||||
<code>rr</code>) for particular vCPU, IOThread and emulator threads
|
||||
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
|
||||
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
|
||||
domain. Valid <code>iothreads</code> values are described in
|
||||
the <code>iothreadids</code>
|
||||
|
@ -958,6 +962,7 @@
|
|||
well (and is ignored for non-real-time ones). The value range
|
||||
for the priority depends on the host kernel (usually 1-99).
|
||||
<span class="since">Since 1.2.13</span>
|
||||
<code>emulatorsched</code> <span class="since">since 5.3.0</span>
|
||||
</dd>
|
||||
|
||||
<dt><code>cachetune</code><span class="since">Since 4.1.0</span></dt>
|
||||
|
|
|
@ -967,6 +967,11 @@
|
|||
<ref name="schedparam"/>
|
||||
</element>
|
||||
</zeroOrMore>
|
||||
<optional>
|
||||
<element name="emulatorsched">
|
||||
<ref name="schedparam"/>
|
||||
</element>
|
||||
</optional>
|
||||
<zeroOrMore>
|
||||
<element name="cachetune">
|
||||
<attribute name="vcpus">
|
||||
|
|
|
@ -3396,6 +3396,7 @@ void virDomainDefFree(virDomainDefPtr def)
|
|||
virDomainIOThreadIDDefArrayFree(def->iothreadids, def->niothreadids);
|
||||
|
||||
virBitmapFree(def->cputune.emulatorpin);
|
||||
VIR_FREE(def->cputune.emulatorsched);
|
||||
|
||||
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
|
||||
virDomainSchedulerParse(xmlNodePtr node,
|
||||
const char *name,
|
||||
|
@ -19913,6 +19933,25 @@ virDomainDefParseXML(xmlDocPtr xml,
|
|||
}
|
||||
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) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
_("cannot extract cachetune nodes"));
|
||||
|
@ -27490,6 +27529,11 @@ virDomainCputuneDefFormat(virBufferPtr buf,
|
|||
VIR_FREE(cpumask);
|
||||
}
|
||||
|
||||
if (def->cputune.emulatorsched) {
|
||||
virDomainSchedulerFormat(&childrenBuf, "emulator",
|
||||
def->cputune.emulatorsched, 0, false);
|
||||
}
|
||||
|
||||
for (i = 0; i < def->maxvcpus; i++) {
|
||||
virDomainSchedulerFormat(&childrenBuf, "vcpu",
|
||||
&def->vcpus[i]->sched, i, true);
|
||||
|
|
|
@ -2159,6 +2159,7 @@ struct _virDomainCputune {
|
|||
unsigned long long iothread_period;
|
||||
long long iothread_quota;
|
||||
virBitmapPtr emulatorpin;
|
||||
virDomainThreadSchedParamPtr emulatorsched;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -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>
|
|
@ -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_DIFFERENT("cputune");
|
||||
|
||||
virObjectUnref(caps);
|
||||
virObjectUnref(xmlopt);
|
||||
|
||||
|
|
Loading…
Reference in New Issue