Micro: a comparison of simulated and experimental results for micro benchmarks


Executive Summary
Goals
Experiments
Observations
Timer latency
Overhead
Throughput
Delay
Graphs
Open Questions

Executive Summary

In cases where the delay was reliable, delays differed significantly between real and simulated results: 18.7% in the non-congested case and 64.5% in the congested case.

When uncongested, the real and simulated throughput were equal. When congested, however, simulated throughput differed slightly to significantly: 3.5% to 18.2% for the two congested experiments.

Even in these simple experiments, when congestion was present the simulator slowed to 6 and 7 times the specified runtime (5 secs.).

The above suggests that if we're interested in finding differences between simulated results and testbed results, we should look for experiments that introduce congestion into the environment (our experience suggests that this will result in different delay and bandwidth numbers) and are relatively complicated (our experience suggests this will highlight slow simulator runtime).


Goals

The goals are manyfold and interrelated:

Experiments

Six simple experiments, each slightly more complex than the last, were performed. They are listed below in order of complexity (though none are very complex). Each experiment was performed on each of two platform types: on real machines and the ns simulator. There were three different real machine configurations. The platforms are described below the individual experiments.

Results for the real machine experiments were averaged over 10 runs (not 30, but enough to collect an average). Simulations were only run once.

Experiments:

  1. One-way 1M, Uncongested. We sent UDP packets from one process to another on the same node. We set the delay of the link in ns to 0ms. The goal is to get an idea of how much end-node overhead the simulator has vs. the real machine.

    • Platforms: S, 1M
    • Code: S, 1M: Source and Sink (Note that the description at the top of the Source file does not necessarily describe how this experiment was run since we ran the source and sink on the same node.)
    • Packet size: 1024 bytes
    • Duration: 5 secs (all experiments were 5 seconds).
    • Results script
  2. One-way 2M, Uncongested. We sent UDP packets from one node to another. The nodes are connected with 100Mbs ethernet.

  3. One-way 3M, Uncongested. We sent UDP packets from one node to another. We do not induce congestion.

  4. One-way 3M, Congested. Same as above except we send 10 1400 byte packets (1400 is a size where we don't fragment yet this still causes congestion at the bottleneck link).

  5. RTT 3M, Uncongested. We send one 1400 byte packet every 10ms. A "Bouncer" on the other end of the router bounces the packet back to the source.

  6. RTT 3M, Congested. Same as above except we send 10 1400 byte packets every 10ms.

Platforms:
  1. Simulator (S). We used the following libraries to build ns:
    • ns-2.1b5
    • tclcl-1.0b8
    • otcl-1.0a4
    • tck8.0.4
    • tk8.0.4
    We extended ns to include a UDP Agent capable of sending application-defined packets. Here is the code for this simple extension.

    In experiments #2-#7, a delay had to be set for the links.

  2. One Machine (1M). One dual Pentium II/350 machines with 128M SDRAM running FreeBSD 3.0-Current (SMP).
  3. Two Machines (2M). Two dual Pentium II/350 machines with 128M SDRAM running FreeBSD 3.0-Current (SMP). Connected via 100Mbs switched ethernet.
  4. Three Machines (3M). Three Pentium II/300 machines with 128M RAM running FreeBSD 2.2.6-STABLE (PIICAM). Connected point-to-point in the following manner:
          155.99.213.184/29     155.99.213.190/29
            (falcon) <-- 100Mbs --> (chukar) <-- 10Mbs --> (vulture)
                                155.99.213.198/29       155.99.213.193/29
            
    Chukar routes packets between Falcon and Vulture on two otherwise unused subnets thus eliminating cross-traffic. Copies of the rc.conf files required for this configuration are in ~kwright/src/vint/ns/tcl/kw/etc-[falcon,chukar,vulture].tar. (Note: There is one thing that the rc.conf files don't reflect: I modified the 10Mbs endpoints to be full-duplex by hand:
            On chukkar:
    	ifconfig fxp2 media 10baseT/UTP mediaopt full-duplex
      
            On vulture:
    	ifconfig fxp1 media 10baseT/UTP mediaopt full-duplex
    	
    These configurations could be added into the rc.conf ifconfig lines.

Observations

Graphs

In spite of the fact that we're probably not modeling the same thing in ns as in our real environment, it is still interesting to quantify the differences between platforms and identify the reasons for the differences. Doing so will allow us to continue with bigger experiments with greater intuition about where the two platforms will differ.

Open Questions


Kristin Wright
Last modified: Tue Jan 25 16:28:18 MST 2000