Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@
build/
CMakePresets.json
**/__pycache__/*
_output/
12 changes: 3 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Not Overcomplicated Network Simulator
# Not Overcomplicated Network Simulator

## Overview
Not Overcomplicated Network Simulator (NoNS) is a free open source project aiming to build a discrete-event network simulator targeted at easy testing of congestion control algorithms.
Expand All @@ -23,20 +23,14 @@ cmake --build build
Options:

```
-c, --config arg Path to the simulation configuration file
-c, --config arg Path to the scenario configuration file
--output-dir arg Output directory for metrics and plots
(default: metrics)
--no-logs Output without logs
-h, --help Print usage
```

Examples of simulation configs placed in `configuration_examples/simulation_examples`

### `metrics-filter` flag format

These flags represent regular expression that match generated **data file names** under metrics output directory. Plots generates accordingly to collected data.

E.g. if `--metrics-filter = "cwnd/.*"`, NoNS measures only CWND values, if `--metrics-filter = ".*_link1.*"`, only metircs about link1.
Examples of configs are placed under [`configs`](configs/) directory. See config schemas [here](_schemas/configs/).

## How to add a new congestion control algorithm

Expand Down
12 changes: 12 additions & 0 deletions _schemas/configs/network/connection.schema
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
sender_id:
_type: string
_doc: Sender host id
receiver_id:
_type: string
_doc: Receiver host id

mplb:
_type: one-of
_variants:
- single-cc
_doc: Multi path load ballancer that should be used for transreffing data parts by this connection
Empty file.
11 changes: 11 additions & 0 deletions _schemas/configs/network/mplb/cc/metricable-cc.schema
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
_type: one-of

_variants:
- basic
- swift
- tahoe

cwnd:
_type: bool
_default: true
_doc: Is it need to collect congestion window metric
42 changes: 42 additions & 0 deletions _schemas/configs/network/mplb/cc/swift.schema
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
base_target:
_type: units/Time
_doc: Minimal (fabric link with 1 hop) RTT

start_cwnd:
_type: double
_default: 1.0
_doc: Initial congestion window

ai:
_type: double
_default: 0.5
_doc: Additive increase factor

md:
_type: double
_default: 0.5
_doc: Multiple decrease factor

max_mdf:
_type: double
_default: 0.3
_doc: Upper bound on MD factor per RTT

fs_range:
_type: double
_default: 1.5
_doc: Max queue head-room (flow-scaling term)

fs_min_cwnd:
_type: double
_default: 0.1
_doc: cwnd where flow-scaling hits fs_range

fs_max_cwnd:
_type: double
_default: 100.0
_doc: cwnd where flow-scaling goes to zero

metrics_filters:
_default:
cwnd: false
12 changes: 12 additions & 0 deletions _schemas/configs/network/mplb/cc/tahoe.schema
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
start_cwnd:
_type: double

_default: 1.0
_doc: Initial congestion window

sstresh:
_type: double

_default: 8.0
_doc: Slow start threshold

3 changes: 3 additions & 0 deletions _schemas/configs/network/mplb/path-chooser/flow.schema
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
_type: one-of
_variants:
- tcp-flow
3 changes: 3 additions & 0 deletions _schemas/configs/network/mplb/path-chooser/round-robin.schema
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
flows:
_type: flow{}
_doc: List of avalable flows
29 changes: 29 additions & 0 deletions _schemas/configs/network/mplb/path-chooser/tcp-flow.schema
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
rto:
start:
_type: units/Time
_default: 2000ns
_doc: Initial retransmit timout
max:
_type: units/Time
_default: 1s
_doc: Maximal retransmit timeout

ecn_capable:
_type: bool
_default: false
_doc: Does flow supports explicit congestion notification

metrics_filters:
rtt:
_type: bool
_default: true
_doc: Is it need to collect round trip time statistice
delivery_rate:
_type: bool
_default: true
_doc: Is it need to collect delivery rate statistice
reordering:
_type: bool
_default: true
_doc: Is it need to collect delivery rate statistice

14 changes: 14 additions & 0 deletions _schemas/configs/network/mplb/single-cc.schema
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
packet-size:
_type: units/Size
_doc: Size of packets that will be used

cc:
_type: cc/metricable_cc
_doc: Congestion control

path-chooser:
_type: one-of
_variants:
- path-chooser/round-robin

_doc: Path chooser that should be used
7 changes: 7 additions & 0 deletions _schemas/configs/network/network.schema
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
topology_config_path:
_type: string
_doc: Path ro topology config. Might be absolute or relative

connections:
_type: connection{}
_doc: List of abailable connections - user interfaces of data transreffing
7 changes: 7 additions & 0 deletions _schemas/configs/scenario/actions/action.schema
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
action:
_type: one-of
_variants:
- send_data
- stop_time

_doc:
20 changes: 20 additions & 0 deletions _schemas/configs/scenario/actions/send_data.schema
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
id:
_type: string
_doc: Id of action. Should be unique
when:
_type: units/Time
_doc: The time at which the data will start being sent
size:
_type: Size
_doc: The amount of data to send
connections:
_type: string
_doc: Specifies which connections to use for sending data. Supports regular expression
repeat_count:
_type: unsigned int
_default: 1
_doc: Sets the number of times to perform an action
repeat_interval:
_type: Time
_default: 0ns
_doc: Sets the time interval after which actions will be performed
3 changes: 3 additions & 0 deletions _schemas/configs/scenario/actions/stop_time.schema
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
time:
_type: units/Time
_doc: Time to stop simulation
7 changes: 7 additions & 0 deletions _schemas/configs/scenario/scenario-config.schema
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
network_config_path:
_type: string
_doc: path (absolute or relative) to network config.

scenario:
_type: actions/action[]
_doc: List of actions
9 changes: 9 additions & 0 deletions _schemas/configs/topology/common/ecn.schema
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
min:
_type: float
_doc: Min ECN threshold
max:
_type: float
_doc: Max ECN threshold
probability:
_type: float
_doc: Probabability to drop packet if queue filling is in [min, max] interval
3 changes: 3 additions & 0 deletions _schemas/configs/topology/common/host.schema
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
ecn:
_type: ecn
_doc: ECN settings of host
8 changes: 8 additions & 0 deletions _schemas/configs/topology/common/link.schema
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
follow: link_params.schema

from:
_type: string
_doc: Link start device
to:
_type: string
_doc: Link end device
21 changes: 21 additions & 0 deletions _schemas/configs/topology/common/link_params.schema
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
latency:
_type: units/Time
_doc: Speed of light latency of packet transmission

throughput:
_type: units/Speed
_doc: Throughput of link

ingress_buffer_size:
type: units/Size
_doc: Ingress device buffer size

egress_buffer_size:
type: units/Size
_doc: Eggress device buffer size

metrics_filters:
queue_sizes:
_type: bool
_default: true
_doc: Is it need to collect queue size metrics
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
factor:
_type: double
_default: 0.5
_doc: Multiplier with which average rtt should be used as threshold

Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
threshold:
_type: units/Time
_doc: Threshold of packet pauses to begin new flowlet

Empty file.
Empty file.
3 changes: 3 additions & 0 deletions _schemas/configs/topology/common/switch.schema
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
ecn:
_type: ecn
_doc: ECN settings of switch
19 changes: 19 additions & 0 deletions _schemas/configs/topology/custom.schema
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
packet-spraying:
_type: derived
_derived: configs/topology/common/empty-packet-spraying.schema
_doc: Packet spraying for all switches

packet-spraying:
type: ecmp

hosts:
_type: configs/topology/common/host{}
_doc: Hosts description

switches:
_type: configs/topology/common/switch{}
_doc: Hosts list

links:
_type: configs/topology/common/link{}
_doc: Links list
38 changes: 38 additions & 0 deletions _schemas/configs/topology/fat-tree.schema
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
packet-spraying:
_type: derived
_derived: common/empty-packet-spraying.schema
_doc: Packet spraying for all switches

switches:
ports-count:
_type: unsigned int
_doc: Count of ports of each switch (k from common pictures)

core:
_type: common/switch
_doc: Core layer switches description
aggr:
_type: common/switch
_doc: Aggredtion layer switches description

edge:
_type: common/switch

_doc: Edge layer switches description

hosts:
_type: common/host
_doc: Hosts description

links:
core-aggr:
_type: common/link_params
_doc: Parameters of links between core and aggregation layers

aggr-edge:
_type: common/link_params
_doc: Parameters of links between aggregation and edge layers

edge-host:
_type: common/link_params
_doc: Parameters of links between edge switches and hosts
26 changes: 26 additions & 0 deletions _schemas/configs/topology/incast.schema
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
packet-spraying:
_type: derived
_derived: configs/topology/common/empty-packet-spraying.schema
_doc: Packet spraying for all switches

links:
_type: configs/topology/common/link_params.schema
_doc: Parameters of links

bottleneck-link:
_type: configs/topology/common/link_params.schema
_doc: Parameters of bottleneck link. If not set, bottleneck link parameters takes from links section

senders:
count:
_type: unsigned int
_doc: Count of senders
follow: configs/topology/common/host.schema

switch:
_type: configs/topology/common/switch
_doc: Switch parameters

receiver:
_type: configs/topology/common/host
_doc: Receiver parameters
Loading
Loading