aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/kern_malloc.c
diff options
context:
space:
mode:
authorJohn Dyson <dyson@FreeBSD.org>1996-05-18 22:33:13 +0000
committerJohn Dyson <dyson@FreeBSD.org>1996-05-18 22:33:13 +0000
commit14bf02f8f44e0f9a102f88f3427e02fc9749073f (patch)
treedbf6eff759d3415dc087510db3e393a3d01f9ef2 /sys/kern/kern_malloc.c
parent9957f860967a72a01b890c6f40b2c3df4d5e05c3 (diff)
downloadsrc-14bf02f8f44e0f9a102f88f3427e02fc9749073f.tar.gz
src-14bf02f8f44e0f9a102f88f3427e02fc9749073f.zip
Minor performance improvement to kern_malloc.c that increases the
probability of reuse of recently freed memory. This improves cache hit stats on cached memory, and improves at least fork speed consistancy.
Notes
Notes: svn path=/head/; revision=15817
Diffstat (limited to 'sys/kern/kern_malloc.c')
-rw-r--r--sys/kern/kern_malloc.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/sys/kern/kern_malloc.c b/sys/kern/kern_malloc.c
index b348a3cbdd67..5375d6dde8c6 100644
--- a/sys/kern/kern_malloc.c
+++ b/sys/kern/kern_malloc.c
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*
* @(#)kern_malloc.c 8.3 (Berkeley) 1/4/94
- * $Id: kern_malloc.c,v 1.21 1996/05/02 14:20:20 phk Exp $
+ * $Id: kern_malloc.c,v 1.22 1996/05/10 19:28:48 wollman Exp $
*/
#include <sys/param.h>
@@ -351,12 +351,28 @@ free(addr, type)
wakeup((caddr_t)ksp);
ksp->ks_inuse--;
#endif
+#ifdef OLD_MALLOC_MEMORY_POLICY
if (kbp->kb_next == NULL)
kbp->kb_next = addr;
else
((struct freelist *)kbp->kb_last)->next = addr;
freep->next = NULL;
kbp->kb_last = addr;
+#else
+ /*
+ * Return memory to the head of the queue for quick reuse. This
+ * can improve performance by improving the probability of the
+ * item being in the cache when it is reused.
+ */
+ if (kbp->kb_next == NULL) {
+ kbp->kb_next = addr;
+ kbp->kb_last = addr;
+ freep->next = NULL;
+ } else {
+ freep->next = kbp->kb_next;
+ kbp->kb_next = addr;
+ }
+#endif
splx(s);
}