From: Xunlei Pang <xpang@redhat.com>
To: Wanpeng Li <kernellwp@gmail.com>, Benjamin Segall <bsegall@google.com>
Cc: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>,
xlpang@redhat.com, Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
stable@vger.kernel.org
Subject: Re: [PATCH] sched/fair: do not announce throttled next buddy in dequeue_task_fair
Date: Wed, 13 Jul 2016 09:58:29 +0800 [thread overview]
Message-ID: <5785A045.60505@redhat.com> (raw)
In-Reply-To: <CANRm+CzgZ42=28MzBaFU3fakhrS-JXf3bcD83fh1=UX1QWOSLw@mail.gmail.com>
On 2016/07/13 at 09:50, Wanpeng Li wrote:
> 2016-07-13 1:25 GMT+08:00 <bsegall@google.com>:
>> Konstantin Khlebnikov <khlebnikov@yandex-team.ru> writes:
>>
>>> On 11.07.2016 15:12, Xunlei Pang wrote:
>>>> On 2016/07/11 at 17:54, Wanpeng Li wrote:
>>>>> Hi Konstantin, Xunlei,
>>>>> 2016-07-11 16:42 GMT+08:00 Xunlei Pang <xpang@redhat.com>:
>>>>>> On 2016/07/11 at 16:22, Xunlei Pang wrote:
>>>>>>> On 2016/07/11 at 15:25, Wanpeng Li wrote:
>>>>>>>> 2016-06-16 20:57 GMT+08:00 Konstantin Khlebnikov <khlebnikov@yandex-team.ru>:
>>>>>>>>> Hierarchy could be already throttled at this point. Throttled next
>>>>>>>>> buddy could trigger null pointer dereference in pick_next_task_fair().
>>>>>>>> There is cfs_rq->next check in pick_next_entity(), so how can null
>>>>>>>> pointer dereference happen?
>>>>>>> I guess it's the following code leading to a NULL se returned:
>>>>>> s/NULL/empty-entity cfs_rq se/
>>>>>>
>>>>>>> pick_next_entity():
>>>>>>> if (cfs_rq->next && wakeup_preempt_entity(cfs_rq->next, left) < 1)
>>>>> ^^^^^^^^^^^^^
>>>>> I think this will return false.
>>>> With the wrong throttled_hierarchy(), I think this can happen. But after we have the
>>>> corrected throttled_hierarchy() patch, I can't see how it is possible.
>>>>
>>>> dequeue_task_fair():
>>>> if (task_sleep && parent_entity(se))
>>>> set_next_buddy(parent_entity(se));
>>>>
>>>> How does dequeue_task_fair() with DEQUEUE_SLEEP set(true task_sleep) happen to a throttled hierarchy?
>>>> IOW, a task belongs to a throttled hierarchy is running?
>>>>
>>>> Maybe Konstantin knows the reason.
>>> This function (dequeue_task_fair) check throttling but at point it could skip several
>>> levels and announce as next buddy actually throttled entry.
>>> Probably this bug hadn't happened but this's really hard to prove that this is impossible.
>>> ->set_curr_task(), PI-boost or some tricky migration in balancer could break this easily.
>> sched_setscheduler can call put_prev_task, which then can cause a
>> throttle outside of __schedule(), then the task blocks normally and
>> deactivate_task(DEQUEUE_SLEEP) happens and you lose.
> The cfs_rq_throttled() check in dequeue_task_fair() will capture the
> cfs_rq which is throttled in sched_setscheduler::put_prev_task path,
> so nothing lost, where I miss?
cfs_rq_throttled() returns false for child cgroups in the throttled hierarchy, so
throttled_hierarchy() should be relied on in such cases.
Regards,
Xunlei
next prev parent reply other threads:[~2016-07-13 1:59 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-16 12:57 [PATCH] sched/fair: do not announce throttled next buddy in dequeue_task_fair Konstantin Khlebnikov
2016-06-16 17:06 ` bsegall
2016-06-21 13:44 ` Konstantin Khlebnikov
2016-06-24 9:00 ` [tip:sched/urgent] sched/fair: Do not announce throttled next buddy in dequeue_task_fair() tip-bot for Konstantin Khlebnikov
2016-07-11 7:25 ` [PATCH] sched/fair: do not announce throttled next buddy in dequeue_task_fair Wanpeng Li
2016-07-11 8:15 ` Konstantin Khlebnikov
2016-07-11 8:22 ` Xunlei Pang
2016-07-11 8:42 ` Xunlei Pang
2016-07-11 9:54 ` Wanpeng Li
2016-07-11 12:12 ` Xunlei Pang
2016-07-11 12:26 ` Konstantin Khlebnikov
2016-07-12 17:25 ` bsegall
2016-07-13 1:50 ` Wanpeng Li
2016-07-13 1:58 ` Xunlei Pang [this message]
2016-07-13 2:14 ` Wanpeng Li
2016-07-13 17:06 ` bsegall
2016-07-14 12:11 ` Wanpeng Li
2016-07-14 17:54 ` bsegall
2016-07-14 22:30 ` Wanpeng Li
2016-07-14 22:49 ` bsegall
2016-07-14 23:03 ` Wanpeng Li
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5785A045.60505@redhat.com \
--to=xpang@redhat.com \
--cc=bsegall@google.com \
--cc=kernellwp@gmail.com \
--cc=khlebnikov@yandex-team.ru \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=stable@vger.kernel.org \
--cc=xlpang@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.