Explain some concepts in the documentation
This commit is contained in:
		
							parent
							
								
									5d4fa15eb9
								
							
						
					
					
						commit
						6285a47f72
					
				| @ -1,31 +0,0 @@ | |||||||
| # Overview |  | ||||||
| 
 |  | ||||||
| The objective of the ovni project is to provide insight into what |  | ||||||
| happened at execution of a program. |  | ||||||
| 
 |  | ||||||
|  |  | ||||||
| 
 |  | ||||||
| The key pieces of software involved are instrumented so they emit events |  | ||||||
| during the execution which allow the reconstruction of the execution |  | ||||||
| later on. |  | ||||||
| 
 |  | ||||||
| During the execution phase, the information gathered in the events is |  | ||||||
| kept very short and simple, so the overhead is kept at minimum to avoid |  | ||||||
| disturbing the execution process. Here is an example of a single event |  | ||||||
| emitted during the execution phase, informing the current thread to |  | ||||||
| finish the execution: |  | ||||||
| 
 |  | ||||||
| 	00 4f 48 65 52 c0 27 b4 d3 ec 01 00 |  | ||||||
| 
 |  | ||||||
| During the emulation phase, the events are read and processed in the |  | ||||||
| emulator, reconstructing the execution. State transitions are recorded |  | ||||||
| in a Paraver trace. Here is an example of the same thread ceasing the |  | ||||||
| execution: |  | ||||||
| 
 |  | ||||||
| 	2:0:1:1:1:50105669:1:0 |  | ||||||
| 
 |  | ||||||
| Finally, loading the trace in the Paraver program, we can generate a |  | ||||||
| timeline visualization of the state change. Here is the example for the |  | ||||||
| same state transition of the thread stopping the execution: |  | ||||||
| 
 |  | ||||||
|  |  | ||||||
							
								
								
									
										62
									
								
								doc/user/concepts/part-model.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								doc/user/concepts/part-model.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,62 @@ | |||||||
|  | # Part model | ||||||
|  | 
 | ||||||
|  | Ovni has a model to represent the hardware components as well as the software | ||||||
|  | concepts like threads or processes. Each concept is considered to be a *part*. | ||||||
|  | Here is an example diagram depicting the part hierarchy: | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | 
 | ||||||
|  | Notice how a loom can restrict the CPUs of the node to its child processes. | ||||||
|  | 
 | ||||||
|  | ## Software parts | ||||||
|  | 
 | ||||||
|  | These are not physical parts, but they abstract common concepts. | ||||||
|  | 
 | ||||||
|  | ### Thread | ||||||
|  | 
 | ||||||
|  | A thread in ovni is directly mapped to a [POSIX | ||||||
|  | thread](https://en.wikipedia.org/wiki/Pthreads) and they are identified by a | ||||||
|  | `TID` which must be unique in a [node](#node). Threads in ovni have [a model with | ||||||
|  | an internal state](../emulation/ovni.md/#thread_model) that tries to tracks the | ||||||
|  | state of the real thread. | ||||||
|  | 
 | ||||||
|  | ### Process | ||||||
|  | 
 | ||||||
|  | A process is directly mapped to a UNIX | ||||||
|  | [process](https://en.wikipedia.org/wiki/Process_(computing)) and they are | ||||||
|  | identified by a `PID` number which must be unique in a [node](#node). | ||||||
|  | 
 | ||||||
|  | ### Loom | ||||||
|  | 
 | ||||||
|  | A loom has no direct mapping to a usual concept. It consists of a set of | ||||||
|  | [CPUs](#cpu) from the same node and a set of processes that can *only run in | ||||||
|  | those CPUs*. Each CPUs must belong to one and only one loom. It is often used | ||||||
|  | to group CPUs that belong to the same process when running workloads with | ||||||
|  | multiple processes (like with MPI). | ||||||
|  | 
 | ||||||
|  | Each loom has a virtual CPU which collects running threads that are not | ||||||
|  | exclusively assigned to a physical CPU, so we cannot determine on which CPU they | ||||||
|  | are running. | ||||||
|  | 
 | ||||||
|  | ## Hardware parts | ||||||
|  | 
 | ||||||
|  | These parts have a physical object assigned. | ||||||
|  | 
 | ||||||
|  | ### CPU | ||||||
|  | 
 | ||||||
|  | A CPU is a hardware thread that can execute at most one thread at a time. Each | ||||||
|  | CPU must have a physical ID that is unique in a node. In ovni there is also a | ||||||
|  | virtual CPU, which simply is used to collect threads that are not tied to an | ||||||
|  | specific physical CPU, so it cannot be easily determined where they are running. | ||||||
|  | 
 | ||||||
|  | ### Node | ||||||
|  | 
 | ||||||
|  | A *node* refers to a compute node, often a physical machine with memory and | ||||||
|  | network which may contain one or more | ||||||
|  | [sockets](https://en.wikipedia.org/wiki/CPU_socket), where each socket has one | ||||||
|  | or more CPUs. | ||||||
|  | 
 | ||||||
|  | ### System | ||||||
|  | 
 | ||||||
|  | A system represents the complete set of hardware parts and software parts that | ||||||
|  | are known to ovni in a given trace. | ||||||
							
								
								
									
										516
									
								
								doc/user/concepts/part-model.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										516
									
								
								doc/user/concepts/part-model.svg
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,516 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||||||
|  | <!-- Created with Inkscape (http://www.inkscape.org/) --> | ||||||
|  | 
 | ||||||
|  | <svg | ||||||
|  |    width="306.91663mm" | ||||||
|  |    height="127.00001mm" | ||||||
|  |    viewBox="0 0 306.91663 127.00001" | ||||||
|  |    version="1.1" | ||||||
|  |    id="svg1" | ||||||
|  |    inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)" | ||||||
|  |    sodipodi:docname="part-model.svg" | ||||||
|  |    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="#999999" | ||||||
|  |      borderopacity="1" | ||||||
|  |      inkscape:showpageshadow="0" | ||||||
|  |      inkscape:pageopacity="0" | ||||||
|  |      inkscape:pagecheckerboard="0" | ||||||
|  |      inkscape:deskcolor="#d1d1d1" | ||||||
|  |      inkscape:document-units="mm" | ||||||
|  |      showgrid="false" | ||||||
|  |      inkscape:zoom="0.73049944" | ||||||
|  |      inkscape:cx="629.70616" | ||||||
|  |      inkscape:cy="280.62992" | ||||||
|  |      inkscape:window-width="1920" | ||||||
|  |      inkscape:window-height="1031" | ||||||
|  |      inkscape:window-x="0" | ||||||
|  |      inkscape:window-y="24" | ||||||
|  |      inkscape:window-maximized="1" | ||||||
|  |      inkscape:current-layer="layer1"> | ||||||
|  |     <inkscape:grid | ||||||
|  |        id="grid1" | ||||||
|  |        units="px" | ||||||
|  |        originx="-74.083327" | ||||||
|  |        originy="-89.958345" | ||||||
|  |        spacingx="0.26458333" | ||||||
|  |        spacingy="0.26458334" | ||||||
|  |        empcolor="#7a7aff" | ||||||
|  |        empopacity="0.25098039" | ||||||
|  |        color="#6a6aff" | ||||||
|  |        opacity="0.1254902" | ||||||
|  |        empspacing="5" | ||||||
|  |        dotted="false" | ||||||
|  |        gridanglex="30" | ||||||
|  |        gridanglez="30" | ||||||
|  |        visible="false" /> | ||||||
|  |   </sodipodi:namedview> | ||||||
|  |   <defs | ||||||
|  |      id="defs1" /> | ||||||
|  |   <g | ||||||
|  |      inkscape:label="Layer 1" | ||||||
|  |      inkscape:groupmode="layer" | ||||||
|  |      id="layer1" | ||||||
|  |      transform="translate(-74.083328,-89.958344)"> | ||||||
|  |     <rect | ||||||
|  |        style="fill:none;stroke:none;stroke-width:0.264999;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0" | ||||||
|  |        id="rect33" | ||||||
|  |        width="306.91663" | ||||||
|  |        height="127.00001" | ||||||
|  |        x="74.083328" | ||||||
|  |        y="89.958344" /> | ||||||
|  |     <rect | ||||||
|  |        style="fill:#ffeeaa;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0" | ||||||
|  |        id="rect32" | ||||||
|  |        width="121.70832" | ||||||
|  |        height="84.666679" | ||||||
|  |        x="253.99998" | ||||||
|  |        y="127.00001" /> | ||||||
|  |     <text | ||||||
|  |        xml:space="preserve" | ||||||
|  |        style="font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583" | ||||||
|  |        x="290.19363" | ||||||
|  |        y="202.25124" | ||||||
|  |        id="text32"><tspan | ||||||
|  |          sodipodi:role="line" | ||||||
|  |          id="tspan32" | ||||||
|  |          style="font-size:6.35px;stroke-width:0.264583" | ||||||
|  |          x="290.19363" | ||||||
|  |          y="202.25124">Hardware parts</tspan></text> | ||||||
|  |     <rect | ||||||
|  |        style="fill:#eeffaa;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0" | ||||||
|  |        id="rect31" | ||||||
|  |        width="169.33333" | ||||||
|  |        height="84.666679" | ||||||
|  |        x="79.374992" | ||||||
|  |        y="127.00001" /> | ||||||
|  |     <rect | ||||||
|  |        style="fill:#fff6d5;stroke:#000000;stroke-width:0.3;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0" | ||||||
|  |        id="rect27" | ||||||
|  |        width="47.625004" | ||||||
|  |        height="21.166676" | ||||||
|  |        x="269.87497" | ||||||
|  |        y="148.16667" | ||||||
|  |        ry="2.645834" /> | ||||||
|  |     <rect | ||||||
|  |        style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none" | ||||||
|  |        id="rect1" | ||||||
|  |        width="21.166662" | ||||||
|  |        height="10.583329" | ||||||
|  |        x="84.566666" | ||||||
|  |        y="174.52502" | ||||||
|  |        ry="0" /> | ||||||
|  |     <text | ||||||
|  |        xml:space="preserve" | ||||||
|  |        style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583" | ||||||
|  |        x="87.947342" | ||||||
|  |        y="181.39488" | ||||||
|  |        id="text1"><tspan | ||||||
|  |          sodipodi:role="line" | ||||||
|  |          id="tspan1" | ||||||
|  |          style="stroke-width:0.264583" | ||||||
|  |          x="87.947342" | ||||||
|  |          y="181.39488">Thread</tspan></text> | ||||||
|  |     <rect | ||||||
|  |        style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none" | ||||||
|  |        id="rect3" | ||||||
|  |        width="21.166664" | ||||||
|  |        height="10.583337" | ||||||
|  |        x="111.12499" | ||||||
|  |        y="153.45834" | ||||||
|  |        ry="0" /> | ||||||
|  |     <text | ||||||
|  |        xml:space="preserve" | ||||||
|  |        style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583" | ||||||
|  |        x="113.57446" | ||||||
|  |        y="160.26309" | ||||||
|  |        id="text3"><tspan | ||||||
|  |          sodipodi:role="line" | ||||||
|  |          id="tspan3" | ||||||
|  |          style="stroke-width:0.264583" | ||||||
|  |          x="113.57446" | ||||||
|  |          y="160.26309">Process</tspan></text> | ||||||
|  |     <rect | ||||||
|  |        style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none" | ||||||
|  |        id="rect4" | ||||||
|  |        width="21.166664" | ||||||
|  |        height="10.583333" | ||||||
|  |        x="111.12499" | ||||||
|  |        y="174.62502" | ||||||
|  |        ry="0" /> | ||||||
|  |     <text | ||||||
|  |        xml:space="preserve" | ||||||
|  |        style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583" | ||||||
|  |        x="114.50567" | ||||||
|  |        y="181.49487" | ||||||
|  |        id="text4"><tspan | ||||||
|  |          sodipodi:role="line" | ||||||
|  |          id="tspan4" | ||||||
|  |          style="stroke-width:0.264583" | ||||||
|  |          x="114.50567" | ||||||
|  |          y="181.49487">Thread</tspan></text> | ||||||
|  |     <rect | ||||||
|  |        style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none" | ||||||
|  |        id="rect5" | ||||||
|  |        width="21.166658" | ||||||
|  |        height="10.583333" | ||||||
|  |        x="137.58333" | ||||||
|  |        y="174.62502" | ||||||
|  |        ry="0" /> | ||||||
|  |     <text | ||||||
|  |        xml:space="preserve" | ||||||
|  |        style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583" | ||||||
|  |        x="140.964" | ||||||
|  |        y="181.49487" | ||||||
|  |        id="text5"><tspan | ||||||
|  |          sodipodi:role="line" | ||||||
|  |          id="tspan5" | ||||||
|  |          style="stroke-width:0.264583" | ||||||
|  |          x="140.964" | ||||||
|  |          y="181.49487">Thread</tspan></text> | ||||||
|  |     <rect | ||||||
|  |        style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none" | ||||||
|  |        id="rect6" | ||||||
|  |        width="21.166672" | ||||||
|  |        height="10.583333" | ||||||
|  |        x="169.33331" | ||||||
|  |        y="174.62502" | ||||||
|  |        ry="0" /> | ||||||
|  |     <text | ||||||
|  |        xml:space="preserve" | ||||||
|  |        style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583" | ||||||
|  |        x="172.71399" | ||||||
|  |        y="181.49487" | ||||||
|  |        id="text6"><tspan | ||||||
|  |          sodipodi:role="line" | ||||||
|  |          id="tspan6" | ||||||
|  |          style="stroke-width:0.264583" | ||||||
|  |          x="172.71399" | ||||||
|  |          y="181.49487">Thread</tspan></text> | ||||||
|  |     <rect | ||||||
|  |        style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none" | ||||||
|  |        id="rect7" | ||||||
|  |        width="20.966642" | ||||||
|  |        height="10.38336" | ||||||
|  |        x="195.99167" | ||||||
|  |        y="153.55833" | ||||||
|  |        ry="0" /> | ||||||
|  |     <text | ||||||
|  |        xml:space="preserve" | ||||||
|  |        style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583" | ||||||
|  |        x="198.24112" | ||||||
|  |        y="160.16312" | ||||||
|  |        id="text7"><tspan | ||||||
|  |          sodipodi:role="line" | ||||||
|  |          id="tspan7" | ||||||
|  |          style="stroke-width:0.264583" | ||||||
|  |          x="198.24112" | ||||||
|  |          y="160.16312">Process</tspan></text> | ||||||
|  |     <rect | ||||||
|  |        style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none" | ||||||
|  |        id="rect8" | ||||||
|  |        width="21.16667" | ||||||
|  |        height="10.583333" | ||||||
|  |        x="195.79164" | ||||||
|  |        y="174.62502" | ||||||
|  |        ry="0" /> | ||||||
|  |     <text | ||||||
|  |        xml:space="preserve" | ||||||
|  |        style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583" | ||||||
|  |        x="199.17232" | ||||||
|  |        y="181.49487" | ||||||
|  |        id="text8"><tspan | ||||||
|  |          sodipodi:role="line" | ||||||
|  |          id="tspan8" | ||||||
|  |          style="stroke-width:0.264583" | ||||||
|  |          x="199.17232" | ||||||
|  |          y="181.49487">Thread</tspan></text> | ||||||
|  |     <rect | ||||||
|  |        style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none" | ||||||
|  |        id="rect9" | ||||||
|  |        width="21.166666" | ||||||
|  |        height="10.583333" | ||||||
|  |        x="222.24997" | ||||||
|  |        y="174.62502" | ||||||
|  |        ry="0" /> | ||||||
|  |     <text | ||||||
|  |        xml:space="preserve" | ||||||
|  |        style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583" | ||||||
|  |        x="225.63065" | ||||||
|  |        y="181.49487" | ||||||
|  |        id="text9"><tspan | ||||||
|  |          sodipodi:role="line" | ||||||
|  |          id="tspan9" | ||||||
|  |          style="stroke-width:0.264583" | ||||||
|  |          x="225.63065" | ||||||
|  |          y="181.49487">Thread</tspan></text> | ||||||
|  |     <rect | ||||||
|  |        style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none" | ||||||
|  |        id="rect10" | ||||||
|  |        width="21.166658" | ||||||
|  |        height="10.583337" | ||||||
|  |        x="153.45833" | ||||||
|  |        y="132.29167" | ||||||
|  |        ry="0" /> | ||||||
|  |     <text | ||||||
|  |        xml:space="preserve" | ||||||
|  |        style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583" | ||||||
|  |        x="158.21979" | ||||||
|  |        y="139.09644" | ||||||
|  |        id="text10"><tspan | ||||||
|  |          sodipodi:role="line" | ||||||
|  |          id="tspan10" | ||||||
|  |          style="stroke-width:0.264583" | ||||||
|  |          x="158.21979" | ||||||
|  |          y="139.09644">Loom</tspan></text> | ||||||
|  |     <rect | ||||||
|  |        style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none" | ||||||
|  |        id="rect11" | ||||||
|  |        width="21.166651" | ||||||
|  |        height="10.58334" | ||||||
|  |        x="306.91666" | ||||||
|  |        y="132.29167" | ||||||
|  |        ry="0" /> | ||||||
|  |     <text | ||||||
|  |        xml:space="preserve" | ||||||
|  |        style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583" | ||||||
|  |        x="311.88068" | ||||||
|  |        y="139.16154" | ||||||
|  |        id="text11"><tspan | ||||||
|  |          sodipodi:role="line" | ||||||
|  |          id="tspan11" | ||||||
|  |          style="stroke-width:0.264583" | ||||||
|  |          x="311.88068" | ||||||
|  |          y="139.16154">Node</tspan></text> | ||||||
|  |     <rect | ||||||
|  |        style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none" | ||||||
|  |        id="rect12" | ||||||
|  |        width="15.875001" | ||||||
|  |        height="10.583341" | ||||||
|  |        x="275.16666" | ||||||
|  |        y="153.45834" | ||||||
|  |        ry="0" /> | ||||||
|  |     <text | ||||||
|  |        xml:space="preserve" | ||||||
|  |        style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583" | ||||||
|  |        x="278.86566" | ||||||
|  |        y="160.291" | ||||||
|  |        id="text12"><tspan | ||||||
|  |          sodipodi:role="line" | ||||||
|  |          id="tspan12" | ||||||
|  |          style="stroke-width:0.264583" | ||||||
|  |          x="278.86566" | ||||||
|  |          y="160.291">CPU</tspan></text> | ||||||
|  |     <rect | ||||||
|  |        style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none" | ||||||
|  |        id="rect13" | ||||||
|  |        width="15.874983" | ||||||
|  |        height="10.583341" | ||||||
|  |        x="296.33334" | ||||||
|  |        y="153.45834" | ||||||
|  |        ry="0" /> | ||||||
|  |     <text | ||||||
|  |        xml:space="preserve" | ||||||
|  |        style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583" | ||||||
|  |        x="300.03235" | ||||||
|  |        y="160.291" | ||||||
|  |        id="text13"><tspan | ||||||
|  |          sodipodi:role="line" | ||||||
|  |          id="tspan13" | ||||||
|  |          style="stroke-width:0.264583" | ||||||
|  |          x="300.03235" | ||||||
|  |          y="160.291">CPU</tspan></text> | ||||||
|  |     <path | ||||||
|  |        style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | ||||||
|  |        d="m 121.70832,164.04168 0,10.58334" | ||||||
|  |        id="path15" | ||||||
|  |        inkscape:connector-type="polyline" | ||||||
|  |        inkscape:connector-curvature="0" | ||||||
|  |        inkscape:connection-start="#rect3" | ||||||
|  |        inkscape:connection-end="#rect4" /> | ||||||
|  |     <path | ||||||
|  |        style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | ||||||
|  |        d="m 206.45046,163.94169 -0.0505,10.68333" | ||||||
|  |        id="path16" | ||||||
|  |        inkscape:connector-type="polyline" | ||||||
|  |        inkscape:connector-curvature="0" | ||||||
|  |        inkscape:connection-start="#rect7" | ||||||
|  |        inkscape:connection-end="#rect8" /> | ||||||
|  |     <path | ||||||
|  |        style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | ||||||
|  |        d="m 212.94006,163.94169 13.30366,10.68333" | ||||||
|  |        id="path17" | ||||||
|  |        inkscape:connector-type="polyline" | ||||||
|  |        inkscape:connector-curvature="0" | ||||||
|  |        inkscape:connection-end="#rect9" | ||||||
|  |        inkscape:connection-start="#rect7" /> | ||||||
|  |     <path | ||||||
|  |        style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | ||||||
|  |        d="m 199.96086,163.94169 -13.40463,10.68333" | ||||||
|  |        id="path18" | ||||||
|  |        inkscape:connector-type="polyline" | ||||||
|  |        inkscape:connector-curvature="0" | ||||||
|  |        inkscape:connection-start="#rect7" | ||||||
|  |        inkscape:connection-end="#rect6" /> | ||||||
|  |     <path | ||||||
|  |        style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | ||||||
|  |        d="m 128.32291,164.04168 13.22917,10.58334" | ||||||
|  |        id="path19" | ||||||
|  |        inkscape:connector-type="polyline" | ||||||
|  |        inkscape:connector-curvature="0" | ||||||
|  |        inkscape:connection-start="#rect3" | ||||||
|  |        inkscape:connection-end="#rect5" /> | ||||||
|  |     <path | ||||||
|  |        style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | ||||||
|  |        d="m 115.03723,164.04168 -13.21614,10.48334" | ||||||
|  |        id="path20" | ||||||
|  |        inkscape:connector-type="polyline" | ||||||
|  |        inkscape:connector-curvature="0" | ||||||
|  |        inkscape:connection-start="#rect3" | ||||||
|  |        inkscape:connection-end="#rect1" /> | ||||||
|  |     <path | ||||||
|  |        style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | ||||||
|  |        d="m 153.45833,142.87501 -21.16667,10.58333" | ||||||
|  |        id="path21" | ||||||
|  |        inkscape:connector-type="polyline" | ||||||
|  |        inkscape:connector-curvature="0" | ||||||
|  |        inkscape:connection-start="#rect10" | ||||||
|  |        inkscape:connection-end="#rect3" /> | ||||||
|  |     <path | ||||||
|  |        style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | ||||||
|  |        d="m 174.62499,142.86254 21.44212,10.69579" | ||||||
|  |        id="path22" | ||||||
|  |        inkscape:connector-type="polyline" | ||||||
|  |        inkscape:connector-curvature="0" | ||||||
|  |        inkscape:connection-start="#rect10" | ||||||
|  |        inkscape:connection-end="#rect7" /> | ||||||
|  |     <path | ||||||
|  |        style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | ||||||
|  |        d="m 314.19269,142.87501 -6.61457,10.58333" | ||||||
|  |        id="path24" | ||||||
|  |        inkscape:connector-type="polyline" | ||||||
|  |        inkscape:connector-curvature="0" | ||||||
|  |        inkscape:connection-start="#rect11" | ||||||
|  |        inkscape:connection-end="#rect13" /> | ||||||
|  |     <path | ||||||
|  |        style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | ||||||
|  |        d="M 308.90102,142.87501 291.04166,153.8654" | ||||||
|  |        id="path25" | ||||||
|  |        inkscape:connector-type="polyline" | ||||||
|  |        inkscape:connector-curvature="0" | ||||||
|  |        inkscape:connection-start="#rect11" | ||||||
|  |        inkscape:connection-end="#rect12" /> | ||||||
|  |     <rect | ||||||
|  |        style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none" | ||||||
|  |        id="rect25" | ||||||
|  |        width="15.875013" | ||||||
|  |        height="10.583337" | ||||||
|  |        x="322.79163" | ||||||
|  |        y="153.45834" | ||||||
|  |        ry="0" /> | ||||||
|  |     <text | ||||||
|  |        xml:space="preserve" | ||||||
|  |        style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583" | ||||||
|  |        x="326.49063" | ||||||
|  |        y="160.291" | ||||||
|  |        id="text25"><tspan | ||||||
|  |          sodipodi:role="line" | ||||||
|  |          id="tspan25" | ||||||
|  |          style="stroke-width:0.264583" | ||||||
|  |          x="326.49063" | ||||||
|  |          y="160.291">CPU</tspan></text> | ||||||
|  |     <rect | ||||||
|  |        style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none" | ||||||
|  |        id="rect26" | ||||||
|  |        width="15.874991" | ||||||
|  |        height="10.583337" | ||||||
|  |        x="343.95831" | ||||||
|  |        y="153.45834" | ||||||
|  |        ry="0" /> | ||||||
|  |     <text | ||||||
|  |        xml:space="preserve" | ||||||
|  |        style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583" | ||||||
|  |        x="347.65732" | ||||||
|  |        y="160.291" | ||||||
|  |        id="text26"><tspan | ||||||
|  |          sodipodi:role="line" | ||||||
|  |          id="tspan26" | ||||||
|  |          style="stroke-width:0.264583" | ||||||
|  |          x="347.65732" | ||||||
|  |          y="160.291">CPU</tspan></text> | ||||||
|  |     <path | ||||||
|  |        style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | ||||||
|  |        d="m 320.80727,142.87501 6.61457,10.58333" | ||||||
|  |        id="path26" | ||||||
|  |        inkscape:connector-type="polyline" | ||||||
|  |        inkscape:connector-curvature="0" | ||||||
|  |        inkscape:connection-start="#rect11" | ||||||
|  |        inkscape:connection-end="#rect25" /> | ||||||
|  |     <path | ||||||
|  |        style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | ||||||
|  |        d="m 326.09894,142.87501 17.85937,10.99039" | ||||||
|  |        id="path27" | ||||||
|  |        inkscape:connector-type="polyline" | ||||||
|  |        inkscape:connector-curvature="0" | ||||||
|  |        inkscape:connection-start="#rect11" | ||||||
|  |        inkscape:connection-end="#rect26" /> | ||||||
|  |     <path | ||||||
|  |        style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" | ||||||
|  |        d="m 174.62499,139.70001 95.24998,19.05" | ||||||
|  |        id="path28" | ||||||
|  |        inkscape:connector-type="polyline" | ||||||
|  |        inkscape:connector-curvature="0" | ||||||
|  |        inkscape:connection-start="#rect10" /> | ||||||
|  |     <rect | ||||||
|  |        style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none" | ||||||
|  |        id="rect29" | ||||||
|  |        width="21.166666" | ||||||
|  |        height="10.583335" | ||||||
|  |        x="216.95831" | ||||||
|  |        y="95.250008" | ||||||
|  |        ry="0" /> | ||||||
|  |     <text | ||||||
|  |        xml:space="preserve" | ||||||
|  |        style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583" | ||||||
|  |        x="219.6889" | ||||||
|  |        y="101.67236" | ||||||
|  |        id="text29"><tspan | ||||||
|  |          sodipodi:role="line" | ||||||
|  |          id="tspan29" | ||||||
|  |          style="stroke-width:0.264583" | ||||||
|  |          x="219.6889" | ||||||
|  |          y="101.67236">System</tspan></text> | ||||||
|  |     <path | ||||||
|  |        style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | ||||||
|  |        d="m 238.12498,104.89952 68.79168,28.32598" | ||||||
|  |        id="path29" | ||||||
|  |        inkscape:connector-type="polyline" | ||||||
|  |        inkscape:connector-curvature="0" | ||||||
|  |        inkscape:connection-start="#rect29" | ||||||
|  |        inkscape:connection-end="#rect11" /> | ||||||
|  |     <path | ||||||
|  |        style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" | ||||||
|  |        d="m 218.47022,105.83334 -45.35713,26.45833" | ||||||
|  |        id="path30" | ||||||
|  |        inkscape:connector-type="polyline" | ||||||
|  |        inkscape:connector-curvature="0" | ||||||
|  |        inkscape:connection-start="#rect29" | ||||||
|  |        inkscape:connection-end="#rect10" /> | ||||||
|  |     <text | ||||||
|  |        xml:space="preserve" | ||||||
|  |        style="font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583" | ||||||
|  |        x="140.81671" | ||||||
|  |        y="202.25124" | ||||||
|  |        id="text31"><tspan | ||||||
|  |          sodipodi:role="line" | ||||||
|  |          id="tspan31" | ||||||
|  |          style="font-size:6.35px;stroke-width:0.264583" | ||||||
|  |          x="140.81671" | ||||||
|  |          y="202.25124">Software parts</tspan></text> | ||||||
|  |   </g> | ||||||
|  | </svg> | ||||||
| After Width: | Height: | Size: 18 KiB | 
							
								
								
									
										72
									
								
								doc/user/concepts/trace-model.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								doc/user/concepts/trace-model.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,72 @@ | |||||||
|  | # Trace model | ||||||
|  | 
 | ||||||
|  | An event model is composed by a group of runtime events  | ||||||
|  | 
 | ||||||
|  | ## Trace | ||||||
|  | 
 | ||||||
|  | The information generated by a program or later processed by other ovni tools is | ||||||
|  | known as a trace. A runtime trace stores the information as-is in disk from a | ||||||
|  | program execution. While a emulation trace is generated from the runtime trace | ||||||
|  | for visualization with Paraver. | ||||||
|  | 
 | ||||||
|  | All the information is always stored inside the same directory, by default | ||||||
|  | `ovni/`, which is known as the trace directory. | ||||||
|  | 
 | ||||||
|  | ## Event | ||||||
|  | 
 | ||||||
|  | An event is a point in time that has some information associated. Events written | ||||||
|  | at runtime by libovni have at MCV, a clock and a optional payload. The list of | ||||||
|  | all events recognized by the emulator can be found [here](../emulation/events.md). | ||||||
|  | 
 | ||||||
|  | ## State | ||||||
|  | 
 | ||||||
|  | A state is a discrete value that can change over time based on the events the | ||||||
|  | emulator receives. Usually a single event causes a single state change, which is | ||||||
|  | then written to the Paraver traces. An example is the thread state, which can | ||||||
|  | change over time based on the events `OH*` that indicate a state transition | ||||||
|  | of the current thread. | ||||||
|  | 
 | ||||||
|  | ## MCV | ||||||
|  | 
 | ||||||
|  | The MCV acronym is short of Model-Class-Value, which is a three character (byte) | ||||||
|  | identification for events. | ||||||
|  | 
 | ||||||
|  | ## Clock | ||||||
|  | 
 | ||||||
|  | A clock is a 64 bit counter, which counts the number of nanoseconds from an | ||||||
|  | arbitrary point in time in the past. Each event has the value of the clock | ||||||
|  | stored inside, to indicate when that event happened. In a given trace there can | ||||||
|  | be multiple clocks which don't refer to the same point in the past and must be | ||||||
|  | corrected so they all produce an ordered sequence of events. The ovnisync | ||||||
|  | program performs this correction by measuring the difference across clocks of | ||||||
|  | different nodes. | ||||||
|  | 
 | ||||||
|  | ## Event model | ||||||
|  | 
 | ||||||
|  | An event model is composed of several components: | ||||||
|  | 
 | ||||||
|  | - A set of [events](#event) all with the same model identifier in the | ||||||
|  |   [MCV](#mcv) | ||||||
|  | - The emulator code that processes those events. | ||||||
|  | - A human readable name, like `ovni` or `nanos6`. | ||||||
|  | 
 | ||||||
|  | ## Payload | ||||||
|  | 
 | ||||||
|  | Events may have associated additional information which is stored in the stream. | ||||||
|  | 
 | ||||||
|  | ## Binary stream | ||||||
|  | 
 | ||||||
|  | A binary stream is a file named `stream.obs` (.obs stands for Ovni Binary | ||||||
|  | Stream) composed of a header and a concatenated array of events without padding. | ||||||
|  | Notice that each event may have different length. | ||||||
|  | 
 | ||||||
|  | ## Stream metadata | ||||||
|  | 
 | ||||||
|  | The stream metadata is a JSON file named `stream.json` which holds information | ||||||
|  | about the stream. | ||||||
|  | 
 | ||||||
|  | ## Stream | ||||||
|  | 
 | ||||||
|  | A stream is a directory which contains a binary stream and the associated stream | ||||||
|  | metadata file. Each stream is associated with a given part of a system. As of | ||||||
|  | now, libovni can only generate streams associated to [threads](part-model.md#thread). | ||||||
							
								
								
									
										111
									
								
								doc/user/runtime/index.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								doc/user/runtime/index.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,111 @@ | |||||||
|  | # Introduction | ||||||
|  | 
 | ||||||
|  | To use *libovni* to instrument a program, follow the next instructions | ||||||
|  | carefully, or you may end up with an incomplete trace that is rejected at | ||||||
|  | emulation. | ||||||
|  | 
 | ||||||
|  | You can also generate a valid trace from your own software or hardware | ||||||
|  | directly, but be sure to follow the [trace specification](trace_spec.md). | ||||||
|  | 
 | ||||||
|  | ## Initialization | ||||||
|  | 
 | ||||||
|  | To initialize libovni follow these steps in all threads: | ||||||
|  | 
 | ||||||
|  | 1. **Check the version**. Call `ovni_version_check()` once before calling any | ||||||
|  |    ovni function. It can be called multiple times from any thread, but only one | ||||||
|  |    is required. | ||||||
|  | 
 | ||||||
|  | 2. **Init the process**. Call `ovni_proc_init()` to initialize the process when | ||||||
|  |    a new process begins the execution. It can only be called **once per | ||||||
|  |    process** and it must be called before the thread is initialized. | ||||||
|  | 
 | ||||||
|  | 3. **Init the thread**. Call `ovni_thread_init()` when a new thread begins the | ||||||
|  |    execution (including the main process thread after the process is | ||||||
|  |    initialized). Multiple attempts to initialize the thread are ignored with a | ||||||
|  |    warning. | ||||||
|  | 
 | ||||||
|  | The `ovni_proc_init()` arguments are as follows: | ||||||
|  | 
 | ||||||
|  | ```c | ||||||
|  | void ovni_proc_init(int app, const char *loom, int pid); | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | The `app` defines the "appid" of the program, which must be a number >0. This is | ||||||
|  | useful to run multiple processes some of which run the same "app", so you can | ||||||
|  | tell which one is which. The `loom` defines the | ||||||
|  | [loom](../concepts/part-model.md#loom) name and assignes the process to that | ||||||
|  | loom. It must be compose of the host name, a dot and a suffix. The PID is the | ||||||
|  | one obtained by `getpid(2)`. | ||||||
|  | 
 | ||||||
|  | The `ovni_thread_init()` function only accepts one argument, the TID as returned | ||||||
|  | by `gettid(2)`. | ||||||
|  | 
 | ||||||
|  | ## Setup metadata | ||||||
|  | 
 | ||||||
|  | Once the process and thread are initialized, you can begin adding metadata to | ||||||
|  | the thread stream. | ||||||
|  | 
 | ||||||
|  | 1. **Require models**. Call `ovni_thread_require()` with the required model | ||||||
|  |    version before emitting events for a given model. Only required once from a | ||||||
|  |    thread in a given trace. | ||||||
|  | 
 | ||||||
|  | 2. **Emit loom CPUs**. Call `ovni_add_cpu()` to register each CPU in the loom. It can | ||||||
|  |    be done from a single thread or multiple threads, in the latter the list of | ||||||
|  |    CPUs is merged. | ||||||
|  | 
 | ||||||
|  | 3. **Set the rank**. If you use MPI, call `ovni_proc_set_rank()` to register the | ||||||
|  |    rank and number of ranks of the current execution. Only once per process. | ||||||
|  | 
 | ||||||
|  | ## Start the execution | ||||||
|  | 
 | ||||||
|  | The current thread must switch to the "Running" state before any event can be | ||||||
|  | processed by the emulator. Do so by emitting a `OHx` event in the stream with | ||||||
|  | the appropriate payload: | ||||||
|  | 
 | ||||||
|  | ```c | ||||||
|  | static void thread_execute(int32_t cpu, int32_t ctid, uint64_t tag) | ||||||
|  | { | ||||||
|  |     struct ovni_ev ev = {0}; | ||||||
|  |     ovni_ev_set_clock(&ev, ovni_clock_now()); | ||||||
|  |     ovni_ev_set_mcv(&ev, "OHx"); | ||||||
|  |     ovni_payload_add(&ev, (uint8_t *) &cpu, sizeof(cpu)); | ||||||
|  |     ovni_payload_add(&ev, (uint8_t *) &ctid, sizeof(ctid)); | ||||||
|  |     ovni_payload_add(&ev, (uint8_t *) &tag, sizeof(tag)); | ||||||
|  |     ovni_ev_emit(&ev); | ||||||
|  | } | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | The `cpu` is the logical index (not the physical ID) of the loom CPU at which | ||||||
|  | this thread will begin the execution. Use -1 if it is not known. The `ctid` and | ||||||
|  | `tag` allow you to track the exact point at which a given thread was created and | ||||||
|  | by which thread but they are not relevant for the first thread, so they can be | ||||||
|  | set to -1. | ||||||
|  | 
 | ||||||
|  | ## Emit events | ||||||
|  | 
 | ||||||
|  | After this point you can emit any other event from this thread. Use the | ||||||
|  | `ovni_ev_*` set of functions to create and emit events. Notice that all events | ||||||
|  | are refer to the current thread that emits them. | ||||||
|  | 
 | ||||||
|  | If you need to store metadata information, use the `ovni_attr_*` set of | ||||||
|  | functions. The metadata is stored in disk by `ovni_attr_fluch()` and when the | ||||||
|  | thread is freed by `ovni_thread_free()`. | ||||||
|  | 
 | ||||||
|  | Attempting to emit events or writing metadata without having a thread | ||||||
|  | initialized will cause your program to abort. | ||||||
|  | 
 | ||||||
|  | ## Finishing the execution | ||||||
|  | 
 | ||||||
|  | To finalize the execution **every thread** must perform the following steps, | ||||||
|  | otherwise the trace **will be rejected**. | ||||||
|  | 
 | ||||||
|  | 1. **End the current thread**. Emit a [`OHe` event](../emulation/events.md#OHe) to inform the current thread ends. | ||||||
|  | 2. **Flush the buffer**. Call `ovni_flush()` to be sure all events are written | ||||||
|  |    to disk. | ||||||
|  | 3. **Free the thread**. Call `ovni_thread_free()` to complete the stream and | ||||||
|  |    free the memory used by the buffer. | ||||||
|  | 4. **Finish the process**. If this is the last thread, call `ovni_proc_fini()` | ||||||
|  |    to set the process state to finished. | ||||||
|  | 
 | ||||||
|  | If a thread fails to perform these steps, the complete trace will be rejected by | ||||||
|  | the emulator as it cannot guarantee the trace to be consistent. | ||||||
| @ -23,9 +23,12 @@ markdown_extensions: | |||||||
| nav: | nav: | ||||||
|   - index.md |   - index.md | ||||||
|   - 'User guide': |   - 'User guide': | ||||||
|     - user/concepts.md |  | ||||||
|     - user/installation.md |     - user/installation.md | ||||||
|  |     - 'Concepts': | ||||||
|  |       - user/concepts/part-model.md | ||||||
|  |       - user/concepts/trace-model.md | ||||||
|     - 'Runtime': |     - 'Runtime': | ||||||
|  |       - user/runtime/index.md | ||||||
|       - user/runtime/tracing.md |       - user/runtime/tracing.md | ||||||
|       - user/runtime/mark.md |       - user/runtime/mark.md | ||||||
|       - user/runtime/distributed.md |       - user/runtime/distributed.md | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user