lkml.org 
[lkml]   [2012]   [Feb]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 4/9] memcg: dirty page accounting support routines
    On Tue, 28 Feb 2012 22:00:26 +0800
    Fengguang Wu <fengguang.wu@intel.com> wrote:

    > From: Greg Thelen <gthelen@google.com>
    >
    > Added memcg dirty page accounting support routines. These routines are
    > used by later changes to provide memcg aware writeback and dirty page
    > limiting. A mem_cgroup_dirty_info() tracepoint is is also included to
    > allow for easier understanding of memcg writeback operation.
    >
    > ...
    >
    > +/*
    > + * Return the number of additional pages that the @memcg cgroup could allocate.
    > + * If use_hierarchy is set, then this involves checking parent mem cgroups to
    > + * find the cgroup with the smallest free space.
    > + */

    Comment needs revisting - use_hierarchy does not exist.

    > +static unsigned long
    > +mem_cgroup_hierarchical_free_pages(struct mem_cgroup *memcg)
    > +{
    > + u64 free;
    > + unsigned long min_free;
    > +
    > + min_free = global_page_state(NR_FREE_PAGES);
    > +
    > + while (memcg) {
    > + free = mem_cgroup_margin(memcg);
    > + min_free = min_t(u64, min_free, free);
    > + memcg = parent_mem_cgroup(memcg);
    > + }
    > +
    > + return min_free;
    > +}
    > +
    > +/*
    > + * mem_cgroup_page_stat() - get memory cgroup file cache statistics
    > + * @memcg: memory cgroup to query
    > + * @item: memory statistic item exported to the kernel
    > + *
    > + * Return the accounted statistic value.
    > + */
    > +unsigned long mem_cgroup_page_stat(struct mem_cgroup *memcg,
    > + enum mem_cgroup_page_stat_item item)
    > +{
    > + struct mem_cgroup *iter;
    > + s64 value;
    > +
    > + /*
    > + * If we're looking for dirtyable pages we need to evaluate free pages
    > + * depending on the limit and usage of the parents first of all.
    > + */
    > + if (item == MEMCG_NR_DIRTYABLE_PAGES)
    > + value = mem_cgroup_hierarchical_free_pages(memcg);
    > + else
    > + value = 0;
    > +
    > + /*
    > + * Recursively evaluate page statistics against all cgroup under
    > + * hierarchy tree
    > + */
    > + for_each_mem_cgroup_tree(iter, memcg)
    > + value += mem_cgroup_local_page_stat(iter, item);

    What's the locking rule for for_each_mem_cgroup_tree()? It's unobvious
    from the code and isn't documented?

    > + /*
    > + * Summing of unlocked per-cpu counters is racy and may yield a slightly
    > + * negative value. Zero is the only sensible value in such cases.
    > + */
    > + if (unlikely(value < 0))
    > + value = 0;
    > +
    > + return value;
    > +}
    > +
    >
    > ...
    >


    \
     
     \ /
      Last update: 2012-02-28 23:47    [W:0.024 / U:94.268 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site