From e04e95a488397d0fbf2740c3cfef989b56d7f80a Mon Sep 17 00:00:00 2001 From: "Frank Ch. Eigler" Date: Tue, 18 Oct 2011 22:49:35 -0400 Subject: [PATCH] PR13319: fix _stp_bufsize-related start-time net/ memory report printk * transport/relay_v2.c, relayfs.c (_stp_transport_data_fs_init): Increment _stp_allocated_[net_]memory with relay buffers. * transport/ring_buffer.c: Ditto. Plus fix scaling of the incoming -sNN value, so NN represents megabytes consistently. --- runtime/transport/relay_v2.c | 12 ++++++++++++ runtime/transport/relayfs.c | 9 +++++++++ runtime/transport/ring_buffer.c | 19 ++++++++++++++++++- 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/runtime/transport/relay_v2.c b/runtime/transport/relay_v2.c index 763436de8..03a812fd0 100644 --- a/runtime/transport/relay_v2.c +++ b/runtime/transport/relay_v2.c @@ -338,6 +338,18 @@ static int _stp_transport_data_fs_init(void) rc = -ENOENT; goto err; } + /* Increment _stp_allocated_memory and _stp_allocated_net_memory to account for buffers + allocated by relay_open. */ + { + u64 relay_mem; + relay_mem = _stp_subbuf_size * _stp_nsubbufs; +#ifdef STP_BULKMODE + relay_mem *= num_online_cpus(); +#endif + _stp_allocated_net_memory += relay_mem; + _stp_allocated_memory += relay_mem; + } + dbug_trans(1, "returning 0...\n"); atomic_set (&_stp_relay_data.transport_state, STP_TRANSPORT_INITIALIZED); diff --git a/runtime/transport/relayfs.c b/runtime/transport/relayfs.c index f9dec0295..d8fa4e049 100644 --- a/runtime/transport/relayfs.c +++ b/runtime/transport/relayfs.c @@ -113,6 +113,15 @@ static int _stp_transport_data_fs_init(void) rc = -ENOENT; goto err; } + { + u64 relay_mem; + relay_mem = _stp_subbuf_size * _stp_nsubbufs; +#ifdef STP_BULKMODE + relay_mem *= num_online_cpus(); +#endif + _stp_allocated_net_memory += relay_mem; + _stp_allocated_memory += relay_mem; + } /* now set ownership */ for_each_online_cpu(i) { diff --git a/runtime/transport/ring_buffer.c b/runtime/transport/ring_buffer.c index eed358ba7..119a69899 100644 --- a/runtime/transport/ring_buffer.c +++ b/runtime/transport/ring_buffer.c @@ -80,7 +80,7 @@ static void __stp_free_ring_buffer(void) static int __stp_alloc_ring_buffer(void) { int i; - unsigned long buffer_size = _stp_bufsize; + unsigned long buffer_size = _stp_bufsize * 1024 * 1024; if (!alloc_cpumask_var(&_stp_relay_data.trace_reader_cpumask, (GFP_KERNEL & ~__GFP_WAIT))) @@ -91,6 +91,8 @@ static int __stp_alloc_ring_buffer(void) dbug_trans(1, "using default buffer size...\n"); buffer_size = _stp_nsubbufs * _stp_subbuf_size; } + dbug_trans(1, "using buffer size %lu...\n", buffer_size); + /* The number passed to ring_buffer_alloc() is per cpu. Our * 'buffer_size' is a total number of bytes to allocate. So, * we need to divide buffer_size by the number of cpus. */ @@ -100,6 +102,21 @@ static int __stp_alloc_ring_buffer(void) if (!_stp_relay_data.rb) goto fail; + /* Increment _stp_allocated_memory and + _stp_allocated_net_memory to approximately account for + buffers allocated by ring_buffer_alloc. */ + { +#ifndef DIV_ROUND_UP +#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) +#endif + u64 relay_pages; + relay_pages = DIV_ROUND_UP (buffer_size, PAGE_SIZE); + if (relay_pages < 2) relay_pages = 2; + relay_pages *= num_online_cpus(); + _stp_allocated_net_memory += relay_pages * PAGE_SIZE; + _stp_allocated_memory += relay_pages * PAGE_SIZE; + } + dbug_trans(0, "size = %lu\n", ring_buffer_size(_stp_relay_data.rb)); return 0; -- 2.43.5