CNFS and FreeBSD

The Hermit Hacker scrappy at
Tue Sep 14 02:02:40 UTC 1999

Craig, I'm running INN+CNFS under FreeBSD 3.2-STABLE with 12GB
buffers, and have never seen the error that you are reporting...what
version of FreeBSD are you running? *raised eyebrow*

On Mon, 13 Sep 1999, Craig Norborg wrote:

>          After struggling with getting CNFS up and running on a FreeBSD 
> box, it all came down to a fairly easy thing that I thought you might want 
> to at least elude to in your "INSTALL" file.
>          The paragraph that states:
> "For each metacycbuff, you now need to determine how many cycbuffs will 
> make up the metacycbuff, the size of those cycbuffs and where they will be 
> stored. Some OSs do not support files larger than 2 GB which will force all 
> of your cycbuffs to be < 2GB (even if they are stored on raw disk 
> partitions). Linux is known to have this limitation, FreeBSD does not. If 
> in  doubt, keep your cycbuffs smaller than 2 GB. Also when laying out 
> your  cycbuffs you will want to try to arrange them across as many physical 
> disks as possible (or use a striped disk array and put them all on that)."
> while it is true that FreeBSD does not have the 2Gb partition, you will 
> continually get the error messages in your /var/log/messages:
> innd: CNFS-sm: CNFSinitdisks: mmap for /var/news/spool/buffers/buf06 offset 
> 0 len 500006912 failed: Cannot allocate memory
> innd: SM storage method 'cnfs' failed initialization
> innd: SM one or more storage methods failed initialization
> innd: SERVER cant initialize the storage subsystem one or more storage 
> methods failed initialization
>          After trying different things, I finally traced the message down 
> in the code, and its a problem in a "mmap" call.  In the FreeBSD man pages 
> under mmap:
>       len is limited to 2GB.  Mmapping slightly more than 2GB doesn't work, 
> but
>       it is possible to map a window of size (filesize % 2GB) for file 
> sizes of
>       slightly less than 2G, 4GB, 6GB and 8GB.
>       The limit is imposed for a variety of reasons. Most of them have to do
>       with FreeBSD not wanting to use 64 bit offsets in the VM system due to
>       the extreme performance penalty. So FreeBSD uses 32bit page indexes and
>       this gives FreeBSD a maximum of 8TB filesizes. It's actually bugs in the
>       filesystem code that causes the limit to be further restricted to 1TB
>       (loss of precision when doing blockno calculations).
>       Another reason for the 2GB limit is that filesystem metadata can reside
>       at negative offsets."
>          So, even though FreeBSD doesn't have the filesize limitation, it 
> does have a problem with mmap'ing a file over 2Gb in size.  Rather than 
> mess around with "mapping a window" or trying to convert the kernel to 
> 64bit offsets in the VM system, I decided that recreating the buffers as 
> <2Gb files would probably be easier...  Everything worked like a champ 
> right away...
>          Now to see how this puppy works...  Not worrying about expiring 
> articles will be a strange thing....
> Craig Norborg
> craig at 

Marc G. Fournier                   ICQ#7615664               IRC Nick: Scrappy
Systems Administrator @ 
primary: scrappy at           secondary: scrappy@{freebsd|postgresql}.org 

More information about the inn-bugs mailing list