• Stars
    star
    201
  • Rank 194,491 (Top 4 %)
  • Language
    Perl
  • License
    GNU General Publi...
  • Created over 7 years ago
  • Updated over 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

This is a small collection of GPLv3-licensed tools to assist an intrepid researcher in testing the performance of networks, wired or wireless.

    

net-hydra

net-hydra is a multiple client controller which executes a given set of commands on multiple remote machines with an extremely high degree of simultaneity. Although net-hydra was specifically designed to be used with netburn to simultaneously test a network using multiple devices, it can be used for scheduling remote execution of any arbitrary command or commands. However, it does require whenits to be present on the client machines.

Since net-hydra uses SSH command channels, it's usable even without shared passwordless keys on the client machines - you can enter in passwords or key passphrases at runtime, and it'll use the created command channel to schedule the jobs without needing the password/passphrase again.

It's highly recommended to use ntpd to keep accurate time on the server and all clients. net-hydra will refuse to schedule jobs if all clients do not have system time accurate to within 1 second of the server's.

Usage: 
	net-hydra -c {configfile} [-t {testname}]

	net-hydra requires a config file specifying [clients], [directives], and optionally
	[aliases], which it uses to schedule jobs to run simultaneously in the very near future
	on multiple client machines.

		# sample nethydra.conf
		[clients]
			# list each client device here, by name and as SSH will connect to them.
			#
			local0 = [email protected]
			local1 = [email protected]
	
		[directives]
			# These are the command(s) to be run on each client device. Directives
			# beginning with $ reference lines from the [aliases] section. Any use
			# of $when, either here or in [aliases], will be replaced with the
			# scheduled execution time, in Unix epoch seconds; $testname is replaced
                        # with the --testname argument passed to net-hydra on the command-line.
			#
			local0 = $4kstream
			local1 = /usr/bin/touch /tmp/test-$testname-$when.txt
	
		[aliases]
			# Defining aliases here keeps [directives] cleaner, so you can
			# see what you're doing a little more easily.
			#
			$4kstream = netburn -u http://127.0.0.1/1M.bin -r 25 -o /tmp/$testname-$when.csv
	
	net-hydra requires the whenits command to be in the standard path on each client
	machine, for use precisely scheduling the directives to execute simultaneously.

netburn

netburn is a tool for testing network performance using an HTTP server back-end. It's similar to ApacheBench, but where ApacheBench is intended primarily to test the HTTP server itself, netburn is intended primarily to test the network between them.

It will fetch an URL for a given number of seconds, but can limit itself to a given rate in Mbps. Rather than throttling the network connection itself, netburn simply monitors the number of bits received so far, compares it to the time elapsed (in microseconds), and refuses to fetch more pages until the rate so far is at or below the specified rate limit. After testing for the number of seconds requested, netburn returns information regarding throughput and latency of requests made.

IMPORTANT NOTE about the -c {concurrency} option: if you ask for -c 10, each "page" will consist of 10 parallel fetches of URL, and the "latency" will be the amount of time it takes to get the last bit from the last concurrent child fetch. Another new "page" fetch will not begin until after ALL child fetches complete - this simulates the experience of browsing web pages with multiple resources, and is very different from ApacheBench's -c 10, which merely hammers the server as hard as possible from ten completely independent client processes!

Usage:
         netburn -u {url} 
                [-r {rate limit} ]  ... specified in Mbps (default none)
                [-t {seconds} ]     ... time to run test, default 30 
                [-o {filespec} ]    ... output filespec for CSV report 
                [--no-header ]      ... suppress header row of CSV output 
                [-h {hostname} ]    ... override system-defined hostname in CSV output
                [-c {concurrency} ] ... number of concurrent URL fetches to make per 'page' fetch
                [-q ]               ... quiet (suppress all but CSV output) 
                [-ifinfo {iface} ]  ... output detailed wifi info about {iface}
                [--percentile {n}]  ... report results at each nth percentile instead of defaults
                [--minp {n} ]       ... begin percentile reporting at nth percentile (default 50)
                [--maxp {n} ]       ... end percentile reporting at nth percentile (default 100)
                [--rnd {value} ]    ... sleep random milliseconds up to {value} before each fetch
                                        (to inject chaos into the timing of fetches)
                 
                [--usage ]          ... you're looking at this right now 


Example:

         you@box:~$ netburn -u http://someserver/128K.bin -r 10

         Fetching http://someserver/128K.bin at maximum rate 10 Mbps for 30 seconds.

         Throughput so far: 10.01 Mbps
         Seconds remaining: 0

         Time elapsed: 30.2 seconds
         Number of pages fetched: 301
         Total data fetched: 37.6 MB
         Mean page length fetched: 1048576 KB
         Page length maximum deviation: 0 KB
         Throughput achieved: 10 Mbps
         Mean latency: 41.65 ms
         
         Worst latency: 190 ms
         99th percentile latency: 51 ms
         95th percentile latency: 46 ms
         90th percentile latency: 45 ms
         75th percentile latency: 43 ms
         Median latency: 41 ms
         Min latency: 35 ms

mailburn

Mailburn is a tool for testing network performance using an SMTP server back-end.

It will send emails for a given number of seconds, but can limit itself to a given rate in Mbps. Rather than throttling the network connection itself, mailburn simply monitors the number of messages sent so far, compares the total data to the time elapsed (in microseconds), and refuses to send more mail until the rate so far is at or below the specified rate limit. After testing for the number of seconds requested, it returns information regarding throughput and latency of emails sent. (NOTE: 'throughput' here only measures the data payload, and does not include message headers or SMTP overhead.)

You'll need an SMTP server on the back end for mailburn to send its messages to; if your goal is to test the server itself, you're set. If your goal is to test the network the SMTP traffic is moving across, I recommend Postfix's smtp-sink, which silently accepts (and dumps to /dev/null) any and all SMTP traffic.

Usage: 

         mailburn --to {valid email address} --size {msg payload size in MB} --host {SMTP server}

               [--size {MB} ]      ... size of the binary attachment in each message
               [--host {host} ]    ... the SMTP server mailburn should connect to
               [--port {port} ]    ... SMTP port (default 25)
               [-r {rate limit} ]  ... specified in Mbps (default none)
               [-t {seconds} ]     ... time to run test, default 30 
               [-o {filespec} ]    ... output filespec for CSV report 
               [--no-header ]      ... suppress header row of CSV output 
               [-q ]               ... quiet (suppress all but CSV output) 
               [-h {hostname} ]    ... override system-defined hostname in CSV output 
               [-ifinfo {iface} ]  ... output detailed wifi info about {iface}
               [--jitter {value} ] ... sleep random interval up to {value} ms before each send
               [--percentile {n} ] ... report results at each nth percentile instead of defaults
               [--minp {n} ]       ... begin percentile reporting at nth percentile (default 50)
               [--maxp {n} ]       ... end percentile reporting at nth percentile (default 100)

               [--usage ]          ... you're looking at this right now 

whenits

whenits is a scheduler with millisecond-or-better precision. Feed it a desired execution time in Unix epoch seconds, it will do a low-CPU-power sleep until 200ms before execution time, then a high-CPU-power loop to execute as close to the precise epoch time specified as possible.

Usage:

    whenits [-d] {time} {/path/to/command {arg1 arg2 arg3 ...} }

    -d            ... optional: daemonize (fork and run in background).
                      You'll need this if you're scheduling commands
                      that need to run after the current shell closes.

    time          ... Required. Execution time may be specified in absolute
                      epoch seconds, or relative to current time -
                      eg now+5s, now+10m, now+2h.

    command       ... the command to be scheduled at {time}, along with
                      any arguments to be passed to it.

Example:

    you@box:~$ whenits now+5s echo Hello world!

    Current time is: 1495220901. Executing in 5 seconds, at 1495220906.

    WARNING: I'm a foreground task! Use -d if you need to daemonize me (so I don't
             need you still connected to me when I run the task).

    Hello world!

More Repositories

1

sanoid

These are policy-driven snapshot management and replication tools which use OpenZFS for underlying next-gen storage. (Btrfs support plans are shelved unless and until btrfs becomes reliable.)
Perl
3,102
star
2

ioztat

ioztat is a storage load analysis tool for OpenZFS. It provides iostat-like statistics at an individual dataset/zvol level.
Python
157
star
3

homebrew-router

Configs necessary for a simple home/office router running on Ubuntu
Shell
37
star
4

wg-admin

Simple CLI utilities to manage a WireGuard server
Perl
17
star
5

perlpv

A proof-of-concept pipe viewer similar to Andrew Wood's pv—but written in perl, for eventual use internally in syncoid.
Perl
7
star
6

blindanalysis

A simple tool to enable blinded analysis of images (or other files) in a lab setting.
Perl
7
star
7

zfsync

DEPRECATED: zfsync has been replaced entirely by syncoid, from the Sanoid repository.
6
star
8

mysqlbak

CLI tool to dump all mysql dbs on a local or remote host to one gzipped file per database.
Perl
6
star
9

0-to-bhyve

Quick start to getting Bhyve virtualization running on a new FreeBSD system
Shell
5
star
10

fio-test-scaffolding

Perl
5
star
11

nebula-sample-configs

Simple example config files for Slack Nebula mesh VPN
4
star
12

create-vpn-creds

Automatically and quietly create OpenVPN credentials, and generate configs for client use.
Shell
3
star
13

btrfs-testing

scriptable tests of reliability / performance of btrfs
Perl
2
star
14

OpenInvoice

1
star
15

filefuzz

Filefuzz rots data in files to order. For use in testing the impact of bitrot on data.
Perl
1
star
16

ZBM-notes

1
star