aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjoern B. Brandenburg <bbb@cs.unc.edu>2010-11-16 11:13:10 -0500
committerBjoern B. Brandenburg <bbb@cs.unc.edu>2010-11-16 11:22:45 -0500
commitd922f5eb1c375ab0445240110656c1d793eaad04 (patch)
treeb690dc794494a454468698c8e15c8f7d9ffad1fb
parent6fbc3b495cccf2e4ab7d4ab674b5c576e9946bed (diff)
Make TRACE() buffer size configurable
Let the user choose an appropriate buffer size (instead of scaling with NR_CPUS). The kfifo api requires the buffer to be a power of two, so enforce this constraint in the configuration. This fixes a previously-existing compile-time error for values of NR_CPU that are not a power of two. Based on a patch by Mac Mollison <mollison@cs.unc.edu>.
-rw-r--r--litmus/Kconfig20
-rw-r--r--litmus/sched_trace.c8
2 files changed, 24 insertions, 4 deletions
diff --git a/litmus/Kconfig b/litmus/Kconfig
index f1de6fabfc17..a3341021f05c 100644
--- a/litmus/Kconfig
+++ b/litmus/Kconfig
@@ -149,6 +149,26 @@ config SCHED_DEBUG_TRACE
149 Say Yes for debugging. 149 Say Yes for debugging.
150 Say No for overhead tracing. 150 Say No for overhead tracing.
151 151
152config SCHED_DEBUG_TRACE_SHIFT
153 int "Buffer size for TRACE() buffer"
154 depends on SCHED_DEBUG_TRACE
155 range 14 22
156 default 18
157 help
158
159 Select the amount of memory needed per CPU for the TRACE() buffer, as a
160 power of two. The TRACE() buffer is global and statically allocated. If
161 the buffer is too small, there will be holes in the TRACE() log if the
162 buffer-flushing task is starved.
163
164 The default should be sufficient for most systems. Increase the buffer
165 size if the log contains holes. Reduce the buffer size when running on
166 a memory-constrained system.
167
168 Examples: 14 => 16KB
169 18 => 256KB
170 20 => 1MB
171
152endmenu 172endmenu
153 173
154endmenu 174endmenu
diff --git a/litmus/sched_trace.c b/litmus/sched_trace.c
index 9b03e0cfe82b..f4171fddbbb1 100644
--- a/litmus/sched_trace.c
+++ b/litmus/sched_trace.c
@@ -18,14 +18,14 @@
18 18
19#define SCHED_TRACE_NAME "litmus/log" 19#define SCHED_TRACE_NAME "litmus/log"
20 20
21/* Allocate a buffer of about 32k per CPU */ 21/* Compute size of TRACE() buffer */
22#define LITMUS_TRACE_BUF_PAGES 64 22#define LITMUS_TRACE_BUF_SIZE (1 << CONFIG_SCHED_DEBUG_TRACE_SHIFT)
23#define LITMUS_TRACE_BUF_SIZE (PAGE_SIZE * LITMUS_TRACE_BUF_PAGES * NR_CPUS)
24 23
25/* Max length of one read from the buffer */ 24/* Max length of one read from the buffer */
26#define MAX_READ_LEN (64 * 1024) 25#define MAX_READ_LEN (64 * 1024)
27 26
28/* Max length for one write --- from kernel --- to the buffer */ 27/* Max length for one write --- by TRACE() --- to the buffer. This is used to
28 * allocate a per-cpu buffer for printf() formatting. */
29#define MSG_SIZE 255 29#define MSG_SIZE 255
30 30
31 31