€•"°Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ6/translations/zh_CN/virt/kvm/x86/running-nested-guests”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ6/translations/zh_TW/virt/kvm/x86/running-nested-guests”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ6/translations/it_IT/virt/kvm/x86/running-nested-guests”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ6/translations/ja_JP/virt/kvm/x86/running-nested-guests”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ6/translations/ko_KR/virt/kvm/x86/running-nested-guests”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ6/translations/pt_BR/virt/kvm/x86/running-nested-guests”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ6/translations/sp_SP/virt/kvm/x86/running-nested-guests”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)�”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…”�”}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/virt/kvm/x86/running-nested-guests.rst”h´KubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒRunning nested guests with KVM”h]”hŒRunning nested guests with KVM”…”�”}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhŒ paragraph”“”)�”}”(hŒöA nested guest is the ability to run a guest inside another guest (it can be KVM-based or a different hypervisor). The straightforward example is a KVM guest that in turn runs on a KVM guest (the rest of this document is built on this example)::”h]”hŒõA nested guest is the ability to run a guest inside another guest (it can be KVM-based or a different hypervisor). The straightforward example is a KVM guest that in turn runs on a KVM guest (the rest of this document is built on this example):”…”�”}”(hhßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhŒ literal_block”“”)�”}”(hX+ .----------------. .----------------. | | | | | L2 | | L2 | | (Nested Guest) | | (Nested Guest) | | | | | |----------------'--'----------------| | | | L1 (Guest Hypervisor) | | KVM (/dev/kvm) | | | .------------------------------------------------------. | L0 (Host Hypervisor) | | KVM (/dev/kvm) | |------------------------------------------------------| | Hardware (with virtualization extensions) | '------------------------------------------------------'”h]”hX+ .----------------. .----------------. | | | | | L2 | | L2 | | (Nested Guest) | | (Nested Guest) | | | | | |----------------'--'----------------| | | | L1 (Guest Hypervisor) | | KVM (/dev/kvm) | | | .------------------------------------------------------. | L0 (Host Hypervisor) | | KVM (/dev/kvm) | |------------------------------------------------------| | Hardware (with virtualization extensions) | '------------------------------------------------------'”…”�”}”hhïsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1híh³hÇh´K hhÊh²hubhÞ)�”}”(hŒ Terminology:”h]”hŒ Terminology:”…”�”}”(hhýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒ1L0 – level-0; the bare metal host, running KVM ”h]”hÞ)�”}”(hŒ0L0 – level-0; the bare metal host, running KVM”h]”hŒ0L0 – level-0; the bare metal host, running KVM”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj h²hh³hÇh´Nubj)�”}”(hŒvL1 – level-1 guest; a VM running on L0; also called the "guest hypervisor", as it itself is capable of running KVM. ”h]”hÞ)�”}”(hŒuL1 – level-1 guest; a VM running on L0; also called the "guest hypervisor", as it itself is capable of running KVM.”h]”hŒyL1 – level-1 guest; a VM running on L0; also called the “guest hypervisorâ€�, as it itself is capable of running KVM.”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K!hj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj h²hh³hÇh´Nubj)�”}”(hŒEL2 – level-2 guest; a VM running on L1, this is the "nested guest" ”h]”hÞ)�”}”(hŒDL2 – level-2 guest; a VM running on L1, this is the "nested guest"”h]”hŒHL2 – level-2 guest; a VM running on L1, this is the “nested guestâ€�”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K$hjBubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1j h³hÇh´KhhÊh²hubhŒnote”“”)�”}”(hX.The above diagram is modelled after the x86 architecture; s390x, ppc64 and other architectures are likely to have a different design for nesting. For example, s390x always has an LPAR (LogicalPARtition) hypervisor running on bare metal, adding another layer and resulting in at least four levels in a nested setup — L0 (bare metal, running the LPAR hypervisor), L1 (host hypervisor), L2 (guest hypervisor), L3 (nested guest). This document will stick with the three-level terminology (L0, L1, and L2) for all architectures; and will largely focus on x86.”h]”(hÞ)�”}”(hŒ‘The above diagram is modelled after the x86 architecture; s390x, ppc64 and other architectures are likely to have a different design for nesting.”h]”hŒ‘The above diagram is modelled after the x86 architecture; s390x, ppc64 and other architectures are likely to have a different design for nesting.”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K&hjdubhÞ)�”}”(hXFor example, s390x always has an LPAR (LogicalPARtition) hypervisor running on bare metal, adding another layer and resulting in at least four levels in a nested setup — L0 (bare metal, running the LPAR hypervisor), L1 (host hypervisor), L2 (guest hypervisor), L3 (nested guest).”h]”hXFor example, s390x always has an LPAR (LogicalPARtition) hypervisor running on bare metal, adding another layer and resulting in at least four levels in a nested setup — L0 (bare metal, running the LPAR hypervisor), L1 (host hypervisor), L2 (guest hypervisor), L3 (nested guest).”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K*hjdubhÞ)�”}”(hŒ€This document will stick with the three-level terminology (L0, L1, and L2) for all architectures; and will largely focus on x86.”h]”hŒ€This document will stick with the three-level terminology (L0, L1, and L2) for all architectures; and will largely focus on x86.”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K0hjdubeh}”(h]”h ]”h"]”h$]”h&]”uh1jbhhÊh²hh³hÇh´NubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ Use Cases”h]”hŒ Use Cases”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj˜h²hh³hÇh´K6ubhÞ)�”}”(hŒJThere are several scenarios where nested KVM can be useful, to name a few:”h]”hŒJThere are several scenarios where nested KVM can be useful, to name a few:”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K8hj˜h²hubj )�”}”(hhh]”(j)�”}”(hXuAs a developer, you want to test your software on different operating systems (OSes). Instead of renting multiple VMs from a Cloud Provider, using nested KVM lets you rent a large enough "guest hypervisor" (level-1 guest). This in turn allows you to create multiple nested guests (level-2 guests), running different OSes, on which you can develop and test your software. ”h]”hÞ)�”}”(hXtAs a developer, you want to test your software on different operating systems (OSes). Instead of renting multiple VMs from a Cloud Provider, using nested KVM lets you rent a large enough "guest hypervisor" (level-1 guest). This in turn allows you to create multiple nested guests (level-2 guests), running different OSes, on which you can develop and test your software.”h]”hXxAs a developer, you want to test your software on different operating systems (OSes). Instead of renting multiple VMs from a Cloud Provider, using nested KVM lets you rent a large enough “guest hypervisorâ€� (level-1 guest). This in turn allows you to create multiple nested guests (level-2 guests), running different OSes, on which you can develop and test your software.”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K;hjºubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj·h²hh³hÇh´Nubj)�”}”(hŒkLive migration of "guest hypervisors" and their nested guests, for load balancing, disaster recovery, etc. ”h]”hÞ)�”}”(hŒjLive migration of "guest hypervisors" and their nested guests, for load balancing, disaster recovery, etc.”h]”hŒnLive migration of “guest hypervisorsâ€� and their nested guests, for load balancing, disaster recovery, etc.”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KBhjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj·h²hh³hÇh´Nubj)�”}”(hŒzVM image creation tools (e.g. ``virt-install``, etc) often run their own VM, and users expect these to work inside a VM. ”h]”hÞ)�”}”(hŒyVM image creation tools (e.g. ``virt-install``, etc) often run their own VM, and users expect these to work inside a VM.”h]”(hŒVM image creation tools (e.g. ”…”�”}”(hjîh²hh³Nh´NubhŒliteral”“”)�”}”(hŒ``virt-install``”h]”hŒ virt-install”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhjîubhŒK, etc) often run their own VM, and users expect these to work inside a VM.”…”�”}”(hjîh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KEhjêubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj·h²hh³hÇh´Nubj)�”}”(hŒjSome OSes use virtualization internally for security (e.g. to let applications run safely in isolation). ”h]”hÞ)�”}”(hŒhSome OSes use virtualization internally for security (e.g. to let applications run safely in isolation).”h]”hŒhSome OSes use virtualization internally for security (e.g. to let applications run safely in isolation).”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KHhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj·h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j`jauh1j h³hÇh´K;hj˜h²hubeh}”(h]”Œ use-cases”ah ]”h"]”Œ use cases”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K6ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒEnabling "nested" (x86)”h]”hŒEnabling “nestedâ€� (x86)”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj<h²hh³hÇh´KMubhÞ)�”}”(hŒ¥From Linux kernel v4.20 onwards, the ``nested`` KVM parameter is enabled by default for Intel and AMD. (Though your Linux distribution might override this default.)”h]”(hŒ%From Linux kernel v4.20 onwards, the ”…”�”}”(hjMh²hh³Nh´Nubj÷)�”}”(hŒ ``nested``”h]”hŒnested”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhjMubhŒv KVM parameter is enabled by default for Intel and AMD. (Though your Linux distribution might override this default.)”…”�”}”(hjMh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KOhj<h²hubhÞ)�”}”(hŒàIn case you are running a Linux kernel older than v4.19, to enable nesting, set the ``nested`` KVM module parameter to ``Y`` or ``1``. To persist this setting across reboots, you can add it in a config file, as shown below:”h]”(hŒTIn case you are running a Linux kernel older than v4.19, to enable nesting, set the ”…”�”}”(hjmh²hh³Nh´Nubj÷)�”}”(hŒ ``nested``”h]”hŒnested”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhjmubhŒ KVM module parameter to ”…”�”}”(hjmh²hh³Nh´Nubj÷)�”}”(hŒ``Y``”h]”hŒY”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhjmubhŒ or ”…”�”}”(hjmh²hh³Nh´Nubj÷)�”}”(hŒ``1``”h]”hŒ1”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhjmubhŒ[. To persist this setting across reboots, you can add it in a config file, as shown below:”…”�”}”(hjmh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KShj<h²hubhŒenumerated_list”“”)�”}”(hhh]”(j)�”}”(hŒ»On the bare metal host (L0), list the kernel modules and ensure that the KVM modules:: $ lsmod | grep -i kvm kvm_intel 133627 0 kvm 435079 1 kvm_intel ”h]”(hÞ)�”}”(hŒVOn the bare metal host (L0), list the kernel modules and ensure that the KVM modules::”h]”hŒUOn the bare metal host (L0), list the kernel modules and ensure that the KVM modules:”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KXhj¶ubhî)�”}”(hŒ_$ lsmod | grep -i kvm kvm_intel 133627 0 kvm 435079 1 kvm_intel”h]”hŒ_$ lsmod | grep -i kvm kvm_intel 133627 0 kvm 435079 1 kvm_intel”…”�”}”hjÈsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1híh³hÇh´K[hj¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj³h²hh³hÇh´Nubj)�”}”(hŒpShow information for ``kvm_intel`` module:: $ modinfo kvm_intel | grep -i nested parm: nested:bool ”h]”(hÞ)�”}”(hŒ+Show information for ``kvm_intel`` module::”h]”(hŒShow information for ”…”�”}”(hjàh²hh³Nh´Nubj÷)�”}”(hŒ ``kvm_intel``”h]”hŒ kvm_intel”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhjàubhŒ module:”…”�”}”(hjàh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K_hjÜubhî)�”}”(hŒ@$ modinfo kvm_intel | grep -i nested parm: nested:bool”h]”hŒ@$ modinfo kvm_intel | grep -i nested parm: nested:bool”…”�”}”hjsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1híh³hÇh´KahjÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj³h²hh³hÇh´Nubj)�”}”(hŒÜFor the nested KVM configuration to persist across reboots, place the below in ``/etc/modprobed/kvm_intel.conf`` (create the file if it doesn't exist):: $ cat /etc/modprobe.d/kvm_intel.conf options kvm-intel nested=y ”h]”(hÞ)�”}”(hŒ˜For the nested KVM configuration to persist across reboots, place the below in ``/etc/modprobed/kvm_intel.conf`` (create the file if it doesn't exist)::”h]”(hŒOFor the nested KVM configuration to persist across reboots, place the below in ”…”�”}”(hjh²hh³Nh´Nubj÷)�”}”(hŒ!``/etc/modprobed/kvm_intel.conf``”h]”hŒ/etc/modprobed/kvm_intel.conf”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhjubhŒ) (create the file if it doesn’t exist):”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kdhjubhî)�”}”(hŒ?$ cat /etc/modprobe.d/kvm_intel.conf options kvm-intel nested=y”h]”hŒ?$ cat /etc/modprobe.d/kvm_intel.conf options kvm-intel nested=y”…”�”}”hj8sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1híh³hÇh´Khhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj³h²hh³hÇh´Nubj)�”}”(hŒ^Unload and re-load the KVM Intel module:: $ sudo rmmod kvm-intel $ sudo modprobe kvm-intel ”h]”(hÞ)�”}”(hŒ)Unload and re-load the KVM Intel module::”h]”hŒ(Unload and re-load the KVM Intel module:”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KkhjLubhî)�”}”(hŒ0$ sudo rmmod kvm-intel $ sudo modprobe kvm-intel”h]”hŒ0$ sudo rmmod kvm-intel $ sudo modprobe kvm-intel”…”�”}”hj^sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1híh³hÇh´KmhjLubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj³h²hh³hÇh´Nubj)�”}”(hŒkVerify if the ``nested`` parameter for KVM is enabled:: $ cat /sys/module/kvm_intel/parameters/nested Y ”h]”(hÞ)�”}”(hŒ7Verify if the ``nested`` parameter for KVM is enabled::”h]”(hŒVerify if the ”…”�”}”(hjvh²hh³Nh´Nubj÷)�”}”(hŒ ``nested``”h]”hŒnested”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhjvubhŒ parameter for KVM is enabled:”…”�”}”(hjvh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kphjrubhî)�”}”(hŒ/$ cat /sys/module/kvm_intel/parameters/nested Y”h]”hŒ/$ cat /sys/module/kvm_intel/parameters/nested Y”…”�”}”hj–sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1híh³hÇh´Krhjrubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj³h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ.”uh1j±hj<h²hh³hÇh´KXubhÞ)�”}”(hŒ\For AMD hosts, the process is the same as above, except that the module name is ``kvm-amd``.”h]”(hŒPFor AMD hosts, the process is the same as above, except that the module name is ”…”�”}”(hjµh²hh³Nh´Nubj÷)�”}”(hŒ ``kvm-amd``”h]”hŒkvm-amd”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhjµubhŒ.”…”�”}”(hjµh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kuhj<h²hubeh}”(h]”Œenabling-nested-x86”ah ]”h"]”Œenabling "nested" (x86)”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KMubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ1Additional nested-related kernel parameters (x86)”h]”hŒ1Additional nested-related kernel parameters (x86)”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjÝh²hh³hÇh´KzubhÞ)�”}”(hX>If your hardware is sufficiently advanced (Intel Haswell processor or higher, which has newer hardware virt extensions), the following additional features will also be enabled by default: "Shadow VMCS (Virtual Machine Control Structure)", APIC Virtualization on your bare metal host (L0). Parameters for Intel hosts::”h]”hXAIf your hardware is sufficiently advanced (Intel Haswell processor or higher, which has newer hardware virt extensions), the following additional features will also be enabled by default: “Shadow VMCS (Virtual Machine Control Structure)â€�, APIC Virtualization on your bare metal host (L0). Parameters for Intel hosts:”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K|hjÝh²hubhî)�”}”(hŒ $ cat /sys/module/kvm_intel/parameters/enable_shadow_vmcs Y $ cat /sys/module/kvm_intel/parameters/enable_apicv Y $ cat /sys/module/kvm_intel/parameters/ept Y”h]”hŒ $ cat /sys/module/kvm_intel/parameters/enable_shadow_vmcs Y $ cat /sys/module/kvm_intel/parameters/enable_apicv Y $ cat /sys/module/kvm_intel/parameters/ept Y”…”�”}”hjüsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1híh³hÇh´K‚hjÝh²hubjc)�”}”(hŒ�If you suspect your L2 (i.e. nested guest) is running slower, ensure the above are enabled (particularly ``enable_shadow_vmcs`` and ``ept``).”h]”hÞ)�”}”(hŒ�If you suspect your L2 (i.e. nested guest) is running slower, ensure the above are enabled (particularly ``enable_shadow_vmcs`` and ``ept``).”h]”(hŒiIf you suspect your L2 (i.e. nested guest) is running slower, ensure the above are enabled (particularly ”…”�”}”(hjh²hh³Nh´Nubj÷)�”}”(hŒ``enable_shadow_vmcs``”h]”hŒenable_shadow_vmcs”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhjubhŒ and ”…”�”}”(hjh²hh³Nh´Nubj÷)�”}”(hŒ``ept``”h]”hŒept”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhjubhŒ).”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K‹hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjÝh²hh³hÇh´Nubeh}”(h]”Œ/additional-nested-related-kernel-parameters-x86”ah ]”h"]”Œ1additional nested-related kernel parameters (x86)”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KzubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒStarting a nested guest (x86)”h]”hŒStarting a nested guest (x86)”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjNh²hh³hÇh´K‘ubhÞ)�”}”(hŒhOnce your bare metal host (L0) is configured for nesting, you should be able to start an L1 guest with::”h]”hŒgOnce your bare metal host (L0) is configured for nesting, you should be able to start an L1 guest with:”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K“hjNh²hubhî)�”}”(hŒ$ qemu-kvm -cpu host [...]”h]”hŒ$ qemu-kvm -cpu host [...]”…”�”}”hjmsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1híh³hÇh´K–hjNh²hubhÞ)�”}”(hŒ§The above will pass through the host CPU's capabilities as-is to the guest, or for better live migration compatibility, use a named CPU model supported by QEMU. e.g.::”h]”hŒ¨The above will pass through the host CPU’s capabilities as-is to the guest, or for better live migration compatibility, use a named CPU model supported by QEMU. e.g.:”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K˜hjNh²hubhî)�”}”(hŒ)$ qemu-kvm -cpu Haswell-noTSX-IBRS,vmx=on”h]”hŒ)$ qemu-kvm -cpu Haswell-noTSX-IBRS,vmx=on”…”�”}”hj‰sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1híh³hÇh´KœhjNh²hubhÞ)�”}”(hŒfthen the guest hypervisor will subsequently be capable of running a nested guest with accelerated KVM.”h]”hŒfthen the guest hypervisor will subsequently be capable of running a nested guest with accelerated KVM.”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KžhjNh²hubeh}”(h]”Œstarting-a-nested-guest-x86”ah ]”h"]”Œstarting a nested guest (x86)”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K‘ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒEnabling "nested" (s390x)”h]”hŒEnabling “nestedâ€� (s390x)”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj­h²hh³hÇh´K£ubj²)�”}”(hhh]”j)�”}”(hŒoOn the host hypervisor (L0), enable the ``nested`` parameter on s390x:: $ rmmod kvm $ modprobe kvm nested=1 ”h]”(hÞ)�”}”(hŒGOn the host hypervisor (L0), enable the ``nested`` parameter on s390x::”h]”(hŒ(On the host hypervisor (L0), enable the ”…”�”}”(hjÅh²hh³Nh´Nubj÷)�”}”(hŒ ``nested``”h]”hŒnested”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhjÅubhŒ parameter on s390x:”…”�”}”(hjÅh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K¥hjÁubhî)�”}”(hŒ#$ rmmod kvm $ modprobe kvm nested=1”h]”hŒ#$ rmmod kvm $ modprobe kvm nested=1”…”�”}”hjåsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1híh³hÇh´K¨hjÁubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj¾h²hh³hÇh´Nubah}”(h]”h ]”h"]”h$]”h&]”j°j±j²hj³j´uh1j±hj­h²hh³hÇh´K¥ubjc)�”}”(hŒ²On s390x, the kernel parameter ``hpage`` is mutually exclusive with the ``nested`` parameter — i.e. to be able to enable ``nested``, the ``hpage`` parameter *must* be disabled.”h]”hÞ)�”}”(hŒ²On s390x, the kernel parameter ``hpage`` is mutually exclusive with the ``nested`` parameter — i.e. to be able to enable ``nested``, the ``hpage`` parameter *must* be disabled.”h]”(hŒOn s390x, the kernel parameter ”…”�”}”(hjh²hh³Nh´Nubj÷)�”}”(hŒ ``hpage``”h]”hŒhpage”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhjubhŒ is mutually exclusive with the ”…”�”}”(hjh²hh³Nh´Nubj÷)�”}”(hŒ ``nested``”h]”hŒnested”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhjubhŒ) parameter — i.e. to be able to enable ”…”�”}”(hjh²hh³Nh´Nubj÷)�”}”(hŒ ``nested``”h]”hŒnested”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhjubhŒ, the ”…”�”}”(hjh²hh³Nh´Nubj÷)�”}”(hŒ ``hpage``”h]”hŒhpage”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhjubhŒ parameter ”…”�”}”(hjh²hh³Nh´NubhŒemphasis”“”)�”}”(hŒ*must*”h]”hŒmust”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jShjubhŒ be disabled.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K«hjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj­h²hh³hÇh´Nubj²)�”}”(hhh]”(j)�”}”(hŒªThe guest hypervisor (L1) must be provided with the ``sie`` CPU feature — with QEMU, this can be done by using "host passthrough" (via the command-line ``-cpu host``). ”h]”hÞ)�”}”(hŒ©The guest hypervisor (L1) must be provided with the ``sie`` CPU feature — with QEMU, this can be done by using "host passthrough" (via the command-line ``-cpu host``).”h]”(hŒ4The guest hypervisor (L1) must be provided with the ”…”�”}”(hjzh²hh³Nh´Nubj÷)�”}”(hŒ``sie``”h]”hŒsie”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhjzubhŒc CPU feature — with QEMU, this can be done by using “host passthroughâ€� (via the command-line ”…”�”}”(hjzh²hh³Nh´Nubj÷)�”}”(hŒ ``-cpu host``”h]”hŒ -cpu host”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhjzubhŒ).”…”�”}”(hjzh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K¯hjvubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjsh²hh³hÇh´Nubj)�”}”(hŒRNow the KVM module can be loaded in the L1 (guest hypervisor):: $ modprobe kvm ”h]”(hÞ)�”}”(hŒ?Now the KVM module can be loaded in the L1 (guest hypervisor)::”h]”hŒ>Now the KVM module can be loaded in the L1 (guest hypervisor):”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K³hj²ubhî)�”}”(hŒ$ modprobe kvm”h]”hŒ$ modprobe kvm”…”�”}”hjÄsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1híh³hÇh´Kµhj²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjsh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j°j±j²hj³j´Œstart”Kuh1j±hj­h²hh³hÇh´K¯ubeh}”(h]”Œenabling-nested-s390x”ah ]”h"]”Œenabling "nested" (s390x)”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K£ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒLive migration with nested KVM”h]”hŒLive migration with nested KVM”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjçh²hh³hÇh´K¹ubhÞ)�”}”(hŒ¾Migrating an L1 guest, with a *live* nested guest in it, to another bare metal host, works as of Linux kernel 5.3 and QEMU 4.2.0 for Intel x86 systems, and even on older versions for s390x.”h]”(hŒMigrating an L1 guest, with a ”…”�”}”(hjøh²hh³Nh´NubjT)�”}”(hŒ*live*”h]”hŒlive”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jShjøubhŒ™ nested guest in it, to another bare metal host, works as of Linux kernel 5.3 and QEMU 4.2.0 for Intel x86 systems, and even on older versions for s390x.”…”�”}”(hjøh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K»hjçh²hubhÞ)�”}”(hX»On AMD systems, once an L1 guest has started an L2 guest, the L1 guest should no longer be migrated or saved (refer to QEMU documentation on "savevm"/"loadvm") until the L2 guest shuts down. Attempting to migrate or save-and-load an L1 guest while an L2 guest is running will result in undefined behavior. You might see a ``kernel BUG!`` entry in ``dmesg``, a kernel 'oops', or an outright kernel panic. Such a migrated or loaded L1 guest can no longer be considered stable or secure, and must be restarted. Migrating an L1 guest merely configured to support nesting, while not actually running L2 guests, is expected to function normally even on AMD systems but may fail once guests are started.”h]”(hXLOn AMD systems, once an L1 guest has started an L2 guest, the L1 guest should no longer be migrated or saved (refer to QEMU documentation on “savevmâ€�/â€�loadvmâ€�) until the L2 guest shuts down. Attempting to migrate or save-and-load an L1 guest while an L2 guest is running will result in undefined behavior. You might see a ”…”�”}”(hjh²hh³Nh´Nubj÷)�”}”(hŒ``kernel BUG!``”h]”hŒ kernel BUG!”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhjubhŒ entry in ”…”�”}”(hjh²hh³Nh´Nubj÷)�”}”(hŒ ``dmesg``”h]”hŒdmesg”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhjubhXY, a kernel ‘oops’, or an outright kernel panic. Such a migrated or loaded L1 guest can no longer be considered stable or secure, and must be restarted. Migrating an L1 guest merely configured to support nesting, while not actually running L2 guests, is expected to function normally even on AMD systems but may fail once guests are started.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K¿hjçh²hubhÞ)�”}”(hŒtMigrating an L2 guest is always expected to succeed, so all the following scenarios should work even on AMD systems:”h]”hŒtMigrating an L2 guest is always expected to succeed, so all the following scenarios should work even on AMD systems:”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÊhjçh²hubj )�”}”(hhh]”(j)�”}”(hŒQMigrating a nested guest (L2) to another L1 guest on the *same* bare metal host. ”h]”hÞ)�”}”(hŒPMigrating a nested guest (L2) to another L1 guest on the *same* bare metal host.”h]”(hŒ9Migrating a nested guest (L2) to another L1 guest on the ”…”�”}”(hj_h²hh³Nh´NubjT)�”}”(hŒ*same*”h]”hŒsame”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jShj_ubhŒ bare metal host.”…”�”}”(hj_h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÍhj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjXh²hh³hÇh´Nubj)�”}”(hŒTMigrating a nested guest (L2) to another L1 guest on a *different* bare metal host. ”h]”hÞ)�”}”(hŒSMigrating a nested guest (L2) to another L1 guest on a *different* bare metal host.”h]”(hŒ7Migrating a nested guest (L2) to another L1 guest on a ”…”�”}”(hj‰h²hh³Nh´NubjT)�”}”(hŒ *different*”h]”hŒ different”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jShj‰ubhŒ bare metal host.”…”�”}”(hj‰h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÐhj…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjXh²hh³hÇh´Nubj)�”}”(hŒ4Migrating a nested guest (L2) to a bare metal host. ”h]”hÞ)�”}”(hŒ3Migrating a nested guest (L2) to a bare metal host.”h]”hŒ3Migrating a nested guest (L2) to a bare metal host.”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÓhj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjXh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j`jauh1j h³hÇh´KÍhjçh²hubeh}”(h]”Œlive-migration-with-nested-kvm”ah ]”h"]”Œlive migration with nested kvm”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K¹ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ!Reporting bugs from nested setups”h]”hŒ!Reporting bugs from nested setups”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjÕh²hh³hÇh´KÖubhÞ)�”}”(hŒ«Debugging "nested" problems can involve sifting through log files across L0, L1 and L2; this can result in tedious back-n-forth between the bug reporter and the bug fixer.”h]”hŒ¯Debugging “nestedâ€� problems can involve sifting through log files across L0, L1 and L2; this can result in tedious back-n-forth between the bug reporter and the bug fixer.”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KØhjÕh²hubj )�”}”(hhh]”(j)�”}”(hŒÿMention that you are in a "nested" setup. If you are running any kind of "nesting" at all, say so. Unfortunately, this needs to be called out because when reporting bugs, people tend to forget to even *mention* that they're using nested virtualization. ”h]”hÞ)�”}”(hŒþMention that you are in a "nested" setup. If you are running any kind of "nesting" at all, say so. Unfortunately, this needs to be called out because when reporting bugs, people tend to forget to even *mention* that they're using nested virtualization.”h]”(hŒÓMention that you are in a “nestedâ€� setup. If you are running any kind of “nestingâ€� at all, say so. Unfortunately, this needs to be called out because when reporting bugs, people tend to forget to even ”…”�”}”(hjûh²hh³Nh´NubjT)�”}”(hŒ *mention*”h]”hŒmention”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jShjûubhŒ, that they’re using nested virtualization.”…”�”}”(hjûh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÜhj÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjôh²hh³hÇh´Nubj)�”}”(hXWEnsure you are actually running KVM on KVM. Sometimes people do not have KVM enabled for their guest hypervisor (L1), which results in them running with pure emulation or what QEMU calls it as "TCG", but they think they're running nested KVM. Thus confusing "nested Virt" (which could also mean, QEMU on KVM) with "nested KVM" (KVM on KVM). ”h]”hÞ)�”}”(hXVEnsure you are actually running KVM on KVM. Sometimes people do not have KVM enabled for their guest hypervisor (L1), which results in them running with pure emulation or what QEMU calls it as "TCG", but they think they're running nested KVM. Thus confusing "nested Virt" (which could also mean, QEMU on KVM) with "nested KVM" (KVM on KVM).”h]”hXdEnsure you are actually running KVM on KVM. Sometimes people do not have KVM enabled for their guest hypervisor (L1), which results in them running with pure emulation or what QEMU calls it as “TCGâ€�, but they think they’re running nested KVM. Thus confusing “nested Virtâ€� (which could also mean, QEMU on KVM) with “nested KVMâ€� (KVM on KVM).”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Káhj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjôh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j`jauh1j h³hÇh´KÜhjÕh²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ Information to collect (generic)”h]”hŒ Information to collect (generic)”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj?h²hh³hÇh´KèubhÞ)�”}”(hŒHThe following is not an exhaustive list, but a very good starting point:”h]”hŒHThe following is not an exhaustive list, but a very good starting point:”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kêhj?h²hubhŒ block_quote”“”)�”}”(hXç- Kernel, libvirt, and QEMU version from L0 - Kernel, libvirt and QEMU version from L1 - QEMU command-line of L1 -- when using libvirt, you'll find it here: ``/var/log/libvirt/qemu/instance.log`` - QEMU command-line of L2 -- as above, when using libvirt, get the complete libvirt-generated QEMU command-line - ``cat /sys/cpuinfo`` from L0 - ``cat /sys/cpuinfo`` from L1 - ``lscpu`` from L0 - ``lscpu`` from L1 - Full ``dmesg`` output from L0 - Full ``dmesg`` output from L1 ”h]”j )�”}”(hhh]”(j)�”}”(hŒ*Kernel, libvirt, and QEMU version from L0 ”h]”hÞ)�”}”(hŒ)Kernel, libvirt, and QEMU version from L0”h]”hŒ)Kernel, libvirt, and QEMU version from L0”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kìhjgubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjdubj)�”}”(hŒ)Kernel, libvirt and QEMU version from L1 ”h]”hÞ)�”}”(hŒ(Kernel, libvirt and QEMU version from L1”h]”hŒ(Kernel, libvirt and QEMU version from L1”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kîhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjdubj)�”}”(hŒkQEMU command-line of L1 -- when using libvirt, you'll find it here: ``/var/log/libvirt/qemu/instance.log`` ”h]”hÞ)�”}”(hŒjQEMU command-line of L1 -- when using libvirt, you'll find it here: ``/var/log/libvirt/qemu/instance.log``”h]”(hŒFQEMU command-line of L1 -- when using libvirt, you’ll find it here: ”…”�”}”(hj›h²hh³Nh´Nubj÷)�”}”(hŒ&``/var/log/libvirt/qemu/instance.log``”h]”hŒ"/var/log/libvirt/qemu/instance.log”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhj›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kðhj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjdubj)�”}”(hŒnQEMU command-line of L2 -- as above, when using libvirt, get the complete libvirt-generated QEMU command-line ”h]”hÞ)�”}”(hŒmQEMU command-line of L2 -- as above, when using libvirt, get the complete libvirt-generated QEMU command-line”h]”hŒmQEMU command-line of L2 -- as above, when using libvirt, get the complete libvirt-generated QEMU command-line”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kóhj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjdubj)�”}”(hŒ``cat /sys/cpuinfo`` from L0 ”h]”hÞ)�”}”(hŒ``cat /sys/cpuinfo`` from L0”h]”(j÷)�”}”(hŒ``cat /sys/cpuinfo``”h]”hŒcat /sys/cpuinfo”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhjÙubhŒ from L0”…”�”}”(hjÙh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KöhjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjdubj)�”}”(hŒ``cat /sys/cpuinfo`` from L1 ”h]”hÞ)�”}”(hŒ``cat /sys/cpuinfo`` from L1”h]”(j÷)�”}”(hŒ``cat /sys/cpuinfo``”h]”hŒcat /sys/cpuinfo”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhjÿubhŒ from L1”…”�”}”(hjÿh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Køhjûubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjdubj)�”}”(hŒ``lscpu`` from L0 ”h]”hÞ)�”}”(hŒ``lscpu`` from L0”h]”(j÷)�”}”(hŒ ``lscpu``”h]”hŒlscpu”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhj%ubhŒ from L0”…”�”}”(hj%h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kúhj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjdubj)�”}”(hŒ``lscpu`` from L1 ”h]”hÞ)�”}”(hŒ``lscpu`` from L1”h]”(j÷)�”}”(hŒ ``lscpu``”h]”hŒlscpu”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhjKubhŒ from L1”…”�”}”(hjKh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KühjGubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjdubj)�”}”(hŒFull ``dmesg`` output from L0 ”h]”hÞ)�”}”(hŒFull ``dmesg`` output from L0”h]”(hŒFull ”…”�”}”(hjqh²hh³Nh´Nubj÷)�”}”(hŒ ``dmesg``”h]”hŒdmesg”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhjqubhŒ output from L0”…”�”}”(hjqh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kþhjmubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjdubj)�”}”(hŒFull ``dmesg`` output from L1 ”h]”hÞ)�”}”(hŒFull ``dmesg`` output from L1”h]”(hŒFull ”…”�”}”(hj›h²hh³Nh´Nubj÷)�”}”(hŒ ``dmesg``”h]”hŒdmesg”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhj›ubhŒ output from L1”…”�”}”(hj›h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mhj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjdubeh}”(h]”h ]”h"]”h$]”h&]”j`jauh1j h³hÇh´Kìhj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j^h³hÇh´Kìhj?h²hubeh}”(h]”Œinformation-to-collect-generic”ah ]”h"]”Œ information to collect (generic)”ah$]”h&]”uh1hÈhjÕh²hh³hÇh´KèubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒx86-specific info to collect”h]”hŒx86-specific info to collect”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjÕh²hh³hÇh´MubhÞ)�”}”(hŒ{Both the below commands, ``x86info`` and ``dmidecode``, should be available on most Linux distributions with the same name:”h]”(hŒBoth the below commands, ”…”�”}”(hjæh²hh³Nh´Nubj÷)�”}”(hŒ ``x86info``”h]”hŒx86info”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhjæubhŒ and ”…”�”}”(hjæh²hh³Nh´Nubj÷)�”}”(hŒ ``dmidecode``”h]”hŒ dmidecode”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhjæubhŒE, should be available on most Linux distributions with the same name:”…”�”}”(hjæh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MhjÕh²hubj_)�”}”(hŒ‘- Output of: ``x86info -a`` from L0 - Output of: ``x86info -a`` from L1 - Output of: ``dmidecode`` from L0 - Output of: ``dmidecode`` from L1 ”h]”j )�”}”(hhh]”(j)�”}”(hŒ"Output of: ``x86info -a`` from L0 ”h]”hÞ)�”}”(hŒ!Output of: ``x86info -a`` from L0”h]”(hŒ Output of: ”…”�”}”(hj# h²hh³Nh´Nubj÷)�”}”(hŒ``x86info -a``”h]”hŒ x86info -a”…”�”}”(hj+ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhj# ubhŒ from L0”…”�”}”(hj# h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubj)�”}”(hŒ"Output of: ``x86info -a`` from L1 ”h]”hÞ)�”}”(hŒ!Output of: ``x86info -a`` from L1”h]”(hŒ Output of: ”…”�”}”(hjM h²hh³Nh´Nubj÷)�”}”(hŒ``x86info -a``”h]”hŒ x86info -a”…”�”}”(hjU h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhjM ubhŒ from L1”…”�”}”(hjM h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M hjI ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubj)�”}”(hŒ!Output of: ``dmidecode`` from L0 ”h]”hÞ)�”}”(hŒ Output of: ``dmidecode`` from L0”h]”(hŒ Output of: ”…”�”}”(hjw h²hh³Nh´Nubj÷)�”}”(hŒ ``dmidecode``”h]”hŒ dmidecode”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhjw ubhŒ from L0”…”�”}”(hjw h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M hjs ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubj)�”}”(hŒ!Output of: ``dmidecode`` from L1 ”h]”hÞ)�”}”(hŒ Output of: ``dmidecode`` from L1”h]”(hŒ Output of: ”…”�”}”(hj¡ h²hh³Nh´Nubj÷)�”}”(hŒ ``dmidecode``”h]”hŒ dmidecode”…”�”}”(hj© h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhj¡ ubhŒ from L1”…”�”}”(hj¡ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mhj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubeh}”(h]”h ]”h"]”h$]”h&]”j`jauh1j h³hÇh´Mhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j^h³hÇh´MhjÕh²hubeh}”(h]”Œx86-specific-info-to-collect”ah ]”h"]”Œx86-specific info to collect”ah$]”h&]”uh1hÈhjÕh²hh³hÇh´MubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒs390x-specific info to collect”h]”hŒs390x-specific info to collect”…”�”}”(hjÞ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjÛ h²hh³hÇh´MubhÞ)�”}”(hŒPAlong with the earlier mentioned generic details, the below is also recommended:”h]”hŒPAlong with the earlier mentioned generic details, the below is also recommended:”…”�”}”(hjì h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MhjÛ h²hubj_)�”}”(hŒD- ``/proc/sysinfo`` from L1; this will also include the info from L0”h]”j )�”}”(hhh]”j)�”}”(hŒB``/proc/sysinfo`` from L1; this will also include the info from L0”h]”hÞ)�”}”(hj h]”(j÷)�”}”(hŒ``/proc/sysinfo``”h]”hŒ /proc/sysinfo”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jöhj ubhŒ1 from L1; this will also include the info from L0”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjþ ubah}”(h]”h ]”h"]”h$]”h&]”j`jauh1j h³hÇh´Mhjú ubah}”(h]”h ]”h"]”h$]”h&]”uh1j^h³hÇh´MhjÛ h²hubeh}”(h]”Œs390x-specific-info-to-collect”ah ]”h"]”Œs390x-specific info to collect”ah$]”h&]”uh1hÈhjÕh²hh³hÇh´Mubeh}”(h]”Œ!reporting-bugs-from-nested-setups”ah ]”h"]”Œ!reporting bugs from nested setups”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KÖubeh}”(h]”Œrunning-nested-guests-with-kvm”ah ]”h"]”Œrunning nested guests with kvm”ah$]”h&]”uh1hÈhhh²hh³hÇh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÇuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hÍNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jm Œerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÇŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(jG jD j9j6jÚj×jKjHjªj§jäjájÒjÏj? j< jÒjÏjØ jÕ j7 j4 uŒ nametypes”}”(jG ‰j9‰jÚ‰jK‰jª‰jä‰jÒ‰j? ‰jÒ‰jØ ‰j7 ‰uh}”(jD hÊj6j˜j×j<jHjÝj§jNjáj­jÏjçj< jÕjÏj?jÕ jÕj4 jÛ uŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”hŒsystem_message”“”)�”}”(hhh]”hÞ)�”}”(hŒ:Enumerated list start value not ordinal-1: "2" (ordinal 2)”h]”hŒ>Enumerated list start value not ordinal-1: “2â€� (ordinal 2)”…”�”}”(hjÔ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝhjÑ ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”hÇŒline”Kuh1jÏ hj­h²hh³hÇh´K¯ubaŒtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.