Browse Source

Add readme

Vecna 2 months ago
parent
commit
76f97814c7
1 changed files with 84 additions and 0 deletions
  1. 84 0
      README.md

+ 84 - 0
README.md

@@ -0,0 +1,84 @@
+# Troll Patrol Artifact
+
+This repo contains scripts for reproducing the results in our paper.
+
+## Reproducing our results
+
+Dependencies:
+- bash
+- docker
+- git
+- numactl
+
+We use numactl to isolate each experiment to a single thread. If you do
+not want to install numactl, you can still run the script, but this may
+affect the results.
+
+To reproduce our results:
+
+1. `git clone -b artifact https://git-crysp.uwaterloo.ca/vvecna/lox-troll-patrol-extension`
+2. `cd lox-troll-patrol-extension`
+3. `./run.sh [-n NUM_PERFORMANCE_CORES]` or `./run-fast.sh [-n NUM_PERFORMANCE_CORES]`
+
+**The `./run.sh` script takes a long time and requires a few GB of free
+space.** The reason is that it downloads and processes all extra-info
+records for all bridges from 2020-07 to 2021-04 from the Tor Project's
+CollecTor service. This is about 4 million files, and it takes a long
+time to process them all. (These files are downloaded in compressed
+archives; the total download size for them is under 750 MB.)
+
+The `./run-fast.sh` script instead starts with a 6.7 MB archive (87 MB
+uncompressed) containing only the information we need. This is *much*
+faster and requires much less disk space. It yields identical results;
+however, it requires trusting that the pre-processed data was extracted
+correctly.
+
+See the "Time to Run" section below to estimate how long either option
+will take. The choice between the two scripts only determines whether
+`./scripts/belarus.sh` or `./scripts/belarus.sh --fast` will be run. The
+other steps are pretty quick. If you specify `-n NUM_PERFORMANCE_CORES`,
+then the Lox benchmarking step (`./scripts/generate-lox-results.sh`)
+will only use the first `NUM_PERFORMANCE_CORES` threads. This may take a
+bit longer but should ensure that the results are computed fairly.
+
+## Results
+
+The results are all output to the top-level directory of the project.
+After running either `./run.sh` or `./run-fast.sh`:
+- The results from Section 3 can be found in the **section-3-results** file.
+- Table 4 (found in Appendix A of the paper) can be found in **appendix-a-results.pdf**
+- Tables 2 and 3 (from Section 6) can be found in **table-2-results.pdf** and **table-3-results.pdf**.
+- Table 5 (in Appendix B) can be found in **appendix-b-results.pdf**.
+
+## Recovering from Errors
+
+Hopefully the script will just run everything without issue. If there is
+an issue at a step, try deleting the files/directories related to that
+step, stopping and removing any docker containers related to that step,
+and running the above script again. The script will not attempt to
+re-run steps that have files. If a step worked, just leave its files
+there, and you shouldn't have to redo that step.
+
+If you want to run the commands for individual steps, you can do that.
+From the top-level directory, run:
+- `./scripts/setup.sh` to clone dependencies and build the docker images
+- `./scripts/belarus.sh` to produce the results from Section 3 and Appendix A starting with all 20 GB of data from the Tor Project (or `./scripts/belarus.sh --fast` to start with some pre-processed data)
+- `./scripts/generate-lox-results.sh [-n NUM_EFFICIENT_CPUS]` to run the Lox benchmarking code to get the results from Section 6 and Appendix B (see the next step for producing the actual tables); specify `NUM_PERFORMANCE_CORES` to only use the first `NUM_PERFORMANCE_CORES` threads
+- `./scripts/process-lox-results.sh` to process the Lox benchmarking results previously produced by `./scripts/generate-lox-results.sh` and generate the tables in Section 6 and Appendix B
+
+## Time to Run
+
+On my laptop ([13th Gen Intel Core i7-1360P](https://www.intel.com/content/www/us/en/products/sku/232155/intel-core-i71360p-processor-18m-cache-up-to-5-00-ghz/specifications.html); 16 threads; 4 performance cores, up to 5 GHz):
+- `./scripts/setup.sh`: 10m 35s
+- `./scripts/belarus.sh`: 9h 15m 16s
+- `./scripts/belarus.sh --fast`: 1m 4s
+- `./scripts/generate-lox-results.sh -n 4`: 18m 39s
+- `./scripts/process-lox-results.sh`: 18s
+
+On the device used for the paper ([Intel Xeon Platinum 8380](https://www.intel.com/content/www/us/en/products/sku/212287/intel-xeon-platinum-8380-processor-60m-cache-2-30-ghz/specifications.html); 80 threads; 40 cores @ 2.30 GHz, up to 3.40 GHz):
+- `./scripts/setup.sh`: 6m 47s
+- `./scripts/belarus.sh`: 7h 57m 10s
+- `./scripts/belarus.sh --fast`: 1m 0s
+- `./scripts/generate-lox-results.sh`: 5m 56s
+- `./scripts/process-lox-results.sh`: 17s
+