You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/Releases.md
+118Lines changed: 118 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -13,6 +13,124 @@ use a date based versioning system. Now, a release version can look
13
13
like `17.11` where the "major" number is the year and the "minor" number
14
14
is the month.
15
15
16
+
## v19.02 (2/19): Manager Assigned NF Cores, Global Launch Script, DPDK 18.11 Update, Web Stats Overhaul, Load Generator NF, CI (Internal repo only), minor improvements and bug fixes
17
+
This release adds several new features and changes how the onvm_mgr and NFs start. A CloudLab template is available with the latest release here: https://www.cloudlab.us/p/GWCloudLab/onvm
18
+
19
+
Note: This release makes important changes in how NFs are run and assigned to cores.
20
+
21
+
Performance: We are aware of some performance irregularities with this release. For example, the first few times a Basic Monitor NF is run we achieve only ~8 Mpps on a CloudLab Wisconsin c220g2 server. After starting and stopping the NF several times, the performance rises to the expected 14.5 Mpps.
22
+
23
+
### Manager Assigned NF Cores:
24
+
NFs no longer require a CORE_LIST argument to start, the manager now does core assignment based on the provided core bitmask argument.
25
+
26
+
NFs now go through the dpdk init process on a default core (currently 0) and then launch a pthread for its main loop, which using the DPDK `rte_thread_set_affinity()` function is affinized to a core obtained from the Manager.
27
+
28
+
The core info is maintained in a memzone and the Manager keeps track of what cores are used, by how many NFs, and if the cores are reserved as dedicated. The Manager always selects the core with the fewest NFs unless a flag is used when starting an NF.
29
+
30
+
**Usage:**
31
+
32
+
New Manager arguments:
33
+
* Hexadecimal bitmask, which tells the onvm_mgr which cores are available for NFs to run on.
With this command the manager runs on cores 0-3, uses ports 1 and 2 (since `0x3` is binary `0b11`), and will start NFs on cores 4-7 (since `0xF0` is binary `0b11110000`)
43
+
44
+
New Network Functions arguments:
45
+
*`-m` manual core decision mode, NF runs on the core supplied by the `-l` argument if available. If the core is busy or not enabled then returns an error and doesn't start the NF.
46
+
*`-s` shared core mode, this will allow multiple NFs to run on the same core. Generally this should be avoided to prevent performance problems. By default, each core is dedicated to a single NF.
47
+
48
+
These arguments can be set as `ONVM_ARGS` as detailed below.
49
+
50
+
**API Additions:**
51
+
-`int onvm_threading_core_affinitize(int core)` - Affinitizes the calling thread to a new core. This is used both internally and by the advanced rings NFs to change execution cores.
52
+
53
+
### Global Launch Script
54
+
The example NFs can be started using the `start_nf.sh` script. The script can run any example NF based on the first argument which is the NF name (this is based on the assumption that the name matches the NF folder and the build binary). This removes the need to maintain a separate `go.sh` script for each NF but requires some arguments to be explicitly specified.
DPDK submodule no longer points to our fork, we now point to the upstream DPDK repository. This is because mTCP requirements for DPDK have relaxed and they no longer need to have additional patches on top of it.
76
+
77
+
Also updates Pktgen to 3.6.5 to remain compatible with DPDK v18.11
78
+
The dpdk update involves:
79
+
- Adds NIC ring RSS hashing functions adjustments
80
+
- Adds NIC ring file descriptor size alignment
81
+
82
+
Run this to ensure the submodule is up to date:
83
+
```sh
84
+
git submodule sync
85
+
git submodule update --init
86
+
```
87
+
88
+
### Web Stats Overhaul
89
+
Adds a new event logging system which is used for port initialization and NF starting, ready, and stopping events. In the future, this could be used for more complex logging such as service chain based events and for core mappings.
90
+
91
+
Also contains a complete rewrite of the web frontend. The existing code which primarily used jquery has been rewritten and expanded upon in React, using Flow fortype checking rather than a full TypeScript implementation. This allows us to maintain application state across pages and to restore graphs to the fully updated state when returning to a graph from a different page.
92
+
93
+
Please note that **CSV download has been removed** with this update as storing this much ongoing data negatively impacts application performance. This sort of data collection would be best implemented via grepping or some similar functionality from onvm console output.
94
+
95
+
### Load Generator NF
96
+
Adds a Load Generator NF, which sends packets at a specified rate and size, measures tx and rx throughput (pps) and latency. The load_generator NF continuously allocates and sends new packets of a defined size and at a defined rate using the `callback_handler` function. The max value for the `-t` pkt_rate argument for this NF will depend on the underlying architecture, for best performance increase it up until you see the NF starting to drop packets.
97
+
98
+
Example usage with a chain of load_generator <-> simple_forward:
99
+
```sh
100
+
cd examples/load_generator
101
+
./go.sh 1 -d 2 -t 4000000
102
+
103
+
cd examples/simple_forward
104
+
./go.sh 2 -d 1
105
+
```
106
+
107
+
Example NF output:
108
+
```
109
+
Time elapsed: 24.50
110
+
111
+
Tx total packets: 98001437
112
+
Tx packets sent this iteration: 11
113
+
Tx rate (set): 4000000
114
+
Tx rate (average): 3999999.33
115
+
Tx rate (current): 3999951.01
116
+
117
+
Rx total packets: 94412314
118
+
Rx rate (average): 3853506.69
119
+
Rx rate (current): 4000021.01
120
+
Latency (current mean): 4.38 us
121
+
```
122
+
123
+
124
+
### CI (Internal repo only)
125
+
Adds continuous integration to the internal repo. CI will automatically run when a new PR is created or when keyword `@onvm` is mentioned in a pr comment. CI currently reports the linter output and the Speed Tester NF performance. This will be tested internally and extended to support the public repo when ready.
126
+
127
+
To achieve this a Flask server listens to events from github, currently only the `openNetVM-dev` repo is setup for this. In the future we plan to expand this functionality to the public `openNetVM` repo.
128
+
129
+
### Bug Fixes
130
+
- Fix how NF_STOPPED message is sent/processed. This fixes the double shutdown bug (observed in mTCP applications), the fast ctrl-c exit bug and the invalid arguments bug. In all of those cases memory would get corrupted, this bug fix resolves these cases.
131
+
- Add out of bounds checks for NF service ids. Before we were not handling cases when a new NF service id exceeded the MAX_SERVICES value or when launching a new NF would exceed the NF_SERVICE_COUNT_MAX value for the given service id.
132
+
- Fix the Speed Tester NF to properly exit when passed an invalid MAC addr argument.
This release adds several new features which cause breaking API changes to existing NFs. NFs must be updated to support the new API required for multithreading support. A CloudLab template is available with the latest release here: https://www.cloudlab.us/p/GWCloudLab/onvm
0 commit comments