Implementation of an analytical model of a forwarding method based on Bloom filters. This forwarding method is designated as 'RID forwarding' in the eXpressive Internet Architecture (XIA) (check this repo for an implementation), and was adapted from an initial proposal published in Papalini et al. 2014.
rid-analytics' uderlying engine is based on a probabilistic graphical model which determines the probability of having an RID packet follow any given path in a network topology (e.g. PoP-level topologies made available by the Rocketfuel ISP mapping engine). Details about the math behind it are available in this paper.
$ git clone https://github.com/adamiaonr/rid-analytics.git
$ cd rid-analytics
$ makeThere are 2 ways to use rid-analytics:
- Direct use of
run-analysisbinary (not reccommended) - Using
.testfiles
The compilation produces the basic binary of rid-analytics, which runs individual experiments: run-analysis. It can be used as follows:
$ ./run-analysis --scn-file <path to .scn file> --data-dir <path to results directory> --output-label <label to prepend to result files> --bf-size <bloom filter size in bit> --request-size <nr. of url elements in request> --mm-mode <multiple match res. code> --resolution-mode <enable/disable delivery error resolution> --origin-server <id of origin server> --start-router <id of router which issues request>It requires multiple inputs, of which the most important is an .scn file. .scn files describe a experiment to run, including:
- Router adjacencies in the topology under evaluation
- Distribution of # of entries per {router, link} pair
- Distribution of entry sizes per {router, link} pair
- Shortest paths from router i every other router j
Fortunately, .scn files can be generated automatically, using the generate_tests.py script in scripts/rocketfuel/. Another important input is --data-dir, on which the .tsv files with the results of the experiments will be saved. Result files are explained in (...).
rid-analytics comes with a set of Python scripts which automatically create experiment scenarios, based on PoP-level topologies from Rocketfuel. The flow is as follows:
- Use
scripts/rocketfuel/generate_tests.pyto generate a.testfile and a batch of.scnfiles (referred by the.testfile) - Use
scripts/rocketfuel/run_evaluation.pyto run the batch of experiments described in the.testfile
As an example, we generate a batch of experiments with the following specs:
- Topology: 4755 VSNL (India)
- Request sizes: 5, 10
- Bloom filter sizes: 192, 256
- Entry sizes: all entries should be size 1
- Fwd. table size: 10M entries
- Multiple match resolution: Random Matched Link (RML) forwarding
- Delivery error resolution: Feedback
- # of source/destination pairs: 3 pairs, 4 hops away from each other
- True positives: 1 true positive, size 1, 4 hops away from requester
To do that, run:
$ cd <work dir>/rid-analytics/scripts/rocketfuel
$ python generate_tests.py --test-dir <work dir>/rid-analytics/experiments/examples/rocketfuel/tests --topology-file <work dir>/rid-analytics/experiments/examples/rocketfuel/pop-level-maps/4755/edges.wt --req-sizes 5:10 --bf-sizes 192:256 --entry-sizes "1:100" --table-sizes 10000000 --modes 0:0 --path-sizes 3:4 --add-tps 1:1:4After this, the directory specified in the --test-dir option should contain 3 folders:
configs: filled w/.testand.scnfilesresults: emptytopologies: filled w/.pdffiles depicting the chosen topologies, in graph form (example of 4755 VSNL (India) topology)
Run:
$ cd <work dir>/rid-analytics/scripts/rocketfuel
$ python run_test.py --test-file <work dir>/rid-analytics/experiments/examples/rocketfuel/tests/configs/4755.testThis should fill the <work dir>/rid-analytics/experiments/examples/rocketfuel/tests/ directory with a bunch of .tsv files, with the results from the experiments.
Result files are saved in .tsv format. There are 2 types of files: event files and path files.
Event files report the probability of witnessing specific forwarding events at some router, for all routers which can be visited by a request packet during an experiment. There are 5 types of forwarding events: 0. No link matches (NLM)
- Multiple link matches (MLM)
- Local link matches (LLM)
- Single link match (SLM)
- TTL drop (TTL)
FIXME: Understanding the probabilities of these events is a bit confusing, since these are not mutually exclusive.
Following the running example, the first lines of the file <work dir>/rid-analytics/experiments/examples/rocketfuel/tests/results/events.4755-192-05-01-10000000-0-0-6-4.1501589180.tsv read:
ROUTER EVENT PROB
6 0 0
6 1 0
6 2 0
6 3 1
3 0 0
3 1 0.0818887
3 2 0.02097
3 3 0.918111
0 0 0
0 1 0.0414116
0 2 0.0310071
0 3 0.958588
(...)
Let's use a graph depiction of the topology to make this easier to follow...
Starting at router 6, there is a 100% likelihood of having a single link match, on the link to router 3. On router 3, there's a ~0.02 chance of having a cache hit (LLM event), and a ~0.92 chance of having a single link match towards router 0. There's a ~0.08 chance of having multiple link matches: in this case the joint event LLM AND a match on the link towards router 0.
Path files report the evolution of path states as a request transitions among routers during an experiment. Similarly to event files, path files report the probability of having some state s at each router in the path. There are 5 types of path states: 0. Correct delivery
- Incorrect delivery
- Fallback delivery
- Fallback relay
- Packet drop
- TTL drop
Following the running example, the first lines of the file <work dir>/rid-analytics/experiments/examples/rocketfuel/tests/results/path.4755-192-05-01-10000000-0-0-6-4.1501589180.tsv read:
ROUTER STATUS LATENCY PROB
6 4 0 0
6 6 0 0
6 1 0 0
3 4 1 0
3 6 1 0
3 1 1 0.02097
0 4 2 0
0 6 2 0
0 1 2 0.0310071
1 4 3 0
1 6 3 0
1 1 3 0.0107375
(...)
Again, starting at router 6: as there's no way of terminating a path on router 6 (remember that event SLM, i.e. of having the packet pass to the next router, has probability 1.0), there's no probability associated with any state at that point. At the next router - router 3 - there's some probability of having the path end in an incorrect delivery, with probability equal to ~0.02 (equal to the probability of event LLM, local link match). The latency at that point is 1 hop, corresponding to the hop in-between routers 6 and 3.
