mirror of
https://github.com/torvalds/linux.git
synced 2024-11-27 06:31:52 +00:00
b3f391fddf
rcu_pending, btree key cache rework: this solves lock contenting in the key cache, eliminating the biggest source of the srcu lock hold time warnings, and drastically improving performance on some metadata heavy workloads - on multithreaded creates we're now 3-4x faster than xfs. We're now using an rhashtable instead of the system inode hash table; this is another significant performance improvement on multithreaded metadata workloads, eliminating more lock contention. for_each_btree_key_in_subvolume_upto(): new helper for iterating over keys within a specific subvolume, eliminating a lot of open coded "subvolume_get_snapshot()" and also fixing another source of srcu lock time warnings, by running each loop iteration in its own transaction (as the existing for_each_btree_key() does). More work on btree_trans locking asserts; we now assert that we don't hold btree node locks when trans->locked is false, which is important because we don't use lockdep for tracking individual btree node locks. Some cleanups and improvements in the bset.c btree node lookup code, from Alan. Rework of btree node pinning, which we use in backpointers fsck. The old hacky implementation, where the shrinker just skipped over nodes in the pinned range, was causing OOMs; instead we now use another shrinker with a much higher seeks number for pinned nodes. Rebalance now uses BCH_WRITE_ONLY_SPECIFIED_DEVS; this fixes an issue where rebalance would sometimes fall back to allocating from the full filesystem, which is not what we want when it's trying to move data to a specific target. Use __GFP_ACCOUNT, GFP_RECLAIMABLE for btree node, key cache allocations. Idmap mounts are now supported - Hongbo. Rename whiteouts are now supported - Hongbo. Erasure coding can now handle devices being marked as failed, or forcibly removed. We still need the evacuate path for erasure coding, but it's getting very close to ready for people to start using. Status, and when will we be taking off experimental: ---------------------------------------------------- Going by critical, user facing bugs getting found and fixed, we're nearly there. There are a couple key items that need to be finished before we can take off the experimental label: - The end-user experience is still pretty painful when the root filesystem needs a fsck; we need some form of limited self healing so that necessary repair gets run automatically. Errors (by type) are recorded in the superblock, so what we need to do next is convert remaining inconsistent() errors to fsck() errors (so that all runtime inconsistencies are logged in the superblock), and we need to go through the list of fsck errors and classify them by which fsck passes are needed to repair them. - We need comprehensive torture testing for all our repair paths, to shake out remaining bugs there. Thomas has been working on the tooling for this, so this is coming soonish. Slightly less critical items: - We need to improve the end-user experience for degraded mounts: right now, a degraded root filesystem means dropping to an initramfs shell or somehow inputting mount options manually (we don't want to allow degraded mounts without some form of user input, except on unattended servers) - we need the mount helper to prompt the user to allow mounting degraded, and make sure this works with systemd. - Scalabiity: we have users running 100TB+ filesystems, and that's effectively the limit right now due to fsck times. We have some reworks in the pipeline to address this, we're aiming to make petabyte sized filesystems practical. -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEKnAFLkS8Qha+jvQrE6szbY3KbnYFAmbvHQoACgkQE6szbY3K bnYfAw/+IXQ43/O+Jzs0MLD7pKZnrlbHiX9FqYLazD40vWvkyRTQOwgTn8pVNhq3 4YWmtuZyqh036YC+bGqYFOhz20YetS5UdgbClpwmc99JJ6xsY+Z1mdpYfz5oq1Dw /pBX5iYb3rAt8UbQoZ8lcWM+GpT3GKJVgJuiLB2gRp9gATFesuh+0qU42oIVVVU5 4y3VhDBUmRk4XqEnk8hr7EIDMW0wWP3aptxYMZzeUPW0x1cEQ+FWrJo5D6lXv2KK dKv3MogvA0FFNi/eNexclPiu2pXtI7vrxT7umsxAICHLt41rWpV5ttE6io3bC4ZN qvwF9w2CpmKPKchFru9PO+QrWHVR7e6bphwf3TzyoKZ7tTn42f1RQlub7gBzI3bz ai5ZwGRIvpUoPVBj+CO+Ipog81uUb23Ma+gXg1akEFBOAb+o7I3KOOSBh5l+0cHj 3Ov1n0TLcsoO2cqoqfsV2QubW9YcWEZ76g5mKwQnUn8Cs6Fp0wWaIyK9aNkIAxcr tNDPGtH1gKitxUvju5i/LyI7y1UoeFvqJFee0VsU6QnixHn1ySzhePsJt6UEnIJT Ia3C96Igqu2mV9FxhfGHj/qi7TGjqqkZHa8+B610cDpgf15cx7Ps2DYjkuQMFCqZ Q3Q1o5De9roRq5xF2hLiYJCbzJKqd5ichFsBtLQuX572ICxbICg= =oVCy -----END PGP SIGNATURE----- Merge tag 'bcachefs-2024-09-21' of git://evilpiepirate.org/bcachefs Pull bcachefs updates from Kent Overstreet: - rcu_pending, btree key cache rework: this solves lock contenting in the key cache, eliminating the biggest source of the srcu lock hold time warnings, and drastically improving performance on some metadata heavy workloads - on multithreaded creates we're now 3-4x faster than xfs. - We're now using an rhashtable instead of the system inode hash table; this is another significant performance improvement on multithreaded metadata workloads, eliminating more lock contention. - for_each_btree_key_in_subvolume_upto(): new helper for iterating over keys within a specific subvolume, eliminating a lot of open coded "subvolume_get_snapshot()" and also fixing another source of srcu lock time warnings, by running each loop iteration in its own transaction (as the existing for_each_btree_key() does). - More work on btree_trans locking asserts; we now assert that we don't hold btree node locks when trans->locked is false, which is important because we don't use lockdep for tracking individual btree node locks. - Some cleanups and improvements in the bset.c btree node lookup code, from Alan. - Rework of btree node pinning, which we use in backpointers fsck. The old hacky implementation, where the shrinker just skipped over nodes in the pinned range, was causing OOMs; instead we now use another shrinker with a much higher seeks number for pinned nodes. - Rebalance now uses BCH_WRITE_ONLY_SPECIFIED_DEVS; this fixes an issue where rebalance would sometimes fall back to allocating from the full filesystem, which is not what we want when it's trying to move data to a specific target. - Use __GFP_ACCOUNT, GFP_RECLAIMABLE for btree node, key cache allocations. - Idmap mounts are now supported (Hongbo Li) - Rename whiteouts are now supported (Hongbo Li) - Erasure coding can now handle devices being marked as failed, or forcibly removed. We still need the evacuate path for erasure coding, but it's getting very close to ready for people to start using. * tag 'bcachefs-2024-09-21' of git://evilpiepirate.org/bcachefs: (99 commits) bcachefs: return err ptr instead of null in read sb clean bcachefs: Remove duplicated include in backpointers.c bcachefs: Don't drop devices with stripe pointers bcachefs: bch2_ec_stripe_head_get() now checks for change in rw devices bcachefs: bch_fs.rw_devs_change_count bcachefs: bch2_dev_remove_stripes() bcachefs: bch2_trigger_ptr() calculates sectors even when no device bcachefs: improve error messages in bch2_ec_read_extent() bcachefs: improve error message on too few devices for ec bcachefs: improve bch2_new_stripe_to_text() bcachefs: ec_stripe_head.nr_created bcachefs: bch_stripe.disk_label bcachefs: stripe_to_mem() bcachefs: EIO errcode cleanup bcachefs: Rework btree node pinning bcachefs: split up btree cache counters for live, freeable bcachefs: btree cache counters should be size_t bcachefs: Don't count "skipped access bit" as touched in btree cache scan bcachefs: Failed devices no longer require mounting in degraded mode bcachefs: bch2_dev_rcu_noerror() ... |
||
---|---|---|
.. | ||
acl.c | ||
acl.h | ||
alloc_background_format.h | ||
alloc_background.c | ||
alloc_background.h | ||
alloc_foreground.c | ||
alloc_foreground.h | ||
alloc_types.h | ||
backpointers.c | ||
backpointers.h | ||
bbpos_types.h | ||
bbpos.h | ||
bcachefs_format.h | ||
bcachefs_ioctl.h | ||
bcachefs.h | ||
bkey_buf.h | ||
bkey_cmp.h | ||
bkey_methods.c | ||
bkey_methods.h | ||
bkey_sort.c | ||
bkey_sort.h | ||
bkey_types.h | ||
bkey.c | ||
bkey.h | ||
bset.c | ||
bset.h | ||
btree_cache.c | ||
btree_cache.h | ||
btree_gc_types.h | ||
btree_gc.c | ||
btree_gc.h | ||
btree_io.c | ||
btree_io.h | ||
btree_iter.c | ||
btree_iter.h | ||
btree_journal_iter.c | ||
btree_journal_iter.h | ||
btree_key_cache_types.h | ||
btree_key_cache.c | ||
btree_key_cache.h | ||
btree_locking.c | ||
btree_locking.h | ||
btree_node_scan_types.h | ||
btree_node_scan.c | ||
btree_node_scan.h | ||
btree_trans_commit.c | ||
btree_types.h | ||
btree_update_interior.c | ||
btree_update_interior.h | ||
btree_update.c | ||
btree_update.h | ||
btree_write_buffer_types.h | ||
btree_write_buffer.c | ||
btree_write_buffer.h | ||
buckets_types.h | ||
buckets_waiting_for_journal_types.h | ||
buckets_waiting_for_journal.c | ||
buckets_waiting_for_journal.h | ||
buckets.c | ||
buckets.h | ||
chardev.c | ||
chardev.h | ||
checksum.c | ||
checksum.h | ||
clock_types.h | ||
clock.c | ||
clock.h | ||
compress.c | ||
compress.h | ||
darray.c | ||
darray.h | ||
data_update.c | ||
data_update.h | ||
debug.c | ||
debug.h | ||
dirent_format.h | ||
dirent.c | ||
dirent.h | ||
disk_accounting_format.h | ||
disk_accounting_types.h | ||
disk_accounting.c | ||
disk_accounting.h | ||
disk_groups_format.h | ||
disk_groups_types.h | ||
disk_groups.c | ||
disk_groups.h | ||
ec_format.h | ||
ec_types.h | ||
ec.c | ||
ec.h | ||
errcode.c | ||
errcode.h | ||
error.c | ||
error.h | ||
extent_update.c | ||
extent_update.h | ||
extents_format.h | ||
extents_types.h | ||
extents.c | ||
extents.h | ||
eytzinger.c | ||
eytzinger.h | ||
fifo.h | ||
fs-common.c | ||
fs-common.h | ||
fs-io-buffered.c | ||
fs-io-buffered.h | ||
fs-io-direct.c | ||
fs-io-direct.h | ||
fs-io-pagecache.c | ||
fs-io-pagecache.h | ||
fs-io.c | ||
fs-io.h | ||
fs-ioctl.c | ||
fs-ioctl.h | ||
fs.c | ||
fs.h | ||
fsck.c | ||
fsck.h | ||
inode_format.h | ||
inode.c | ||
inode.h | ||
io_misc.c | ||
io_misc.h | ||
io_read.c | ||
io_read.h | ||
io_write_types.h | ||
io_write.c | ||
io_write.h | ||
journal_io.c | ||
journal_io.h | ||
journal_reclaim.c | ||
journal_reclaim.h | ||
journal_sb.c | ||
journal_sb.h | ||
journal_seq_blacklist_format.h | ||
journal_seq_blacklist.c | ||
journal_seq_blacklist.h | ||
journal_types.h | ||
journal.c | ||
journal.h | ||
Kconfig | ||
keylist_types.h | ||
keylist.c | ||
keylist.h | ||
logged_ops_format.h | ||
logged_ops.c | ||
logged_ops.h | ||
lru_format.h | ||
lru.c | ||
lru.h | ||
Makefile | ||
mean_and_variance_test.c | ||
mean_and_variance.c | ||
mean_and_variance.h | ||
migrate.c | ||
migrate.h | ||
move_types.h | ||
move.c | ||
move.h | ||
movinggc.c | ||
movinggc.h | ||
nocow_locking_types.h | ||
nocow_locking.c | ||
nocow_locking.h | ||
opts.c | ||
opts.h | ||
printbuf.c | ||
printbuf.h | ||
quota_format.h | ||
quota_types.h | ||
quota.c | ||
quota.h | ||
rcu_pending.c | ||
rcu_pending.h | ||
rebalance_types.h | ||
rebalance.c | ||
rebalance.h | ||
recovery_passes_types.h | ||
recovery_passes.c | ||
recovery_passes.h | ||
recovery.c | ||
recovery.h | ||
reflink_format.h | ||
reflink.c | ||
reflink.h | ||
replicas_format.h | ||
replicas_types.h | ||
replicas.c | ||
replicas.h | ||
sb-clean.c | ||
sb-clean.h | ||
sb-counters_format.h | ||
sb-counters.c | ||
sb-counters.h | ||
sb-downgrade_format.h | ||
sb-downgrade.c | ||
sb-downgrade.h | ||
sb-errors_format.h | ||
sb-errors_types.h | ||
sb-errors.c | ||
sb-errors.h | ||
sb-members_format.h | ||
sb-members_types.h | ||
sb-members.c | ||
sb-members.h | ||
seqmutex.h | ||
siphash.c | ||
siphash.h | ||
six.c | ||
six.h | ||
snapshot_format.h | ||
snapshot.c | ||
snapshot.h | ||
str_hash.h | ||
subvolume_format.h | ||
subvolume_types.h | ||
subvolume.c | ||
subvolume.h | ||
super_types.h | ||
super-io.c | ||
super-io.h | ||
super.c | ||
super.h | ||
sysfs.c | ||
sysfs.h | ||
tests.c | ||
tests.h | ||
thread_with_file_types.h | ||
thread_with_file.c | ||
thread_with_file.h | ||
time_stats.c | ||
time_stats.h | ||
trace.c | ||
trace.h | ||
two_state_shared_lock.c | ||
two_state_shared_lock.h | ||
util.c | ||
util.h | ||
varint.c | ||
varint.h | ||
vstructs.h | ||
xattr_format.h | ||
xattr.c | ||
xattr.h |