Messages in this thread | | | Date | Tue, 11 Aug 2015 18:02:29 -0700 | From | "Paul E. McKenney" <> | Subject | Re: [tip:x86/asm] x86/asm/entry/64: Migrate error and IRQ exit work to C and remove old assembly code |
| |
On Tue, Aug 11, 2015 at 03:59:37PM -0700, Andy Lutomirski wrote: > On Tue, Aug 11, 2015 at 3:49 PM, Frederic Weisbecker <fweisbec@gmail.com> wrote: > > On Tue, Aug 11, 2015 at 03:25:04PM -0700, Andy Lutomirski wrote: > >> Can you explain to me what context tracking does that rcu_irq_enter > >> and vtime_account_irq_enter don't do that's expensive? Frankly, I'd > >> rather drop everything except the context tracking callback. > > > > Irqs have their own hooks in the generic code. irq_enter() and irq_exit(). > > And those take care of RCU and time accounting already. So arch code really > > doesn't need to care about that. > > I'd love to have irq_enter_from_user and irq_enter_from_kernel instead.
RCU would need to know about irq_enter_from_user(), but could blithely ignore irq_enter_from_kernel(). Unless irq_enter_from_kernel() is called from the idle loop, in which case RCU would need to know. All that aside, the overhead of rcu_irq_enter() when called from non-idle kernel mode should be relatively small. So just telling RCU about all the interrupts is actually not a bad strategy.
> > context tracking exists for the sole purpose of tracking states that don't > > have generic hooks. Those are syscalls and exceptions. > > > > Besides, rcu_user_exit() is more costly than rcu_irq_enter() which have been > > designed for the very purpose of providing a fast RCU tracking for non sleepable > > code (which needs rcu_user_exit()). > > So rcu_user_exit is slower because it's okay to sleep after calling it? > > Would it be possible to defer the overhead until we actually try to > sleep rather than doing it on entry? (I have no idea what's going on > under the hood.)
Nor do I, at least not until someone tells me what .config they are using. NO_HZ_FULL, NO_HZ_FULL_SYSIDLE, and RCU_FAST_NO_HZ make a difference in this case.
> Anyway, irq_enter_from_user would solve this problem completely. > > > > > I've been thinking about pushing down syscalls and exceptions to generic > > handlers. It might work for syscalls btw. But many exceptions have only > > arch handlers, or significant amount of work is done on the arch level > > which might make use of RCU (eg: breakpoint handlers on x86). > > I'm trying to port the meat of the x86 syscall code to C. Maybe the > result will generalize. The exit code is already in C (in -tip).
That does sound like a good thing!
Thanx, Paul
| |