[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


  • To: "aq" <aquynh@xxxxxxxxx>, <xen-devel@xxxxxxxxxxxxxxxxxxx>
  • From: "Ian Pratt" <m+Ian.Pratt@xxxxxxxxxxxx>
  • Date: Thu, 4 Aug 2005 01:05:02 +0100
  • Delivery-date: Thu, 04 Aug 2005 00:03:28 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>
  • Thread-index: AcWUKcbrrqLnI+e3R4mfoG9R9bAmagEXO3Kg
  • Thread-topic: [Xen-changelog] This patch does 2 jobs:

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

Thanks,
Ian

> -----Original Message-----
> From: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx 
> [mailto:xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx] On Behalf 
> Of Xen patchbot -unstable
> Sent: 29 July 2005 11:36
> To: xen-changelog@xxxxxxxxxxxxxxxxxxx
> Subject: [Xen-changelog] This patch does 2 jobs:
> 
> # HG changeset patch
> # User kaf24@xxxxxxxxxxxxxxxxxxxx
> # 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 <aquynh@xxxxxxxxx>
> 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
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.