[Bug 880049] Re: 100% CPU usage in init if /dev/console is not available

James Hunt 880049 at bugs.launchpad.net
Tue Oct 25 08:53:00 UTC 2011


Thanks for reporting this issue. However, the console device is a device
expected to exist on all Linux systems. The problem here is that Upstart
*needs* access to the console: if it has no console access, jobs would
behave differently in an OpenVZ container to running outside a container
(bad). The patch above will not help jobs that have specified they want
console access or ownership ("console output" or "console owner").

I am not an OpenVZ expert, but I do feel that the "fix" for this issue
is for the OpenVZ environment to provide a /dev/console that Upstart is
able to use such as would be provided by other virtualization
technologies (LXC, qemu/kvm, Xen, VirtualBox) otherwise Upstart cannot
guarantee job behaviour.

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to upstart in Ubuntu.
https://bugs.launchpad.net/bugs/880049

Title:
  100% CPU usage in init if /dev/console is not available

Status in “upstart” package in Ubuntu:
  Confirmed

Bug description:
  When /dev/console is not available (for example when running as an OpenVZ guest), init consumes 100% time of one CPU core.
  Here is a strace excerpt captured on the OpenVZ host :

  ...
  waitid(P_ALL, 0, {}, WNOHANG|WEXITED|WSTOPPED|WCONTINUED, NULL) = 0
  clock_gettime(CLOCK_MONOTONIC, {3903451, 826182267}) = 0
  select(5, [0 3 4], [], [4], NULL) = 1 (in [0])
  read(0, "", 1) = 0
  waitid(P_ALL, 0, {}, WNOHANG|WEXITED|WSTOPPED|WCONTINUED, NULL) = 0
  clock_gettime(CLOCK_MONOTONIC, {3903451, 826467596}) = 0
  select(5, [0 3 4], [], [4], NULL) = 1 (in [0])
  read(0, "", 1) = 0
  waitid(P_ALL, 0, {}, WNOHANG|WEXITED|WSTOPPED|WCONTINUED, NULL) = 0
  clock_gettime(CLOCK_MONOTONIC, {3903451, 827157279}) = 0
  select(5, [0 3 4], [], [4], NULL) = 1 (in [0])
  read(0, "", 1) = 0
  ...

  Here is what happens :

  - in init's main function, system_setup_console(CONSOLE_OUTPUT) fails, leaving file descriptors 0 and 1 uninitialized
  - nih_main_loop_init eventually get called, initializing its interrupt_pipe on file descriptors 0 and 1
  - we end up calling system_setup_console(CONSOLE_NONE), resetting file descriptors 0 and 1 to /dev/null
  - in nih_main_loop, select is called on 0 (/dev/null instead of the pipe) which repeatedly appears to have changed

  I'm attaching a small patch which fixes this.

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/upstart/+bug/880049/+subscriptions




More information about the foundations-bugs mailing list