Giter Site home page Giter Site logo

mukerjee / flowgrind-etalon Goto Github PK

View Code? Open in Web Editor NEW

This project forked from flowgrind/flowgrind

2.0 3.0 1.0 5.88 MB

Advanced TCP traffic generator for Linux, FreeBSD, and Mac OS X

Home Page: http://www.flowgrind.net

License: GNU General Public License v3.0

Makefile 0.94% M4 3.76% Shell 0.90% C 93.86% C++ 0.55%

flowgrind-etalon's Introduction

Flowgrind - TCP traffic generator

Build Status Coverity Scan Build Status

Flowgrind is an advanced TCP traffic generator for testing and benchmarking Linux, FreeBSD, and Mac OS X TCP/IP stacks. In contrast to similar tools like iperf or netperf it features a distributed architecture, where throughput and other metrics are measured between arbitrary flowgrind server processes.

Etalon Changes

We make a few changes to scale flowgrind for use with Etalon. Mainly, our changes involve greatly increasing the limits that both a flowgrind controller and a flowgrind daemon can process. This required modifying the controller to take in a configuration file of flows, rather than a list from the command line. For the daemon, it required replacing select with poll. Additionally, we allow the stop criteria for flows to be a number of bytes rather than just a time. For specific changes see this comparison page.

What It Can Do?

Flowgrind measures besides goodput (throughput), the application layer interarrival time (IAT) and round-trip time (RTT), blockcount and network transactions/s. Unlike most cross-platform testing tools, flowgrind can output some transport layer information, which are usually internal to the TCP/IP stack. For example, on Linux and FreeBSD this includes among others the kernel's estimation of the end-to-end RTT, the size of the TCP congestion window (CWND) and slow start threshold (SSTHRESH).

Flowgrind has a distributed architecture. It is split into two components: the flowgrind daemon and the flowgrind controller. Using the controller, flows between any two systems running the flowgrind daemon can be setup (third party tests). At regular intervals during the test the controller collects and displays the measured results from the daemons. It can run multiple flows at once with the same or different settings and individually schedule every one. Test and control connection can optionally be diverted to different interfaces.

The traffic generation itself is either bulk transfer, rate-limited, or sophisticated request/response tests. Flowgrind uses libpcap to automatically dump traffic for qualitative analysis.

Building flowgrind

Flowgrind builds cleanly on Linux, FreeBSD, and Mac OS X. Other operating systems are currently not planned to be supported. Flowgrind expects libxmlrpc-c and OSSP uuid to be available. Additionally, for the optional advanced traffic generation and automatic dump support libgsl an libpcap should be installed.

Flowgrind is built using GNU autotools on all supported platforms. You can build it using the following commands:

# cd flowgrind
# autoreconf -i
# ./configure
# make

For more information see INSTALL.md.

Instructions to run a test

  1. Start flowgrindd on all machines that should be the endpoint of a flow.
  2. Execute flowgrind on some machine (not necessarily one of the endpoints) with the host names of the endpoints passed through the -H option.

Assume we have 4 machines, host0, host1, host2 and host3 and flowgrind has been installed on all of them. We want to measure flows from host1 to host2 and from host1 to host3 in parallel, controlled from host0. First, we start flowgrindd on host1 to host3. On host0 we execute:

# flowgrind -n 2 -F 0 -H s=host1,d=host2 -F 1 -H s=host1,d=host3

In order to not influence the test connection with control traffic, flowgrind allows to setup the RPC control connection over a different interface. A typical scenario would be to test a WiFi connection and run the control traffic over a wired connection.

Assume two machines running flowgrindd, each having two network adapters, one wired, one wireless. We run flowgrind on a machine that is connected by wire to the test machines. First machine has addresses 10.0.0.1 and 192.168.0.1, the other has addresses 10.0.0.2 and 192.168.0.1. So our host argument will be this:

# flowgrind -H s=192.168.0.1/10.0.0.1,d=192.168.0.2/10.0.0.2

In words: test from 192.168.0.1 to 192.168.0.2 on the nodes identified by 10.0.0.1 and 10.0.0.2 respectively.

See also

There are other popular TCP measurement tools you might look into, especially if you are mainly interested in fast unidirectional bulk transfer performance.

  • Iperf3 - fresh reimplementation of the original iperf
  • Netperf - network performance benchmark, also supports unix domain sockets

flowgrind-etalon's People

Contributors

csamsel avatar arnd avatar dsh2 avatar erzb5e6f65 avatar mukerjee avatar marcelnehring avatar kramudhan avatar cawo-odoo avatar ccanel avatar flameeyes avatar puneeth-n avatar alexander-zimmermann avatar df7cb avatar

Stargazers

 avatar Henrique de Moraes Holschuh avatar

Watchers

Henrique de Moraes Holschuh avatar  avatar  avatar

Forkers

ccanel

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.