From f41cc4ae357e47bb4668211c761b3bd939270aeb Mon Sep 17 00:00:00 2001 From: Zide Chen Date: Tue, 25 May 2021 14:47:24 -0700 Subject: [PATCH] doc: add nested virtualization user guide Tracked-On: #5923 Signed-off-by: Zide Chen Signed-off-by: David B. Kinder --- doc/develop.rst | 1 + doc/tutorials/images/nvmx_1.png | Bin 0 -> 20001 bytes doc/tutorials/images/nvmx_arch_1.png | Bin 0 -> 15414 bytes doc/tutorials/images/nvmx_cfg_1.png | Bin 0 -> 16707 bytes doc/tutorials/images/nvmx_cfg_2.png | Bin 0 -> 24008 bytes doc/tutorials/images/nvmx_cfg_3.png | Bin 0 -> 28655 bytes doc/tutorials/nvmx_virtualization.rst | 332 ++++++++++++++++++++++++++ 7 files changed, 333 insertions(+) create mode 100644 doc/tutorials/images/nvmx_1.png create mode 100644 doc/tutorials/images/nvmx_arch_1.png create mode 100644 doc/tutorials/images/nvmx_cfg_1.png create mode 100644 doc/tutorials/images/nvmx_cfg_2.png create mode 100644 doc/tutorials/images/nvmx_cfg_3.png create mode 100644 doc/tutorials/nvmx_virtualization.rst diff --git a/doc/develop.rst b/doc/develop.rst index a4c524c39..a013cfe86 100644 --- a/doc/develop.rst +++ b/doc/develop.rst @@ -59,6 +59,7 @@ Enable ACRN Features :maxdepth: 1 tutorials/sgx_virtualization + tutorials/nvmx_virtualization tutorials/vuart_configuration tutorials/rdt_configuration tutorials/waag-secure-boot diff --git a/doc/tutorials/images/nvmx_1.png b/doc/tutorials/images/nvmx_1.png new file mode 100644 index 0000000000000000000000000000000000000000..c56ae5c546c3e9532d0292720b8646bc35ea3837 GIT binary patch literal 20001 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 D3yF%M literal 0 HcmV?d00001 diff --git a/doc/tutorials/images/nvmx_arch_1.png b/doc/tutorials/images/nvmx_arch_1.png new file mode 100644 index 0000000000000000000000000000000000000000..e9afba89c85d388fd2c31cfd596f1e0d40f0d0cf GIT binary patch literal 15414 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

FGFE5c^!ykZ#02}DR1Fq6DHV*i+b8PAK9JW6V zoHDVy`wBQEJDYZF$Dz0%H@aMv8R)^F2EuQ%+?rZb^0y3mI_=-NOYDF4!v4;8}I)3R0cJxE%isJNJelhY5_3HR&QS75cT8An4`1^8w_Ivp6)>guX6 z4(CI#W;XDTh>`*v(Tt;_i;Ih^A^H~GOM{9-Ha~v;Ue%d5WONiFG&MIlSR)epX%3VaGB2w$TswVC?jO zJ-lhLv(;ltuisD8?Ut~6aew7tfoxIODb%1l{5T~1cu)&0=+#zc(9P$xr{#9gzV`-C zRMaU{r}9Zzqti1ffxDju-Chdgt$Pv$nq;QxqSN7`B|7?O(l|WFaCjYWzh((kllgky zOlk@WzcMC;8XF`x9Nx4nFR{Sbn#BR+XI_UBGnUK*?fx2W(%&<_M{;f{{XF&@O3v2kJlFH-OnfwSM61iinykq3o9oa?6SeM4b1&l zI#a4VDM#OC^+{;>TVCJ|0ISKV-FHvAr3X~rtJHcDbl3;jXz`;EeXKzZI+rqwaJ$UN zyD9s^_25qRH-|h#p(_mB0i)c9Y*mXOVU4qRLU>X5X%wnbL}-slY{G6%!PbE%G~^Mt zODGl|Qb!@oa)48SO$>bWUa1atrXpbj1k9?rO#%{9g)KEV3N%}LNT(*Ia z2N>rT+EZ+mGHO|&$jo^V#nT@6n$h)|w~wR>fdtO>YP|dzdz9^a*PLe{V_((1AkDNJkTOXiCDrdcT0SNe9QrKArx|RZ_dSmv_2&xP=ZGZzucO5^ ze6AwLmfU(xC5?tgRQxxs>R;|A__YV zi8M7_l{Do#MA;L8vhg0Q;*}L~QlN7w;(KrR3%s#S(r(+ECW&ZSISTD|Y}>#d(|R$< z9*GcNzM1DSZ26(Pde3oou*)TODWPKaruHXeCIqOop&wa;ndDIe#M=Xm-cxcBC{?>A zphDBbvZ@}ZkyZP7$Er@(7t6vYhM}8>7dJPay&G3Yx5A3g!q1kQk_>E*o!#aL7}c~< zP&&9smMe+RP&fu&<1>_E_%KLaQzZn1RjW0$^u0jPuqgaIlS8_N+m98lMfYXG5!8s7 zTuN@-*c9Da-6ywU%r5Bu(z!VCB7I}IkIa4&1zrQ!lw}`F)rqo4V8RIF65k*mF#;j*q;?uP@y9~}Y zsKrBUT3W0P)uaX-;5TO9HD3iHIZ1RHVC+1?|MlZ4aTq!_X(!N4?zgsgq1lKST3oy! z`smXMzp<=rOe)#y9KxbV;GmL?~lmUT( zh}vkJPU!4FjL~k-F%%rUNzc~L^_Yn7ZPt>alUIUKtLTfBQjpHA6xyLjEQW}9lNZCJ zyhu}E!a(^Z8VA2{$8Sf!u#(Mq#dyMLmN8f#aoyVuFCPyHJ(fp$NIJJhmMGC>i0_p6 zdCtLPFKVkSR?xz1uNup)$(j3jpAEcTqH5x3?^aY4Jm{+KcARS$$iN4|Fb6Mjweb$4>Br zF>OjtXx!cLDWM~2%CF2cjea$Z9ixoV6!wA`O0_xjS-v9_cyQM+Z{uK9Y!Yo$0Wn%P zdN;O43-$8`8I{ZBMx;2_*4A~dXeUpDoesSK$P0#4(p5j@X)5ah?Rdr)A=N;1=1|!E zd~aC!Av!Y%TW&+DZ)mu`ZHFOej8biFmW-IxWU^l^;fK6cNEMo$5T1;}jhb?a-)tvf zb@D+#>#B2gJnAVim9@Y55{|1ilf!EDsK3f>CtpFK(A|L^?~etOsyaHk>P4%^E{V-8UO<9=J>Ko^hJW(Q zPkP1F(x#?`UAxYlWCePw8sdoVj$k}`;Iu!WHWM5E$5E;NtN#B3&D|q`fu_8#mk5Qx PKoDf!Do7TK>-zpTYl0sx literal 0 HcmV?d00001 diff --git a/doc/tutorials/images/nvmx_cfg_2.png b/doc/tutorials/images/nvmx_cfg_2.png new file mode 100644 index 0000000000000000000000000000000000000000..cc93a6f68ed596d49b6ec59eeb60ece723d5ea85 GIT binary patch literal 24008 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

%lE1osD7i_|`_7U1WFDqsJb>JCI* zI9amaeY#bUG^o0;e-n43lP$q^WbexRlJ1dm-!;Wn9~d^Z_oqnhjaYu&6k)#1codha zq~=+E25&MyElzNUMUmHcyVGklqhyTRpGc#hR}?_ZBP5gMwMU=qFhEJuSS6d_mMP64&xS> zLoy-ukH^0yI_2hp(r(%{PK-(=e8>BCn%KYM!b(R7UwYgBsAb%YgxWGETOdiNZg4UfE+1wuR*lcyQGQ(zaEAb0g z9TZ*0-x-_uxO`3#!VDi!YMX7$kDS!BMyGjLox0si8yXQ#c!5}$UtZ)W$7>UgRPiR{ zQ_ZZFYib|4DeZe|+uR`SoqaTX{5-O4_nJC)?^_kM72jd8J)UPwr^D*>FM8?```5}; z)s5nV=O{?iIeYecC^)?ujUhPgib}@pJ5?#}M=<+6`R-=&$bM1`*INCbvTB8OLeags z7&Kl2KS!;C@=Mt6q{>SXxl-QLH#LrZ*p=JM2M0@e?2=Iu-j2q}c}2`9Bnic|Dz#1( zxwjp3-pmLwCPD`we1tpntyal}mxt^R%`S;%K(xGC?rkrxfy--24Y`W?^}D} z%>5z)p#~#%eZ-zvf#?l!|$fj3m z_55&tmU0lLu0gk?W0`l)7-J#7cKUoSDqR+@uKvkpVtY_d7_rq*Aok_~FbViL>%qrD zgGiV#T)CDA0MOZa_fJ#$d3QOUc>Xd#6(Ma*Opri3{PATs0&FBS!=w7CaPKGUc@Of# z1It=bol332Gb5{0{o=en#vk~iXu7HEcQ`|`?Y6F zytFtMwP=Iu&#Qi3s5eN7g9?5tYLjkYxz&zMS4zGY2-^5N{2b4-gXmzvQSbg#^0@M*{iHWrH$({+IrFaxTj6U_qe$0z zm0f(|rD!)`y0FCVMMK%%qpPHET`*dvzAOZ&cz)u3*ecKlyM63|TdS3CJEQDUC4 zQ^z!DUY>WF-B1p|!I507QWV!*-<8sm5+88nJ96$*7W4qKo6%(@c3XvM1sL3)+p_+# zO2=-N?M8mme&*yGsnIRfvCW>6+?R!HMeyxt!b6JLM(8 zA3r3pQRIb$Bi7vy^^(8|tSF!- zaMey}mkWK!ZZ8y)Wh6i0KWLy5uh1{;F_Ng((E3|4>!^-{^QH_dp;IgEE10Fw&e?Jv zony+z-CBs3wcXXXNyON|kP*A`RguR1HQarQo9LUye5#M)ROl<>A%WHT(U)omtH1r| zfO4G@n7sN`>TYwer0fLpHX*-scf_jo|E#Vq4*yD|;fV_b2LG)2Sghx{mw9-Wf*bu) z1NN&Q3NJ)XZUqekM1fyL@$21i|MbJ=1eZ)~!W^aq1j%5NPMd9OgQbkdBJN|C{!>tHeX+@s=VCw4DU~~>{!+u=x#|&hw?mt9R6uvKjvVHgy{!W55m#owKKV@MhE0>>xo>UjH`cS=?^87B+ENq=ok*hc@9=UAPGilFn#4# zn|NNTz0F0pt5oMXIJVb?$8xT_S*A3#D5+K;NiM%-TPYZ4+LnY6Cm7f}{dEs*`myZp zpT(S9mt5T#=Fle%c1Dv{=ubX^Ldj}MBH5Edt6E>bA2BM_V@wSVywP9pU$v42M={!B zUR_B_^fGj+a7%f|Yt7k#DZliWOf@fFTt-A1)CZTuiqDXKSQ=zN>(g{lww+*iOYfeh z4$0E6zpzW(BIB->-YsD)5=vLF)KmQvTXk+k)rQHu!tfu1W!lHp*=+oBxZMjeYG9!I zOS1RoHZCSobg%-ep^@>z6?^g}+@o+17`Qs6SCdk~H+O@2mz`n1vTjz!Yg{>^(v2IX zRca%HO4RED?yxjazD(viq~dzqpJbq(H8%O!kJ!zg4T_hO(mG9#Lmwvwq&bm^^S?y; zXEX5PMi(&Q$L6!L9KXDKiPjw}L`R9+=>owvYKO?+$ePXit#E^*y7dnzV@j4v1-$c* z!0aO=@wO?NppFD*7?r!%@=>wu&c)niQW{GBK{B&G*txeV@*P!L`h-9Val~gGCPDsH{37$vy4)hKFZ)qW=dJI&yzOAH-566 zj@dm?kZfue*|VQ38Q*mgOz|pMK6-;Tel)uNN4K}YKV8PI4WDwOu-Y91w|AplL%gQ4LFQ@{2?&pDXyey!7+rFOy;Ywb$bt2*braX3b+mGj4Ut0{t^!Jpw1 zOYXXvncfmWl3m~0l88{ryO+5(gH$k-m6K11Y$HG^uc$Ek&YoA9o;C-n=2vDFR9ch~ z#Q}=Ow9y2PY`_ViP=6y|^$)EDh|ysF^~NV*oHRHeO3y=t`O@^1XCJR_O5%0RE6~9g z-)^ESUftSBiVU|%a_K=&y%^rjvWA~!qwQ-If)6=rn>c0f=_0v#{Ktwyf|B*JP~P)x znov(!@$~w^6eK8*BwL;E?a=aSM<0*G)8$c`aC8d9h6z==rn2cEZ**`0I z1cZiYE0)sVN=m`j6vHpiQH}~p5;`|s4t#QX#i-dhODaFY>u@Xk}*hOI*W3T=O(Sv9-&GcJLNB)_F(q ztd`}tZ~@j>((+n6?oU>I+vOa&O})_ee?v-Q>svz{FFkCY)97@!E4#aWID8&Kao8mw zSf3YjB7{f=uFuZ>|8F)V#P|Lu96$e+O{OCi=t!%p+kU{sQ=^U|EX360kz$RMIo5{H zRc7##oJv`SffeW51F>q1-j$!+A@#n2e@0^@d3Z;FNYkcq9BXTgKj?~O&eblP(8mVs zd)w=)rPeA+>5lIsATJB;{}c+N{kdFxc9P+Rp>7;`S6Cys9%#`b$)lAfp$(xG17Wnk z<@gp?-DNXchTG~mRdtdbBnQ1+P;7=-2}x2jZ7ANc1d8i+*<;@p`mTnBl|+~o*SDGQ zIdMLxp;@9M+5Fyft&wa(MBfBSk)m{d64m`2N0=ZRf%E6J)0Gc0!-lA7iDT_ge?o|^ z-c(}=^6_$*P1l)qd&jpWcGosBu$p%n{pvxl+7giW!s8}7;pM(*YYLVP;@;vQ$=0MK z6kQF|pko$m2!zV)T=4N!y#lX^hfsghEGXzIW{b^TmUB-VZHP}M^#3E;VdWa2zFhJ5 z9|9l)5P3$PR^9BVL4IG13M0AQpQ?R4VfWlRg((f64KC$~NL6?H7?nwn`lz_5w`cQ% zcd4i2SWDy>vkVA7M)7YG@g+op>OtLK{QS^oU{Snjj6x%&^Q;t3E}q^FEt22-G4(la zPYH>6W@^7Cw}=#jztHwTB(B?o&L9uS8bi~jOP0S_9OiG7(NtX@-x&T%ax0wOz)(6H z;Sr7vxv^2?O*nnVwkQ9R$Tb;AtuZl9vs*nzj2+P{U>2webh4OIBsMHnA@hz`$Pjs_s$IpORXM>Uh;~Lz-63EQ58<_OgIBx{yODs_77emM6!f!B5^-MO zAO8FwqB1#;#Hw8XoDXqK8;IE_E~*i@v_&Vktc!Uq=J+WORyfv=wDg;u_uyn-m2nOI zwN19%S$vbR7J40=y6mG)%Xks{6-?AO4dzn&QmyAF_1* zO*dpNl-o;`)>OHlyQ;pG8G5%N3zdoPo}3|zW3))#jg)yCjU-D%jMM3jDOSDpS5f<; zmxbq9D+%ugIU7rMYxOINr1x%+FSiOkI%$(e?Hne1qoLr!a4F>|dSZUHWs;NwuN4Nr zYGnlOG|8lQ(wa03=PG7hl=}!VXqc+k9~Zbpr{b%IN@)Qd!6T#R|k*{C1GW&BTmTYRF zBreX4tN!PRy#81I7JAx`bg?!1Pz~jrn(yy~>U0p*_D|LZj)FC^FY=eL~@Zc7i3 zYt?sz!G{}_zYHzWUjuPC8mV?x=+)6lxCEROCC?_(-PMkHu^of2q_TvgzS@?|56+Sv zjJpjh@d)^zr<>R}TV-ZO&;Uz}CVxdhqjxW%Ek`7;kW0SQRqINEy!p2UzU5yvJt zu?VZE=c!m9xCS-`i=|O|{mv8SSevj;?O?}v&S%fQaM9uXZ2tbo%?UU9>#Z7R%_|%3 zTOnXl-_9vc1Gm|sjcWa&r@T-YJ;NK`aU4@Gd$ z7SqUBoH|uDlgT``@yxo>N*U|KE{MUB$vAuU%!qp~L#`IHnPD5T1%Y3=a}fjr_hrOy z$a%fj0kBMPBo@NCI zG$JiN?qGRwRo^O$Su|_9_4M=Np=VA{6F>p{;zglY)69b{llXQ1MEPiij zh}%+2F}m4>y!|%$iuZjboRb1Mup%P-?mgFzEha5W(gBa57m7*S_*@ZRzaK0RRJW+o zQ|O`930KrhXr7ujEym?kt}(ZdYorSnw{$%}STck&3fZqya}spdw?&C%uMLU3j#6>_ z@y(aKcau|&)?YA+D@ulwlQ;@g@Z}D&nppRXCVJOEj11?Z9;1qZV_j-H$0MlZ_S5f{ z58kz-tryE=!lV@3Ubs;jj1U9^AFuHJod4mxb>#fA79mm z{oTQ_>jf8QpiH?~iQLO%?3|>2*Kg-LvNN;VL62Hg=NNT^qJDyIwyi zlHWRDLg(5aBRCH2%fA+hiX4zH=4(vALyO=_ktG5%2D)!AZu7`CJ~ArXj^zotX|wZs zjd;7|XJ`~66kSB>5xaOqwp=!@1#2nciH+`M*mJ8F@Cv|3B*VW&fqw%~V(o9UqwuwK z`wIp~CsKeWm^^bH5(hIzxoec}2T|nVb>+Wg@)$LxnlQ;YejtGI=v4fN?5#LZ4t)(# zk7?Nr@Z{XK47yAx%O2g$PJgk>zT+-{`~aGu__Juwt`w5KFH!7-!wh&98~EAcygF<@ zqJ@W(OWLZ3nm3dfza=IvVq|gmzN{<9zBiOEBa9KZQJCsCCk947PmcM zi3FIA<6Uy$L^BmjCS$uWJoam~R8aS<+0;B;5V`CQ{1W{CsKNtcr(jais zh3g=#A~_C@t;@&TG{wpKTYs4`9>x;${Zx64_%11P^_Yga#e}!PQB3^JZHs@jam<^; zY+=3Q)BIVJRhF<|P_XU8ZZI~5@RuJt+z2&jo(BL>urxEHeqftKC@u(T2;pc(FmneK zbl2zO%Dxvx#t7OCfIj)ThlAu31DPmp0Pu^NXQbtPq5i(ecHMPA=rHO zlKlI^Y_W`8LM1W%)-I$~9l0T51%sAS9wK>yKZ967nJVJq9j5LcZPTEq}~oRDB?q&fY*dt+NCLPSyUz zIR*M8!@Uw%;xj^9XdmdMZ9d>@dVF$y3Ce;Yr-VJ^H_`H*S@>Ip4idiZQbXBe3~JY* z4+blilHthJl$Cv|HCFo#`#YtsE*LMxkhW(iQU` zj<9REC2Q-qwiv5h`X_OfMn4BFj*WCDWApLp-Dv1H+5R@!%27aezVBMhFsU* z5?6_Zwxk}r$fGO{eR_HY-&Iy_C_-a+cSvle$g_z8LYWhAk7Jx%cMJ_l%{|GMLQlY` z;YR858j)VUeA*75BZ;7#Q}HZ@3EfelnW~Bzu74%Me=x*UT&GC06@C-Gxb7M&*M|8H ztnz#5Hyh_4ZZZc4*m}Ws*j;n_$ZNzxXjNajlm&slRT*_Ns*&mh-txsJ5HeEBYDo$I z{E+8`v`QWPMcY0R3MJZulTxGLsAg6hHeXGw}v8#n4 zIgT{W;*Z~=v1_`(ES@PcNAfQakU}g>~K%(jHgYro>0F({DFHVFtYfTjniaGR9PL zr|D(7diC$3d&`V&kxF`hn*5f zPeCK=c9^tim9MIp+p_@5apLM{yIu7pO>*(j>(sljYOF77{eC{7J`E+gL1^;*bq&e9 z-OHC(lEAvNlLjtvjrWQPYdgr(0ly%3wp)2BS)UAHU+5raF94s#QqXs~1bbhl$EbCz zA3~)d)d!_^oL(kZ1~R#mJq&9FS1vCF8!z+z(r;fRGu&uoaac`LxBvM1EqvY ziO@Ti`S8o%2KuHYMQZ)B3bg77sH2+2_C5^jQW7X@Ql+W68DIkJca_25puUtwic0+D z8CZ-fR?|*_c0-~Emgzg`^Y}QXj6$Lw{v(DO7X*AxfB|D$Znrr?khCHxMZ=4RqD9Dl zwO<6C79+eO*@Uh$@9&dAOrib+oI?3}vJ7gj?&Th8XwWSXA8Y9UvO;faOcO4LYfo$LHg zP#5YAI%)Oot6s#xUh_ zT&jJh<>mjn5TZhCu2?Z0o9RsRoPsM7k+&8X*j*9>^A4gyd~03QrI9Y`F$MLhW0X{? zh5P6adF&$-#aYv#R_tr`R;K}AysNSgIHR9?=0`YrTjcc35dy+4Fu>= zP^#F@Mz`k9s~EsR;iSUin1}J7safCl;=ec6)y!pz#Zeu}D!b6;=1tMe)<@Ixz}_D8 zo^NVpo>T%;OYkmfj_hzLf4m{Sa=35AxGgkxRu9h~?TK)_tQx5vou$|@Ko&yzCBmhq zdr#SKNBDwWpIX3O#=V7$DJ(s-i%xe?0qR+#Sn{nRyG|*NE>lBjM#XlP&g+o4W;$%? z-8Jj~DBTXG|4*Wy&Ck~GlcA*dL?&KW9mn{SnqKm$Clx_;nd%;PgEY1OegoWe?;&Em zUYr;Kzq+mG7ftQm%<9g%KaW(;Cyh+iiB8f}a}!;>|5E}>@ZMNCQ&V-X;xDe85fv!z zi^*BT$rx`I1adcApaD%bP9Lj34Sdx5_0}OY+U0(aJFp0DHGvQs)HsYwdbiYkY=*VG z@+yA!c~@rJuRC`%-WBTS#$8IG=Ksohm2EG*Ke_eTC8eI}k9d{8XfgL>ruMFmn$5I| zU8!B8_d0j1HD?=$3DIOK-pr`_Ne{d$~VX3UNv zI_-fACAtnXB(|=ov&nuI;o{<;*nCbhmx(`{AZ{Y74-mNV42T!}m{`!7nVH^BrcFGL_hmk57(AhuL_7 zM}j||K3$sc@5~7{f5hq-8VN(Lj{KXluq*pv7j2rCI-KYTt3t73V?tp8I89K|YoLUC zEbGt9VQ04(Y>J=%%dWGMRK_cCxA&8NsG><;Fy-Kh;`oPrDL1?=JG6Y;ttQF`bdLO=)*I(PW)@2qvsJ@=k-?*3y|*34vPlD+3G&-?6Wzpj`cVtVh4l*D_t z>-rx0>_j*#zE-q$og%dxZy98dPNmk{&VfLb$t|TDM<1_SH1pl$7@Bbn(RT0GAtTY>Gl- z<%CA^v@N_%CK~I*8xDGJ7d^+fJ7h!i0rE5|pNB(Y{^*C1i$DU{33jW&wgBx%WS8=V z$l^JlUnmKci4e1@uulO7cM|!_$;{WUpr7x+qh)vHwwc?-t03WJ)6_8j%PW(Qs81=L zph+yP>jVJ@OO8?d+E6bki#hLi=x0ZtGEFOo#n#KJ1i{_By5sj$*+yT8C^e-QNkdOw zuvHFjjw4?wOlT`{5)(;d0D1r++@wl2oh*2aFTa_`IP4?Ieg6sRQ$ z!10M?(kJ#*50yl zbiaR!VZykyo1_ohgJ&@erjy4A-*HgdUv=uhV;?lPf>+l$o}&Wypx`74p+d*eF!($D zd;^D+!vvmZ9qx_6ubFqKYu;*pAhk;CpoDkccIR+D`f21;Yy#)xETWOJt(k(#=e#b? zGuKDr;Ns>{&E;Q`5)X6|U0z4E7TCkANSn)f9~w+lL=zHprmILbzf9amu+Jt`Q}C@|n#J^5~D}eKJQfM8ww7-m2x+sx!AzU)xTVt{uhD%4A<-N}f)733# z$74s2oBuEiXDK8|L>CHXydO4TJPe;&TQ$S18cq6`|Je36OPJ0nAF|J+XNX3T>xPqN z^?Kqr^fmFM;#?emX`&j+O%j&o-k9uqG|bGtva7ShExrlCV(dM|Pabv}%rM$_@2XQ3 zyR+oj3asKe^(Pj7^~;n*etHECe?6pD=a~QLur;1~&b{W|2A@2oDMkG`3$Ax<$BSYVZ z1!+Akm(Cf~tC4vY7bzFqk!{dYzC^-tHk{nwY}=w{|0sM^{`H zHOm7COXJ2yrE4wk#M{#71|o_EOT__g{Lv;P_EF>T^8Lh?Td`kWl=u?aM6yWZ zHq~D$o)v~}CRIL0_5xmnATS;94YLx%njC37ZKWI(UT~N{u+pMM=gMc)TeT=2E z{VUK%`)j6PeG8_d&A+Az$o{B_dVm6Qz31VWuA>JvXkp)LF_=2PpddkM^+&o7CB?fn zzaF3r2jn+pOZ8|6K(<7J(Q57=VWMS#`vzR0z58FnL{a||CZfA$_W@1#U&2Jte+d&! ziULC#XqC=Rb>1LQ4(x*@t*S*{oDt_k>!)HfpVUlL*$N1tA22EKS5gh;VmspLo{^zg z=%AxmVv6mDPa_BNnnAHE=9-ceL)1Las%Ss;c^f&=Od7Q>sj3SZH1ur{_AG%rehwQRk2Xgd$>yJvooH z1PXN2yrCcZfxBls9GI&?-FT`ZQXqmSmM(~8&k3@TNiD36E=AK05b)UxYezScWhQTk z`E#s|4m$Esi+b^v;iRN~kf1|w%5yB{Uh^q%X^}m8R2H zl2Ru-Soyo_SUVH?dd&XB-vQO%yXN_6`nD%5NPe$k&NX;_=;ATTLvPoan1}Q@lKKo9Y zeUZft4VjV37yc&hA6U0k+CDq2nm=1O^x~p&-Galvwf1^_Z2Kxl6J3%g$i8l*yW-pU zVwQxW>d0wO4WfMyI|nnHk(oCMgkvbF87Gt#D|qg$Y6V5Zy%tA*%oB_mIkodxsk}S0 z6`%vv-y8r4kq(^Jxg)7UG;TCw+$<~!<1Byq>6C*_RqWiom3G!@>6Ia!TidM*&LwLu z9-fcH=!Pme8qkAQOZwjaQ>*kE5~bfM4pMkHmrE>{#ss9s=U^Of(=oQ-w@W@z8K%`= zc#|y6X{@>^51)7!e}78Codq(ax4kx!2`;yn{JPmwUR$S??791{B0B*?ae1Rdtn*8I z$-t+;(s{=QXSvqUbyU7d#OszFNo_@v3LsuK#V3_wJe?x$#FjZAo z#lh~0UpcPZwm@p_IfX{^jiMksd+#)B0jq!N|WYp$fLyX8_M2|gmy&hy%b4_}6 zn0RbJqJ;d2%8I3fbm|37Jyz#YhC*=e4SpBzd93FY?e=;ZIm+0oLAIeIKDRymWq@k=N?(=D~KkWaR zA@4TTOQ{+58^h1BUF0?{Eu0n?of#knqP`r&otzk6(RC300qthAW+){*%Rf0Ry zvt{bbS%s-TlzCuBoZyxW>b7AV6MIVIymt~iF5k@1x`O?5-PN*qun)TEnV!Di_dA3A zo6WS;)lI6tO(Ask7C;Ar%>fgf^w&T37NE6X{Gxp-$|_*b0@D=TuIMEV8GGb&7UWE* z4zWG^tVbMX(xjJ?;}A8sO?E~_#w+Prz4}d^<^SsJZU*S9{rw@Gp%pDDiT~&-xdvXX z^^5JwLo6ACmlySN79K>F#BAJGi55p`0CBjGTs)8D(lAP@<^Z^&@s*zMs=!^o(H1{( z4U3R*Z^%sm_!N`wWukiZ#Lj6-u+cw@Rp_xCL$g_Dkvw_~J%4!wK$q_B?n1xUWeI>E zrjR8OV(#JLQF8_Y4fkztLvbQw0|Nuw+uOhvXlZ;d$e9cLeB0FQUmyDy2xX1~O)7S6 z0}qh6uRwVnoyqGs^#0;!(F-nPeGl(LztE8LdLH++fo}UMa98ulYEty>j(fylM0!c+ ztn3H{v)|60Lf}==X|TfL22upcrH>b^JSjooPu5v}RCPlPIYmE^1i1nRv(n$owPKCngtDBt_&S1)O;z&an`*4+%dswPt_LVJZQ5DdTw|L1 zyaqYN4`e9RRycS_bsV>-eZeNGn#01M#}5xD-mbfx7rCmI=<(*ITU|)f?>>t zttTvko0w9bGdvsLNA}U$xqXAJYO_c@sgct)>+Gs|-ax534#!k|^OFwEz5tVeKuxIp zq2_+%=k-{KB8G({R+96@2kvR59P8u8(9lj98_1gZFtd7iNE_xQCKt3 z66@7Ppr~>$-{j|e628ttBqq_?H;`5e@}X5Na$KZS_)D zvOTjYRlF&VY%I@vb z?N5$EBo*uBtBZ_g^M2cHxJ~bJZ+Nphx*r_Y@~3^NJ|Ws9oF%J?9;k8-)P}5j!E(Mc z+`mbd*_-oZHHJ+yC8u8nlGh;aRhH_-Do$xPG0(M=!KH~; zjwOmG;qI958VWQ?l!)bk7@Q5qH=gT1iRV=iV)3@!iFujdGi^OwoPSis_F?;?S!cFv zor`}W-{x6bg@$T4j4;*i7bIJ@*#SoYs5BaO=NAki)=DC|=a^(H`>bkC&LPqQ>1xXA znRkj@o)9Oiq%RL@5O5?G~HqKe%5cQ0*$Rs95ng=&bY-%*Zu0k&%=&S=1E;C zvQn!$G8|6DC=7=m?0C%}avOOm`X@$KlLp#y6xMthzXe~8xBF}w~!C} zohKHX-%CQRUH$v32DFvwBJ*Y9?nkmw$1jC>wd%!&jnSwKE(dkAuid0_gxU5vOGf%T z@$Nh;-Hv=vNt$QqZ!K`fNTV#yHu0|L>d{F3zCCXUgS=WXfqIv5W1ak{&bZ?dzP!Jk1gXaV%AqtZ=RpRlN#}l&OW{J5Q@e0QHVWHrD`b% z`<+J6A)ORG9xvUuKz7P~>Et5%S#V1A)YqWf(O|NrR>w2IN_4YM|2eG2fhnWpi;~^N z>+V!P)}AMBn)JQ*3mQ&+cla2jiXJdIv5TrZL3;~zG+NRb4vBhbtJpu3XZVr(vTo`# zG7-OX)b@~9d+o;ChtO_!)o!mtGdW@^mMOWZ8MM`I{)-Vkv-v0gNyAQ8Mw78PY0i+TLWi!$v| z6lsAxol1k;{5oYR;0$iG*X#a#2*>l44Q@eE;%4h07}$9N%#^BNR z>9M!|Mv^119dr(Xz*(f# znZj^3wo)3@{u(X3`J291ntHObY!ey?x5tiw%sBO2w7tP*IO`Px3V}p3;a;t#n~wz> zoJ_AKf2Mf;GB_8Acmq}nzWXHWPe_OFI~x!L}( zdUFD(4o+IYOiYvZgV(0C*V?^=lln7gM@6U|ow4j2ltFe+E+OVXt8( z{GIXf+L4TPQ_y+&CF0JlWUD8}9WXdop483_eY&#{reM!>-;R02j+#env}`18_TBssA<@AMsMt6IU(2RR>77=y}Y z*OkQ8Bi9CQ2=06)0wtyW*OAg-x)^TZ6S;$j$c=?(UVs+XA$2>keXD)qeb?oVO|Yto79^e{@3Q&+cwV3Xs|D>kLvgr;hN)5ku>1 z(8q^P;}qB7%zsF}E3rk|hNs|tAZ{bN4ojsHyDS4ip!(|xl9NZ}ZI`F09U!GQ;z|di ze)Qa!u4&7ZG3aCeaxk??a%QFucLK5QDU^l9XxH^WfC2zuA$k38|Br*P>)e0abIP77 zqRZTso1UP(U^rQD(88+sy8s)jnSW(2XN7u$k-M5nqV)$mlC?yYLMqESKLRgx&}%6bDa2e;l6^U=YV2{T`dx zqP@jd^-o&Az>E8C)L1@l6)m)NG3%qNG#_>OS@VY~4J91PnO-u;@5!DN)%tik$$o5U z=zi>jTE6;sRT9B^NY@uCJXfhZL3w|G^ zH-o^OH~wR>1$Yhh?)cT+EWo+fAdo0c z4&%kfFt~y}@n7soe-vi!Id83`bFqoO8z?fw`WKSyN>Dl%CV@-u3*{4O1Vl2qKGJEe z#ukRbeARpCZCQ$wdO~AP37`o->n+FX!p!+Jj**;wL~mva`F3WJw}C`4S1 z`Spp&z0}m6Z5pg7TBpU_^ANm7sv6>JMr=^DB;t{_4=G}m>?neyd32Nb^XnQV**#qi z0LqrRyNBtYZ*N`2nwlc7ZFxM}-db?4RI&|v!Mf%A&E5Kzxx*%Rqjcy?@r)GytG9v$ zoUl`@0Sn6#tPJ)Q zK@YdHw|-w9Ma=5~Bv}dGPutZ`vBCvCOp)w0LQ!4S9?Jc1@82TEilSoo#prVJi?fA5el>@61&s<-2IDK{lw!kA zYhC&JH5p8*Rwcq13l~{yyc@Mz{c~MD1@?zMKyY5&k&S&$WTGdAo6Gw(9U5&N^SA6; z)v{ewD!fo$R8RzGl8|HaopPLAs>D7OL)?(zZJMu^XD;A4qal{Wy}510H)3?4!Yel< zFfzB-5o&z*-&F_lJ^xd6pq#Iq_u8pFkRx(#OD>C3vU`fA&wRlKE))!_(OnxzfH7yL z=b0ZAqO58d!l;Vk!Yx+^S-0S;!5`~5PAL&xmfUk6-dg^;EtWJ;oS|G2R$3Ipj~Gha z-|S-yEjqL>N?MwuWXJT1{1|tcq-*_KOMSGy{hsL^(t>rK^pYsp-GtQL20EbNlXN^d z!HH0mD`<-AQG4 zuDmKvF;)_+Qs0UFUFNfOA=~@Ek&mb$VkUE3m^N}5KK}I?85xp`N=l;co65xQuodNE zUY?AFaU#2R^Q^WSfjRr!V1tFa7$*_u+Z~D+4f_WWk@$m^a&h|uU*Z)1tO86+u+u&>Pd*kD+5%kV}aSdGMXn#_&#!3;@THD2KknqaTa zcjO^-OE$w|1}Q8{&wY2z^cMJ)VgDx>LV=U5e!B-w+H(TxP(ck*ZB2xjsGWr32<9hew3w~Yz~t#q*J}j0H4Q#`keAyL zI9lvlsk!l0-^jN&Ii$Ob-PqEbc~Zvt`Af(c)FnX!eF&i><`YPt+rHZv1$kBn&XNEH z+A-o&K1{*O19*3sbAE2#aD`=)h92h;18S*i_Dn=n1kD9QLU7x4Zd5Qlvyz|-08p&( zH$Y$Gr>3UX9E(#@Qh*P@7HA@dDr#!2R~NhU+YUFkbpY%Y{83X7Mu06bF||`2l0GZF zMp&}7xf7HSK)k>Wu>Rfv2vpbVmIRdO-<1-g*!z?J!CRD5z;gzMM%qc{b2k1{^-Vsr zIk=mHxO1Q z*Du(SiQnNE5IeM&7p!4{lWsvNMb{aC07Jj^7*_OJM&#dwb;k-QwuqCFPAoN#}n}-nf3Ml8V;G!_r(!AE|8;;4Ww* zjanwrh47?`NrGa{nccg}x}_KHh9?}(d`^vOk#oLmxw&N~-|1s~h}1Z?wC1@sqb1KrB+6M&rzQ*HMCi}9FGTp! zlj=Rvhj>hC0UD!Qn-4H7cM)7Va2g^$2RpcW<74C%?~TRxQL&9fmj)y$d@_V=$Wg_ z99my$IbMp`g-sCH6AO=2hedE8G`+{(>SCvAY2_-1Z0_?eaJVJQhZ+{1P;$` zfin>>0WnE>l-j?+Vu3A@pX@Ud>@NQ#HZ-rM+Le0)V<62l&@oLqz;EYNY8zeK;HDnZ z_T>`$eUWoJqydORq}(7+-WJ&$(h1AZTn zPPBDg%AaPXD`p4=?2tRKq_!^d%{n42uP)ODjoa268#aLxn`(=8vZ{Pc##>#l{H>z0 z`8NAcbR9Qz=ADvS4=u0uTHb7DiQ=i5PCli$rDFhT7lZbh!tXyjHzF$;uf*hFagbI6It) z+Po?N9tAZ(H)B|Sa)<&hYI?QqDge|1MWBY2VLHlLN{DK2WxVC@o!$(IYYM2^FqdTr zW$yh6>d0f1Eq6$;{4Z#L)4)%aZdqpLJjF0x3RP7dQByPc??+FRA@R4T_%dCTJ8osi zk3@ECkCxl$y?=Nrcq^=W^BdR9gcjIWDofS6MA&B;T0J~0N^kWr0lqN#kM>>~iCko;uK6#({i6uQdD$au@W9?fBpBE3Ey;J3fq zdR%rOV~WOikb(li7SMCAdBI`U03oN62oOaGN zX8w#hDo&y3asHW9z|zH7K}cI15=+d~tY7q4bI{LK`YMUsZ-t+F`ZOa(`Y3tXYW0Wb zHf^pQw*R`Qifv+oZP!Z?SEQzTZQ%k=_N89M%$8^jmPt*N0+#vFuHQV)bTGlFp*7y* zMB```?|Xm`NGaobpoECqNSfL+ow1^R?%9fKd4Aq7bh$O?nfG4Ta$IwTSKgFd||@8<~MJ!cVaGt>v?EPUk@LDa+t7LEz%DD4Yg8aIp zo_fRF;uK^ystdykzYJyN62u>nvxUKFQq#F&fgE6dz22}EqRqncE17{RBNaZOX;NO- z^0rZ_WTFPbJ=l&J&BHXbVs;wKkjr^S5!=1xLgNl`2;FnDVUZB)Td~uQ z&zZYndt{dLhS|iksKY2xLf1c#uM}DRM-gJI)P+GXNd}+`g2=PHwMpg=j|=8JZ&6S@ zc^KZnM1Mj&u|I8{6m-I{-Wwn4m|sM#cKg%3x7}__TLG4ZMH5JeyM!j@oezF9?Vol8 z`1lNe1rT;)pefycbajCFPCi>%`UDa5&n{!TNM}XUeE&;q&#f!g{rU?3AZs{n+j%H| zxXjd5Ur)@OfDA?3WT|HM8@E}QX~h=t6m?9iog?@xZ7$TYg+q=ADCFqs=6+@jm^%J= z(p_FoCv%>KXH?EA(<7gs89Qv0%}&LPj>`Bis%IWMe}dcWN`1dNTyJ=i5Z;0(xf?7j{DO*( zF*7AGqLiX3aYa0~n?muf9E*OUej@u%_Ar{nWdoDWr%;>>$w=@l*X-o{e7tBZebhK7 z&D=ymn(5qUI@HzRtW(QNNSO8E1NW5$mJg@7ELZ2eOQL0jsJnr=dCS%Jy-# zQ;75j9sc_4bW=m%)!{m7&c)9;%;PiL@cFwuI~NBMN9Vo{fQ;#SLEF_n=HM{&>KFro zkaksMO5@HiK6PIZI{2S3U7pO#_+$7W6Z+D45h|9`hK=^zD3LVQY~rHv`bvW`CB%Lh zXQrN>%a9b_cRxO>`SV215pwxSB4ZEo^GoWj412+i>V&%jZu0HrWR;W$k_*IS-p3)& zxubOztp)4~qKePLUupz^&w`yX_r%eC?lg3OzBI<2s2cJ895F5 zLp~K5fyGjjzdFq2Oc;7abHoF@EE;m;j(?jmuaRDJ%L@iuPSmTO#?-_16Q(sLZunG9 zK}ksorkk7|cbIuKookwvp20=zy-txf*O#B=VC?L8 z!-eS4D1Pc}uEKa@phQOLqVlZGS0E+Xb^rLx|Kh^&%BE4-&Tpe5Tq{QU@&L!L?&FYJ#ca;`>>k2esE>bGGEr?y@*MTBpM5|d zDE6jGJOC>162arn%`)CAD;tFtWF#S>D=(gJNllv_=6_#sCRRp9KoeKbO3#Ryh#PtseV5yNAzyCR)#3zTB+>M$^@K8*2AWaL%8ET)e#DwD@DT zn+-e(j_1FVE;lauQG7FJi#=DTLk^CDFD&g$lXnbvBv%49@D+Z}E9m$(@vDd-#*?!y zA;*&nb>G7drB$OB+T3Y^S0b(Rr_mdxPk#_PY;Wa&fiPS&Sn%~oK9Qx6GbcjE9 zHa(}bZZ&LOe>2p<8e@HV8qgz6dDeg{)=_I}5WZ0AMgm963 z8VOLfEw#6R8eT$4zjFERm|fR*>qlt04EwX<*jmnJcO85(C2X_MUF!b(@$(n6^RwF~ z?GJ0Kj}#dMH-5%(nr}o0P6IiFV0a=1%*Xq|z$0)dL8d)1czS&&TMu?1T(|wB_IViC zkko_Z8ru}sSsM&qMWx__AAXi-V8|Pqm8)7Jk+t=t6SNp+xYquvj~@p$I-LxSPZyYX zS-uoO_Bg$BY8f&H7AsNW$)B!b-MtP^D^aB+U;77@UmVOtf0p(vNbqq$d!Iz@(imx6 zAHArRI;e3MtFstZ-C`}JlkG15b;Oo8DAN%g2rNl}{#E@IY0yGxYK*>Zn^o!J*mc?T zPm1GFSH8>r;N^|_AmY1U?qo<@uR{R!DeLhoPkgrLSKq}a;YIC1=X=^j^v?mGqwSQ; z%+|G3yF2sm&|0|V4r{_n<%P#|Kpu9qGwTD$@S%2Y8#UwBhjwS1JZpSzfav~VAxPC3 zTmU&r0w8U+xry2#E*&~Ja6=mTW9ueHZ4a&Rw?V>pb^zp8;$`kgp-##AP}UXJF`#M6 zFVKCm#(HS3#b?Y`sN?B%);9UCRq868uL&YR`|n9#K>7xpXZAm4jiq0a-wGmdkk+OA Qe0>AO*J_Y*S+k)31&#T_7ytkO literal 0 HcmV?d00001 diff --git a/doc/tutorials/nvmx_virtualization.rst b/doc/tutorials/nvmx_virtualization.rst new file mode 100644 index 000000000..ac1d4e965 --- /dev/null +++ b/doc/tutorials/nvmx_virtualization.rst @@ -0,0 +1,332 @@ +.. _nested_virt: + +Enable Nested Virtualization +############################ + +With nested virtualization enabled in ACRN, you can run virtual machine +instances inside of a guest VM (also called a user VM) running on the ACRN hypervisor. +Although both "level 1" guest VMs and nested guest VMs can be launched +from the Service VM, the following distinction is worth noting: + +* The VMX feature (``CPUID01.01H:ECX[5]``) does not need to be visible to the Service VM + in order to launch guest VMs. A guest VM not running on top of the + Service VM is considered a level 1 (L1) guest. + +* The VMX feature must be visible to an L1 guest to launch a nested VM. An instance + of a guest hypervisor (KVM) runs on the L1 guest and works with the + L0 ACRN hypervisor to run the nested VM. + +The conventional single-level virtualization has two levels - the L0 host +(ACRN hypervisor) and the L1 guest VMs. With nested virtualization enabled, +ACRN can run guest VMs with their associated virtual machines that define a +third level: + +* The host (ACRN hypervisor), which we call the L0 hypervisor +* The guest hypervisor (KVM), which we call the L1 hypervisor +* The nested guest VMs, which we call the L2 guest VMs + +.. figure:: images/nvmx_1.png + :width: 700px + :align: center + + Generic Nested Virtualization + + +High Level ACRN Nested Virtualization Design +******************************************** + +The high-level design of nested virtualization in ACRN is shown in :numref:`nested_virt_hld`. +Nested VMX is enabled by allowing a guest VM to use VMX instructions, +and emulating them using the single level of VMX available in the hardware. + +In x86, a logical processor uses VMCSs to manage VM entries and VM exits as +well as processor behavior in VMX non-root operation. The trick of nVMX +emulation is ACRN builds a VMCS02 out of the VMCS01, which is the VMCS +ACRN uses to run the L1 VM, and VMCS12 which is built by L1 hypervisor to +actually run the L2 guest. + +.. figure:: images/nvmx_arch_1.png + :width: 400px + :align: center + :name: nested_virt_hld + + Nested Virtualization in ACRN + +- L0 hypervisor (ACRN) runs L1 guest with VMCS01 + +- L1 hypervisor (KVM) creates VMCS12 to run a L2 guest + +- VMX instructions from L1 hypervisor trigger VMExits to L0 hypervisor: + +- L0 hypervisor runs a L2 guest with VMCS02 + + - L0 caches VMCS12 in host memory + - L0 merges VMCS01 and VMCS12 to create VMCS02 + +- L2 guest runs until triggering VMExits to L0 + + - L0 reflects most VMEXits to L1 hypervisor + - L0 runs L1 guest with VMCS01 and VMCS02 as the shadow VMCS + + +Restrictions and Constraints +**************************** + +Nested virtualization is considered an experimental feature, and only tested +on Tiger Lake and kaby Lake platforms (See :ref:`hardware`.) + +L1 VMs have the following restrictions: + +* KVM is the only L1 hypervisor supported by ACRN +* KVM runs in 64-bit mode +* KVM enables EPT for L2 guests +* QEMU is used to launch L2 guests + +Constraints on L1 guest configuration: + +* Local APIC passthrough must be enabled +* Only SCHED_NOOP scheduler is supported. ACRN can't receive timer interrupts + on LAPIC passthrough pCPUs + + +Service OS VM configuration +*************************** + +ACRN only supports enabling the nested virtualization feature on the Service VM, not on pre-launched +VMs. + +The nested virtualization feature is disabled by default in ACRN. You can +enable it using the :ref:`Use the ACRN Configuration Editor ` +with these settings: + +- Configure system level features: + + - Select ``y`` on :option:`hv.FEATURES.NVMX_ENABLED` to enable nested virtualization + + - Select ``SCHED_NOOP`` on :option:`hv.FEATURES.SCHEDULER` + + .. figure:: images/nvmx_cfg_1.png + :width: 400px + :align: center + + Setting NVMX_ENABLED and SCHEDULER with configuration tool + +- In each guest VM configuration: + + - Select ``GUEST_FLAG_NVMX_ENABLED`` on :option:`vm.guest_flags.guest_flag` on the SOS VM section + to enable the nested virtualization feature on the Service VM. + - Select ``GUEST_FLAG_LAPIC_PASSTHROUGH`` on :option:`vm.guest_flags.guest_flag` to enable local + APIC passthrough on the Service VM. + + .. figure:: images/nvmx_cfg_3.png + :width: 700px + :align: center + + Service VM (SOS) ``guest_flag`` settings + + - Edit :option:`vm.cpu_affinity.pcpu_id` to assign ``pCPU`` IDs to run the Service VM. If you are + using debug build and need the hypervisor console, don't assign + ``pCPU0`` to the Service VM. + + You may need to manually edit the ACRN scenario XML configuration file to edit the ``pcpu_id`` for the Service VM (SOS): + + .. code-block:: xml + :emphasize-lines: 5,6,7 + + + SOS_VM + ACRN SOS VM + + 1 + 2 + 3 + + + GUEST_FLAG_NVMX_ENABLED + GUEST_FLAG_LAPIC_PASSTHROUGH + + + The Service VM's virtual legacy UART interrupt doesn't work with LAPIC + passthrough, which may prevent the Service VM from booting. Instead, we need to use + the PCI-vUART for the Service VM. Refer to :ref:`Enable vUART Configurations ` + for more details about VUART configuration. + + - Set :option:`vm.legacy_vuart.base` in ``legacy_vuart 0`` to ``INVALID_LEGACY_PIO`` + + - Set :option:`vm.console_vuart.base` in ``console_vuart 0`` to ``PCI_VUART`` + + .. figure:: images/nvmx_cfg_2.png + :width: 500px + :align: center + + Service VM legacy and console vUART settings + +- Build with the XML configuration, referring to :ref:`getting-started-building`. + + +Prepare for Service VM Kernel and rootfs +**************************************** + +The service VM can run Ubuntu or other Linux distributions. +Instructions on how to boot Ubuntu as the Service VM can be found in +:ref:`rt_industry_ubuntu_setup`. + +The Service VM kernel needs to be built from the ``acrn-kernel`` repo, and some changes +to the kernel ``.config`` are needed. + +Instructions on how to build and install the Service VM kernel can be found +in :ref:`Build and Install the ACRN Kernel `. + +Here is the quick start of how to modify and build the kernel: + +.. code-block:: none + + git clone https://github.com/projectacrn/acrn-kernel + cd acrn-kernel + git checkout master + cp kernel_config_uefi_sos .config + make olddefconfig + +The following configuration entries are needed to launch nested +guests on the Service VM: + +.. code-block:: none + + CONFIG_KVM=y + CONFIG_KVM_INTEL=y + CONFIG_ACRN_GUEST=y + +This setting is also needed if you want to use virtio block device as root filesystem +for the guest VMs: + +.. code-block:: none + + CONFIG_VIRTIO_BLK=y + +After the configuration modifications, build and install the kernel. + +.. code-block:: none + + make all + + +Launch a Nested Guest VM +************************ + +Create an Ubuntu KVM Image +========================== + +Refer to :ref:`Build the Ubuntu KVM Image ` +on how to create an Ubuntu KVM image as the nested guest VM's root filesystem. +There is no particular requirement for this image, e.g., it could be of either +qcow2 or raw format. + +Prepare for Launch Scripts +========================== + +Install QEMU on the Service VM that will launch the nested guest VM: + +.. code-block:: none + + sudo apt-get install qemu-kvm qemu virt-manager virt-viewer libvirt-bin + +The following is a simple example for the script to launch a nested guest VM. + +.. important:: The ``-cpu host`` option is needed to launch a nested guest VM, and ``-nographics`` + is required to run nested guest VMs reliably. + +Besides this, there is no particular requirements for the launch script. +You can prepare the script just like the one you use to launch a VM +on native Linux. + +For example, other than ``-hda``, you can use the following option to launch +a virtio block based RAW image: ``-drive format=raw,file=/root/ubuntu-20.04.img,if=virtio`` + +Use the following option to enable Ethernet on the guest VM: +``-netdev tap,id=net0 -device virtio-net-pci,netdev=net0,mac=a6:cd:47:5f:20:dc`` + +.. code-block:: bash + :emphasize-lines: 2-4 + + sudo qemu-system-x86_64 \ + -enable-kvm \ + -cpu host \ + -nographic \ + -m 2G -smp 2 -hda /root/ubuntu-20.04.qcow2 \ + -net nic,macaddr=00:16:3d:60:0a:80 -net tap,script=/etc/qemu-ifup + +Launch the Guest VM +=================== + +You can launch the nested guest VM from the Service VM's virtual serial console +or from an SSH remote login. + +If the nested VM is launched successfully, you should see the nested +VM's login prompt: + +.. code-block:: bash + + [ OK ] Started Terminate Plymouth Boot Screen. + [ OK ] Started Hold until boot process finishes up. + [ OK ] Starting Set console scheme... + [ OK ] Started Serial Getty on ttyS0. + [ OK ] Started LXD - container startup/shutdown. + [ OK ] Started Set console scheme. + [ OK ] Started Getty on tty1. + [ OK ] Reached target Login Prompts. + [ OK ] Reached target Multi-User System. + [ OK ] Started Update UTMP about System Runlevel Changes. + + Ubuntu 20.04 LTS ubuntu_vm ttyS0 + + ubuntu_vm login: + +You won't see the nested guest from a ``vcpu_list`` or ``vm_list`` command +on the ACRN hypervisor console because these commands only show level 1 VMs. + +.. code-block:: bash + + ACRN:\>vm_list + + VM_UUID VM_ID VM_NAME VM_STATE + ================================ ===== ========================== + dbbbd4347a574216a12c2201f1ab0240 0 ACRN SOS VM Running + ACRN:\>vcpu_list + + VM ID PCPU ID VCPU ID VCPU ROLE VCPU STATE THREAD STATE + ===== ======= ======= ========= ========== ============ + 0 1 0 PRIMARY Running RUNNING + 0 2 1 SECONDARY Running RUNNING + 0 3 2 SECONDARY Running RUNNING + +On the nested guest VM console, run an ``lshw`` or ``dmidecode`` command +and you'll see that this is a QEMU-managed virtual machine: + +.. code-block:: bash + :emphasize-lines: 4,5 + + $ sudo lshw -c system + ubuntu_vm + description: Computer + product: Standard PC (i440FX + PIIX, 1996) + vendor: QEMU + version: pc-i440fx-5.2 + width: 64 bits + capabilities: smbios-2.8 dmi-2.8 smp vsyscall32 + configuration: boot=normal + +For example, compare this to the same command run on the L1 guest (Service VM): + +.. code-block:: bash + :emphasize-lines: 4,5 + + $ sudo lshw -c system + localhost.localdomain + description: Computer + product: NUC7i5DNHE + vendor: Intel Corporation + version: J57828-507 + serial: DW1710099900081 + width: 64 bits + capabilities: smbios-3.1 dmi-3.1 smp vsyscall32 + configuration: boot=normal family=Intel NUC uuid=36711CA2-A784-AD49-B0DC-54B2030B16AB