32GB limit per swap device?

Holger Kipp Holger.Kipp at alogis.com
Wed Aug 10 09:37:36 UTC 2011


Am 10.08.2011 um 10:47 schrieb Jeremy Chadwick:

> On Wed, Aug 10, 2011 at 08:27:27AM +0000, Holger Kipp wrote:
>>
>> Am 10.08.2011 um 10:09 schrieb Daniel Kalchev:
>>
>>> On 10.08.11 10:47, Jeremy Chadwick wrote:
>>>> On Wed, Aug 10, 2011 at 10:13:14AM +0300, Daniel Kalchev wrote:
>>>>> I am more concerned that with 32GB of swap in single device I could not dump kernel core, with 64GB of RAM.
>>>> My apologies if I've misunderstood something, but why does this of any
>>>> concern?  Machine has 64GB RAM.  You have a single swap slice that's
>>>> effectively 32GB.  How is a kernel panic worth of 64GB RAM going to fit
>>>> into a 32GB swap slice?
>>>>
>>> The swap partitions are 64GB, it is only that FreeBSD refuses to use more than 32GB of each for swap. But.. it might happily dump core to the whole partition, tests will show.
>>
>> I doubt it. Have you tried increasing kern.maxswzone? It is the size in KB (for 32GB it is set to 33554432).
>> kern.maxswzone: Maximum memory for swap metadata
>
> The variable is set to 32MBytes, not 32GBytes.  The default size is
> defined as variable VM_SWZONE_SIZE_MAX, which is 32*1024*1024 per
> sys/i386/include/param.h and sys/amd64/include/param.h.
>
> Furthermore, this variable does not do what you're implying.

Ah, then I misinterpreted the output of "man loader" which states:

     kern.maxswzone
                   Limits the amount of KVM to be used to hold swap meta
                   information, which directly governs the maximum amount of
                   swap the system can support.

> So we're back to where we started: swap slices/partitions can be greater
> than 32GBytes in size, but "something" is limiting the maximum amount of
> memory which can be dumped to a single swap swap to 32GBytes.

Anyway, there is one thing in /usr/src/sys/vm/swap_pager.c (so if you get this
warning (reducing size to maximum of... per swap unit)), this might be the
reason:

        /*
         * If we go beyond this, we get overflows in the radix
         * tree bitmap code.
         */
        mblocks = 0x40000000 / BLIST_META_RADIX;
        if (nblks > mblocks) {
                printf("WARNING: reducing size to maximum of %lu blocks per swap unit\n",
                        mblocks);
                nblks = mblocks;
        }


Hope this is of some help.

Best regards,
Holger



--
Holger Kipp
Diplom-Mathematiker
Senior Consultant

Tel. : +49 30 436 58 114
Fax. : +49 30 436 58 214
Mobil: +49 178 36 58 114
Email: holger.kipp at alogis.com

alogis AG
Alt-Moabit 90b
D-10559 Berlin

web : http://www.alogis.com

----------------------------------------------------------

alogis AG
Sitz/Registergericht: Berlin/AG Charlottenburg, HRB 71484
Vorstand: Arne Friedrichs, Joern Samuelson
Aufsichtsratsvorsitzender: Reinhard Mielke


More information about the freebsd-stable mailing list