lkml.org 
[lkml]   [2008]   [Jun]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [RFC 5/5] Memory controller soft limit reclaim on contention
    KOSAKI Motohiro wrote:
    > Hi
    >
    > this code survive stress testing?
    >
    >
    >> + while (count-- &&
    >> + ((mem = heap_delete_max(&mem_cgroup_heap)) != NULL)) {
    >> + BUG_ON(!mem->on_heap);
    >> + spin_unlock_irqrestore(&mem_cgroup_heap_lock, flags);
    >> + nr_reclaimed += try_to_free_mem_cgroup_pages(mem,
    >> + gfp_mask);
    >> + cond_resched();
    >> + spin_lock_irqsave(&mem_cgroup_heap_lock, flags);
    >> + mem->on_heap = 0;
    >> + /*
    >> + * What should be the basis of breaking out?
    >> + */
    >> + if (nr_reclaimed)
    >> + goto done;
    >
    > doubtful shortcut.
    > we shouldn't assume we need only one page.
    >

    There's a comment on top -- what should be the basis of breaking out? It
    definitely needs refinement, the current solution seemed to be working, so I
    kept it.

    >
    >
    >> #endif /* _LINUX_MEMCONTROL_H */
    >> diff -puN mm/vmscan.c~memory-controller-soft-limit-reclaim-on-contention mm/vmscan.c
    >> diff -puN mm/page_alloc.c~memory-controller-soft-limit-reclaim-on-contention mm/page_alloc.c
    >> --- linux-2.6.26-rc5/mm/page_alloc.c~memory-controller-soft-limit-reclaim-on-contention 2008-06-27 20:43:10.000000000 +0530
    >> +++ linux-2.6.26-rc5-balbir/mm/page_alloc.c 2008-06-27 20:43:10.000000000 +0530
    >> @@ -1669,7 +1669,14 @@ nofail_alloc:
    >> reclaim_state.reclaimed_slab = 0;
    >> p->reclaim_state = &reclaim_state;
    >>
    >> - did_some_progress = try_to_free_pages(zonelist, order, gfp_mask);
    >> + /*
    >> + * First try to reclaim from memory control groups that have
    >> + * exceeded their soft limit
    >> + */
    >> + did_some_progress = mem_cgroup_reclaim_on_contention(gfp_mask);
    >> + if (!did_some_progress)
    >> + did_some_progress = try_to_free_pages(zonelist, order,
    >> + gfp_mask);
    >
    > try_to_free_mem_cgroup_pages() assume memcg need only one page.
    > but this code break it.
    >
    > if anyone need several continuous memory, mem_cgroup_reclaim_on_contention() reclaim
    > one or a very few page and return >0, then cause page allocation failure.
    >
    > shouldn't we extend try_to_free_mem_cgroup_pages() agruments?
    >
    >
    > in addition, if we don't assume try_to_free_mem_cgroup_pages() need one page,
    > we should implement lumpy reclaim to mem_cgroup_isolate_pages().
    > otherwise, cpu wasting significant increase.

    The memory controller currently controls just *user* pages, which are all of
    order 1. Since pages are faulted in at different times, lumpy reclaim was not
    the highest priority for the memory controller. NOTE: the pages are duplicated
    on the per-zone LRU, so lumpy reclaim from there should work just fine.

    --
    Warm Regards,
    Balbir Singh
    Linux Technology Center
    IBM, ISTL


    \
     
     \ /
      Last update: 2008-06-30 09:51    [W:0.034 / U:31.496 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site