63 lines
2.2 KiB
Markdown
63 lines
2.2 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:
|
||
|
|
||
|
![lalala](part-model.svg "foo bar")
|
||
|
|
||
|
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.
|