<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
- width="210mm"
- height="297mm"
- viewBox="0 0 210 297"
+ width="297mm"
+ height="210mm"
+ viewBox="0 0 297 210"
version="1.1"
id="svg1"
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
sodipodi:docname="01-tcg-translation.svg"
+ inkscape:export-filename="01-tcg-translation.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
inkscape:zoom="1.0393815"
- inkscape:cx="396.87064"
- inkscape:cy="422.84763"
+ inkscape:cx="397.35169"
+ inkscape:cy="417.07496"
inkscape:window-width="1920"
inkscape:window-height="1029"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
- inkscape:current-layer="layer1" />
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:export-bgcolor="#ffffffff" />
<defs
id="defs1">
<marker
d="M 5.77,0 -2.88,5 V -5 Z"
id="path10" />
</marker>
- <marker
- style="overflow:visible"
- id="Triangle"
- refX="0"
- refY="0"
- orient="auto-start-reverse"
- inkscape:stockid="Triangle arrow"
- markerWidth="1"
- markerHeight="1"
- viewBox="0 0 1 1"
- inkscape:isstock="true"
- inkscape:collect="always"
- preserveAspectRatio="xMidYMid">
- <path
- transform="scale(0.5)"
- style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
- d="M 5.77,0 -2.88,5 V -5 Z"
- id="path135" />
- </marker>
<rect
- x="162.24125"
- y="170.28457"
+ x="162.24126"
+ y="170.28458"
width="154.29239"
height="363.85593"
id="rect5" />
<rect
- x="162.24125"
- y="170.28457"
+ x="162.24126"
+ y="170.28458"
width="154.29239"
height="363.85593"
id="rect6" />
xml:space="preserve"
transform="matrix(0.26458333,0,0,0.26458333,-4.2320215,-5.4130078)"
id="text4"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';white-space:pre;shape-inside:url(#rect5);fill:none;stroke:#000000"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';white-space:pre;shape-inside:url(#rect5);display:inline;fill:none;stroke:#000000"><tspan
x="162.24219"
y="180.96249"
- id="tspan2"><tspan
+ id="tspan6"><tspan
style="fill:#000000"
- id="tspan1">auipc a5,0x13
+ id="tspan5">auipc a5,0x13
</tspan></tspan><tspan
x="162.24219"
y="195.96249"
- id="tspan4"><tspan
+ id="tspan41"><tspan
style="fill:#000000"
- id="tspan3">addi a5,a5,1756
+ id="tspan40">addi a5,a5,1756
</tspan></tspan><tspan
x="162.24219"
y="210.96249"
- id="tspan8"><tspan
+ id="tspan43"><tspan
style="fill:#000000"
- id="tspan7">sd a5,8(s9)
+ id="tspan42">sd a5,8(s9)
</tspan></tspan><tspan
x="162.24219"
y="225.96249"
- id="tspan10"><tspan
+ id="tspan45"><tspan
style="fill:#000000"
- id="tspan9">sd a5,0(s9)
+ id="tspan44">sd a5,0(s9)
</tspan></tspan><tspan
x="162.24219"
y="240.96249"
- id="tspan29"><tspan
+ id="tspan47"><tspan
style="fill:#000000"
- id="tspan28">j 591c
+ id="tspan46">j 591c
</tspan></tspan></text>
</g>
<g
xml:space="preserve"
transform="matrix(0.26458333,0,0,0.26458333,-4.8443119,27.385114)"
id="text6"
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';white-space:pre;shape-inside:url(#rect6);fill:none;stroke:#000000"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';white-space:pre;shape-inside:url(#rect6);display:inline;fill:none;stroke:#000000"><tspan
x="162.24219"
y="180.96249"
- id="tspan31"><tspan
+ id="tspan49"><tspan
style="fill:#000000"
- id="tspan30">
+ id="tspan48">
</tspan></tspan><tspan
x="162.24219"
y="195.96249"
- id="tspan33"><tspan
+ id="tspan51"><tspan
style="fill:#000000"
- id="tspan32">mv a0,a3
+ id="tspan50">mv a0,a3
</tspan></tspan><tspan
x="162.24219"
y="210.96249"
- id="tspan35"><tspan
+ id="tspan53"><tspan
style="fill:#000000"
- id="tspan34">sd a3,-296(s0)
+ id="tspan52">sd a3,-296(s0)
</tspan></tspan><tspan
x="162.24219"
y="225.96249"
- id="tspan37"><tspan
+ id="tspan55"><tspan
style="fill:#000000"
- id="tspan36">jal 40a0
+ id="tspan54">jal 40a0
</tspan></tspan><tspan
x="162.24219"
y="240.96249"
- id="tspan39"><tspan
+ id="tspan57"><tspan
style="fill:#000000"
- id="tspan38">beqz a0,584e
+ id="tspan56">beqz a0,584e
</tspan></tspan></text>
<rect
style="fill:none;stroke:#000000;stroke-width:0.264583"
id="tspan26"
style="stroke-width:0.264583"
x="111.41705"
- y="28.275999">in qemu (host) memory.</tspan></text>
+ y="28.275999">in qemu (host) memory</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.9389px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';fill:#000000;stroke:#000000;stroke-width:0.264583"
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="297mm"
+ height="210mm"
+ viewBox="0 0 297 210"
+ version="1.1"
+ id="svg1"
+ inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
+ sodipodi:docname="02-tcg-helpers.svg"
+ inkscape:export-filename="02-tcg-helpers.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview1"
+ pagecolor="#ffffff"
+ bordercolor="#000000"
+ borderopacity="0.25"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ inkscape:zoom="1.0393815"
+ inkscape:cx="396.87064"
+ inkscape:cy="422.84763"
+ inkscape:window-width="1920"
+ inkscape:window-height="1029"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1"
+ inkscape:export-bgcolor="#ffffffff" />
+ <defs
+ id="defs1">
+ <marker
+ style="overflow:visible"
+ id="marker10"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Triangle arrow"
+ markerWidth="1"
+ markerHeight="1"
+ viewBox="0 0 1 1"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.5)"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ id="path10" />
+ </marker>
+ <rect
+ x="162.24126"
+ y="170.28458"
+ width="154.29239"
+ height="363.85593"
+ id="rect5" />
+ <rect
+ x="162.24126"
+ y="170.28458"
+ width="154.29239"
+ height="363.85593"
+ id="rect6" />
+ </defs>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:0.264583"
+ id="rect1"
+ width="74.798347"
+ height="119.69866"
+ x="20.345798"
+ y="29.729326" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:0.264583"
+ id="rect2"
+ width="77.662941"
+ height="155.75682"
+ x="110.99847"
+ y="30.05344" />
+ <g
+ id="g14">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:0.264583"
+ id="rect4"
+ width="37.450123"
+ height="24.308727"
+ x="37.793518"
+ y="38.232224" />
+ <text
+ xml:space="preserve"
+ transform="matrix(0.26458333,0,0,0.26458333,-4.2320215,-5.4130078)"
+ id="text4"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';white-space:pre;shape-inside:url(#rect5);display:inline;fill:none;stroke:#000000"><tspan
+ x="162.24219"
+ y="180.96249"
+ id="tspan6"><tspan
+ style="fill:#000000"
+ id="tspan5">auipc a5,0x13
+</tspan></tspan><tspan
+ x="162.24219"
+ y="195.96249"
+ id="tspan12"><tspan
+ style="fill:#000000"
+ id="tspan11">addi a5,a5,1756
+</tspan></tspan><tspan
+ x="162.24219"
+ y="210.96249"
+ id="tspan14"><tspan
+ style="fill:#000000"
+ id="tspan13">sd a5,8(s9)
+</tspan></tspan><tspan
+ x="162.24219"
+ y="225.96249"
+ id="tspan16"><tspan
+ style="fill:#000000"
+ id="tspan15">sd a5,0(s9)
+</tspan></tspan><tspan
+ x="162.24219"
+ y="240.96249"
+ id="tspan18"><tspan
+ style="fill:#000000"
+ id="tspan17">sret</tspan></tspan></text>
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.264583;marker-end:url(#marker10)"
+ d="m 10.108932,33.475348 26.955989,7.618676"
+ id="path9"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.9389px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';fill:none;stroke:#000000;stroke-width:0.264583"
+ x="116.86655"
+ y="54.056561"
+ id="text11"><tspan
+ sodipodi:role="line"
+ style="fill:#000000;stroke-width:0.264583"
+ x="116.86655"
+ y="54.056561"
+ id="tspan21">TranslationBlock</tspan><tspan
+ sodipodi:role="line"
+ style="fill:#000000;stroke-width:0.264583"
+ x="116.86655"
+ y="60.230186"
+ id="tspan33">________________</tspan><tspan
+ sodipodi:role="line"
+ style="fill:#000000;stroke-width:0.264583"
+ x="116.86655"
+ y="66.403809"
+ id="tspan34">x86 code</tspan><tspan
+ sodipodi:role="line"
+ style="fill:#000000;stroke-width:0.264583"
+ x="116.86655"
+ y="72.577438"
+ id="tspan35"> ...</tspan><tspan
+ sodipodi:role="line"
+ style="fill:#000000;stroke-width:0.264583"
+ x="116.86655"
+ y="78.75106"
+ id="tspan36"> ...</tspan><tspan
+ sodipodi:role="line"
+ style="fill:#000000;stroke-width:0.264583"
+ x="116.86655"
+ y="84.924683"
+ id="tspan38">call helper_sret</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.9389px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';fill:#000000;stroke:#000000;stroke-width:0.264583"
+ x="111.41705"
+ y="28.275999"
+ id="text26"><tspan
+ sodipodi:role="line"
+ id="tspan26"
+ style="stroke-width:0.264583"
+ x="111.41705"
+ y="28.275999">in qemu (host) memory</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.9389px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';fill:#000000;stroke:#000000;stroke-width:0.264583"
+ x="21.956394"
+ y="27.18642"
+ id="text27"><tspan
+ sodipodi:role="line"
+ id="tspan27"
+ style="stroke-width:0.264583"
+ x="21.956394"
+ y="27.18642">guest physical page</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.9389px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';fill:none;stroke:#000000;stroke-width:0.264583"
+ x="133.73842"
+ y="105.73045"
+ id="text45"><tspan
+ sodipodi:role="line"
+ style="fill:#000000;stroke-width:0.264583"
+ x="133.73842"
+ y="105.73045"
+ id="tspan45">qemu function</tspan><tspan
+ sodipodi:role="line"
+ style="fill:#000000;stroke-width:0.264583"
+ x="133.73842"
+ y="111.90408"
+ id="tspan54">________________</tspan><tspan
+ sodipodi:role="line"
+ style="fill:#000000;stroke-width:0.264583"
+ x="133.73842"
+ y="118.07771"
+ id="tspan53">helper_sret(env)</tspan><tspan
+ sodipodi:role="line"
+ style="fill:#000000;stroke-width:0.264583"
+ x="133.73842"
+ y="124.25133"
+ id="tspan49">{</tspan><tspan
+ sodipodi:role="line"
+ style="fill:#000000;stroke-width:0.264583"
+ x="133.73842"
+ y="130.42496"
+ id="tspan50"> ...</tspan><tspan
+ sodipodi:role="line"
+ style="fill:#000000;stroke-width:0.264583"
+ x="133.73842"
+ y="136.59857"
+ id="tspan51"> ...</tspan><tspan
+ sodipodi:role="line"
+ style="fill:#000000;stroke-width:0.264583"
+ x="133.73842"
+ y="142.7722"
+ id="tspan52">}</tspan></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.264583;marker-end:url(#marker10)"
+ d="m 137.68437,87.212838 11.51232,22.203542"
+ id="path54"
+ sodipodi:nodetypes="cc" />
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="297mm"
+ height="210mm"
+ viewBox="0 0 297 210"
+ version="1.1"
+ id="svg1"
+ inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
+ sodipodi:docname="03-not-obvious.svg"
+ inkscape:export-filename="03-not-obvious.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview1"
+ pagecolor="#ffffff"
+ bordercolor="#000000"
+ borderopacity="0.25"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ inkscape:zoom="1.0393815"
+ inkscape:cx="396.38958"
+ inkscape:cy="422.84763"
+ inkscape:window-width="1920"
+ inkscape:window-height="1029"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1"
+ inkscape:export-bgcolor="#ffffffff" />
+ <defs
+ id="defs1">
+ <rect
+ x="162.24126"
+ y="170.28458"
+ width="154.29239"
+ height="363.85593"
+ id="rect5" />
+ <rect
+ x="162.24126"
+ y="170.28458"
+ width="154.29239"
+ height="363.85593"
+ id="rect6" />
+ </defs>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.9389px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';fill:#000000;stroke:#000000;stroke-width:0.264583"
+ x="21.956394"
+ y="27.18642"
+ id="text27"><tspan
+ sodipodi:role="line"
+ id="tspan27"
+ style="stroke-width:0.264583"
+ x="21.956394"
+ y="27.18642">Some things which are important but not obvious:</tspan><tspan
+ sodipodi:role="line"
+ style="stroke-width:0.264583"
+ x="21.956394"
+ y="33.360046"
+ id="tspan1" /><tspan
+ sodipodi:role="line"
+ style="stroke-width:0.264583"
+ x="21.956394"
+ y="39.533669"
+ id="tspan2"> * TB invalidation is page based</tspan><tspan
+ sodipodi:role="line"
+ style="stroke-width:0.264583"
+ x="21.956394"
+ y="45.707294"
+ id="tspan3" /><tspan
+ sodipodi:role="line"
+ style="stroke-width:0.264583"
+ x="21.956394"
+ y="51.88092"
+ id="tspan6"> * Some jumps can be optimized</tspan><tspan
+ sodipodi:role="line"
+ style="stroke-width:0.264583"
+ x="21.956394"
+ y="58.054546"
+ id="tspan7" /><tspan
+ sodipodi:role="line"
+ style="stroke-width:0.264583"
+ x="21.956394"
+ y="64.228172"
+ id="tspan8"> * Guest's page cache is important</tspan><tspan
+ sodipodi:role="line"
+ style="stroke-width:0.264583"
+ x="21.956394"
+ y="70.401794"
+ id="tspan11"></tspan><tspan
+ sodipodi:role="line"
+ style="stroke-width:0.264583"
+ x="21.956394"
+ y="76.575424"
+ id="tspan12"> * Slow performance is bad, but <tspan
+ style="font-style:italic"
+ id="tspan10">uneven</tspan> performance</tspan><tspan
+ sodipodi:role="line"
+ style="stroke-width:0.264583"
+ x="21.956394"
+ y="82.749046"
+ id="tspan9"> might be worse</tspan></text>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="297mm"
+ height="210mm"
+ viewBox="0 0 297 210"
+ version="1.1"
+ id="svg1"
+ inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
+ sodipodi:docname="04-experiments.svg"
+ inkscape:export-filename="04-experiments.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview1"
+ pagecolor="#ffffff"
+ bordercolor="#000000"
+ borderopacity="0.25"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ inkscape:zoom="1.0393815"
+ inkscape:cx="396.38958"
+ inkscape:cy="422.84763"
+ inkscape:window-width="1920"
+ inkscape:window-height="1029"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1"
+ inkscape:export-bgcolor="#ffffffff" />
+ <defs
+ id="defs1">
+ <rect
+ x="162.24126"
+ y="170.28458"
+ width="154.29239"
+ height="363.85593"
+ id="rect5" />
+ <rect
+ x="162.24126"
+ y="170.28458"
+ width="154.29239"
+ height="363.85593"
+ id="rect6" />
+ </defs>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.9389px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';fill:#000000;stroke:#000000;stroke-width:0.264583"
+ x="21.956394"
+ y="27.18642"
+ id="text27"><tspan
+ sodipodi:role="line"
+ id="tspan27"
+ style="stroke-width:0.264583"
+ x="21.956394"
+ y="27.18642">Experiments:</tspan><tspan
+ sodipodi:role="line"
+ style="stroke-width:0.264583"
+ x="21.956394"
+ y="33.360046"
+ id="tspan1" /><tspan
+ sodipodi:role="line"
+ style="stroke-width:0.264583"
+ x="21.956394"
+ y="39.533669"
+ id="tspan9"> * "Super-pages"</tspan><tspan
+ sodipodi:role="line"
+ style="stroke-width:0.264583"
+ x="21.956394"
+ y="45.707294"
+ id="tspan17" /><tspan
+ sodipodi:role="line"
+ style="stroke-width:0.264583"
+ x="21.956394"
+ y="51.88092"
+ id="tspan18"> * Software TLB changes</tspan><tspan
+ sodipodi:role="line"
+ style="stroke-width:0.264583"
+ x="21.956394"
+ y="58.054546"
+ id="tspan19" /><tspan
+ sodipodi:role="line"
+ style="stroke-width:0.264583"
+ x="21.956394"
+ y="64.228172"
+ id="tspan20"> * CPU state optimization</tspan><tspan
+ sodipodi:role="line"
+ style="stroke-width:0.264583"
+ x="21.956394"
+ y="70.401794"
+ id="tspan21" /><tspan
+ sodipodi:role="line"
+ style="stroke-width:0.264583"
+ x="21.956394"
+ y="76.575424"
+ id="tspan22"> * QOM casts</tspan></text>
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="297mm"
+ height="210mm"
+ viewBox="0 0 297 210"
+ version="1.1"
+ id="svg1"
+ inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
+ sodipodi:docname="05-lessons.svg"
+ inkscape:export-filename="05-lessons.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview1"
+ pagecolor="#ffffff"
+ bordercolor="#000000"
+ borderopacity="0.25"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ inkscape:zoom="1.0393815"
+ inkscape:cx="396.38958"
+ inkscape:cy="422.84763"
+ inkscape:window-width="1920"
+ inkscape:window-height="1029"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1"
+ inkscape:export-bgcolor="#ffffffff" />
+ <defs
+ id="defs1">
+ <rect
+ x="162.24126"
+ y="170.28458"
+ width="154.29239"
+ height="363.85593"
+ id="rect5" />
+ <rect
+ x="162.24126"
+ y="170.28458"
+ width="154.29239"
+ height="363.85593"
+ id="rect6" />
+ </defs>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.9389px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';fill:#000000;stroke:#000000;stroke-width:0.264583"
+ x="21.956394"
+ y="27.18642"
+ id="text27"><tspan
+ sodipodi:role="line"
+ style="stroke-width:0.264583"
+ x="21.956394"
+ y="27.18642"
+ id="tspan9">Lessons:</tspan><tspan
+ sodipodi:role="line"
+ style="stroke-width:0.264583"
+ x="21.956394"
+ y="33.360046"
+ id="tspan19" /><tspan
+ sodipodi:role="line"
+ style="stroke-width:0.264583"
+ x="21.956394"
+ y="39.533669"
+ id="tspan20"> * There are no easy fixes</tspan><tspan
+ sodipodi:role="line"
+ style="stroke-width:0.264583"
+ x="21.956394"
+ y="45.707294"
+ id="tspan21" /><tspan
+ sodipodi:role="line"
+ style="stroke-width:0.264583"
+ x="21.956394"
+ y="51.88092"
+ id="tspan22"> * Lots of guest <tspan
+ style="font-style:italic"
+ id="tspan23">and</tspan> host RAM helps performance</tspan><tspan
+ sodipodi:role="line"
+ style="stroke-width:0.264583"
+ x="21.956394"
+ y="58.054546"
+ id="tspan28" /><tspan
+ sodipodi:role="line"
+ style="stroke-width:0.264583"
+ x="21.956394"
+ y="64.228172"
+ id="tspan29"> * Translation time doesn't matter much</tspan><tspan
+ sodipodi:role="line"
+ style="stroke-width:0.264583"
+ x="21.956394"
+ y="70.401794"
+ id="tspan24" /><tspan
+ sodipodi:role="line"
+ style="stroke-width:0.264583"
+ x="21.956394"
+ y="76.575424"
+ id="tspan25"> * CPU pinning</tspan><tspan
+ sodipodi:role="line"
+ style="stroke-width:0.264583"
+ x="21.956394"
+ y="82.749046"
+ id="tspan26" /><tspan
+ sodipodi:role="line"
+ style="stroke-width:0.264583"
+ x="21.956394"
+ y="88.922668"
+ id="tspan27"> * Flame graphs & profiles</tspan></text>
+ </g>
+</svg>