On 2014-09-19 09:51, Holger Hoffstätte wrote:

On Fri, 19 Sep 2014 13:18:34 +0100, Rob Spanton wrote:

I have a particularly uncomplicated setup (a desktop PC with a hard
disk) and I'm seeing particularly slow performance from btrfs.  A `git
status` in the linux source tree takes about 46 seconds after dropping
caches, whereas on other machines using ext4 this takes about 13s.  My
mail client (evolution) also seems to perform particularly poorly on
this setup, and my hunch is that it's spending a lot of time waiting on
the filesystem.

This is - unfortunately - a particular btrfs oddity/characteristic/flaw,
whatever you want to call it. git relies a lot on fast stat() calls,
and those seem to be particularly slow with btrfs esp. on rotational
media. I have the same problem with rsync on a freshly mounted volume;
it gets fast (quite so!) after the first run.
I find that kind of funny, because regardless of filesystem, stat() is one of the *slowest* syscalls on almost every *nix system in existence.

The simplest thing to fix this is a "du -s >/dev/null" to pre-cache all
file inodes.

I'd also love a technical explanation why this happens and how it could
be fixed. Maybe it's just a consequence of how the metadata tree(s)
are laid out on disk.
While I don't know for certain, I think it's largely just a side effect of the lack of performance tuning in the BTRFS code.

I've tried mounting with noatime, and this has had no effect.  Anyone
got any ideas?

Don't drop the caches :-)

-h



Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Reply via email to