qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [Bug 1797332] Re: qemu nested virtualization is not working


From: Thomas Huth
Subject: [Qemu-devel] [Bug 1797332] Re: qemu nested virtualization is not working with Ubuntu16.04
Date: Thu, 11 Oct 2018 09:45:55 -0000

** Project changed: qemu => qemu (Ubuntu)

-- 
You received this bug notification because you are a member of qemu-
devel-ml, which is subscribed to QEMU.
https://bugs.launchpad.net/bugs/1797332

Title:
  qemu nested virtualization is not working with Ubuntu16.04

Status in qemu package in Ubuntu:
  New

Bug description:
  # 1 What am I trying to do ? #

  I want to use `libvirt` `qemu/KVM` with **nested virtualization** like 
described
  in [1] and [2].
  **But it does not work with Ubuntu16.04.** It worked some times ago, but not
  anymore.

  
  I want 2 levels of virtualization like this:

  * L0 – the bare metal host, running KVM on `Ubuntu 16.04`
  * L1 – a `Ubuntu 16.04` VM running on L0; also called the "guest hypervisor" 
    — as it itself is capable of running KVM
  * L2 – a `Ubuntu 16.04` VM running on L1, also called the "nested guest"

  
  [1] 
https://docs.fedoraproject.org/en-US/quick-docs/using-nested-virtualization-in-kvm/
  [2] https://www.linux-kvm.org/page/Nested_Guests

  
  My goal is to deploy an `OpenStack` environnement on top of VMs rather than on
  bare metal hosts for convenience for a lab experiment. As a result, the 
  `OpenStack` nodes are L1 VMs. Compute nodes are L1 VMs as well and the VMs 
  created with `OpenStack` and wich are running on the compute nodes are L2 VMs.



  
  # 2 What is my problem ? #

  I can **not** run my 2nd levels of virtualization in 16.04:

  * L0 is just fine: running `Ubuntu 16.04.5 LTS`, installed with the `.iso` 
image
  * L1: I install `libvirt` + `KVM` on L0. I can run VMs like the `Ubuntu16.04` 
    cloud image on L0.
  * L2: I install `libvirt` + `KVM` on L1 as well. But I **can not** run VMs on 
    L1: I get `kernel panic` or `general protection fault`.

  
  **But if I do the same with Ubuntu18.04** (on the same hardware) instead of 
  `Ubuntu16.04`, it works without faults.
  I don't change the configuration or `virt-install scripts` (other than using 
  the 18.04 .iso and cloud image).



  
  # 3 My libvirt installation for Ubuntu16.04 #

  I install `libvir KVM` in both L0 and L1 using a custom repository [3] from 
  `OpenStack` team, because their version of libvirt in this repo is newer than 
 
  the one on Ubuntu 16.04 official repo and it match the version of `libvirt` 
  in Ubuntu 18.04.

  [3] https://wiki.ubuntu.com/OpenStack/CloudArchive



  
  # 4 hardware and CPU #

  CPU is:
  > Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz
  > Intel virt is enable in the bios/uefi.

  The rest is standard HDD, standard I/O...



  
  # 5 .iso and cloud image #

  I download .iso for L0 bare metal server and cloud image 
  for L1/L2 VMs from official repository:

  Ubuntu 16.04
   * http://releases.ubuntu.com/16.04/
   * https://cloud-images.ubuntu.com/releases/16.04/release/

  Ubuntu 18.04
   * http://releases.ubuntu.com/bionic/
   * https://cloud-images.ubuntu.com/releases/18.04/release/



  
  # 6 Details #

  ## Details about L0 Ubuntu 16.04 bare metal host ##
  L0 is running `Ubuntu 16.04.5 LTS` installed with the .iso.

  
  **kernel**
  ```
  address@hidden:~$ uname -a
  Linux L0 4.4.0-137-generic #163-Ubuntu SMP Mon Sep 24 13:14:43 UTC 2018 
x86_64 x86_64 x86_64 GNU/Linux
  ```

  **libvirt version** running on L0
  ```
  address@hidden:~$ virsh version
  Compiled against library: libvirt 4.0.0
  Using library: libvirt 4.0.0
  Using API: QEMU 4.0.0
  Running hypervisor: QEMU 2.11.1
  ```

  **qemu version detail**
  ```
  address@hidden:~$ qemu-system-x86_64 --version
  QEMU emulator version 2.11.1(Debian 1:2.11+dfsg-1ubuntu7.5~cloud0)
  Copyright (c) 2003-2017 Fabrice Bellard and the QEMU Project developers
  ```

  **KVM acceleration**
  ```
  address@hidden:~$ kvm-ok 
  INFO: /dev/kvm exists
  KVM acceleration can be used
  ```

  **nested parameter**
  ```
  address@hidden:~$ cat /sys/module/kvm_intel/parameters/nested
  Y
  ```

  **number of CPU**
  ```
  address@hidden:~$ egrep -c '(vmx|svm)' /proc/cpuinfo
  48
  ```


  ## Details about a L1 Ubuntu 16.04 VM ##
  A VM in L1 (which is running on L0) which is running `Ubuntu 16.04.5 LTS` 
  installed by a cloud image.

  **kernel**
  ```
  address@hidden:~$ uname -a
  Linux L1 4.4.0-137-generic #163-Ubuntu SMP Mon Sep 24 13:14:43 UTC 2018 
x86_64 x86_64 x86_64 GNU/Linux
  ```

  **libvirt version** running on the L1 VM
  ```
  address@hidden:~$ sudo virsh version
  Compiled against library: libvirt 4.0.0
  Using library: libvirt 4.0.0
  Using API: QEMU 4.0.0
  Running hypervisor: QEMU 2.11.1
  ```

  **qemu version detail**
  ```
  address@hidden:~$ qemu-system-x86_64 --version
  QEMU emulator version 2.11.1(Debian 1:2.11+dfsg-1ubuntu7.5~cloud0)
  Copyright (c) 2003-2017 Fabrice Bellard and the QEMU Project developers
  ```

  **KVM acceleration**
  ```
  address@hidden:~$ kvm-ok 
  INFO: /dev/kvm exists
  KVM acceleration can be used
  ```

  **nested parameter**
  ```
  address@hidden:~$ cat /sys/module/kvm_intel/parameters/nested
  Y
  ```

  **number of CPU**, which are vCPU given by L0 to the L1 VM
  I give 20 vCPU.
  ```
  address@hidden:~$ egrep -c '(vmx|svm)' /proc/cpuinfo
  20
  ```


  ## L1 VM virt-install script parameter ##
  If you want to reproduce an L1 VM, I followed this [4]:

  ```
  virt-install \
      --connect=qemu:///system \
      --name $VMName \
      --memory $RAM \
      --vcpus $VCPUS \
      --cpu host \
      --metadata description=$DESCRIPTION \
      --os-type linux \
      --os-variant ubuntu16.04 \
      --disk $DISK_PATH/$VMName.$DISK_FORMAT,size=$DISK_SIZE,bus=virtio \
      --disk $CFGIMG_PATH/config_$VMName.$DISK_FORMAT,device=cdrom \
      --network bridge=virbr0 \
      --graphics none \
      --console pty,target_type=serial \
      --hvm
  ```

  [4] https://youth2009.org/post/kvm-with-ubuntu-cloud-image/


  ## Details about a L2 VM ##

  I want to create a L2 `Ubuntu 16.04.5 LTS` VM installed by a cloud image VM 
  within my L1 `KVM` VM. But whatever I do, my L2 VM crash before finishing to 
be 
  instantiated. I get `kernel panic` or `general protection fault`.

  
  Here is the log of an L2 VM after the instanciation failed:
  ```
  address@hidden:~$ less /var/log/libvirt/qemu/VMNAME.log

  2018-10-11T07:40:45.837151Z qemu-system-x86_64: -chardev pty,id=charserial0: 
char device redirected to /dev/pts/1 (label charserial0)
  2018-10-11T07:40:45.844279Z qemu-system-x86_64: warning: host doesn't support 
requested feature: CPUID.07H:EBX.invpcid [bit 10]
  2018-10-11T07:40:45.848532Z qemu-system-x86_64: warning: host doesn't support 
requested feature: CPUID.07H:EBX.invpcid [bit 10]
  ```

  
  If you want to reproduce an L2 VM running on L1, follow [4].

  
  **However** a Cirros OS image can run on a L1 VM !



  
  # 7 Thoughts #
  I think this is a bug in either `Ubuntu16.04` or `libvirt`.
  All the information are here to reproduce the bug, I think.

  
  If I do the same with `Ubuntu 18.04`, on the same hardware, following the 
same 
  steps but with Ubuntu 18.04 .iso and cloud image, it works.

  It works if:

  * L0 = Ubuntu18.04 (.iso) + qemu/KVM
  * L1 = Ubuntu18.04 (cloud image) + qemu/KVM
  * L2 = Ubuntu18.04 (cloud image)

  
  It also works if:

  * L0 = Ubuntu18.04 (.iso) + qemu/KVM
  * L1 = Ubuntu18.04 (cloud image) + qemu/KVM
  * L2 = Ubuntu16.04 (cloud image)


  
  Thank you for your time reading !
  --
  nico

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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]