lkml.org 
[lkml]   [2009]   [Nov]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3/4] vmscan: move PGDEACTIVATE modification to shrink_active_list()
    Date
    Pgmoved accounting in move_active_pages_to_lru() doesn't make any sense.
    it can be calculated in irq enabled area.

    This patch move #-of-deactivating-pages calcution to shrink_active_list().
    Fortunatelly, it also kill one branch.

    Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
    ---
    mm/vmscan.c | 18 ++++++++++++------
    1 files changed, 12 insertions(+), 6 deletions(-)

    diff --git a/mm/vmscan.c b/mm/vmscan.c
    index 7e0245d..56faefb 100644
    --- a/mm/vmscan.c
    +++ b/mm/vmscan.c
    @@ -167,6 +167,11 @@ static inline enum lru_list lru_index(int active, int file)
    return lru;
    }

    +static inline int lru_stat_index(int active, int file)
    +{
    + return lru_index(active, file) + NR_LRU_BASE;
    +}
    +
    /*
    * Add a shrinker callback to be called from the vm
    */
    @@ -1269,7 +1274,6 @@ static void move_active_pages_to_lru(struct zone *zone,
    struct list_head *list,
    enum lru_list lru)
    {
    - unsigned long pgmoved = 0;
    struct pagevec pvec;
    struct page *page;

    @@ -1283,7 +1287,6 @@ static void move_active_pages_to_lru(struct zone *zone,

    list_move(&page->lru, &zone->lru[lru].list);
    mem_cgroup_add_lru_list(page, lru);
    - pgmoved++;

    if (!pagevec_add(&pvec, page) || list_empty(list)) {
    spin_unlock_irq(&zone->lru_lock);
    @@ -1293,9 +1296,6 @@ static void move_active_pages_to_lru(struct zone *zone,
    spin_lock_irq(&zone->lru_lock);
    }
    }
    - __mod_zone_page_state(zone, NR_LRU_BASE + lru, pgmoved);
    - if (!is_active_lru(lru))
    - __count_vm_events(PGDEACTIVATE, pgmoved);
    }

    static void shrink_active_list(unsigned long nr_pages, struct zone *zone,
    @@ -1310,6 +1310,8 @@ static void shrink_active_list(unsigned long nr_pages, struct zone *zone,
    struct page *page;
    struct zone_reclaim_stat *reclaim_stat = get_reclaim_stat(zone, sc);
    unsigned long nr_rotated = 0;
    + unsigned long nr_deactivated = 0;
    + unsigned long nr_reactivated = 0;

    lru_add_drain();
    spin_lock_irq(&zone->lru_lock);
    @@ -1358,12 +1360,14 @@ static void shrink_active_list(unsigned long nr_pages, struct zone *zone,
    */
    if ((vm_flags & VM_EXEC) && page_is_file_cache(page)) {
    list_add(&page->lru, &l_active);
    + nr_reactivated++;
    continue;
    }
    }

    ClearPageActive(page); /* we are de-activating */
    list_add(&page->lru, &l_inactive);
    + nr_deactivated++;
    }

    /*
    @@ -1377,9 +1381,11 @@ static void shrink_active_list(unsigned long nr_pages, struct zone *zone,
    * get_scan_ratio.
    */
    reclaim_stat->recent_rotated[file] += nr_rotated;
    -
    move_active_pages_to_lru(zone, &l_active, lru_index(1, file));
    move_active_pages_to_lru(zone, &l_inactive, lru_index(0, file));
    + __count_vm_events(PGDEACTIVATE, nr_deactivated);
    + __mod_zone_page_state(zone, lru_stat_index(1, file), nr_reactivated);
    + __mod_zone_page_state(zone, lru_stat_index(0, file), nr_deactivated);
    __mod_zone_page_state(zone, NR_ISOLATED_ANON + file, -nr_taken);
    spin_unlock_irq(&zone->lru_lock);
    }
    --
    1.6.5.2




    \
     
     \ /
      Last update: 2009-11-27 01:21    [W:4.122 / U:0.248 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site