test_driver: Introduce testIOThreadInfo and generate IOThread infos

Introduce testIOThreadInfo to store IOThread infos: iothread_id,
poll_max_ns, poll_grow and poll_shrink for future usage.

Add an example of IOThread configuration to testdomfc4.xml, we also want
to generate default testIOThreadInfo for the IOThread configured in the
xml, so introduce testDomainGenerateIOThreadInfos, the values are taken
from QEMU.

Signed-off-by: Luke Yue <lukedyue@gmail.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
Luke Yue 2021-09-15 23:30:23 +08:00 committed by Michal Privoznik
parent cb3033776f
commit 6650d14f6c
2 changed files with 42 additions and 0 deletions

View File

@ -11,6 +11,11 @@
<memory>261072</memory> <memory>261072</memory>
<currentMemory>131072</currentMemory> <currentMemory>131072</currentMemory>
<vcpu>1</vcpu> <vcpu>1</vcpu>
<iothreads>2</iothreads>
<iothreadids>
<iothread id="2"/>
<iothread id="4"/>
</iothreadids>
<devices> <devices>
<disk type='file'> <disk type='file'>
<source file='/u/fc4.img'/> <source file='/u/fc4.img'/>

View File

@ -183,6 +183,14 @@ struct _testDomainNamespaceDef {
xmlNodePtr *snap_nodes; xmlNodePtr *snap_nodes;
}; };
typedef struct _testIOThreadInfo testIOThreadInfo;
struct _testIOThreadInfo {
unsigned int iothread_id;
unsigned long long poll_max_ns;
unsigned int poll_grow;
unsigned int poll_shrink;
};
static void static void
testDomainDefNamespaceFree(void *data) testDomainDefNamespaceFree(void *data)
{ {
@ -381,6 +389,9 @@ struct _testDomainObjPrivate {
/* used by get/set time APIs */ /* used by get/set time APIs */
long long seconds; long long seconds;
unsigned int nseconds; unsigned int nseconds;
/* used by IOThread APIs */
GArray *iothreads;
}; };
@ -397,6 +408,8 @@ testDomainObjPrivateAlloc(void *opaque)
priv->seconds = 627319920; priv->seconds = 627319920;
priv->nseconds = 0; priv->nseconds = 0;
priv->iothreads = g_array_new(FALSE, FALSE, sizeof(testIOThreadInfo));
return priv; return priv;
} }
@ -427,6 +440,8 @@ static void
testDomainObjPrivateFree(void *data) testDomainObjPrivateFree(void *data)
{ {
testDomainObjPrivate *priv = data; testDomainObjPrivate *priv = data;
g_array_free(priv->iothreads, TRUE);
g_free(priv); g_free(priv);
} }
@ -696,6 +711,26 @@ testDomainGenerateIfnames(virDomainDef *domdef)
return 0; return 0;
} }
static void
testDomainGenerateIOThreadInfos(virDomainObj *obj)
{
size_t i;
testDomainObjPrivate *priv;
if (!obj->def->iothreadids || !obj->def->niothreadids)
return;
priv = obj->privateData;
for (i = 0; i < obj->def->niothreadids; i++) {
testIOThreadInfo iothread;
iothread.iothread_id = obj->def->iothreadids[i]->iothread_id;
iothread.poll_max_ns = 32768;
iothread.poll_grow = 0;
iothread.poll_shrink = 0;
g_array_append_val(priv->iothreads, iothread);
}
}
static void static void
testDomainShutdownState(virDomainPtr domain, testDomainShutdownState(virDomainPtr domain,
@ -1045,6 +1080,8 @@ testParseDomains(testDriver *privconn,
testDomainObjCheckTaint(obj); testDomainObjCheckTaint(obj);
testDomainGenerateIOThreadInfos(obj);
virDomainObjEndAPI(&obj); virDomainObjEndAPI(&obj);
} }