lkml.org 
[lkml]   [2018]   [May]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: Tasks RCU vs Preempt RCU
    On Tue, May 22, 2018 at 08:38:32AM -0400, Steven Rostedt wrote:
    > On Mon, 21 May 2018 21:54:14 -0700
    > Joel Fernandes <joel@joelfernandes.org> wrote:
    >
    >
    > > Yes, lets brain storm this if you like. One way I was thinking if we can
    > > manually check every CPU and see what state its in (usermode, kernel, idle
    > > etc) using an IPI mechanism. Once all CPUs have been seen to be in usermode,
    > > or idle atleast once - then we are done. You have probably already thought
    >
    > Nope, it has nothing to do with CPUs, it really has to do with tasks.
    >
    > CPU0
    > ----
    > task 1: (pinned to CPU 0)
    > call func_tracer_trampoline
    > [on trampoline]
    > [timer tick, schedule ]
    >
    > task 2: (higher priority, also pinned to CPU 0)
    > goes to user space
    > [ Runs for along time ]
    >
    > We cannot free the trampoline until task 2 releases the CPU and lets
    > task 1 run again to get off the CPU.

    What Steven said! IPIs get to CPUs, but we need to handle the
    (unlikely, but very real) case where a bunch of tasks are preempted
    within trampolines.

    > > about this so feel free to say why its not a good idea, but to me there are 3
    > > places that a tasks quiescent state is recorded: during the timer tick,
    > > during task sleep and during rcu_note_voluntary_context_switch in
    > > cond_resched_rcu_qs. Of these, I feel only the cond_resched_rcu_qs case isn't
    > > trackable with IPI mechanism which may make the detection a bit slower, but
    > > tasks-RCU in mainline is slow right now anyway (~ 1 second delay if any task
    > > was held).
    >
    > The way I was originally going to handle this was with a per task
    > counter, where it can be incremented at certain points via tracepoints.
    >
    > Thus my synchronize tasks, would have connected to a bunch of
    > tracepoints at known quiescent states that would increment the counter,
    > and then check each task until they all pass a certain point, or are in
    > a quiescent state (userspace or idle). But this would be doing much of
    > what RCU does today, and that is why we decided to hook with the RCU
    > infrastructure.

    Just for the record, if you guys realy want to take over Tasks RCU,
    I have no objections. For one thing, I don't anticipate any other use
    cases for it (famous last words!). But you break it, you buy it! ;-)

    Thanx, Paul

    > I have to ask, what's your motivation for getting rid of RCU tasks?
    >
    > -- Steve
    >

    \
     
     \ /
      Last update: 2018-05-22 18:09    [W:4.892 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site