From: Andrew Morton <akpm@linux-foundation.org>
To: Fabian Frederick <fabf@skynet.be>
Cc: linux-kernel <linux-kernel@vger.kernel.org>,
Tejun Heo <tj@kernel.org>,
Anton Vorontsov <anton.vorontsov@linaro.org>
Subject: Re: [PATCH 1/1] MM: make vmpressure_win dynamic
Date: Mon, 28 Apr 2014 14:10:25 -0700 [thread overview]
Message-ID: <20140428141025.e8f7604535b4d840a6eeacea@linux-foundation.org> (raw)
In-Reply-To: <20140428222521.29a711c33e720ff5e2c00e2d@skynet.be>
On Mon, 28 Apr 2014 22:25:21 +0200 Fabian Frederick <fabf@skynet.be> wrote:
> Initialize vmpressure_win in vmstat using
> calculate_normal_threshold() based on each zone/cpu * SWAP_CLUSTER_SIZE
>
> Value refreshed through cpu notifier
Anton wrote vmpressure so please let's cc him. `git blame' is useful
for working out who to cc.
What were the reasons for this change? Any testing results?
> --- a/mm/vmstat.c
> +++ b/mm/vmstat.c
> @@ -23,6 +23,23 @@
>
> #include "internal.h"
>
> +/*
> + * The window size (vmpressure_win) is the number of scanned pages before
> + * we try to analyze scanned/reclaimed ratio. So the window is used as a
> + * rate-limit tunable for the "low" level notification, and also for
> + * averaging the ratio for medium/critical levels. Using small window
> + * sizes can cause lot of false positives, but too big window size will
> + * delay the notifications.
> + *
> + * As the vmscan reclaimer logic works with chunks which are multiple of
> + * SWAP_CLUSTER_MAX, it makes sense to use it for the window size as well.
> + *
> + */
> +#ifdef CONFIG_MEMCG
> +static DEFINE_SPINLOCK(vmpressure_win_lock);
> +unsigned long vmpressure_win __read_mostly = SWAP_CLUSTER_MAX * 16;
> +#endif
> +
> #ifdef CONFIG_VM_EVENT_COUNTERS
> DEFINE_PER_CPU(struct vm_event_state, vm_event_states) = {{0}};
> EXPORT_PER_CPU_SYMBOL(vm_event_states);
> @@ -163,11 +180,13 @@ void refresh_zone_stat_thresholds(void)
> struct zone *zone;
> int cpu;
> int threshold;
> + unsigned long new_vmpressure_win = 0;
>
> for_each_populated_zone(zone) {
> unsigned long max_drift, tolerate_drift;
>
> threshold = calculate_normal_threshold(zone);
> + new_vmpressure_win += threshold;
>
> for_each_online_cpu(cpu)
> per_cpu_ptr(zone->pageset, cpu)->stat_threshold
> @@ -184,6 +203,11 @@ void refresh_zone_stat_thresholds(void)
> zone->percpu_drift_mark = high_wmark_pages(zone) +
> max_drift;
> }
> +#ifdef CONFIG_MEMCG
> + spin_lock(&vmpressure_win_lock);
> + vmpressure_win = new_vmpressure_win * SWAP_CLUSTER_MAX;
> + spin_unlock(&vmpressure_win_lock);
> +#endif
> }
I don't think we need the spinlock really. It's a ulong - concurrent
readers will see either the old value or the new one whether or not the
writer took that lock.
If we're going to modify this thing on the fly then we probably should
expose the current value to userspace in some fashion.
next prev parent reply other threads:[~2014-04-28 21:10 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-28 20:25 Fabian Frederick
2014-04-28 21:10 ` Andrew Morton [this message]
2014-04-28 21:21 ` Fabian Frederick
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140428141025.e8f7604535b4d840a6eeacea@linux-foundation.org \
--to=akpm@linux-foundation.org \
--cc=anton.vorontsov@linaro.org \
--cc=fabf@skynet.be \
--cc=linux-kernel@vger.kernel.org \
--cc=tj@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®