:
:See
:
:http://www.freebsd.org/cgi/getmsg.cgi?fetch=540837+0+/usr/local/www/db/text/2008/freebsd-questions/20080706.freebsd-questions
:
:Kris
Hmm. I see an issue that FreeBSD could correct to reduce wired
memory use by the swap system.
Your sys/blist.h has this:
typedef u_int32_t u_daddr_t; /* unsigned disk address */
and your sys/types.h has this:
typedef int64_t daddr_t; /* unsigned disk address */
sys/blist.h really assumes a 32 bit daddr_t. It's amazing the code
even still works with daddr_t at 64 bits and u_daddr_t at 32 bits.
Changing that whole mess in sys/blist.h to a different typedef name,
say swblk_t (which is already defined to be 32 bits), and renaming
u_daddr_t to u_swblk_t, plus also changing the swblock structure
in vm/swap_pager.c to use a 32 bit array elements instead of 64 bit
array elements will cut the size of struct swblock almost in half.
There is no real need for swap block addressing > 32 bits. 32 bits
gives you swap in the terrabyte range.
struct swblock {
struct swblock *swb_hnext;
vm_object_t swb_object;
vm_pindex_t swb_index;
int swb_count;
daddr_t swb_pages[SWAP_META_PAGES]; <<<<<<<<< this array
};
Any arithmatic accessing the elements would also have to be vetted
for any necessary promotions.
-Matt
Matthew Dillon
<[EMAIL PROTECTED]>
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to "[EMAIL PROTECTED]"