Excessive CPU usage in ProcessLauncher()'s wait loop
Bug #1095346 reported by
Mark McLoughlin
This bug affects 1 person
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
neutron |
Fix Released
|
Medium
|
Maru Newby | ||
oslo-incubator |
Fix Released
|
Medium
|
Maru Newby |
Bug Description
See https:/
We can't use os.wait() to block until a child exited so, instead, we're busy-looping
We should be able to come up with another way of doing this - e.g. using pipes provided to each child to give us a selectable handle we can block on
Changed in oslo: | |
assignee: | nobody → Davanum Srinivas (dims-v) |
status: | Triaged → In Progress |
Changed in oslo: | |
status: | Fix Committed → Triaged |
assignee: | Davanum Srinivas (dims-v) → nobody |
Changed in oslo: | |
importance: | High → Medium |
Changed in oslo: | |
assignee: | Maru Newby (maru) → nobody |
Changed in oslo: | |
assignee: | nobody → Maru Newby (maru) |
Changed in oslo: | |
milestone: | none → icehouse-2 |
status: | In Progress → Fix Committed |
Changed in neutron: | |
assignee: | nobody → Maru Newby (maru) |
milestone: | none → icehouse-2 |
Changed in neutron: | |
importance: | Undecided → Medium |
Changed in neutron: | |
milestone: | icehouse-2 → icehouse-3 |
Changed in oslo: | |
status: | Fix Committed → Fix Released |
Changed in neutron: | |
status: | In Progress → Fix Committed |
Changed in neutron: | |
status: | Fix Committed → Fix Released |
Changed in oslo: | |
milestone: | icehouse-2 → 2014.1 |
Changed in neutron: | |
milestone: | icehouse-3 → 2014.1 |
To post a comment you must log in.
Reviewed: https:/ /review. openstack. org/18689 github. com/openstack/ oslo-incubator/ commit/ ffeb08550856170 95f19296770a122 3cb5641d1c
Committed: http://
Submitter: Jenkins
Branch: master
commit ffeb08550856170 95f19296770a122 3cb5641d1c
Author: Davanum Srinivas <email address hidden>
Date: Thu Dec 27 12:22:56 2012 -0500
Don't rely on os.wait() blocking
Before this fix which was included in eventlet 0.10.0:
https:/ /bitbucket. org/which_ linden/ eventlet/ issue/92/ eventletgreen- override- of-oswaitpid
the os.wait() wrapper in eventlet would not block if no child processes
had exited. This was clearly buggy behaviour and os.wait() no blocks
correctly. However, it appears it now does not return if the parent process
was interrupted by a signal. This means that you can't kill the parent process
and have the child processes cleaned up gracefully.
To avoid all these issues, switch to non-blocking wait behaviour. We use
WNOHANG with waitpid() to poll for an exited child process and, if there
is none, we yield to other green threads and sleep for a short period.
This means excessive CPU usage, though, which will be tracked by
bug #1095346.
Check pid to avoid some unnecessary warning/info messages in the logs
Fixes LP #1094076
Change-Id: I783fac652376c2 daa9d591403b9f4 c1fe9523043