lkml.org 
[lkml]   [2011]   [Sep]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH] xen: Fix selfballooning and ensure it doesn't go too far
    [PATCH] xen: Fix selfballooning and ensure it doesn't go too far

    The balloon driver's "current_pages" is very different from
    totalram_pages. Self-ballooning needs to be driven by
    the latter. Also, Committed_AS doesn't account for pages
    used by the kernel so enforce a floor for when there
    are little or no user-space threads using memory.

    Signed-off-by: Dan Magenheimer <dan.magenheimer@oracle.com>

    diff --git a/drivers/xen/xen-selfballoon.c b/drivers/xen/xen-selfballoon.c
    index 6ea852e..e3e48f1 100644
    --- a/drivers/xen/xen-selfballoon.c
    +++ b/drivers/xen/xen-selfballoon.c
    @@ -195,14 +195,13 @@ __setup("selfballooning", xen_selfballooning_setup);
    */
    static void selfballoon_process(struct work_struct *work)
    {
    - unsigned long cur_pages, goal_pages, tgt_pages;
    + unsigned long cur_pages, goal_pages, tgt_pages, floor_pages;
    bool reset_timer = false;

    if (xen_selfballooning_enabled) {
    - cur_pages = balloon_stats.current_pages;
    + cur_pages = totalram_pages;
    tgt_pages = cur_pages; /* default is no change */
    - goal_pages = percpu_counter_read_positive(&vm_committed_as) +
    - balloon_stats.current_pages - totalram_pages;
    + goal_pages = percpu_counter_read_positive(&vm_committed_as);
    #ifdef CONFIG_FRONTSWAP
    /* allow space for frontswap pages to be repatriated */
    if (frontswap_selfshrinking && frontswap_enabled)
    @@ -217,7 +216,13 @@ static void selfballoon_process(struct work_struct *work)
    ((goal_pages - cur_pages) /
    selfballoon_uphysteresis);
    /* else if cur_pages == goal_pages, no change */
    - balloon_set_new_target(tgt_pages);
    + floor_pages = totalreserve_pages +
    + (roundup_pow_of_two(max_pfn) >> 5);
    + /* don't balloon too far, lest OOMs occur... */
    + if (tgt_pages < floor_pages)
    + tgt_pages = floor_pages;
    + balloon_set_new_target(tgt_pages +
    + balloon_stats.current_pages - totalram_pages);
    reset_timer = true;
    }
    #ifdef CONFIG_FRONTSWAP

    \
     
     \ /
      Last update: 2011-09-24 23:01    [W:0.028 / U:0.320 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site