
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.