Messages in this thread | | | Date | Thu, 12 Mar 2009 09:38:39 -0400 (EDT) | From | Steven Rostedt <> | Subject | Re: [PATCH 4/4] ring-buffer: only allocate buffers for online cpus |
| |
On Thu, 12 Mar 2009, KOSAKI Motohiro wrote:
> > From: Steven Rostedt <srostedt@redhat.com> > > > > Impact: save on memory > > > > Currently, a ring buffer was allocated for each "possible_cpus". On > > some systems, this is the same as NR_CPUS. Thus, if a system defined > > NR_CPUS = 64 but it only had 1 CPU, we could have possibly 63 useless > > ring buffers taking up space. With a default buffer of 3 megs, this > > could be quite drastic. > > > > This patch changes the ring buffer code to only allocate ring buffers > > for online CPUs. If a CPU goes off line, we do not free the buffer. > > This is because the user may still have trace data in that buffer > > that they would like to look at. > > > > Perhaps in the future we could add code to delete a ring buffer if > > the CPU is offline and the ring buffer becomes empty. > > I don't like this patch. > your [1/4] and [2/4] already solve Pierre's problem. > > using online cpu (not possible cpu) increase performance overhead > and messiness. > but nobody get benefit ;)
Well, the fact that you can have 15 buffers for non existent CPUs is a big benefit. And the overhead was only on the read side, not the write, and very limited in overhead for that matter.
But, looking at this, I realized I can get rid of all the "get_online_cpus". I originally had the CPU_DOWN_PREPARE remove the buffer. But I found it highly annoying during tests, that I lose my data when I brought down a CPU. Thus, I removed the code to free the buffer and replaced it with the comment explaining this.
The get_online_cpus is to prevent the race where we might remove a buffer. But since we do not do that anymore, those get_online_cpus are pretty useless.
I'll update the code in a bit.
-- Steve
| |