linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Minchan Kim <minchan@kernel.org>
To: Anton Vorontsov <anton.vorontsov@linaro.org>
Cc: Pekka Enberg <penberg@kernel.org>,
	KOSAKI Motohiro <kosaki.motohiro@gmail.com>,
	Leonid Moiseichuk <leonid.moiseichuk@nokia.com>,
	John Stultz <john.stultz@linaro.org>,
	linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	linaro-kernel@lists.linaro.org, patches@linaro.org,
	kernel-team@android.com
Subject: Re: [PATCH 0/5] Some vmevent fixes...
Date: Fri, 08 Jun 2012 17:43:21 +0900	[thread overview]
Message-ID: <4FD1BB29.1050805@kernel.org> (raw)
In-Reply-To: <20120608074906.GA27095@lizard>

On 06/08/2012 04:49 PM, Anton Vorontsov wrote:

> On Thu, Jun 07, 2012 at 11:41:27AM +0900, Minchan Kim wrote:
> [...]
>> How about this?
> 
> So, basically this is just another shrinker callback (well, it's
> very close to), but only triggered after some magic index crosses
> a threshold.
> 
> Some information beforehand: current ALMK is broken in the regard
> that it does not do what it is supposed to do according to its
> documentation. It uses shrinker notifiers (alike to your code), but
> kernel calls shrinker when there is already pressure on the memory,
> and ALMK's original idea was to start killing processes when there
> is [yet] no pressure at all, so ALMK was supposed to act in advance,
> e.g. "kill unneeded apps when there's say 64 MB free memory left,
> irrespective of the current pressure". ALMK doesn't do this
> currently, it only reacts to the shrinker.


When I hear your information, I feel it's a problem is in VM.
VM's goal is to use available memory enough while it can reclaim used
page as soon as possible so that user program should not feel big latency
if there are enough easy reclaimable pages in VM.

So, when reclaim start firstly, maybe there are lots of reclaimable pages
in VM so it can be reclaimed easily. Nontheless, if you feel it's very slow,
in principle, it's a VM's problem. But I don't have been heard such latency
complain from desktop people once there are lots of reclaimable pages.\

I admit there is big latency if we have lots of dirty pages while clean pages are
almost out and backed devices are very slow which is known problem and several
mm guys still have tried to solve it. 

I admit you can argue what's the reclaimable pages easily.
Normally, we can order it following as.

1. non-mapped clean cache page
2. mapped-clean cache page
3. non-mapped dirty cache page
4. mapped dirty cache page
5. anon pages, tmpfs/shmem pages.

So I want to make math by those and VM's additional information and user can configure
weight because in some crazy system, swapout which is backed by SSD can be faster than
dirty file page flush which is backed very slow rotation device.

And we can improve it by adding new LRU list - CFLRU[1] which would be good for swap in embedded device, too.
If clean LRU is about to be short, it's a good indication on latency so we can trigger notification or start vmevent timer.

[1] http://staff.ustc.edu.cn/~jpq/paper/flash/2006-CASES-CFLRU-%20A%20Replacement%20Algorithm%20for%20Flash%20Memory.pdf

> 
> So, the solution would be then two-fold:
> 
> 1. Use your memory pressure notifications. They must be quite fast when
>    we starting to feel the high pressure. (I see the you use
>    zone_page_state() and friends, which is vm_stat, and it is updated


VM has other information like nr_reclaimed, nr_scanned, nr_congested, recent_scanned,
recent_rotated, too. I hope we can make math by them and improve as we improve
VM reclaimer.

>    very infrequently, but to get accurate notification we have to
>    update it much more frequently, but this is very expensive. So
>    KOSAKI and Christoph will complain. :-)


Reclaimer already have used that and if we need accuracy, we handled it
like zone_watermark_ok_safe. If it's very inaccurate, VM should be fixed, too.

> 2. Plus use deferred timers to monitor /proc/vmstat, we don't have to
>    be fast here. But I see Pekka and Leonid don't like it already,
>    so we're stuck.
> 
> Thanks,


>>
>> -- 
>> Kind regards,
>> Minchan Kim
> 



-- 
Kind regards,
Minchan Kim

  reply	other threads:[~2012-06-08  8:43 UTC|newest]

Thread overview: 94+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-05-01 13:24 [PATCH 0/3] vmevent: Implement 'low memory' attribute Anton Vorontsov
2012-05-01 13:25 ` [PATCH 1/3] vmevent: Implement equal-to attribute state Anton Vorontsov
2012-05-01 13:25 ` [PATCH 2/3] vmevent: Pass attr argument to sampling functions Anton Vorontsov
2012-05-01 13:26 ` [PATCH 3/3] vmevent: Implement special low-memory attribute Anton Vorontsov
2012-05-03 10:33   ` Pekka Enberg
2012-05-04  4:26   ` Minchan Kim
2012-05-04  7:38     ` Anton Vorontsov
2012-05-07  7:14       ` Pekka Enberg
2012-05-07  8:26         ` KOSAKI Motohiro
2012-05-07 12:15           ` Anton Vorontsov
2012-05-07 19:19             ` KOSAKI Motohiro
2012-05-08  0:31               ` Anton Vorontsov
2012-05-08  5:20               ` Pekka Enberg
2012-05-08  5:42                 ` KOSAKI Motohiro
2012-05-08  5:53                   ` Pekka Enberg
2012-05-08  7:11                     ` KOSAKI Motohiro
2012-05-08  7:36                       ` Pekka Enberg
2012-05-08  7:50                         ` KOSAKI Motohiro
2012-05-08  8:03                           ` Pekka Enberg
2012-05-08  9:15                             ` leonid.moiseichuk
2012-05-08  9:19                               ` Pekka Enberg
2012-05-08 10:38                                 ` leonid.moiseichuk
2012-06-01 12:21                         ` [PATCH 0/5] Some vmevent fixes Anton Vorontsov
2012-06-01 12:24                           ` [PATCH 1/5] vmstat: Implement refresh_vm_stats() Anton Vorontsov
2012-06-05 14:30                             ` Christoph Lameter
2012-06-08  3:17                             ` KOSAKI Motohiro
2012-06-01 12:24                           ` [PATCH 2/5] vmevent: Convert from deferred timer to deferred work Anton Vorontsov
2012-06-08  3:25                             ` KOSAKI Motohiro
2012-06-08  6:58                               ` Anton Vorontsov
2012-06-08  7:03                                 ` Pekka Enberg
2012-06-08  8:07                                   ` Anton Vorontsov
2012-06-08  7:05                                 ` leonid.moiseichuk
2012-06-08  7:10                                   ` KOSAKI Motohiro
2012-06-08  7:18                                     ` leonid.moiseichuk
2012-06-08  7:23                                       ` KOSAKI Motohiro
2012-06-08  7:28                                         ` leonid.moiseichuk
2012-06-08  7:33                                           ` KOSAKI Motohiro
2012-06-08  7:49                                             ` leonid.moiseichuk
2012-06-08  7:58                                   ` Anton Vorontsov
2012-06-08  8:16                                     ` leonid.moiseichuk
2012-06-08  8:41                                       ` Anton Vorontsov
2012-06-08  8:57                                         ` leonid.moiseichuk
2012-06-08 10:35                                           ` Anton Vorontsov
2012-06-08 11:03                                             ` leonid.moiseichuk
2012-06-08 12:13                                               ` Anton Vorontsov
2012-06-08 12:25                                                 ` leonid.moiseichuk
2012-06-01 12:24                           ` [PATCH 3/5] vmevent: Refresh vmstats before sampling Anton Vorontsov
2012-06-05 14:36                             ` Christoph Lameter
2012-06-01 12:24                           ` [PATCH 4/5] vmevent: Hide meaningful names from the user-visible header Anton Vorontsov
2012-06-01 12:24                           ` [PATCH 5/5] vmevent: Rename one-shot mode to edge trigger mode Anton Vorontsov
2012-06-03 18:26                           ` [PATCH 0/5] Some vmevent fixes Pekka Enberg
2012-06-04  8:45                             ` Minchan Kim
2012-06-04  9:20                               ` Pekka Enberg
2012-06-04 12:23                                 ` Minchan Kim
2012-06-04 11:38                               ` Anton Vorontsov
2012-06-04 12:17                                 ` Minchan Kim
2012-06-04 13:35                                   ` Anton Vorontsov
2012-06-05  7:53                                     ` Pekka Enberg
2012-06-05  8:00                                       ` Minchan Kim
2012-06-05  8:01                                         ` Pekka Enberg
2012-06-05  8:16                                           ` leonid.moiseichuk
2012-06-05  8:27                                             ` Minchan Kim
2012-06-08  3:35                                             ` KOSAKI Motohiro
2012-06-04 20:05                                 ` KOSAKI Motohiro
2012-06-04 22:39                                   ` Anton Vorontsov
2012-06-08  3:45                                     ` KOSAKI Motohiro
2012-06-08  6:57                                       ` Pekka Enberg
2012-06-05  7:47                                   ` Pekka Enberg
2012-06-05  8:39                                     ` Anton Vorontsov
2012-06-07  2:41                                       ` Minchan Kim
2012-06-08  7:49                                         ` Anton Vorontsov
2012-06-08  8:43                                           ` Minchan Kim [this message]
2012-06-08  8:48                                             ` Pekka Enberg
2012-06-08  9:12                                               ` leonid.moiseichuk
2012-06-08  9:45                                                 ` Anton Vorontsov
2012-06-08 10:42                                                   ` Minchan Kim
2012-06-08 11:14                                                     ` Anton Vorontsov
2012-06-11  4:50                                                       ` Minchan Kim
2012-06-05  7:52                                   ` Pekka Enberg
2012-06-08  3:55                                     ` KOSAKI Motohiro
2012-06-08  6:54                                       ` Pekka Enberg
2012-06-08  6:57                                         ` KOSAKI Motohiro
2012-06-08  6:59                                           ` Pekka Enberg
2012-06-04 19:50                               ` KOSAKI Motohiro
2012-05-08  8:32                       ` [PATCH 3/3] vmevent: Implement special low-memory attribute Minchan Kim
2012-05-08  9:27                         ` Pekka Enberg
2012-06-05 14:40                       ` Christoph Lameter
2012-05-08  6:58                   ` Anton Vorontsov
2012-05-08  7:16                     ` KOSAKI Motohiro
2012-05-08  8:13                       ` Anton Vorontsov
2012-05-08  8:21                         ` Anton Vorontsov
2012-05-03  8:10 ` [PATCH 0/3] vmevent: Implement 'low memory' attribute Pekka Enberg
2012-05-03  9:44   ` Anton Vorontsov
2012-05-03 10:54 ` Pekka Enberg

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=4FD1BB29.1050805@kernel.org \
    --to=minchan@kernel.org \
    --cc=anton.vorontsov@linaro.org \
    --cc=john.stultz@linaro.org \
    --cc=kernel-team@android.com \
    --cc=kosaki.motohiro@gmail.com \
    --cc=leonid.moiseichuk@nokia.com \
    --cc=linaro-kernel@lists.linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=patches@linaro.org \
    --cc=penberg@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;
as well as URLs for NNTP newsgroup(s).