RE: [Xen-changelog] This patch does 2 jobs:

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

RE: [Xen-changelog] This patch does 2 jobs:

Ian Pratt
 
Hi, I have a couple of suggestions for improving this patch, please see
in-line text.

Thanks,
Ian

> -----Original Message-----
> From: [hidden email]
> [mailto:[hidden email]] On Behalf
> Of Xen patchbot -unstable
> Sent: 29 July 2005 11:36
> To: [hidden email]
> Subject: [Xen-changelog] This patch does 2 jobs:
>
> # HG changeset patch
> # User [hidden email]
> # Node ID 2c0036a1cf4f6c7fc164c837f4c8daf58af1acba
> # Parent  52260d8c27754a54c636bc73483f51e189281ff7
> This patch does 2 jobs:
>
> - Enforce the number of CPUs dom0 will take. See the new
> variable "dom0-cpus" in xend-config.sxp (you will want to set
> this variable to
> 1 on SMP systems)
>
> - Balloon out dom0 memory when creating domU, if there is not
> enough free memory. The lowest level we will balloon out is
> configured via the new variable "dom0-min-mem" in xend-config.sxp
>
>
> I still have a doubt: where to put the code to enforce
> dom0-cpus. At the moment I put it into
> python/xen/xend/server/SrvDaemon.py, and hopefully that is
> resonable enough. Any comment?
>  
> Signed-off-by: Nguyen Anh Quynh <[hidden email]>
> diff -r 52260d8c2775 -r 2c0036a1cf4f tools/python/xen/xend/XendRoot.py
> --- a/tools/python/xen/xend/XendRoot.py Fri Jul 29 10:36:11 2005
> +++ b/tools/python/xen/xend/XendRoot.py Fri Jul 29 10:36:53 2005
> @@ -75,6 +75,10 @@
>  
>      """Default port xend serves consoles at. """
>      console_port_base_default = '9600'
> +
> +    dom0_min_mem_default = '0'
> +
> +    dom0_cpus_default = '0'

Let's also add something to the default xend-config.sxp such that:

dom0_min_mem = 80MB # don't let dom0 go below 80MB
dom0_cpus = 1 # give up all but 1 CPU
 
We should also provide an xm command for setting dom0_min_mem.

> +def _enforce_dom0_cpus():
> +    dn = xroot.get_dom0_cpus()
> +
> +    for d in glob.glob("/sys/devices/system/cpu/cpu*"):
> +        cpu = int(os.path.basename(d)[3:])
> +        if (dn == 0) or (cpu < dn):
> +            v = "1"
> +        else:
> +            v = "0"
> +        try:
> +            f = open("%s/online" %d, "r+")
> +            c = f.read(1)
> +            if (c != v):
> +                if v == "0":
> +                    log.info("dom0 is trying to give back
> cpu %d", cpu)
> +                else:
> +                    log.info("dom0 is trying to take cpu %d", cpu)
> +                f.seek(0)
> +                f.write(v)
> +                f.close()
> +                log.info("dom0 successfully enforced cpu %d", cpu)
> +            else:
> +                f.close()
> +        except:
> +            pass

I'm not sure its ever a good idea to try taking a CPU in xend startup.
It may be offline for a reason e.g. its broken! Let's just give them
back.

> +def balloon_out(dom0_min_mem, opts):
> +    """Balloon out to get memory for domU, if necessarily"""
> +    SLACK = 4
> +
> +    xc = xen.lowlevel.xc.new()
> +    pinfo = xc.physinfo()
> +    free_mem = pinfo['free_pages']/256
> +    if free_mem < opts.vals.memory + SLACK:
> +        need_mem = opts.vals.memory + SLACK - free_mem
> +        cur_alloc = get_dom0_alloc()
> +        if cur_alloc - need_mem >= dom0_min_mem:
> +            server.xend_domain_mem_target_set(0, cur_alloc -
> need_mem)
> +    del xc

I think this needs to be wait in a loop testing the amount of free
memory, with a timeout. It's going to take the dom0 balloon driver some
time to react. After changing the target we should sleep for 100ms, and
re-test to see how much is free, exiting the loop if there's sufficent
memory (+slack) for the new domain. If after e.g. 10s there's still not
enough memory, exit anyway and let the memory allocation fail.

I'd be grateful if you could write a follow up patch.

Thanks,
Ian

> +
>  def main(argv):
>      opts = gopts
>      args = opts.parse(argv)
> @@ -671,6 +705,10 @@
>      if opts.vals.dryrun:
>          PrettyPrint.prettyprint(config)
>      else:
> +        dom0_min_mem = xroot.get_dom0_min_mem()
> +        if dom0_min_mem != 0:
> +            balloon_out(dom0_min_mem, opts)
> +


_______________________________________________
Xen-devel mailing list
[hidden email]
http://lists.xensource.com/xen-devel
Reply | Threaded
Open this post in threaded view
|

Re: [Xen-changelog] This patch does 2 jobs:

Nguyen Anh Quynh
On 8/4/05, Ian Pratt <[hidden email]> wrote:
>
> Hi, I have a couple of suggestions for improving this patch, please see
> in-line text.

so we will temporarily remove the part "enforce the dom0 cpus"?

i will make a patch and submit soon.

regards,
aq

_______________________________________________
Xen-devel mailing list
[hidden email]
http://lists.xensource.com/xen-devel
Reply | Threaded
Open this post in threaded view
|

RE: [Xen-changelog] This patch does 2 jobs:

Ian Pratt
In reply to this post by Ian Pratt
 > On 8/4/05, Ian Pratt <[hidden email]> wrote:
> >
> > Hi, I have a couple of suggestions for improving this patch, please
> > see in-line text.
>
> so we will temporarily remove the part "enforce the dom0 cpus"?

No, we still want to hand back CPUs so that we end up with N running, we
just don't want to turn on CPUs that have been turned off.

Thanks,
Ian

> i will make a patch and submit soon.
>
> regards,
> aq
>

_______________________________________________
Xen-devel mailing list
[hidden email]
http://lists.xensource.com/xen-devel