Messages in this thread |  | | Subject | Re: [PATCH 2/3] relay: Fix race condition which occurs when reading across CPUs. | From | Tom Zanussi <> | Date | Mon, 16 Jun 2008 00:38:10 -0500 |
| |
On Sat, 2008-06-14 at 19:16 +0300, Pekka Enberg 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. > > On Sat, Jun 14, 2008 at 6:11 PM, Eduard - Gabriel Munteanu > <eduard.munteanu@linux360.ro> wrote: > > 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()). > > Agreed. Tom, any objections to merging this patch?
Well, I suppose anyone who had a problem with it would make their own local copy of relay_write() without it, or more likely they'd be using relay_reserve() anyway. It does add some code to read() which can't be gotten around, but since it adds (almost) no overhead, it shouldn't be a problem.
So I guess I don't have strong feelings about it if it's solving a real usability problem and doesn't cause any performance (or other) regressions.
Tom
|  |