Freebsd 8.0 kmem map too small

Jeremy Chadwick freebsd at jdc.parodius.com
Tue Jun 8 09:54:46 UTC 2010


On Tue, Jun 08, 2010 at 06:11:46PM +0900, Yoshiaki Kasahara wrote:
> Hello,
> 
> I'd like to add another instance of similar problems.  I recently
> updated my FreeBSD amd64 box with ZFS root and 8GB RAM from 8-STABLE
> (as of Mar 1st) to 8.1-PRERELEASE (as of May 27th).  After that, my
> box started to crash every couple of days due to kmem_map too small.
> 
> Here is a (last week) screenshot of Munin graph about the memory usage
> of the box:
> 
> http://eron.info/munin-memory.png
> 
> In "by month" graph, a white gap at the end of "Week 20" is the update
> period from 8-STABLE to 8.1-PRERELEASE I mentioned above.  Before the
> upgrade, the system was rock solid without any kmem tuning in
> loader.conf (vm.kmem_size was around 2.7GB IIRC).
> 
> After the update, I could see that more wired memory was assigned, and
> then steep drop (crash) occured.
> 
> "by day" graph shows my experiment to bump vm.kmem_size=12G
> (recommended somewhere in this thread) and explicitly limit
> vfs.zfs.arc_max=2G.  I was surprised because the wired memory quickly
> increased over 5GB...
> 
> Then I noticed that the default value of vfs.zfs.zio.use_uma was 1 on
> amd64, so I turned it off and removed other memory tunings (kmem_size
> and arc_max) in loader.conf on Tuesday at 16:00 and rebooted.  It
> seems that the usage of wired memory was stablized and no crash since
> then with the default kmem_size and arc_max.
> 
> Does anyone have any idea about this behavior?
> 
> My wild guess is that ZFS/UMA code is not stable on amd64 too, and it
> should be turned off by default for 8.1-RELEASE maybe....

I realise you're talking about amd64, but I'm not sure how UMA is
getting enabled on i386 to begin with.  It does look like it's enabled
on amd64 by default.

src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c --

#if defined(__amd64__)
static int zio_use_uma = 1;
#else
static int zio_use_uma = 0;
#endif
SYSCTL_DECL(_vfs_zfs);
SYSCTL_NODE(_vfs_zfs, OID_AUTO, zio, CTLFLAG_RW, 0, "ZFS ZIO");
TUNABLE_INT("vfs.zfs.zio.use_uma", &zio_use_uma);
SYSCTL_INT(_vfs_zfs_zio, OID_AUTO, use_uma, CTLFLAG_RDTUN, &zio_use_uma, 0,
    "Use uma(9) for ZIO allocations");

Also note that this tunable does not appear in sysctl -a output; I
believe this is caused by the first parameter to SYSCTL_INT() being
incorrect -- should be _vfs_zfs, not _vfs_zfs_zio.  Regardless of
that, it's still adjustable in loader.conf.

-- 
| Jeremy Chadwick                                   jdc at parodius.com |
| Parodius Networking                       http://www.parodius.com/ |
| UNIX Systems Administrator                  Mountain View, CA, USA |
| Making life hard for others since 1977.              PGP: 4BD6C0CB |



More information about the freebsd-stable mailing list