linux/fs/btrfs
Josef Bacik ccf0e72537 Btrfs: find ideal block group for caching
This patch changes a few things.  Hopefully the comments are helpfull, but
I'll try and be as verbose here.

Problem:

My fedora box was taking 1 minute and 21 seconds to boot with btrfs as root.
Part of this problem was we pick the first block group we can find and start
caching it, even if it may not have enough free space.  The other problem is
we only search for cached block groups the first time around, which we won't
find any cached block groups because this is a newly mounted fs, so we end up
caching several block groups during bootup, which with alot of fragmentation
takes around 30-45 seconds to complete, which bogs down the system.  So

Solution:

1) Don't cache block groups willy-nilly at first.  Instead try and figure out
which block group has the most free, and therefore will take the least amount
of time to cache.

2) Don't be so picky about cached block groups.  The other problem is once
we've filled up a cluster, if the block group isn't finished caching the next
time we try and do the allocation we'll completely ignore the cluster and
start searching from the beginning of the space, which makes us cache more
block groups, which slows us down even more.  So instead of skipping block
groups that are not finished caching when we have a hint, only skip the block
group if it hasn't started caching yet.

There is one other tweak in here.  Before if we allocated a chunk and still
couldn't find new space, we'd end up switching the space info to force another
chunk allocation.  This could make us end up with way too many chunks, so keep
track of this particular case.

With this patch and my previous cluster fixes my fedora box now boots in 43
seconds, and according to the bootchart is not held up by our block group
caching at all.

Signed-off-by: Josef Bacik <josef@redhat.com>
Signed-off-by: Chris Mason <chris.mason@oracle.com>
2009-11-11 14:20:19 -05:00
..
acl.c Btrfs: fix btrfs acl #ifdef checks 2009-10-13 13:51:39 -04:00
async-thread.c Btrfs: fix deadlock on async thread startup 2009-10-05 09:44:45 -04:00
async-thread.h Btrfs: fix deadlock on async thread startup 2009-10-05 09:44:45 -04:00
btrfs_inode.h Btrfs: avoid tree log commit when there are no changes 2009-10-13 13:35:12 -04:00
compat.h Btrfs: drop remaining LINUX_KERNEL_VERSION checks and compat code 2009-01-06 09:38:55 -05:00
compression.c Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable 2009-09-11 19:07:25 -04:00
compression.h Btrfs: Add zlib compression support 2008-10-29 14:49:59 -04:00
ctree.c Btrfs: check size of inode backref before adding hardlink 2009-09-24 09:17:31 -04:00
ctree.h Btrfs: add -o discard option 2009-10-14 10:32:49 -04:00
delayed-ref.c Btrfs: Mixed back reference (FORWARD ROLLING FORMAT CHANGE) 2009-06-10 11:29:46 -04:00
delayed-ref.h Btrfs: Mixed back reference (FORWARD ROLLING FORMAT CHANGE) 2009-06-10 11:29:46 -04:00
dir-item.c Btrfs: change how subvolumes are organized 2009-09-21 15:56:00 -04:00
disk-io.c Btrfs: avoid tree log commit when there are no changes 2009-10-13 13:35:12 -04:00
disk-io.h Btrfs: leave btree locks spinning more often 2009-03-24 16:14:28 -04:00
export.c Btrfs: add snapshot/subvolume destroy ioctl 2009-09-21 16:00:26 -04:00
export.h NFS support for btrfs - v3 2008-09-25 11:04:06 -04:00
extent_io.c Btrfs: release delalloc reservations on extent item insertion 2009-10-08 15:21:10 -04:00
extent_io.h Btrfs: release delalloc reservations on extent item insertion 2009-10-08 15:21:10 -04:00
extent_map.c Btrfs: avoid null deref in unpin_extent_cache() 2009-11-11 14:20:18 -05:00
extent_map.h Btrfs: search for an allocation hint while filling file COW 2009-09-18 16:08:52 -04:00
extent-tree.c Btrfs: find ideal block group for caching 2009-11-11 14:20:19 -05:00
file-item.c Btrfs: leave btree locks spinning more often 2009-03-24 16:14:28 -04:00
file.c Btrfs: avoid tree log commit when there are no changes 2009-10-13 13:35:12 -04:00
free-space-cache.c Btrfs: fix how we set max_size for free space clusters 2009-11-11 14:20:17 -05:00
free-space-cache.h Btrfs: use hybrid extents+bitmap rb tree for free space 2009-07-24 09:23:30 -04:00
hash.h Btrfs: remove crc32c.h and use libcrc32c directly. 2009-06-10 11:29:53 -04:00
inode-item.c Btrfs: check size of inode backref before adding hardlink 2009-09-24 09:17:31 -04:00
inode-map.c Btrfs: do not reuse objectid of deleted snapshot/subvol 2009-09-21 15:56:00 -04:00
inode.c Btrfs: fix some metadata enospc issues 2009-11-11 14:20:17 -05:00
ioctl.c Btrfs: fix file clone ioctl for bookend extents 2009-10-09 11:29:53 -04:00
ioctl.h Btrfs: add snapshot/subvolume destroy ioctl 2009-09-21 16:00:26 -04:00
Kconfig Btrfs: make btrfs acls selectable 2009-02-04 09:28:28 -05:00
locking.c Btrfs: fix typos in comments 2009-04-02 16:46:06 -04:00
locking.h Btrfs: fix spinlock assertions on UP systems 2009-03-09 11:45:38 -04:00
Makefile Btrfs: Mixed back reference (FORWARD ROLLING FORMAT CHANGE) 2009-06-10 11:29:46 -04:00
ordered-data.c Btrfs: release delalloc reservations on extent item insertion 2009-10-08 15:21:10 -04:00
ordered-data.h Btrfs: Use PagePrivate2 to track pages in the data=ordered code. 2009-09-11 13:31:07 -04:00
orphan.c Btrfs: change how subvolumes are organized 2009-09-21 15:56:00 -04:00
print-tree.c Btrfs: remove of redundant btrfs_header_level 2009-07-22 16:52:13 -04:00
print-tree.h Btrfs: Create extent_buffer interface for large blocksizes 2008-09-25 11:03:56 -04:00
ref-cache.c Btrfs: Make btrfs_drop_snapshot work in larger and more efficient chunks 2009-02-04 09:27:02 -05:00
ref-cache.h Btrfs: Make btrfs_drop_snapshot work in larger and more efficient chunks 2009-02-04 09:27:02 -05:00
relocation.c Btrfs: fix deadlock on async thread startup 2009-10-05 09:44:45 -04:00
root-tree.c Btrfs: skip btrfs_release_path in btrfs_update_root and btrfs_del_root 2009-11-11 14:20:18 -05:00
struct-funcs.c Btrfs: Fix checkpatch.pl warnings 2009-01-05 21:25:51 -05:00
super.c Btrfs: add -o discard option 2009-10-14 10:32:49 -04:00
sysfs.c Btrfs: Fix checkpatch.pl warnings 2009-01-05 21:25:51 -05:00
transaction.c Btrfs: cleanup transaction starting and fix journal_info usage 2009-11-11 14:20:16 -05:00
transaction.h Btrfs: streamline tree-log btree block writeout 2009-10-13 13:35:12 -04:00
tree-defrag.c Btrfs: do extent allocation and reference count updates in the background 2009-03-24 16:14:25 -04:00
tree-log.c Btrfs: properly wait log writers during log sync 2009-10-14 10:32:48 -04:00
tree-log.h Btrfs: avoid tree log commit when there are no changes 2009-10-13 13:35:12 -04:00
version.h Update Btrfs files for in-kernel usage 2008-09-25 15:41:59 -04:00
version.sh Btrfs: Fixes for 2.6.28-rc API changes 2008-11-19 21:17:22 -05:00
volumes.c Btrfs: introduce missing kfree 2009-09-29 13:51:04 -04:00
volumes.h Btrfs: make balance code choose more wisely when relocating 2009-09-21 19:23:48 -04:00
xattr.c Btrfs: fix btrfs acl #ifdef checks 2009-10-13 13:51:39 -04:00
xattr.h Btrfs: selinux support 2009-02-04 09:29:13 -05:00
zlib.c Btrfs: correct error-handling zlib error handling 2009-08-07 13:51:33 -04:00