diff options
author | dyson <dyson@FreeBSD.org> | 1998-04-29 04:28:22 +0000 |
---|---|---|
committer | dyson <dyson@FreeBSD.org> | 1998-04-29 04:28:22 +0000 |
commit | b5a79794cdadebe1ac863e5b8bde8d4b86cb8a5e (patch) | |
tree | e81f03d1aec7ca81483ab31e8815b8289c35be97 /sys/vm/swap_pager.c | |
parent | 67c7bb9c04ed76649b6be0484dcfaa84fa554bcd (diff) | |
download | FreeBSD-src-b5a79794cdadebe1ac863e5b8bde8d4b86cb8a5e.zip FreeBSD-src-b5a79794cdadebe1ac863e5b8bde8d4b86cb8a5e.tar.gz |
Tighten up management of memory and swap space during map allocation,
deallocation cycles. This should provide a measurable improvement
on swap and memory allocation on loaded systems. It is unlikely a
complete solution. Also, provide more map info with procfs.
Chuck Cranor spurred on this improvement.
Diffstat (limited to 'sys/vm/swap_pager.c')
-rw-r--r-- | sys/vm/swap_pager.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/sys/vm/swap_pager.c b/sys/vm/swap_pager.c index 90ae42e..ea1824d 100644 --- a/sys/vm/swap_pager.c +++ b/sys/vm/swap_pager.c @@ -39,7 +39,7 @@ * from: Utah $Hdr: swap_pager.c 1.4 91/04/30$ * * @(#)swap_pager.c 8.9 (Berkeley) 3/21/94 - * $Id: swap_pager.c,v 1.92 1998/03/07 21:36:54 dyson Exp $ + * $Id: swap_pager.c,v 1.93 1998/04/15 17:47:35 bde Exp $ */ /* @@ -631,12 +631,13 @@ rfinished: */ void -swap_pager_copy(srcobject, srcoffset, dstobject, dstoffset, offset) +swap_pager_copy(srcobject, srcoffset, dstobject, dstoffset, offset, destroysource) vm_object_t srcobject; vm_pindex_t srcoffset; vm_object_t dstobject; vm_pindex_t dstoffset; vm_pindex_t offset; + int destroysource; { vm_pindex_t i; int origsize; @@ -722,16 +723,17 @@ swap_pager_copy(srcobject, srcoffset, dstobject, dstoffset, offset) /* * Free left over swap blocks */ - swap_pager_free_swap(srcobject); + if (destroysource) { + swap_pager_free_swap(srcobject); - if (srcobject->un_pager.swp.swp_allocsize) { - printf("swap_pager_copy: *warning* pager with %d blocks (orig: %d)\n", - srcobject->un_pager.swp.swp_allocsize, origsize); - } - - free(srcobject->un_pager.swp.swp_blocks, M_VMPGDATA); - srcobject->un_pager.swp.swp_blocks = NULL; + if (srcobject->un_pager.swp.swp_allocsize) { + printf("swap_pager_copy: *warning* pager with %d blocks (orig: %d)\n", + srcobject->un_pager.swp.swp_allocsize, origsize); + } + free(srcobject->un_pager.swp.swp_blocks, M_VMPGDATA); + srcobject->un_pager.swp.swp_blocks = NULL; + } return; } |