mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-11 13:04:03 +08:00
653ed64b01
Add a test for comparing the performance of RCU with various read-side synchronization mechanisms. The test has proved useful for collecting data and performing these comparisons. Currently RCU, SRCU, reader-writer lock, reader-writer semaphore and reference counting can be measured using refperf.perf_type parameter. Each invocation of the test runs measures performance of a specific mechanism. The maximum number of CPUs to concurrently run readers on is chosen by the test itself and is 75% of the total number of CPUs. So if you had 24 CPUs, the test runs with a maximum of 18 parallel readers. A number of experiments are conducted, and in each experiment, the number of readers is increased by 1, upto the 75% of CPUs mark. During each experiment, all readers execute an empty loop with refperf.loops iterations and time the total loop duration. This is then averaged. Example output: Parameters "refperf.perf_type=srcu refperf.loops=2000000" looks like: [ 3.347133] srcu-ref-perf: [ 3.347133] Threads Time(ns) [ 3.347133] 1 36 [ 3.347133] 2 34 [ 3.347133] 3 34 [ 3.347133] 4 34 [ 3.347133] 5 33 [ 3.347133] 6 33 [ 3.347133] 7 33 [ 3.347133] 8 33 [ 3.347133] 9 33 [ 3.347133] 10 33 [ 3.347133] 11 33 [ 3.347133] 12 33 [ 3.347133] 13 33 [ 3.347133] 14 33 [ 3.347133] 15 32 [ 3.347133] 16 33 [ 3.347133] 17 33 [ 3.347133] 18 34 Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org> Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
19 lines
601 B
Makefile
19 lines
601 B
Makefile
# SPDX-License-Identifier: GPL-2.0
|
|
# Any varying coverage in these files is non-deterministic
|
|
# and is generally not a function of system call inputs.
|
|
KCOV_INSTRUMENT := n
|
|
|
|
ifeq ($(CONFIG_KCSAN),y)
|
|
KBUILD_CFLAGS += -g -fno-omit-frame-pointer
|
|
endif
|
|
|
|
obj-y += update.o sync.o
|
|
obj-$(CONFIG_TREE_SRCU) += srcutree.o
|
|
obj-$(CONFIG_TINY_SRCU) += srcutiny.o
|
|
obj-$(CONFIG_RCU_TORTURE_TEST) += rcutorture.o
|
|
obj-$(CONFIG_RCU_PERF_TEST) += rcuperf.o
|
|
obj-$(CONFIG_RCU_REF_PERF_TEST) += refperf.o
|
|
obj-$(CONFIG_TREE_RCU) += tree.o
|
|
obj-$(CONFIG_TINY_RCU) += tiny.o
|
|
obj-$(CONFIG_RCU_NEED_SEGCBLIST) += rcu_segcblist.o
|