Max size of one swap slice
Matthew Dillon
dillon at apollo.backplane.com
Tue Aug 5 18:29:25 UTC 2008
:> Recently we found that we can only allocate 32GB for one swap slice.
:> Does there is any sysctl oid or any kernel option to increase it? Why
:> we have this restriction?
:
:this is a consequence of the data structure used to manage swap space. See
:sys/blist.h for details. It *seems* that you *might* be able to increase the
:coverage by decreasing BLIST_META_RADIX, but that's from a quick glance and
:most certainly not a good idea.
:
:However, the blist is a abstract enough API so that you can likely replace it
:with something that supports 64bit addresses (and thus 512*2^64 bytes of swap
:space per device) ... but I don't see why you'd want to do something like
:this. Remember that you need memory to manage your swap space as well!
:
:--
:/"\ Best regards, | mlaier at freebsd.org
:\ / Max Laier | ICQ #67774661
The core structures can handle 2 billion swap pages == 2TB of swap,
but the blist code hits arithmatic overflows if a single blist has
more then (0x40000000 / BLIST_META_RADIX) = 1G/16 = 64M swap blocks,
or 256GB.
I think the VM/BIO system had additional overflow issues due to
conversions back and forth between PAGE_SIZE and DEV_BSIZE which
further restricted the limit to 32GB. Those restrictions may be gone
now that FreeBSD is using 64 bit block numbers, so you may be able to
pop it up to 256GB with virtually no effort (but you need to test it
significantly!).
With some work on the blist code only (not its structures) the arithmatic
overflow issues could also be resolved, increasing the swap capability
to 2TB.
I do not recommend changing any of the core blist structure, particularly
not BLIST_META_RADIX. Just don't try :-). You do NOT want to bump
the swap block number fields to 64 bits.
Also note that significant memory is used to manage that much swap. It's
a factor of 1:16384 or so for the blist structures and probably about
the same amount for the vm_object tracking structures. 32G of swap needs
around 2-4MB of wired ram.
-Matt
Matthew Dillon
<dillon at backplane.com>
More information about the freebsd-stable
mailing list