ZFS: kmem_map too small panic again
Bakul Shah
bakul at bitblocks.com
Thu May 3 19:59:43 UTC 2007
> On Fri, Apr 27, 2007 at 12:35:35AM +0200, Pawel Jakub Dawidek wrote:
> > On Thu, Apr 26, 2007 at 02:33:47PM -0700, Bakul Shah wrote:
> > > An update:
> > >
> > > I reverted sources to to Apr 24 16:49 UTC and rebuilt the
> > > kernel and the bug goes away -- I was able to restore 53GB
> > > (840K+ inodes) and do a bunch of du with no problems.
> > >
> > > But the bug remains on a kernel with the latest zfs changes.
> > > All I have to do run du a couple of times in the restored
> > > tree to crash the system. There is no crash with multiple du
> > > on a similarly sized UFS2, only on ZFS. This is on a
> > > Athlon64 X2 Dual Core Processor 3800+ running in 32 bit mode.
> > > The exact message is:
> > >
> > > panic: kmem_malloc(98304): kmem_map too small: 335478784 total allocated
> >
> > I can reproduce it and I'm working on it.
>
> The problem is that kern.maxvnodes are tuned based on vnode+UFS_inode
> size. In case of ZFS, the size of vnode+ZFS_znode_dnode+dmu_buf is
> larger. As a work-around just decrease kern.maxvnodes to something like
> 3/4 of the current value.
Pawel, thank you for this fix; I have been running -current
with it for a few days but as others have reported, this does
not fix the problem, only makes it much less likely -- or may
be there is another problem. At least now I can get a crash
dump!
I have two filesystems in one pool with about 1.28M inodes
altogether. Based on a few trials it seems it is necessary
to walk them both before triggering this panic (or may be it
is a function of how many inodes are statted).
Every second I sent output of vmstat -z to another machine
during testing. Nothing pops out as obviously wrong but here
are somethings worth looking at:
$ grep ^512 vmstream | firstlast
512: 512, 0, 466, 38,
512: 512, 0, 131491, 3669,
$ grep ' Slab' vmstream | firstlast
UMA Slabs: 64, 0, 2516, 21,
UMA Slabs: 64, 0, 23083, 222,
$ grep dmu vmstream | firstlast
dmu_buf_impl_t: 140, 0, 912, 68,
dmu_buf_impl_t: 140, 0, 136034, 3938,
$ grep znode vmstream | firstlast
zfs_znode_cache: 236, 0, 261, 43,
zfs_znode_cache: 236, 0, 64900, 5596,
# firstlast displays the first and last line of its input.
More information about the freebsd-fs
mailing list