63 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# 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.
 |