On Tue, 30 Oct 2007 16:54:36 -0400 Daniel Veillard wrote:
Okay sorry it took so long, I got distrated by something else and
I wanted to come back with a more complete patch for the following:
- make sure that cpu expressions coming from the user are reparsed
and translated to ranges to make sure we don't have a mismatch between
the external representations and what is accepted both by libvirt
and xend
- Saving the pinning in the XML makes things really complex.
alls the XML dump routines of xend assume an SExpr input but
the affinity is not available there. Querying xend may be very costly
and it way better to ask at the xen_unified level where the hypervisor
hypercall will be used if available
- as a result I removed the DumpXML entry point from xen_unified because
you need to extend parameters in the xend case
- also when coming from the proxy you just have the domain id and
it's harder to get the cpu list in an efficient way without
messing even more with the code
I still think CPU affinity in the domain is misplaced, but well, okay
I agree to do this for real cpus, this complicates the code a bit though.
The associated patch compiles, but I have not yet tested it, it's
basically how I would expect to finish the NUMA work, but it certainly need
debug and testing. I will look at this tomorrow, but I welcome feedback :-)
sounds good to me, I tested with your patch, and I have four fixes for it.
This is a test I did :
[on RHEL5.1]
---------------------------------------------------------------
dumpxml (conf -> XML) state:inactive ...(1) and (2)
(SExpr -> XML) state:active
define (XML -> conf)
create (XML -> SExpr)
start (conf -> XML -> SExpr)
[on fedora8]
---------------------------------------------------------------
dumpxml (SExpr -> XML) state:inactive (cannot get by Xen) ...(3)
(SExpr -> XML) state:active (get by Xen) ...(3)
define (XML -> SExpr)
create (XML -> SExpr)
start (nothing translation)
(1) numa6_fix1.patch
I cannot run the dumpxml command with inactive domain on RHEL5.1.
So, I added the check of domain ID and xendConfigVersion.
(2) numa6_fix2.patch
The discontinuous number is invalid for inactive domain on RHEL5.1.
I guess the cause is wrong argument is specified as maxcpu.
(e.g.)
- normal case
conf : cpus = "0,1"
dumpxml: <vcpu cpuset='0,1'>4</vcpu>
- invalid case
conf : cpus = "0,3"
dumpxml: <vcpu cpuset='0'>4</vcpu>
(3) numa6_fix3.patch
The expression is different between inactive domain and active domain,
when I don't have vcpu setting for the domain (i.e. "any cpu" is pinned).
inactive domain : <vcpu cpuset=''>2</vcpu>
active domain : <vcpu>2</vcpu>
So, I conform to the expression of active domain.
(4) numa6_fix4.patch
The expression is different between "xm vcpu-list" and "virsh
dumpxml",
when I specified continuous number.
(e.g.)
# xm vcpu-list 200
Name ID VCPUs CPU State Time(s) CPU Affinity
test 200 0 1 -b- 10.9 0-1
test 200 1 0 -b- 9.1 0-1
test 200 2 4 -b- 3.1 3-4
test 200 3 5 -b- 3.9 5-6
# ./virsh dumpxml 200| grep cpu
<vcpu cpuset='0,1,3-6'>4</vcpu>
So, I change the expression from "," to "-"(range) that I can use to
create the domain.
(e.g.)
# ./virsh dumpxml 200| grep cpu
<vcpu cpuset='0-1,3-6'>4</vcpu>
Regards,
Saori.