lkml.org 
[lkml]   [2018]   [Sep]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC 00/60] Coscheduling for Linux
    Date
    On 09/12/2018 09:34 PM, Jan H. Schönherr wrote:
    > That said, I see a hang, too. It seems to happen, when there is a
    > cpu.scheduled!=0 group that is not a direct child of the root task group.
    > You seem to have "/sys/fs/cgroup/cpu/machine" as an intermediate group.
    > (The case ==0 within !=0 within the root task group works for me.)
    >
    > I'm going to dive into the code.

    With the patch below (which technically changes patch 55/60), the hang I experienced is gone.

    Please let me know, if it works for you as well.

    Regards
    Jan


    diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
    index 8da2033596ff..2d8b3f9a275f 100644
    --- a/kernel/sched/fair.c
    +++ b/kernel/sched/fair.c
    @@ -7189,23 +7189,26 @@ pick_next_task_fair(struct rq *rq, struct task_struct *prev, struct rq_flags *rf
    while (!(cfs_rq = is_same_group(se, pse))) {
    int se_depth = se->depth;
    int pse_depth = pse->depth;
    + bool work = false;

    - if (se_depth <= pse_depth && leader_of(pse) == cpu) {
    + if (se_depth <= pse_depth && __leader_of(pse) == cpu) {
    put_prev_entity(cfs_rq_of(pse), pse);
    pse = parent_entity(pse);
    + work = true;
    }
    - if (se_depth >= pse_depth && leader_of(se) == cpu) {
    + if (se_depth >= pse_depth && __leader_of(se) == cpu) {
    set_next_entity(cfs_rq_of(se), se);
    se = parent_entity(se);
    + work = true;
    }
    - if (leader_of(pse) != cpu && leader_of(se) != cpu)
    + if (!work)
    break;
    }

    - if (leader_of(pse) == cpu)
    - put_prev_entity(cfs_rq, pse);
    - if (leader_of(se) == cpu)
    - set_next_entity(cfs_rq, se);
    + if (__leader_of(pse) == cpu)
    + put_prev_entity(cfs_rq_of(pse), pse);
    + if (__leader_of(se) == cpu)
    + set_next_entity(cfs_rq_of(se), se);
    }

    goto done;
    \
     
     \ /
      Last update: 2018-09-13 01:18    [W:4.533 / U:0.292 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site