[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] xl mem-max error
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): /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. Potential solutions: 1. Set b_info->video_memkb = 0; for pv guest. 2. Set LIBXL_MEMKB_DEFAULT = 0 (instead of -1): this will affect a lot things. 3. Also add LIBXL_MAXMEM_CONSTANT before doing comparison. (we should avoid this as we want to remove LIBXL_MAXMEM_CONSTANT) Thanks, Zhigang _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |