lkml.org 
[lkml]   [2009]   [May]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 1/7] lowmemorykiller: Only iterate over process list when needed.
    From: Arve Hjønnevåg <arve@android.com>

    Use NR_ACTIVE plus NR_INACTIVE as a size estimate for our fake cache
    instead the sum of rss. Neither method is accurate.

    Also skip the process scan, if the amount of memory available is above
    the largest threshold set.

    Signed-off-by: Arve Hjønnevåg <arve@android.com>
    ---
    drivers/staging/android/lowmemorykiller.c | 35 +++++++++++++++++-----------
    1 files changed, 21 insertions(+), 14 deletions(-)

    diff --git a/drivers/staging/android/lowmemorykiller.c b/drivers/staging/android/lowmemorykiller.c
    --- a/drivers/staging/android/lowmemorykiller.c
    +++ b/drivers/staging/android/lowmemorykiller.c
    @@ -71,23 +71,30 @@ static int lowmem_shrink(int nr_to_scan, gfp_t gfp_mask)
    }
    if(nr_to_scan > 0)
    lowmem_print(3, "lowmem_shrink %d, %x, ofree %d, ma %d\n", nr_to_scan, gfp_mask, other_free, min_adj);
    + rem = global_page_state(NR_ACTIVE) + global_page_state(NR_INACTIVE);
    + if (nr_to_scan <= 0 || min_adj == OOM_ADJUST_MAX + 1) {
    + lowmem_print(5, "lowmem_shrink %d, %x, return %d\n", nr_to_scan, gfp_mask, rem);
    + return rem;
    + }
    +
    read_lock(&tasklist_lock);
    for_each_process(p) {
    - if(p->oomkilladj >= 0 && p->mm) {
    - tasksize = get_mm_rss(p->mm);
    - if(nr_to_scan > 0 && tasksize > 0 && p->oomkilladj >= min_adj) {
    - if(selected == NULL ||
    - p->oomkilladj > selected->oomkilladj ||
    - (p->oomkilladj == selected->oomkilladj &&
    - tasksize > selected_tasksize)) {
    - selected = p;
    - selected_tasksize = tasksize;
    - lowmem_print(2, "select %d (%s), adj %d, size %d, to kill\n",
    - p->pid, p->comm, p->oomkilladj, tasksize);
    - }
    - }
    - rem += tasksize;
    + if (p->oomkilladj < min_adj || !p->mm)
    + continue;
    + tasksize = get_mm_rss(p->mm);
    + if (tasksize <= 0)
    + continue;
    + if (selected) {
    + if (p->oomkilladj < selected->oomkilladj)
    + continue;
    + if (p->oomkilladj == selected->oomkilladj &&
    + tasksize <= selected_tasksize)
    + continue;
    }
    + selected = p;
    + selected_tasksize = tasksize;
    + lowmem_print(2, "select %d (%s), adj %d, size %d, to kill\n",
    + p->pid, p->comm, p->oomkilladj, tasksize);
    }
    if(selected != NULL) {
    lowmem_print(1, "send sigkill to %d (%s), adj %d, size %d\n",
    \
     
     \ /
      Last update: 2009-05-05 02:29    [W:0.025 / U:96.428 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site