** Package changed: linux (Ubuntu) => qemu (Ubuntu)

** Description changed:

  KVM virtual machines with only a serial pty console will hang on start,
  consuming 100% cpu, waiting for input from the console. This prevents
  normal starting of virtual machines in a server environment.
  
  Possibly related: https://bugs.launchpad.net/qemu/+bug/1047470
  
- 
- ==============================================
- Software versions
- ==============================================
+ ======== Software versions ========
  Ubuntu 12.10 quantal
  Ubuntu 3.5.0-23.35-generic 3.5.7.2
  qemu 1.2.0+noroms-0ubuntu2.12.10.2
  kvm 1:84+dfsg-0ubuntu16+1.2.0+noroms+0ubuntu2.12.10.2
  linux-image-3.5.0-23-generic 3.5.0-23.35
- ==============================================
  
+ ======== Example libvirt config snippet ========
+     <serial type='pty'>
+       <target port='0'/>
+     </serial>
+     <console type='pty'>
+       <target type='serial' port='0'/>
+     </console>
  
- ==============================================
- Example libvirt config snippet:
- ==============================================
-     <serial type='pty'>
-       <target port='0'/>
-     </serial>
-     <console type='pty'>
-       <target type='serial' port='0'/>
-     </console>
- ==============================================
- 
- 
- ==============================================
- strace of kvm process during 100% cpu utilization shows the following 
repeating in a loop:
- ==============================================
+ ======== strace ========
+ strace of kvm process during 100% cpu utilization shows the following 
repeating in a loop..........................
  write(9, "\1\0\0\0\0\0\0\0", 8)         = 8
  read(7, 0x7fffe7e1a5a0, 128)            = -1 EAGAIN (Resource temporarily 
unavailable)
  write(9, "\1\0\0\0\0\0\0\0", 8)         = 8
  timer_gettime(0x8, {it_interval={0, 0}, it_value={0, 0}}) = 0
  timer_settime(0x8, 0, {it_interval={0, 0}, it_value={0, 9934393}}, NULL) = 0
  timer_gettime(0x8, {it_interval={0, 0}, it_value={0, 9893037}}) = 0
  timer_settime(0x8, 0, {it_interval={0, 0}, it_value={0, 1041537}}, NULL) = 0
  timer_gettime(0x8, {it_interval={0, 0}, it_value={0, 997359}}) = 0
  timer_settime(0x8, 0, {it_interval={0, 0}, it_value={0, 945520}}, NULL) = 0
  futex(0x7f0545dd69c0, FUTEX_WAKE_PRIVATE, 1) = 1
  select(17, [4 7 8 11 14 15 16], [], [], NULL) = 2 (in [4 8])
  read(4, 0x7fffe7e196b0, 1)              = -1 EIO (Input/output error)
  timer_gettime(0x8, {it_interval={0, 0}, it_value={0, 753905}}) = 0
  timer_settime(0x8, 0, {it_interval={0, 0}, it_value={0, 705886}}, NULL) = 0
  read(8, "\2\0\0\0\0\0\0\0", 512)        = 8
  futex(0x7f0545dd69c0, FUTEX_WAKE_PRIVATE, 1) = 1
  select(17, [7 8 11 14 15 16], [], [], NULL) = 1 (in [7])
  read(7, 
"\16\0\0\0\0\0\0\0\376\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\10\0\0\0\0\0\0\0"...,
 128) = 128
  rt_sigaction(SIGALRM, NULL, {0x7f05450ca800, ~[KILL STOP RTMIN RT_1], 
SA_RESTORER, 0x7f0540bcacb0}, 8) = 0
- ==============================================
  
- 
- ==============================================
- workaround #1:
- ==============================================
+ ======== workaround ========
  --- qemu-kvm-1.2.0+noroms/qemu-char.c.orig    2013-02-03 01:00:59.874031609 
+0000
  +++ qemu-kvm-1.2.0+noroms/qemu-char.c 2013-02-03 00:49:15.098213218 +0000
  @@ -988,6 +988,7 @@
-      char *pty_name = NULL;
-  #define q_ptsname(x) ptsname(x)
-  #endif
+      char *pty_name = NULL;
+  #define q_ptsname(x) ptsname(x)
+  #endif
  +    char bleh[1] = {'\0'};
-  
-      if (openpty(&master_fd, &slave_fd, pty_name, NULL, NULL) < 0) {
-          return NULL;
+ 
+      if (openpty(&master_fd, &slave_fd, pty_name, NULL, NULL) < 0) {
+          return NULL;
  @@ -997,6 +998,7 @@
-      tcgetattr(slave_fd, &tty);
-      cfmakeraw(&tty);
-      tcsetattr(slave_fd, TCSAFLUSH, &tty);
+      tcgetattr(slave_fd, &tty);
+      cfmakeraw(&tty);
+      tcsetattr(slave_fd, TCSAFLUSH, &tty);
  +    write(slave_fd, bleh, 1);
-      close(slave_fd);
-  
-      chr = g_malloc0(sizeof(CharDriverState));
- ==============================================
+      close(slave_fd);
+ 
+      chr = g_malloc0(sizeof(CharDriverState));

** Description changed:

- KVM virtual machines with only a serial pty console will hang on start,
+ QEMU virtual machines with only a serial pty console will hang on start,
  consuming 100% cpu, waiting for input from the console. This prevents
  normal starting of virtual machines in a server environment.
  
  Possibly related: https://bugs.launchpad.net/qemu/+bug/1047470
  
  ======== Software versions ========
  Ubuntu 12.10 quantal
  Ubuntu 3.5.0-23.35-generic 3.5.7.2
  qemu 1.2.0+noroms-0ubuntu2.12.10.2
  kvm 1:84+dfsg-0ubuntu16+1.2.0+noroms+0ubuntu2.12.10.2
  linux-image-3.5.0-23-generic 3.5.0-23.35
  
  ======== Example libvirt config snippet ========
      <serial type='pty'>
        <target port='0'/>
      </serial>
      <console type='pty'>
        <target type='serial' port='0'/>
      </console>
  
  ======== strace ========
  strace of kvm process during 100% cpu utilization shows the following 
repeating in a loop..........................
  write(9, "\1\0\0\0\0\0\0\0", 8)         = 8
  read(7, 0x7fffe7e1a5a0, 128)            = -1 EAGAIN (Resource temporarily 
unavailable)
  write(9, "\1\0\0\0\0\0\0\0", 8)         = 8
  timer_gettime(0x8, {it_interval={0, 0}, it_value={0, 0}}) = 0
  timer_settime(0x8, 0, {it_interval={0, 0}, it_value={0, 9934393}}, NULL) = 0
  timer_gettime(0x8, {it_interval={0, 0}, it_value={0, 9893037}}) = 0
  timer_settime(0x8, 0, {it_interval={0, 0}, it_value={0, 1041537}}, NULL) = 0
  timer_gettime(0x8, {it_interval={0, 0}, it_value={0, 997359}}) = 0
  timer_settime(0x8, 0, {it_interval={0, 0}, it_value={0, 945520}}, NULL) = 0
  futex(0x7f0545dd69c0, FUTEX_WAKE_PRIVATE, 1) = 1
  select(17, [4 7 8 11 14 15 16], [], [], NULL) = 2 (in [4 8])
  read(4, 0x7fffe7e196b0, 1)              = -1 EIO (Input/output error)
  timer_gettime(0x8, {it_interval={0, 0}, it_value={0, 753905}}) = 0
  timer_settime(0x8, 0, {it_interval={0, 0}, it_value={0, 705886}}, NULL) = 0
  read(8, "\2\0\0\0\0\0\0\0", 512)        = 8
  futex(0x7f0545dd69c0, FUTEX_WAKE_PRIVATE, 1) = 1
  select(17, [7 8 11 14 15 16], [], [], NULL) = 1 (in [7])
  read(7, 
"\16\0\0\0\0\0\0\0\376\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\10\0\0\0\0\0\0\0"...,
 128) = 128
  rt_sigaction(SIGALRM, NULL, {0x7f05450ca800, ~[KILL STOP RTMIN RT_1], 
SA_RESTORER, 0x7f0540bcacb0}, 8) = 0
  
  ======== workaround ========
  --- qemu-kvm-1.2.0+noroms/qemu-char.c.orig    2013-02-03 01:00:59.874031609 
+0000
  +++ qemu-kvm-1.2.0+noroms/qemu-char.c 2013-02-03 00:49:15.098213218 +0000
  @@ -988,6 +988,7 @@
       char *pty_name = NULL;
   #define q_ptsname(x) ptsname(x)
   #endif
  +    char bleh[1] = {'\0'};
  
       if (openpty(&master_fd, &slave_fd, pty_name, NULL, NULL) < 0) {
           return NULL;
  @@ -997,6 +998,7 @@
       tcgetattr(slave_fd, &tty);
       cfmakeraw(&tty);
       tcsetattr(slave_fd, TCSAFLUSH, &tty);
  +    write(slave_fd, bleh, 1);
       close(slave_fd);
  
       chr = g_malloc0(sizeof(CharDriverState));

** Summary changed:

- kvm's with only serial console: hang on start, consume 100% cpu, waiting for 
console input
+ vm's with pty console hang on start, eat 100% cpu waiting for console input

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

Title:
  vm's with pty console hang on start, eat 100% cpu waiting for console
  input

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

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to