linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Marcelo Tosatti <marcelo@conectiva.com.br>
To: Andrea Arcangeli <andrea@suse.de>
Cc: Linus Torvalds <torvalds@transmeta.com>,
	Ingo Molnar <mingo@elte.hu>, Rik van Riel <riel@conectiva.com.br>,
	Roger Larsson <roger.larsson@norran.net>,
	MM mailing list <linux-mm@kvack.org>,
	linux-kernel@vger.kernel.org
Subject: Re: [patch] vmfixes-2.4.0-test9-B2
Date: Sun, 24 Sep 2000 23:39:13 -0300 (BRT)	[thread overview]
Message-ID: <Pine.LNX.4.21.0009242306220.2029-200000@freak.distro.conectiva> (raw)
In-Reply-To: <20000925034551.C10381@athlon.random>

[-- Attachment #1: Type: TEXT/PLAIN, Size: 1326 bytes --]


On Mon, 25 Sep 2000, Andrea Arcangeli wrote:

<snip>

> kmem_cache_reap shrinks the slabs at _very_ low frequency. It's worthless to
> keep lots of dentries and icache into the slab internal queues until
> kmem_cache_reap kicks in again, if we free them such memory immediatly instead
> we'll run kmem_cache_reap later and for something more appropraite for what's
> been designed. The [id]cache shrink could release lots of memory.

I see.

Since we have code which is using GFP_BUFFER allocations to not block but
only shrink the cache (1), I've done a patch to:

- Change kmem_cache_shrink to return the number of freed pages. 

- Move __GFP_IO checking from do_try_to_free_pages/refill_inactive to
{i,d}cache shrink functions (Linus already did this in his tree)

- On the {i,d}cache shrink functions, return the value of
kmem_cache_shrink() (no need of __GFP_IO for that)


There was a comment on the shrink functions about making
kmem_cache_shrink() work on a GFP_DMA/GFP_HIGHMEM basis to free only the
wanted pages by the current allocation. 

GFP_DMA allocations will never reach this code (do_try_to_free_pages is
only called if __GFP_WAIT is set) and GFP_HIGHMEM pages will never be used
as SLAB obj's memory. (please correct me if I'm wrong)


Comments?


(1) Using GPF_BUFFER is wrong, but its a separate issue. 

[-- Attachment #2: Type: TEXT/PLAIN, Size: 4122 bytes --]

diff --exclude-from=exclude -Nur linux.orig/fs/dcache.c linux/fs/dcache.c
--- linux.orig/fs/dcache.c	Sun Sep 24 18:14:24 2000
+++ linux/fs/dcache.c	Sun Sep 24 22:49:16 2000
@@ -556,15 +556,11 @@
 	int count = 0;
 	if (priority)
 		count = dentry_stat.nr_unused / priority;
-	prune_dcache(count);
-	/* FIXME: kmem_cache_shrink here should tell us
-	   the number of pages freed, and it should
-	   work in a __GFP_DMA/__GFP_HIGHMEM behaviour
-	   to free only the interesting pages in
-	   function of the needs of the current allocation. */
-	kmem_cache_shrink(dentry_cache);
 
-	return 0;
+	if(gfp_mask & __GFP_IO)
+		prune_dcache(count);
+
+	return kmem_cache_shrink(dentry_cache);
 }
 
 #define NAME_ALLOC_LEN(len)	((len+16) & ~15)
diff --exclude-from=exclude -Nur linux.orig/fs/inode.c linux/fs/inode.c
--- linux.orig/fs/inode.c	Sun Sep 24 18:14:25 2000
+++ linux/fs/inode.c	Sun Sep 24 22:47:30 2000
@@ -460,15 +460,11 @@
 		
 	if (priority)
 		count = inodes_stat.nr_unused / priority;
-	prune_icache(count);
-	/* FIXME: kmem_cache_shrink here should tell us
-	   the number of pages freed, and it should
-	   work in a __GFP_DMA/__GFP_HIGHMEM behaviour
-	   to free only the interesting pages in
-	   function of the needs of the current allocation. */
-	kmem_cache_shrink(inode_cachep);
 
-	return 0;
+	if(gfp_mask & __GFP_IO) 
+		prune_icache(count);
+
+	return kmem_cache_shrink(inode_cachep);
 }
 
 /*
diff --exclude-from=exclude -Nur linux.orig/mm/slab.c linux/mm/slab.c
--- linux.orig/mm/slab.c	Sun Sep 24 18:14:04 2000
+++ linux/mm/slab.c	Sun Sep 24 22:46:11 2000
@@ -887,7 +887,7 @@
 static int __kmem_cache_shrink(kmem_cache_t *cachep)
 {
 	slab_t *slabp;
-	int ret;
+	int ret, freed = 0;
 
 	drain_cpu_caches(cachep);
 
@@ -912,8 +912,11 @@
 		spin_unlock_irq(&cachep->spinlock);
 		kmem_slab_destroy(cachep, slabp);
 		spin_lock_irq(&cachep->spinlock);
+
+		freed++;
 	}
-	ret = !list_empty(&cachep->slabs);
+
+	ret = ((1 << cachep->gfporder) * freed);
 	spin_unlock_irq(&cachep->spinlock);
 	return ret;
 }
@@ -923,7 +926,8 @@
  * @cachep: The cache to shrink.
  *
  * Releases as many slabs as possible for a cache.
- * To help debugging, a zero exit status indicates all slabs were released.
+ *
+ * Returns the amount of freed pages.
  */
 int kmem_cache_shrink(kmem_cache_t *cachep)
 {
@@ -962,7 +966,9 @@
 	list_del(&cachep->next);
 	up(&cache_chain_sem);
 
-	if (__kmem_cache_shrink(cachep)) {
+	__kmem_cache_shrink(cachep); 
+	
+	if (!list_empty(&cachep->slabs)) {
 		printk(KERN_ERR "kmem_cache_destroy: Can't free all objects %p\n",
 		       cachep);
 		down(&cache_chain_sem);
diff --exclude-from=exclude -Nur linux.orig/mm/vmscan.c linux/mm/vmscan.c
--- linux.orig/mm/vmscan.c	Sun Sep 24 18:14:04 2000
+++ linux/mm/vmscan.c	Sun Sep 24 23:09:01 2000
@@ -904,14 +904,16 @@
 		}
 
 		/* Try to get rid of some shared memory pages.. */
-		if (gfp_mask & __GFP_IO) {
-			/*
-			 * don't be too light against the d/i cache since
-		   	 * shrink_mmap() almost never fail when there's
-		   	 * really plenty of memory free. 
-			 */
-			count -= shrink_dcache_memory(priority, gfp_mask);
-			count -= shrink_icache_memory(priority, gfp_mask);
+
+		/*
+		 * don't be too light against the d/i cache since
+	   	 * shrink_mmap() almost never fail when there's
+	   	 * really plenty of memory free. 
+		 */
+		count -= shrink_dcache_memory(priority, gfp_mask);
+		count -= shrink_icache_memory(priority, gfp_mask);
+
+		if(gfp_mask & __GFP_IO) {
 			/*
 			 * Not currently working, see fixme in shrink_?cache_memory
 			 * In the inner funtions there is a comment:
@@ -992,10 +994,8 @@
 	 * the inode and dentry cache whenever we do this.
 	 */
 	if (free_shortage() || inactive_shortage()) {
-		if (gfp_mask & __GFP_IO) {
-			ret += shrink_dcache_memory(6, gfp_mask);
-			ret += shrink_icache_memory(6, gfp_mask);
-		}
+		ret += shrink_dcache_memory(6, gfp_mask);
+		ret += shrink_icache_memory(6, gfp_mask);
 
 		ret += refill_inactive(gfp_mask, user);
 	} else {

  reply	other threads:[~2000-09-25  2:39 UTC|newest]

Thread overview: 243+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2000-09-24 10:11 __GFP_IO && shrink_[d|i]cache_memory()? Ingo Molnar
2000-09-24 18:11 ` Linus Torvalds
2000-09-24 18:40   ` Ingo Molnar
2000-09-24 18:39     ` Linus Torvalds
2000-09-24 18:46       ` Linus Torvalds
2000-09-24 18:59         ` Ingo Molnar
2000-09-24 19:34         ` [patch] vmfixes-2.4.0-test9-B2 Ingo Molnar
2000-09-24 20:20           ` Rui Sousa
2000-09-24 20:24           ` Andrea Arcangeli
2000-09-24 20:26             ` Ingo Molnar
2000-09-24 21:12               ` Andrea Arcangeli
2000-09-24 21:12                 ` Ingo Molnar
2000-09-24 21:43                   ` Stephen C. Tweedie
2000-09-24 22:13                     ` Andrea Arcangeli
2000-09-24 22:36                       ` [patch] vmfixes-2.4.0-test9-B2 - fixing deadlocks bert hubert
2000-09-24 23:41                         ` Andrea Arcangeli
2000-09-25 16:24                           ` Stephen C. Tweedie
2000-09-25 17:03                             ` Andrea Arcangeli
2000-09-25 18:06                               ` Stephen C. Tweedie
2000-09-25 19:32                                 ` Andrea Arcangeli
2000-09-25 19:26                                   ` Rik van Riel
2000-09-25 22:28                                     ` Andrea Arcangeli
2000-09-25 22:26                                       ` Rik van Riel
2000-09-25 22:51                                         ` Andrea Arcangeli
2000-09-25 22:30                                       ` Linus Torvalds
2000-09-25 23:03                                         ` Andrea Arcangeli
2000-09-25 23:18                                           ` Linus Torvalds
2000-09-26  0:32                                             ` Andrea Arcangeli
2000-09-25 22:30                                       ` Juan J. Quintela
2000-09-25 23:00                                         ` Andrea Arcangeli
2000-09-25 19:54                                   ` Stephen C. Tweedie
2000-09-25 22:44                                     ` Andrea Arcangeli
2000-09-25 22:42                                       ` Rik van Riel
2000-09-26  6:54                                     ` Christoph Rohland
2000-09-26 14:05                                       ` Andrea Arcangeli
2000-09-26 16:20                                         ` Christoph Rohland
2000-09-26 17:10                                           ` Andrea Arcangeli
2000-09-27  8:11                                             ` Christoph Rohland
2000-09-27  8:28                                               ` Ingo Molnar
2000-09-27  9:24                                                 ` Christoph Rohland
2000-09-27 13:56                                               ` Andrea Arcangeli
2000-09-27 16:56                                                 ` Christoph Rohland
2000-09-27 17:42                                                   ` Andrea Arcangeli
2000-09-27 18:25                                                     ` Erik Andersen
2000-09-27 18:55                                                       ` Andrea Arcangeli
2000-09-28 10:08                                                 ` Rik van Riel
2000-09-28 11:16                                                   ` Rik van Riel
2000-09-28 14:52                                                     ` Andrea Arcangeli
2000-09-29 14:39                                                       ` Rik van Riel
2000-09-29 14:55                                                         ` Andrea Arcangeli
2000-09-29 15:40                                                           ` Rik van Riel
2000-09-28 11:31                                                   ` Ingo Molnar
2000-09-28 14:54                                                     ` Andrea Arcangeli
2000-09-28 15:13                                                       ` Ingo Molnar
2000-09-28 15:23                                                         ` Andrea Arcangeli
2000-09-28 16:16                                                         ` Juan J. Quintela
2000-09-28 14:31                                                   ` Andrea Arcangeli
2000-09-25 17:21                           ` bert hubert
2000-09-25 17:49                             ` Andrea Arcangeli
2000-09-25 15:09                         ` Miles Lane
2000-09-25 15:51                         ` Stephen C. Tweedie
2000-09-25 16:05                           ` Ingo Molnar
2000-09-25 16:06                             ` Alexander Viro
2000-09-25 16:20                               ` Ingo Molnar
2000-09-25 16:29                                 ` Andrea Arcangeli
2000-09-25  4:56                   ` [patch] vmfixes-2.4.0-test9-B2 Linus Torvalds
2000-09-25  5:19                     ` Alexander Viro
2000-09-25  6:06                       ` Linus Torvalds
2000-09-25  6:17                         ` Alexander Viro
2000-09-25 21:21                         ` Alexander Viro
2000-09-26 13:42                       ` [CFT][PATCH] ext2 directories in pagecache Alexander Viro
2000-09-26 21:29                       ` Alexander Viro
2000-09-26 22:16                         ` Marko Kreen
2000-09-26 22:31                           ` Alexander Viro
2000-09-26 22:47                             ` Marko Kreen
2000-09-27  7:32                               ` Ingo Molnar
2000-09-27  9:22                                 ` Alexander Viro
2000-09-26 23:19                         ` Andreas Dilger
2000-09-26 23:33                           ` Alexander Viro
2000-09-26 23:44                             ` Alexander Viro
2000-09-25  0:09                 ` [patch] vmfixes-2.4.0-test9-B2 Linus Torvalds
2000-09-25  0:49                   ` Alexander Viro
2000-09-25  0:53                   ` Marcelo Tosatti
2000-09-25  1:45                     ` Andrea Arcangeli
2000-09-25  2:39                       ` Marcelo Tosatti [this message]
2000-09-25 15:36                         ` Andrea Arcangeli
2000-09-25 10:42                     ` the new VM Ingo Molnar
2000-09-25 13:02                       ` Andrea Arcangeli
2000-09-25 13:02                         ` Ingo Molnar
2000-09-25 13:08                           ` Andrea Arcangeli
2000-09-25 13:12                             ` Ingo Molnar
2000-09-25 13:30                               ` Andrea Arcangeli
2000-09-25 13:39                                 ` Ingo Molnar
2000-09-25 14:04                                   ` Andrea Arcangeli
2000-09-25 14:04                                     ` Ingo Molnar
2000-09-25 14:23                                       ` Andrea Arcangeli
2000-09-25 14:27                                         ` Ingo Molnar
2000-09-25 14:39                                           ` Andrea Arcangeli
2000-09-25 14:43                                             ` Ingo Molnar
2000-09-25 15:01                                               ` Andrea Arcangeli
2000-09-25 15:10                                                 ` Ingo Molnar
2000-09-25 15:24                                                   ` Andrea Arcangeli
2000-09-25 15:26                                                     ` Ingo Molnar
2000-09-25 15:22                                                       ` yodaiken
2000-09-26 19:10                                                 ` Pavel Machek
2000-09-26 20:16                                                   ` Andrea Arcangeli
2000-09-27  7:42                                                   ` Ingo Molnar
2000-09-27 12:11                                                     ` yodaiken
2000-09-27 14:08                                                     ` Andrea Arcangeli
2000-09-25 16:09                                             ` Rik van Riel
2000-09-25 14:26                                     ` Marcelo Tosatti
2000-09-25 14:50                                       ` Andrea Arcangeli
2000-09-25 14:47                               ` Alan Cox
2000-09-25 15:16                                 ` Ingo Molnar
2000-09-25 15:16                                   ` the new VMt Alan Cox
2000-09-25 15:33                                     ` the new VM Ingo Molnar
2000-09-25 15:41                                     ` the new VMt Andrea Arcangeli
2000-09-25 16:02                                       ` Ingo Molnar
2000-09-25 16:04                                         ` Andi Kleen
2000-09-25 16:19                                           ` Ingo Molnar
2000-09-25 16:18                                             ` Andi Kleen
2000-09-25 16:41                                               ` Andrea Arcangeli
2000-09-25 16:35                                                 ` Linus Torvalds
2000-09-25 16:41                                                   ` Rik van Riel
2000-09-25 16:49                                                     ` Linus Torvalds
2000-09-25 17:03                                                       ` Ingo Molnar
2000-09-25 17:17                                                         ` Andrea Arcangeli
2000-09-25 17:10                                                           ` Rik van Riel
2000-09-25 17:27                                                             ` Andrea Arcangeli
2000-09-25 17:15                                                       ` Andrea Arcangeli
2000-09-27  7:14                                                   ` Rusty Russell
2000-09-25 20:23                                               ` Russell King
2000-09-25 16:28                                             ` Rik van Riel
2000-09-25 16:11                                         ` Andrea Arcangeli
2000-09-25 16:22                                           ` Ingo Molnar
2000-09-25 16:17                                             ` Alexander Viro
2000-09-25 16:36                                               ` Jeff Garzik
2000-09-25 16:57                                               ` Alan Cox
2000-09-25 17:01                                                 ` Alexander Viro
2000-09-25 17:06                                                   ` Alan Cox
2000-09-25 17:31                                                     ` Oliver Xymoron
2000-09-25 17:51                                                       ` Jeff Garzik
2000-09-25 19:03                                                     ` the new VMt [4MB+ blocks] Matti Aarnio
2000-09-25 20:02                                                       ` Stephen Williams
2000-09-25 16:33                                             ` the new VMt Andrea Arcangeli
2000-09-26  8:38                                             ` Jes Sorensen
2000-09-26  8:52                                               ` Ingo Molnar
2000-09-26  9:02                                                 ` Jes Sorensen
2000-09-25 16:53                                         ` Alan Cox
2000-09-25 15:42                                     ` Stephen C. Tweedie
2000-09-25 16:05                                       ` Andrea Arcangeli
2000-09-25 16:22                                         ` Rik van Riel
2000-09-25 16:42                                           ` Andrea Arcangeli
2000-09-25 17:39                                         ` Stephen C. Tweedie
2000-09-25 16:51                                       ` Alan Cox
2000-09-25 17:43                                         ` Stephen C. Tweedie
2000-09-25 18:13                                           ` Alan Cox
2000-09-25 18:21                                             ` Stephen C. Tweedie
2000-09-25 19:09                                               ` Alan Cox
2000-09-25 19:21                                                 ` Stephen C. Tweedie
2000-09-25 16:52                                       ` yodaiken
2000-09-25 17:18                                         ` Jamie Lokier
2000-09-25 17:51                                           ` yodaiken
2000-09-25 18:04                                             ` Jamie Lokier
2000-09-25 18:13                                               ` yodaiken
2000-09-25 18:24                                                 ` Stephen C. Tweedie
2000-09-25 18:34                                                   ` yodaiken
2000-09-25 18:48                                                     ` Jamie Lokier
2000-09-25 19:25                                                     ` Stephen C. Tweedie
2000-09-25 20:04                                                       ` yodaiken
2000-09-25 20:23                                                         ` Alan Cox
2000-09-25 20:35                                                           ` yodaiken
2000-09-25 20:46                                                             ` Alan Cox
2000-09-25 21:07                                                               ` yodaiken
2000-09-26  9:54                                                                 ` Stephen C. Tweedie
2000-09-26 13:17                                                                   ` yodaiken
2000-09-25 20:47                                                             ` Benjamin C.R. LaHaise
2000-09-25 21:12                                                               ` yodaiken
2000-09-26 10:07                                                                 ` Stephen C. Tweedie
2000-09-26 13:30                                                                   ` yodaiken
2000-09-25 20:32                                                         ` Stephen C. Tweedie
2000-09-26 12:10                                                           ` Mark Hemment
2000-09-27 10:13                                                             ` Andrey Savochkin
2000-09-27 12:55                                                               ` Hugh Dickins
2000-09-28  3:25                                                                 ` Andrey Savochkin
2000-09-25 23:14                                                         ` Erik Andersen
2000-09-26 15:17                                                           ` yodaiken
2000-09-26 16:04                                                             ` Stephen C. Tweedie
2000-09-26 17:02                                                               ` Erik Andersen
2000-09-26 17:08                                                                 ` Stephen C. Tweedie
2000-09-26 17:45                                                                   ` Erik Andersen
2000-09-27 10:20                                                                     ` Andrey Savochkin
2000-09-26 21:13                                                                   ` Eric Lowe
2000-09-25 18:20                                             ` Andrea Arcangeli
2000-09-25 16:16                                     ` Rik van Riel
2000-09-25 16:55                                       ` Alan Cox
2000-09-25 15:48                                   ` the new VM Andrea Arcangeli
2000-09-25 15:40                                 ` Stephen C. Tweedie
2000-09-25 16:01                                   ` Andrea Arcangeli
2000-09-25 14:37                             ` Rik van Riel
2000-09-25 20:34                               ` Christoph Rohland
2000-10-06 16:14                                 ` Rik van Riel
2000-10-09  7:37                                   ` Christoph Rohland
2000-09-25 13:04                         ` Ingo Molnar
2000-09-25 13:19                           ` Andrea Arcangeli
2000-09-25 13:18                             ` Ingo Molnar
2000-09-25 13:21                             ` Ingo Molnar
2000-09-25 13:31                               ` Andrea Arcangeli
2000-09-25 13:47                                 ` Ingo Molnar
2000-09-25 14:04                                   ` Andrea Arcangeli
2000-09-25  1:31                   ` [patch] vmfixes-2.4.0-test9-B2 Andrea Arcangeli
2000-09-25  1:27                     ` Alexander Viro
2000-09-25  2:02                       ` Andrea Arcangeli
2000-09-25  2:01                         ` Alexander Viro
2000-09-25 13:47                         ` Stephen C. Tweedie
2000-09-25 10:13                     ` Ingo Molnar
2000-09-25 12:58                       ` Andrea Arcangeli
2000-09-25 13:10                         ` Ingo Molnar
2000-09-25 13:49                           ` Jens Axboe
2000-09-25 14:11                             ` Ingo Molnar
2000-09-25 14:05                               ` Jens Axboe
2000-09-25 16:46                               ` Linus Torvalds
2000-09-25 17:05                                 ` Ingo Molnar
2000-09-25 17:23                                   ` Andrea Arcangeli
2000-09-25 14:20                             ` Andrea Arcangeli
2000-09-25 14:11                               ` Jens Axboe
2000-09-25 14:33                                 ` Andrea Arcangeli
2000-09-25 13:56                           ` Andrea Arcangeli
2000-09-25 13:57                             ` Ingo Molnar
2000-09-25 14:13                               ` Andrea Arcangeli
2000-09-25 14:08                                 ` Jens Axboe
2000-09-25 14:29                                   ` Andrea Arcangeli
2000-09-25 14:18                                     ` Jens Axboe
2000-09-25 14:47                                       ` Andrea Arcangeli
2000-09-25 21:28                                         ` Jens Axboe
2000-09-25 22:14                                           ` Andrea Arcangeli
2000-09-25 14:13                                 ` Ingo Molnar
2000-09-25 14:29                                 ` Ingo Molnar
2000-09-25 14:46                                   ` Andrea Arcangeli
2000-09-25 14:53                                     ` Ingo Molnar
2000-09-25 15:02                                       ` Andrea Arcangeli
2000-09-24 21:38     ` __GFP_IO && shrink_[d|i]cache_memory()? Stephen C. Tweedie
2000-09-24 23:20       ` Alan Cox

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=Pine.LNX.4.21.0009242306220.2029-200000@freak.distro.conectiva \
    --to=marcelo@conectiva.com.br \
    --cc=andrea@suse.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mingo@elte.hu \
    --cc=riel@conectiva.com.br \
    --cc=roger.larsson@norran.net \
    --cc=torvalds@transmeta.com \
    /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