Thread (21 messages) 21 messages, 5 authors, 2011-02-18

Re: [PATCH v5 1/4] deactivate invalidated pages

From: Hiroyuki Kamezawa <hidden>
Date: 2011-02-18 04:18:40
Also in: lkml

2011/2/18 Minchan Kim [off-list ref]:
quoted hunk ↗ jump to hunk
On Fri, Feb 18, 2011 at 12:50 AM, KAMEZAWA Hiroyuki
[off-list ref] wrote:
quoted
On Fri, 18 Feb 2011 00:08:19 +0900
Minchan Kim [off-list ref] wrote:
quoted
Recently, there are reported problem about thrashing.
(http://marc.info/?l=rsync&m=128885034930933&w=2)
It happens by backup workloads(ex, nightly rsync).
That's because the workload makes just use-once pages
and touches pages twice. It promotes the page into
active list so that it results in working set page eviction.

Some app developer want to support POSIX_FADV_NOREUSE.
But other OSes don't support it, either.
(http://marc.info/?l=linux-mm&m=128928979512086&w=2)

By other approach, app developers use POSIX_FADV_DONTNEED.
But it has a problem. If kernel meets page is writing
during invalidate_mapping_pages, it can't work.
It makes for application programmer to use it since they always
have to sync data before calling fadivse(..POSIX_FADV_DONTNEED) to
make sure the pages could be discardable. At last, they can't use
deferred write of kernel so that they could see performance loss.
(http://insights.oetiker.ch/linux/fadvise.html)

In fact, invalidation is very big hint to reclaimer.
It means we don't use the page any more. So let's move
the writing page into inactive list's head if we can't truncate
it right now.

Why I move page to head of lru on this patch, Dirty/Writeback page
would be flushed sooner or later. It can prevent writeout of pageout
which is less effective than flusher's writeout.

Originally, I reused lru_demote of Peter with some change so added
his Signed-off-by.

Reported-by: Ben Gamari <redacted>
Signed-off-by: Minchan Kim <redacted>
Signed-off-by: Peter Zijlstra <peterz@infradead.org>
Acked-by: Rik van Riel <redacted>
Acked-by: Mel Gorman <redacted>
Reviewed-by: KOSAKI Motohiro <redacted>
Cc: Wu Fengguang <redacted>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Nick Piggin <redacted>
Signed-off-by: Minchan Kim <redacted>

Reviewed-by: KAMEZAWA Hiroyuki <redacted>

One question is ....it seems there is no flush() code for percpu pagevec
in this patch. Is it safe against cpu hot plug ?

And from memory hot unplug point of view, I'm grad if pagevec for this
is flushed at the same time as when we clear other per-cpu lru pagevecs.
(And compaction will be affected by the page_count() magic by pagevec
 which is flushed only when FADVISE is called.)

Could you add add-on patches for flushing and hooks ?
Isn't it enough in my patch? If I miss your point, Could you elaborate please?

 * Drain pages out of the cpu's pagevecs.
 * Either "cpu" is the current CPU, and preemption has already been
 * disabled; or "cpu" is being hot-unplugged, and is already dead.
@@ -372,6 +427,29 @@ static void drain_cpu_pagevecs(int cpu)
              pagevec_move_tail(pvec);
              local_irq_restore(flags);
      }
+
+       pvec = &per_cpu(lru_deactivate_pvecs, cpu);
+       if (pagevec_count(pvec))
+               ____pagevec_lru_deactivate(pvec);
+}
I'm sorry that I missed this line. It seems I was wrong.

Regards,
-Kame

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help