mtp: Keep the examples up to date

This commit is contained in:
F5
2023-11-14 22:11:17 +08:00
parent d581156f70
commit 5241eb7c99
2 changed files with 19 additions and 9 deletions

View File

@@ -7,6 +7,7 @@ A fast and user-transparent parallel simulator implementation for ns-3.
More information about UNISON can be found in our EuroSys '24 paper (coming soon).
Supported ns-3 version: [3.36.1](tree/unison-3.36.1), [3.37](tree/unison-3.37), [3.38](tree/unison-3.38), [3.39](tree/unison-3.36.1).
We are trying to keep UNISON updated with the latest version of ns-3.
You can find each unison-enabled ns-3 version via `unison-*` tags.
## Getting Started
@@ -65,15 +66,19 @@ MtpInterface::CriticalSection cs;
at the beginning of your methods.
In addition to the DCTCP example above, you can find other adapted examples in `examples/mtp`.
## Running Evaluations
To evaluate UNISON, please checkout to [unison-evaluations](https://github.com/NASA-NJU/UNISON-for-ns-3/tree/unison-evaluations) branch.
To evaluate UNISON, please switch to [unison-evaluations](https://github.com/NASA-NJU/UNISON-for-ns-3/tree/unison-evaluations) branch, which is based on ns-3.36.1.
In this branch, you can find various topology models in the `scratch` folder.
There are a lot of parameters you can set for each topology.
We provided a utility script `exp.py` to compare these simulators and parameters.
We also provided `process.py` to convert these raw experiment data to CSV files suitable for ploting.
We also provided `process.py` to convert these raw experiment data to CSV files suitable for plotting.
Please see the [README in that branch](https://github.com/NASA-NJU/UNISON-for-ns-3/tree/unison-evaluations) for more details.
The evaluated artifact (based on ns-3.36.1) is persistently indexed by DOI [10.5281/zenodo.10077300](https://doi.org/10.5281/zenodo.10077300).
## Module Documentation
### 1. Overview
@@ -164,6 +169,14 @@ src/nix-vector-routing/model/nix-vector-routing.cc | 92 ++
src/nix-vector-routing/model/nix-vector-routing.h | 8 +
```
Modifications to the `mpi` module to make it thread-safe with the hybrid simulator:
```
src/mpi/model/granted-time-window-mpi-interface.cc | 25 +
src/mpi/model/granted-time-window-mpi-interface.h | 7 +
src/mpi/model/mpi-interface.cc | 3 +-
```
### 3. Logging
The reason behind UNISON's fast speed is that it divides the network into multiple logical processes (LPs) with fine granularity and schedules them dynamically.
@@ -197,7 +210,7 @@ Config::SetDefault("ns3::HybridSimulatorImpl::MinLookahead", TimeValue(NanoSecon
The scheduling method determines the priority (estimated completion time of the next round) of each logical process.
There are five available options:
- `ByExecutionTime`: LPs with higher execution time of the last round will have higher priority.
- `ByExecutionTime`: LPs with a higher execution time of the last round will have higher priority.
- `ByPendingEventCount`: LPs with more pending events of this round will have higher priority.
- `ByEventCount`: LPs with more pending events of this round will have higher priority.
- `BySimulationTime`: LPs with larger current clock time will have higher priority.

View File

@@ -303,8 +303,6 @@ main(int argc, char* argv[])
Time startTime = Seconds(0);
Time stopTime = flowStartupWindow + convergenceTime + measurementWindow;
Time clientStartTime = startTime;
rxS1R1Bytes.reserve(10);
rxS2R2Bytes.reserve(20);
rxS3R1Bytes.reserve(10);
@@ -495,7 +493,7 @@ main(int argc, char* argv[])
AddressValue remoteAddress(InetSocketAddress(ipR2T2[i].GetAddress(0), port));
clientHelper1.SetAttribute("Remote", remoteAddress);
clientApps1.Add(clientHelper1.Install(S2.Get(i)));
clientApps1.Start(i * flowStartupWindow / 20 + clientStartTime + MilliSeconds(i * 5));
clientApps1.Start(i * flowStartupWindow / 20 + startTime + MilliSeconds(i * 5));
clientApps1.Stop(stopTime);
}
@@ -536,13 +534,12 @@ main(int argc, char* argv[])
if (i < 10)
{
clientApps1.Add(clientHelper1.Install(S1.Get(i)));
clientApps1.Start(i * flowStartupWindow / 10 + clientStartTime + MilliSeconds(i * 5));
clientApps1.Start(i * flowStartupWindow / 10 + startTime + MilliSeconds(i * 5));
}
else
{
clientApps1.Add(clientHelper1.Install(S3.Get(i - 10)));
clientApps1.Start((i - 10) * flowStartupWindow / 10 + clientStartTime +
MilliSeconds(i * 5));
clientApps1.Start((i - 10) * flowStartupWindow / 10 + startTime + MilliSeconds(i * 5));
}
clientApps1.Stop(stopTime);