]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/commit - fs/xfs/xfs_linux.h
xfs: use rhashtable to track buffer cache
authorLucas Stach <dev@lynxeye.de>
Wed, 7 Dec 2016 06:36:36 +0000 (17:36 +1100)
committerDave Chinner <david@fromorbit.com>
Wed, 7 Dec 2016 06:36:36 +0000 (17:36 +1100)
commit6031e73a5b3f85ec45cac08ef90995b2d3f941c7
tree7ea855c18580f1b227a8ed8de6379a660c17d5f2
parentcae028df53449905c944603df624ac94bc619661
xfs: use rhashtable to track buffer cache

On filesystems with a lot of metadata and in metadata intensive workloads
xfs_buf_find() is showing up at the top of the CPU cycles trace. Most of
the CPU time is spent on CPU cache misses while traversing the rbtree.

As the buffer cache does not need any kind of ordering, but fast lookups
a hashtable is the natural data structure to use. The rhashtable
infrastructure provides a self-scaling hashtable implementation and
allows lookups to proceed while the table is going through a resize
operation.

This reduces the CPU-time spent for the lookups to 1/3 even for small
filesystems with a relatively small number of cached buffers, with
possibly much larger gains on higher loaded filesystems.

[dchinner: reduce minimum hash size to an acceptable size for large
   filesystems with many AGs with no active use.]
[dchinner: remove stale rbtree asserts.]
[dchinner: use xfs_buf_map for compare function argument.]
[dchinner: make functions static.]
[dchinner: remove redundant comments.]

Signed-off-by: Lucas Stach <dev@lynxeye.de>
Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dave Chinner <david@fromorbit.com>
fs/xfs/xfs_buf.c
fs/xfs/xfs_buf.h
fs/xfs/xfs_linux.h
fs/xfs/xfs_mount.c
fs/xfs/xfs_mount.h