mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-01 02:36:02 +00:00
92a8b224b8
Patch series "Enhance min heap API with non-inline functions and optimizations", v2. Add non-inline versions of the min heap API functions in lib/min_heap.c and updates all users outside of kernel/events/core.c to use these non-inline versions. To mitigate the performance impact of indirect function calls caused by the non-inline versions of the swap and compare functions, a builtin swap has been introduced that swaps elements based on their size. Additionally, it micro-optimizes the efficiency of the min heap by pre-scaling the counter, following the same approach as in lib/sort.c. Documentation for the min heap API has also been added to the core-api section. This patch (of 10): All current min heap API functions are marked with '__always_inline'. However, as the number of users increases, inlining these functions everywhere leads to a increase in kernel size. In performance-critical paths, such as when perf events are enabled and min heap functions are called on every context switch, it is important to retain the inline versions for optimal performance. To balance this, the original inline functions are kept, and additional non-inline versions of the functions have been added in lib/min_heap.c. Link: https://lkml.kernel.org/r/20241020040200.939973-1-visitorckw@gmail.com Link: https://lore.kernel.org/20240522161048.8d8bbc7b153b4ecd92c50666@linux-foundation.org Link: https://lkml.kernel.org/r/20241020040200.939973-2-visitorckw@gmail.com Signed-off-by: Kuan-Wei Chiu <visitorckw@gmail.com> Suggested-by: Andrew Morton <akpm@linux-foundation.org> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Arnaldo Carvalho de Melo <acme@kernel.org> Cc: Ching-Chun (Jim) Huang <jserv@ccns.ncku.edu.tw> Cc: Coly Li <colyli@suse.de> Cc: Ian Rogers <irogers@google.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Kent Overstreet <kent.overstreet@linux.dev> Cc: Kuan-Wei Chiu <visitorckw@gmail.com> Cc: "Liang, Kan" <kan.liang@linux.intel.com> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Matthew Sakai <msakai@redhat.com> Cc: Matthew Wilcox (Oracle) <willy@infradead.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
106 lines
2.8 KiB
Plaintext
106 lines
2.8 KiB
Plaintext
|
|
config BCACHEFS_FS
|
|
tristate "bcachefs filesystem support (EXPERIMENTAL)"
|
|
depends on BLOCK
|
|
select EXPORTFS
|
|
select CLOSURES
|
|
select LIBCRC32C
|
|
select CRC64
|
|
select FS_POSIX_ACL
|
|
select LZ4_COMPRESS
|
|
select LZ4_DECOMPRESS
|
|
select LZ4HC_COMPRESS
|
|
select LZ4HC_DECOMPRESS
|
|
select ZLIB_DEFLATE
|
|
select ZLIB_INFLATE
|
|
select ZSTD_COMPRESS
|
|
select ZSTD_DECOMPRESS
|
|
select CRYPTO_SHA256
|
|
select CRYPTO_CHACHA20
|
|
select CRYPTO_POLY1305
|
|
select KEYS
|
|
select RAID6_PQ
|
|
select XOR_BLOCKS
|
|
select XXHASH
|
|
select SRCU
|
|
select SYMBOLIC_ERRNAME
|
|
select MIN_HEAP
|
|
help
|
|
The bcachefs filesystem - a modern, copy on write filesystem, with
|
|
support for multiple devices, compression, checksumming, etc.
|
|
|
|
config BCACHEFS_QUOTA
|
|
bool "bcachefs quota support"
|
|
depends on BCACHEFS_FS
|
|
select QUOTACTL
|
|
|
|
config BCACHEFS_ERASURE_CODING
|
|
bool "bcachefs erasure coding (RAID5/6) support (EXPERIMENTAL)"
|
|
depends on BCACHEFS_FS
|
|
select QUOTACTL
|
|
help
|
|
This enables the "erasure_code" filesysystem and inode option, which
|
|
organizes data into reed-solomon stripes instead of ordinary
|
|
replication.
|
|
|
|
WARNING: this feature is still undergoing on disk format changes, and
|
|
should only be enabled for testing purposes.
|
|
|
|
config BCACHEFS_POSIX_ACL
|
|
bool "bcachefs POSIX ACL support"
|
|
depends on BCACHEFS_FS
|
|
select FS_POSIX_ACL
|
|
|
|
config BCACHEFS_DEBUG
|
|
bool "bcachefs debugging"
|
|
depends on BCACHEFS_FS
|
|
help
|
|
Enables many extra debugging checks and assertions.
|
|
|
|
The resulting code will be significantly slower than normal; you
|
|
probably shouldn't select this option unless you're a developer.
|
|
|
|
config BCACHEFS_TESTS
|
|
bool "bcachefs unit and performance tests"
|
|
depends on BCACHEFS_FS
|
|
help
|
|
Include some unit and performance tests for the core btree code
|
|
|
|
config BCACHEFS_LOCK_TIME_STATS
|
|
bool "bcachefs lock time statistics"
|
|
depends on BCACHEFS_FS
|
|
help
|
|
Expose statistics for how long we held a lock in debugfs
|
|
|
|
config BCACHEFS_NO_LATENCY_ACCT
|
|
bool "disable latency accounting and time stats"
|
|
depends on BCACHEFS_FS
|
|
help
|
|
This disables device latency tracking and time stats, only for performance testing
|
|
|
|
config BCACHEFS_SIX_OPTIMISTIC_SPIN
|
|
bool "Optimistic spinning for six locks"
|
|
depends on BCACHEFS_FS
|
|
depends on SMP
|
|
default y
|
|
help
|
|
Instead of immediately sleeping when attempting to take a six lock that
|
|
is held by another thread, spin for a short while, as long as the
|
|
thread owning the lock is running.
|
|
|
|
config BCACHEFS_PATH_TRACEPOINTS
|
|
bool "Extra btree_path tracepoints"
|
|
depends on BCACHEFS_FS
|
|
help
|
|
Enable extra tracepoints for debugging btree_path operations; we don't
|
|
normally want these enabled because they happen at very high rates.
|
|
|
|
config MEAN_AND_VARIANCE_UNIT_TEST
|
|
tristate "mean_and_variance unit tests" if !KUNIT_ALL_TESTS
|
|
depends on KUNIT
|
|
depends on BCACHEFS_FS
|
|
default KUNIT_ALL_TESTS
|
|
help
|
|
This option enables the kunit tests for mean_and_variance module.
|
|
If unsure, say N.
|