Messages in this thread |  | | Date | Mon, 16 Jun 2008 08:22:49 -0400 | From | Mathieu Desnoyers <> | Subject | Re: [PATCH 2/3] relay: Fix race condition which occurs when reading across CPUs. |
| |
* Eduard - Gabriel Munteanu (eduard.munteanu@linux360.ro) wrote: > On Fri, 13 Jun 2008 23:26:41 -0500 > Tom Zanussi <tzanussi@gmail.com> wrote: > > > Alternatively, you could get rid of the problem by making sure CPU0 > > never reads CPU1's data, by having the userspace reader use per-cpu > > threads and using sched_setaffinity() to pin each thread to a given > > cpu. See for example, the blktrace code, which does this. > > Yes, and performance-wise this is better. Though I'm not sure setting > affinity is 100% safe. Will the thread be migrated soon enough, so we > don't read cross-CPU? The point is I'm not sure how hard this is > enforced. > > However, I suggest this patch should go in, for two reasons: > 1. It provides expected behavior in any such situation. > 2. It adds (almost) no overhead when used in conjuction with setting CPU > affinity. When the writer acquires the spinlock, it does not busy-wait, > so the spinlock just disables IRQs (relay_write()). >
Hi Eduard,
Two objections against this. First, taking a spinlock _is_ slow in SMP because it involves synchronized atomic operations.
Second, Adding a spinlock to the relay write side is bad since it opens the door to deadly embrace between a trap handler and normal kernel code both running tracing code.
Unless really-really needed, which does not seem to be the case, I would strongly recommend not merging this patch.
Mathieu
> > Actually, in a few days or so I'm planning on releasing the first cut > > of a library that makes this and all the rest of the nice blktrace > > userspace code available to other tracing applications, not just > > blktrace. Hopefully it would be something that you'd be able to use > > for kmemtrace as well; in that case, you'd just use the library and > > not have to worry about these details. > > Sounds good. Thanks for letting me know. > > > Eduard >
-- Mathieu Desnoyers OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
|  |