lkml.org 
[lkml]   [2009]   [Dec]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4/4] memcg: add anon_scan_ratio to memory.stat file
    Date
    anon_scan_ratio feature doesn't only useful for global VM pressure
    analysis, but it also useful for memcg memroy pressure analysis.

    Then, this patch add anon_scan_ratio field to memory.stat file too.

    Instead, following debug statistics was removed. It isn't so user and/or
    developer friendly.

    - recent_rotated_anon
    - recent_rotated_file
    - recent_scanned_anon
    - recent_scanned_file

    This removing don't cause ABI issue. because it was enclosed
    CONFIG_DEBUG_VM.

    Cc: Balbir Singh <balbir@linux.vnet.ibm.com>
    Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Signed-off-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
    ---
    mm/memcontrol.c | 43 +++++++++++++++++++------------------------
    1 files changed, 19 insertions(+), 24 deletions(-)

    diff --git a/mm/memcontrol.c b/mm/memcontrol.c
    index 325df12..daa027c 100644
    --- a/mm/memcontrol.c
    +++ b/mm/memcontrol.c
    @@ -2950,6 +2950,9 @@ static int mem_control_stat_show(struct cgroup *cont, struct cftype *cft,
    {
    struct mem_cgroup *mem_cont = mem_cgroup_from_cont(cont);
    struct mcs_total_stat mystat;
    + struct zone *zone;
    + unsigned long total_anon = 0;
    + unsigned long total_scan_anon = 0;
    int i;

    memset(&mystat, 0, sizeof(mystat));
    @@ -2978,34 +2981,26 @@ static int mem_control_stat_show(struct cgroup *cont, struct cftype *cft,
    cb->fill(cb, memcg_stat_strings[i].total_name, mystat.stat[i]);
    }

    -#ifdef CONFIG_DEBUG_VM
    cb->fill(cb, "inactive_ratio", calc_inactive_ratio(mem_cont, NULL));

    - {
    - int nid, zid;
    + for_each_populated_zone(zone) {
    + int nid = zone->zone_pgdat->node_id;
    + int zid = zone_idx(zone);
    struct mem_cgroup_per_zone *mz;
    - unsigned long recent_rotated[2] = {0, 0};
    - unsigned long recent_scanned[2] = {0, 0};
    -
    - for_each_online_node(nid)
    - for (zid = 0; zid < MAX_NR_ZONES; zid++) {
    - mz = mem_cgroup_zoneinfo(mem_cont, nid, zid);
    -
    - recent_rotated[0] +=
    - mz->reclaim_stat.recent_rotated[0];
    - recent_rotated[1] +=
    - mz->reclaim_stat.recent_rotated[1];
    - recent_scanned[0] +=
    - mz->reclaim_stat.recent_scanned[0];
    - recent_scanned[1] +=
    - mz->reclaim_stat.recent_scanned[1];
    - }
    - cb->fill(cb, "recent_rotated_anon", recent_rotated[0]);
    - cb->fill(cb, "recent_rotated_file", recent_rotated[1]);
    - cb->fill(cb, "recent_scanned_anon", recent_scanned[0]);
    - cb->fill(cb, "recent_scanned_file", recent_scanned[1]);
    + unsigned long anon;
    + unsigned long ratio;
    +
    + mz = mem_cgroup_zoneinfo(mem_cont, nid, zid);
    +
    + anon = MEM_CGROUP_ZSTAT(mz, LRU_INACTIVE_ANON);
    + anon += MEM_CGROUP_ZSTAT(mz, LRU_ACTIVE_ANON);
    +
    + ratio = get_anon_scan_ratio(zone, mem_cont, mem_cont->swappiness);
    +
    + total_anon += anon;
    + total_scan_anon += anon * ratio;
    }
    -#endif
    + cb->fill(cb, "anon_scan_ratio", total_scan_anon / total_anon);

    return 0;
    }
    --
    1.6.5.2




    \
     
     \ /
      Last update: 2009-12-28 08:51    [W:0.026 / U:30.928 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site