-
Notifications
You must be signed in to change notification settings - Fork 142
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
websteps vs webconnectivity comparison #1797
Comments
Work related to ooni/probe#1797
Seems useful for ooni/probe#1797
Instrumenting OONI to add bandwidth monitoringTo perform this task I used the The bandwidth snapshots look like this: {
"Timestamp": "2021-10-06T16:17:09.537899811Z",
"Elapsed": 5009818636,
"Read": 0,
"ReadFrom": 4435,
"Write": 283,
"WriteTo": 8057
} Where |
Experimental setupI sketched out Jafar2, which adds support for bandwidth throttling. There is a branch called I got feedback from @FedericoCeratto and @hellais on how this design could be simplified and improved. This setup allowed me to choose I calibrated this setup by verifying that I could introduce extra delays, losses, and shaping independently. (I'll open a separate issue explaining how this design could be improved.) Regarding TBF parameters, I used this rule of thumb:
With these rules, I emulated the following networks:
{
"Download": {
"Netem": "delay 50ms",
"TBF": "rate 700kbit burst 12kb limit 88kb"
},
"Upload": {
"Netem": "delay 50ms",
"TBF": "rate 700kbit burst 12kb limit 88kb"
}
}
{
"Download": {
"Netem": "delay 15ms",
"TBF": "rate 7000kbit burst 12kb limit 875kb"
},
"Upload": {
"Netem": "delay 15ms",
"TBF": "rate 700kbit burst 12kb limit 88kb"
}
}
{
"Download": {
"Netem": "delay 400ms loss 25% 25%",
"TBF": "rate 100kbit burst 12kb limit 20kb"
},
"Upload": {
"Netem": "delay 400ms loss 25% 25%",
"TBF": "rate 100kbit burst 12kb limit 20kb"
}
} where for EDGE I also varied the extra losses from 0 to 0.1%, 10%, and 25%. I always used correlation 25% for losses to simulate the case where losses are correlated. (I later learned that one could implement shaping directly with Each experiment consisted of a Note that The I run three experiments from my home network, three emulating 3G, two emulating ADSL, and four emulating EDGE using various configurations for the packet losses. |
TrendsNot all runs were equal, but, with the exception of some outliers, I observed the following trends:
These observations led to the following conclusions:
|
Low-bandwidth environmentsOne concern when designing websteps has been that of ensuring it's reasonably good in a low bandwidth environment, where reasonably good is not super well defined, but broadly means that it's accurate and still able to work without saturating the bandwidth. There is room for improvement in evaluating OONI in such environments. Also, designing with this case in mind means that you are really using a fraction of the bandwidth in environments with more bandwidth. This seems an optimisation problem. It may be tempting to solve it, but we are also using background measurements a lot, so it may be futile to try and solve this problem. Either way, it's clear that we want to continue measuring and learning here. Though, in the interest of having some reference data for the future, let me put here some charts with comments taken from a run in the environment that we called 3G above. (In fairness, our emulated environment was not a good emulation of 3G because it did not feature packet batching, but still we have data points in an environment with low bandwidth, which is a good stepping stone for taking initial decisions and running better simulations in the future.) Bandwidth usageThe following chart shows the empirical CDF of the download bandwidth usage from the The following chart shows the empirical CDF of the upload bandwidth usage from the The nice part about websteps here is that in these 5s windows we are never very close to the maximum configure download and upload bandwidth (700 kbit/s in this experimental setup). Downloading and uploading bytes over timeThe following charts are another way of viewing the bandwith usage. This is downloaded data over time: And this is uploaded data over time: When the line flattens, it means that the probe is idle, because it is either waiting for the test helper or because it is about to take a timeout. (Given the bandwidth constraints, and given how much my home network was faster, I did run some of the measurements using Jafar2 in parallel with a delay between them that varies from few seconds to tens of seconds.) Report file sizeThe following chart shows how the size of the In other experiments, the difference in the report size was less pronounced. This is one of the cases where websteps has the most advantage, but in other cases they were just quite close. Measurement runtimeThis chart shows the comparison of the overall measurement runtime: Remember that here "measurement" means "we measure any URL". Here it's instead the time to perform the DNS step: Here it's instead the time to query the respective TH: Here it's instead the time to complete the measurement (i.e., HTTP-fetch endpoints for websteps, and TCP+TLS+HTTP for webconnectivity): Here we see the trends highlighted above in action. Number of measurements emitted over timeLet's start by showing the progress in the number of completed measurements for any URL: And let's now instead only consider the progress in emitting test lists URLs (which should be the same for webconnectivity and instead be different for websteps, which makes every redirection explicit in the measurements): As I mentioned, idle time really slow down our measuring pace. There are two sources of idle times: the timeouts or slowdowns we take when doing DNS, TLS handshake and QUIC handshakes; the timeouts or slowdowns waiting for the test helper to return a response to the caller. |
Closing! |
Work related to ooni/probe#1797 Backport from master; see ooni/probe#1839
We want to perform a comparison of websteps and webconnectivity across these dimensions:
We are not focusing on the ability to precisely flag known censorship cases, for now, because we need to design an algorithm for flagging failures for websteps first. Though, if we collect a JSONL for websteps, we can simulate such an algorithm and we actually have a way to perform also a comparison of precision. But, it seems better to put this specific kind of comparison into another issue, otherwise also this issue here will become huge and long running.
The text was updated successfully, but these errors were encountered: