Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1616429
| From | Cong Wang <xiyou.wangcong@gmail.com> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | Re: net/sched: latent livelock in dev_deactivate_many() due to yield() usage |
| Date | 2017-04-05 00:40 +0200 |
| Message-ID | <tsFhf-2yy-13@gated-at.bofh.it> (permalink) |
| References | <trFjj-40B-3@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
On Sat, Apr 1, 2017 at 9:28 PM, Mike Galbraith <efault@gmx.de> wrote: > Greetings network wizards, > > Quoting kernel/sched/core.c: > /** > * yield - yield the current processor to other threads. > * > * Do not ever use this function, there's a 99% chance you're doing it wrong. > * > * The scheduler is at all times free to pick the calling task as the most > * eligible task to run, if removing the yield() call from your code breaks > * it, its already broken. > * > * Typical broken usage is: > * > * while (!event) > * yield(); > * > * where one assumes that yield() will let 'the other' process run that will > * make event true. If the current task is a SCHED_FIFO task that will never > * happen. Never use yield() as a progress guarantee!! > * > * If you want to use yield() to wait for something, use wait_event(). > * If you want to use yield() to be 'nice' for others, use cond_resched(). > * If you still want to use yield(), do not! > */ > > Livelock can be triggered by setting kworkers to SCHED_FIFO, then > suspend/resume.. you come back from sleepy-land with a spinning > kworker. For whatever reason, I can only do that with an enterprise > like config, my standard config refuses to play, but no matter, it's > "Typical broken usage". > > (yield() should be rendered dead) Thanks for the report! Looks like a quick solution here is to replace this yield() with cond_resched(), it is harder to really wait for all qdisc's to transmit all packets.
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
net/sched: latent livelock in dev_deactivate_many() due to yield() usage Mike Galbraith <efault@gmx.de> - 2017-04-02 06:30 +0200
Re: net/sched: latent livelock in dev_deactivate_many() due to yield() usage Cong Wang <xiyou.wangcong@gmail.com> - 2017-04-05 00:40 +0200
Re: net/sched: latent livelock in dev_deactivate_many() due to yield() usage Mike Galbraith <efault@gmx.de> - 2017-04-05 05:30 +0200
Re: net/sched: latent livelock in dev_deactivate_many() due to yield() usage Cong Wang <xiyou.wangcong@gmail.com> - 2017-04-05 07:30 +0200
Re: net/sched: latent livelock in dev_deactivate_many() due to yield() usage Mike Galbraith <efault@gmx.de> - 2017-04-05 08:20 +0200
Re: net/sched: latent livelock in dev_deactivate_many() due to yield() usage Cong Wang <xiyou.wangcong@gmail.com> - 2017-04-06 02:00 +0200
Re: net/sched: latent livelock in dev_deactivate_many() due to yield() usage Mike Galbraith <efault@gmx.de> - 2017-04-06 03:10 +0200
Re: net/sched: latent livelock in dev_deactivate_many() due to yield() usage Peter Zijlstra <peterz@infradead.org> - 2017-04-06 12:30 +0200
Re: net/sched: latent livelock in dev_deactivate_many() due to yield() usage Stephen Hemminger <stephen@networkplumber.org> - 2017-04-06 02:40 +0200
Re: net/sched: latent livelock in dev_deactivate_many() due to yield() usage Mike Galbraith <efault@gmx.de> - 2017-04-06 03:30 +0200
Re: net/sched: latent livelock in dev_deactivate_many() due to yield() usage Peter Zijlstra <peterz@infradead.org> - 2017-04-06 12:30 +0200
Re: net/sched: latent livelock in dev_deactivate_many() due to yield() usage Peter Zijlstra <peterz@infradead.org> - 2017-04-06 13:10 +0200
csiph-web