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

Re: [Xen-devel] xl mem-max error



On Mon, 2014-11-17 at 15:03 -0500, Zhigang Wang wrote:
> On 11/12/2014 07:03 AM, Ian Campbell wrote:
> > On Mon, 2014-11-10 at 10:38 -0500, Zhigang Wang wrote:
> >> OK. Let me try my best:
> >>
> >>>>> I'm confused by the description of what's going on, in particular the
> >>>>> mixing of mem-max commands and target xenstore nodes (since the former
> >>>>> doesn't really affect the latter).
> >>>>>
> >>>>> How was the domain started (memory= and maxmem=).
> >>
> >> xl create with 'memory = 700', no maxmem been set. I think it means maxmem 
> >> = memory for this case.
> >>
> >>>>> What were static-max and target at the point?
> >>
> >>      /local/domain/3/memory/static-max = "716800"
> >>      /local/domain/3/memory/target = "716801"
> >>
> >>>>> What did they change to when xl mem-max was issued? 
> >>
> >> When I issue 'xl mem-max <domid> 700', static-max and target in xenstore 
> >> will not change, but it will cause the command to fail.
> >>
> >> Because: "libxl: error: libxl.c:4549:libxl_domain_setmaxmem: 
> >> memory_static_max must be greater than or or equal to memory_dynamic_max"
> >>
> >>>>> What did you expect them to change to instead?
> >>
> >> I expect I can set the maxmem to the same value I initially set (700).
> > 
> > OK, thanks, got it. I think the use of xl mem-max is a bit of a
> > red-herring, the issue here is that static-max < target at start of day.
> > 
> > I suspect there is either a rounding error somewhere or because of
> > LIBXL_MAXMEM_CONSTANT being inconsistently applied to the two values
> > somewhere along the line.
> > 
> > We had been planning[0] to remove this early in the 4.5 cycle, but as
> > ever it never floated to the top of anyone's list. For 4.5 we should
> > probably look at applying this fudge more consistently.
> > 
> > Ian.
> > 
> > [0] http://bugs.xenproject.org/xen/bug/23
> 
> Here is more info (correct me if something wrong):
> 
> 1. libxl_types.idl:
> 
>     ("video_memkb", MemKB)
> 
>     MemKB = UInt(64, init_val = "LIBXL_MEMKB_DEFAULT", json_gen_fn = 
> "libxl__uint64_gen_json")
> 
>   libxl.h: #define LIBXL_MEMKB_DEFAULT ~0ULL
> 
>   So video_memkb = -1 by default.
> 
> 2. For hvm, we will set it into: 0, 16M, 8M according to hvm.vga.kind 
> (libxl_create.c)
> 
> 3. For pv guest, we will use default (-1).
> 
> 4. When we calculate static-max and target memory:
> 
>     ents[0] = "memory/static-max";
>     ents[1] = GCSPRINTF("%"PRId64, info->max_memkb);
>     ents[2] = "memory/target";
>     ents[3] = GCSPRINTF("%"PRId64, info->target_memkb - info->video_memkb);
> 
>   So target = static-max - (-1):

Aha, well spotted!
   
>       /local/domain/3/memory/static-max = "716800"
>       /local/domain/3/memory/target = "716801"
> 
>   Maybe this is the root cause why we include LIBXL_MAXMEM_CONSTANT.

I don't think so, LIBXL_MAXMEM_CONSTANT is the result of some
not-well-understood folklore which predates libxl entirely.

> 
> Potential solutions:
> 
> 1. Set b_info->video_memkb = 0; for pv guest.

We should do this one, in the libxl_domain_build_info_setdefault
function.

> 2. Set LIBXL_MEMKB_DEFAULT = 0 (instead of -1): this will affect a lot things.

Yeah, we can't do that since it would disallow setting certain kinds of
memory to 0, which can make sense.

> 3. Also add LIBXL_MAXMEM_CONSTANT before doing comparison. (we should avoid 
> this as we want to remove LIBXL_MAXMEM_CONSTANT)

Agreed, lets not to this.

Ian.


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

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