2002-07-05 05:33:13

by Peter Chubb

[permalink] [raw]
Subject: Results of testing Reiserfs on large block devices.


Hi folks,
I couldn't get Reiserfs to work on large devices. I've tracked the
problem down.

When Reiserfs is mounted, it tries to allocate a chunk of memory for
bitmaps using kmalloc. The largest chunk allocatable by kmalloc is
128k. This limits the size of a reiserfs to just under 2TB on a
64-bit platform (16384 bitmaps times 8bytes per pointer) or just under
4TB on a 32 bit platform (32768 bitmaps times 4bytes per pointer).

This reasoning assumes that the number of bitmaps is given by the
formula (number_of_blocks + (8 * blocksize - 1))/(8 * blocksize) where
blocksize is 4096 bytes. Thus
number_of_blocks = 8 * 4096 * (16384 - 1) - 1 [64 bit]

number_of_blocks = 8 * 4096 * (32768 - 1) - 1 [32 bit]

Hacking mm/slab.c to increase the memory limit allowed larger
filesystems to be mounted, but I haven't tested these thoroughly yet.
--
Dr Peter Chubb [email protected]
You are lost in a maze of BitKeeper repositories, all almost the same.


2002-07-05 05:44:20

by Oleg Drokin

[permalink] [raw]
Subject: Re: [reiserfs-dev] Results of testing Reiserfs on large block devices.

Hello!

On Fri, Jul 05, 2002 at 03:35:37PM +1000, Peter Chubb wrote:

> I couldn't get Reiserfs to work on large devices. I've tracked the
> problem down.
> When Reiserfs is mounted, it tries to allocate a chunk of memory for
> bitmaps using kmalloc. The largest chunk allocatable by kmalloc is
> 128k. This limits the size of a reiserfs to just under 2TB on a
> 64-bit platform (16384 bitmaps times 8bytes per pointer) or just under
> 4TB on a 32 bit platform (32768 bitmaps times 4bytes per pointer).

This is true for 4k blocksize.

> Hacking mm/slab.c to increase the memory limit allowed larger
> filesystems to be mounted, but I haven't tested these thoroughly yet.

Since kernel is yet to support block devices bigger than 2Tb, this is not an
issue yet.
Also Hans have not found a sponsor to fund this stuff which is also a problem.

Besides stuff you've just pointed out, there are also 32bit limit on
blocknumbers present in reiserfs v3 (which gives us 16Tb or something like that
limit for 4k blocksize)

Bye,
Oleg