Those who come to Ostinato after using the industry standard Ixia (now Keysight) or Spirent traffic generators and testers instantly understand the Ostinato controller-agent architecture because it is similar.
However, a significant number of users come to Ostinato after using iperf. And assume that they have similar architectures. Ostinato architecture is different to the iperf architecture!
In this post we will compare and contrast the two architectures.
Note that we will only compare the architecture and not the features or capabilities of the two tools.
iperf Architecture
Let’s start with the iperf architecture.
Note that when we say iperf, we are referring to both iperf2 and iperf3 - they have the same architecture.
Although there’s only a single iperf binary (executable), when you run it, you need to specify whether you want to run it as a client (-c
) or a server (-s
).
The iperf client and server are quite literally a TCP/UDP client and a TCP/UDP server. You need to have both the client and server running, typically on different hosts. You can’t work with only the client or only the server. You always need both.
iperf uses the host operating system’s TCP/UDP network stack to send and receive the traffic. This requires the host operating system to be configured with IP addresses on the network interfaces used by the iperf client and server.
The iperf client (by default without any options) generates unidirectional test traffic towards the iperf server, the iperf server receives the traffic. The traffic sent and received is actual data traffic.
Ostinato Architecture
Ostinato uses a controller-agent architecture. This is different from the iperf client-server architecture.
Firstly, unlike iperf, Ostinato has two different binaries - ostinato
for the GUI controller and drone
for the agent.
We need to have both the controller and the agent running. We can have multiple agents running on different hosts as shown above - all agents are controlled and managed by a single controller.
The Ostinato agent is the one that sends and receives data traffic. The controller-agent communication is essentially command and control. The controller sends commands (e.g. create a traffic flow, start transmit, stop transmit, etc.) to the agent and the agent executes the commands and reports back the results (e.g. port statistics, packet loss, latency/jitter, etc.) to the controller.
There is no data traffic exchanged between the controller and the agent. The data traffic is exchanged between the agents - via the DUT/NUT.
The data traffic generated by the Ostinato agent does NOT use the host operating system’s TCP/UDP network stack. The Ostinato agent generates the complete ethernet packet internally (based on the traffic description received from the controller) and sends it directly to the network interface driver bypassing the host operating system’s network stack.
This enables the Ostinato agent to generate incorrect and corrupt packets to test negative scenarios which otherwise will be dropped by the host operating system’s network stack before sending.
Therefore the Ostinato agent does NOT need the host operating system to be configured with IP addresses on the network interfaces. If you require IP addresses on the data network interfaces (e.g. for ARP resolution), create emulated devices with IP addresses using the Ostinato controller.
The Controller-agent communication is standard TCP/IP using the host operating system’s TCP/UDP network stack. Typically this is done over a different network interface than the one used to send the data traffic to keep it out-of-band so that it does not interfere with the data traffic.
You can think of these different interfaces as data interfaces and management interface.
This is not mandatory though - Ostinato can use a single network interface as both the data interface and the management interface.
To do a iperf-like test, see how to do a bandwidth test using Ostinato.
Summary
The most important distinction to understand -
- iperf:
- Client-server architecture
- Data traffic flows between the client and server
- Data traffic uses the host OS networking stack
- Ostinato:
- Data traffic flows between agents
- Controller-agent architecture
- The controller only sends commands to agents
- Agents report results back to the controller
- Data traffic does NOT use the host OS networking stack
This fundamental difference in architecture enables Ostinato to support more complex test scenarios and topologies.
If you are coming to Ostinato with an iperf background, it is highly recommended to read more about how the controller-agent architecture enables flexible testbed deployments and see example test-topologies.