# Network Measurement and Performance Analysis at Server Side
## 5 Validation
### Performance Limit Validation  
We validated EVA's analysis results by systematically generating TCP flows with predetermined limiting factors. We built environments of different limiting factors, generated TCP flow by simple server and client programs, captured packet traces on server NIC, analyzed them by EVA, and compared the results with our expectations. Unless otherwise noted, the bandwidth and delay were 40 Mbps and 30 ms, respectively. For each set of experiments, we set up Cubic and BBR on server to evaluate the effect of different congestion controls on EVA. In most cases, EVA correctly identified the performance problems of a flow. However, when carefully observing each flight within a flow, we found a few erroneous diagnoses, but still acceptable. In the following, we show a series of experiments as well as the validation results. **Slow start limited. ** In slow start limited tests, we set up a FTP server providing files ranged from 10 KiB to 1000 KiB, incremented by 10 KiB. For all connections, EVA successfully identified the first few flights as slow start limited. For Cubic server, the first file flights (about 310 KiB) were deemed slow start limited. For BBR server, the first six flights (about 630 KiB) were deemed slow start limited. We carefully examined the time series diagrams of these traces and successfully verified the above results. The slow starting of BBR is one flight longer than that of Cubic, because the former takes a more aggressive slow start strategy. **Receive window limited. ** In these tests, we transferred a 10 MB file with different configurations of client. We did two sets of experiments: fixing receive buffer size by Linux _SO_RCVBUF_ socket option and fixing retrieve speed of the client application. In the first set of experiments, the receive buffer ranged from \(0.1\cdot BDP\) to \(2\cdot BDP\) (\(BDP=BlBw\cdot RTprop=4883\) KiB), incremented by \(0.1\cdot BDP\). For both Cubic and BBR server, connections of receive buffer size smaller than \(1.5\cdot BDP\) were deemed receive window limited, and the rests were deemed bandwidth limited. We expected this critical point  
Figure 7: Dummynet bandwidth comparing to iPerf measurement. to be \(1.0\cdot BDP\) instead of \(1.5\cdot BDP\). In fact, EVA already detected the right BitBw since \(1.0\cdot BDP\), however, diagnostic of receiver took precedence over network. In the second set of experiments, client application retrieve speed varied from \(0.1\cdot BitBw\) to \(1.0\cdot BitBw\), incremented by \(0.1\cdot BitBw\). We also increased the file size to \(100\) MiB to ensure the receive buffer being filled. EVA successfully identified all connections as receive window limited except the \(1.0\cdot BitBw\) one. Since TCP dynamically adjusted the size of receive buffer, EVA also detected several bandwidth limited flights right after slow start. **Congestion limited. ** In congestion limited tests, we injected \(10\) Mbps UDP traffic into network for a period of time while transferring files. For all connections, EVA successfully identified all flights during the period as congestion limited. We also observed congestion control limited flights right after congestion limited flights, and Cubic had more such flights than BBR. This is because both BBR and Cubic probed the available bandwidth after network congestion, and BBR was faster. **Send buffer limited. ** In these tests, we transferred \(10\) MB files with different send buffer sizes of the server (use \(SO\_SNDBUF\) socket option), which ranged from \(0.1\cdot BDP\) to \(2\cdot BDP\), incremented by \(0.1\cdot BDP\). Connections of send buffer size less than \(1.0\cdot BDP\) were successfully deemed send buffer limited. However, EVA also reported some application limited flights of these connections, especially when the buffer was small. We carefully inspected the packet traces and found less-MSS-sized packets in these flights, and these packets caused incorrect diagnoses of EVA. **Application limited.