From: Andy Isaacson <adi@hexapodia.org>
To: Dave Chinner <david@fromorbit.com>
Cc: xfs@oss.sgi.com
Subject: Re: ENOSPC but df and df -i show free space
Date: Sun, 19 Jun 2011 16:55:18 -0700 [thread overview]
Message-ID: <20110619235518.GA21778@hexapodia.org> (raw)
In-Reply-To: <20110619232339.GK561@dastard>
On Mon, Jun 20, 2011 at 09:23:39AM +1000, Dave Chinner wrote:
> No allocation algorithm is perfect in all circumstances. The
> alogrithms in XFS tend to degrade when large contiguous freespace
> regions are not available, resulting in more fragmentation of data
> extents and subsequent freespace fragmentation when those files are
> removed or defragmented. The algorithms will recover if you free up
> enough space that large contiguous freespace extents re-form, but
> that can require removing a large amount of data....
Thanks for the background explanation!
> > > > % df -i /d1
> > > > Filesystem Inodes IUsed IFree IUse% Mounted on
> > > > /dev/mapper/vg0-d1 167509008 11806336 155702672 8% /d1
> > > > % sudo xfs_growfs -n /d1
> > > > meta-data=/dev/mapper/vg0-d1 isize=256 agcount=18, agsize=13107200 blks
> > > > = sectsz=512 attr=2
> > > > data = bsize=4096 blocks=235929600, imaxpct=25
> > > > = sunit=0 swidth=0 blks
> > > > naming =version 2 bsize=4096 ascii-ci=0
> > > > log =internal bsize=4096 blocks=25600, version=2
> > > > = sectsz=512 sunit=0 blks, lazy-count=1
> > > > realtime =none extsz=4096 blocks=0, rtextents=0
> > > > % grep d1 /proc/mounts
> > > > /dev/mapper/vg0-d1 /d1 xfs rw,relatime,attr2,noquota 0 0
> > > >
> > > > Obviously I'm missing something, but what?
> > >
> > > Most likely is that you have no contiguous free space large enough
> > > to create a new inode chunk. using xfs_db to dump the freespace
> > > size histogram will tell you if this is the case or not.
> >
> > % sudo xfs_db -c freesp /dev/vg0/d1
> > from to extents blocks pct
> > 1 1 168504 168504 1.71
> > 2 3 446 1135 0.01
> > 4 7 5550 37145 0.38
> > 8 15 49159 524342 5.33
> > 16 31 1383 29223 0.30
> > 2097152 4194303 1 2931455 29.78
> > 4194304 8388607 1 6150953 62.49
> >
> > I don't really grok that output.
>
> It's the historgram of free space extent sizes. You have 168504
> single free block regions (4k in size) in the filesystem, 446
> between 8k and 12k (2-3 blocks), etc.
Ah, OK! Now it makes sense.
> Inode allocation requires aligned 16k allocations (64x256 byte
> inodes), so you need free extents in the 4-7 block range or larger,
> which you appear to have so it should not be failing. Did you dump
> this histogram while touch was giving ENOSPC errors?
Yes, that was before I grew the filesystem again to get back to
a working state. I killed all the processes using the filesystem,
unmounted it, and ran xfs_db.
> Also, it might be worthwhile dumping the per-ag histograms (use a
> for loop and the "freesp -a <x>" command) - it may be that certain
> AGs are out of contiguous freespace and that is causing the issue...
I've now grown the filesystem again to get it back into a working state;
it's obviously not "production" per se given my janky configuration, but
it is more convenient if I can create files. :)
It's a shame that we lost the chance to do more debugging though.
> FWIW, you shoul drun "echo 1 > /proc/sys/vm/drop_caches" before
> running the xfsdb comand so that it is not reading stale metadata
> from cache...
I unmounted the filesystem before running xfs_db, so it should be fine.
Didn't even occur to me that it might work to run xfs_db on a block
device that's mounted and active...
I did notice that the unmount command took a minute or two to complete.
-andy
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
prev parent reply other threads:[~2011-06-19 23:54 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-19 21:50 ENOSPC but df and df -i show free space Andy Isaacson
2011-06-19 22:18 ` Dave Chinner
2011-06-19 22:58 ` Andy Isaacson
2011-06-19 23:23 ` Dave Chinner
2011-06-19 23:55 ` Andy Isaacson [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20110619235518.GA21778@hexapodia.org \
--to=adi@hexapodia.org \
--cc=david@fromorbit.com \
--cc=xfs@oss.sgi.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.