diff options
Diffstat (limited to 'doc')
-rw-r--r-- | doc/Makefile.am | 1 | ||||
-rw-r--r-- | doc/Makefile.in | 428 | ||||
-rw-r--r-- | doc/dast.gif | bin | 0 -> 4614 bytes | |||
-rw-r--r-- | doc/index.html | 758 | ||||
-rw-r--r-- | doc/ui_license.html | 90 |
5 files changed, 1277 insertions, 0 deletions
diff --git a/doc/Makefile.am b/doc/Makefile.am new file mode 100644 index 0000000..41ae70e --- /dev/null +++ b/doc/Makefile.am @@ -0,0 +1 @@ +EXTRA_DIST = index.html ui_license.html dast.gif diff --git a/doc/Makefile.in b/doc/Makefile.in new file mode 100644 index 0000000..18f2dde --- /dev/null +++ b/doc/Makefile.in @@ -0,0 +1,428 @@ +# Makefile.in generated by automake 1.16.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2020 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = doc +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/ax_create_stdint_h.m4 \ + $(top_srcdir)/m4/dast.m4 $(top_srcdir)/m4/ax_pthread.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +STRIP_BEGIN = @STRIP_BEGIN@ +STRIP_DUMMY = @STRIP_DUMMY@ +STRIP_END = @STRIP_END@ +VERSION = @VERSION@ +WEB100_CFLAGS = @WEB100_CFLAGS@ +WEB100_CONFIG = @WEB100_CONFIG@ +WEB100_LIBS = @WEB100_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +ax_pthread_config = @ax_pthread_config@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = index.html ui_license.html dast.gif +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu doc/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic cscopelist-am \ + ctags-am distclean distclean-generic distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am tags-am uninstall uninstall-am + +.PRECIOUS: Makefile + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/doc/dast.gif b/doc/dast.gif Binary files differnew file mode 100644 index 0000000..58110da --- /dev/null +++ b/doc/dast.gif diff --git a/doc/index.html b/doc/index.html new file mode 100644 index 0000000..438a020 --- /dev/null +++ b/doc/index.html @@ -0,0 +1,758 @@ +<HTML> +<HEAD> +<TITLE>Iperf version 2.0.0</TITLE> +<!-- $Id: index.html,v 1.1.1.1 2004/05/18 01:50:44 kgibbs Exp $ --> +</HEAD> + +<BODY BGCOLOR="#FFFFFF" LINK="#006633" VLINK="#669900" ALINK="#669966"> + +<CENTER> +<P><IMG SRC="dast.gif" + ALT="Distributed Applications Support Team"></P> +</CENTER> + +<H1>Iperf version 2.0.0</H1> + +<H3>May 2004</H3> + +<HR><!-- ----- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- --> + +<H3>NLANR applications support +<BR><A HREF="http://dast.nlanr.net/">http://dast.nlanr.net/</A> +<BR><A HREF="mailto:dast@nlanr.net"><dast@nlanr.net></A> +</H3> +<P><FONT face="arial,helvetica"> +<H1>Iperf User Docs</H1> +<H4>Mark Gates<br> + Ajay Tirumala<BR> + Jon Dugan<BR> + Kevin Gibbs<BR> </H4> + +May 2004 +<P></CENTER> +[<a href="#compiling">Compiling</A> | +<A href="#features">Features</A> | +<A href="#tuningtcp">Tuning a TCP connection</A> | +<A href="#tuningudp">Tuning a UDP connection</A> | +<A href="#multicast">Running multicast servers and clients</A> | +<A href="#ipv6">IPv6 Mode</A> | +<A href="#repmode">Representative Streams</A> | +<A href="#daemon"> Running Iperf as a daemon</A> | +<!--<A href="#adaptive">Adaptive Window Sizes</A> | --> +<A href="#service">Running Iperf as a Windows Service</A> ] +<HR> +<!-- ----- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- --> +<H2><A name=compiling></A>Compiling</H2> + +Once you have the distribution, on UNIX, +unpack it using gzip and tar. That will create a new directory +'iperf-<version#>' with the source files and documentation. +<P> + +Iperf compiles cleanly on many systems including Linux, SGI IRIX, HP-UX, +Solaris, AIX, and Cray UNICOS. Use '<TT>make</TT>' to configure for your OS and +compile the source code. + +<BLOCKQUOTE><PRE> + +gunzip -c iperf-<version>.tar.gz | tar -xvf - +cd iperf-<version> +./configure +make + +</PRE></BLOCKQUOTE> + +To install iperf, use '<TT>make install</TT>', +which will ask you where to install it. To recompile, the easiest way is to +start over. Do '<TT>make distclean</TT>' then '<TT>./configure; make</TT>'. See the Makefile +for more options. +<P> + +If you have problems, please report them to <A href="mailto:dast@nlanr.net">dast@nlanr.net</A> and +we will try to fix them quickly. <BR> + +<HR> +<!-- ----- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- --> + +<H2><A name=features></A>Features</H2> +<UL> + <LI>TCP + <UL> + <LI>Measure bandwidth + <LI>Report MSS/MTU size and observed read sizes. + <LI>Support for TCP window size via socket buffers. + <LI>Multi-threaded if pthreads or Win32 threads are available. Client and + server can have multiple simultaneous connections. + <!-- <LI>Suggest the optimal window size for a connection where the OS allows + setting window sizes in the granularity of bytes. </LI>--></UL> + <LI>UDP + <UL> + <LI>Client can create UDP streams of specified bandwidth. + <LI>Measure packet loss + <LI>Measure delay jitter + <LI>Multicast capable + <LI>Multi-threaded if pthreads are available. Client and server can have + multiple simultaneous connections. (This doesn't work in Windows.) </LI></UL> + <LI>Where appropriate, options can be specified with K (kilo-) and M (mega-) + suffices. So 128K instead of 131072 bytes. + <LI>Can run for specified time, rather than a set amount of data to transfer. + <LI>Picks the best units for the size of data being reported. + <LI>Server handles multiple connections, rather than quitting after a single + test. + <LI>Print periodic, intermediate bandwidth, jitter, and loss reports at + specified intervals. + <LI>Run the server as a daemon (Check out <A + href="http://www-itg.lbl.gov/nettest">Nettest</A> for running it as a secure + daemon). + <LI>Run the server as a Windows NT Service + <LI>Use representative streams to test out how link layer compression affects + your achievable bandwidth. + +<!-- <LI>A library of <A + href="lib.html">useful functions and C++ + classes.</A> </LI> +--> +</UL> +<HR> +<!-- ----- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- --><BR> + +<TABLE cellPadding=3 border=1> + <TBODY> + <TR vAlign=top> + <TH align=left>Command line option</TH> + <TH align=left>Environment variable option</TH> + <TH align=left>Description</TH></TR> + <TR> + <TH bgColor=#cccccc colSpan=3>Client and Server options</TH></TR> + <TR vAlign=top> + <TD><A name=format></A><TT>-f, --format <I>[bkmaBKMA]</I></TT></TD> + <TD><TT>$IPERF_FORMAT</TT></TD> + <TD>A letter specifying the format to print bandwidth numbers in. + Supported formats are + <PRE> + 'b' = bits/sec 'B' = Bytes/sec + 'k' = Kbits/sec 'K' = KBytes/sec + 'm' = Mbits/sec 'M' = MBytes/sec + 'g' = Gbits/sec 'G' = GBytes/sec + 'a' = adaptive bits/sec 'A' = adaptive Bytes/sec + </PRE> + The adaptive formats choose between kilo- and mega- as appropriate. Fields + other than bandwidth always print bytes, but otherwise follow the + requested format. Default is 'a'. <BR><I>NOTE:</I> here Kilo = 1024, + Mega = 1024^2 and Giga = 1024^3 when dealing with bytes. Commonly in networking, + Kilo = 1000, Mega = 1000^2, and Giga = 1000^3 so we use this when dealing with + bits. If this really bothers you, use -f b and do the math.</TD></TR> + <TR vAlign=top> + <TD><A name=interval></A><TT>-i, --interval <I>#</I></TT></TD> + <TD><TT>$IPERF_INTERVAL</TT></TD> + <TD>Sets the interval time in seconds between periodic bandwidth, jitter, + and loss reports. If non-zero, a report is made every <I>interval</I> + seconds of the bandwidth since the last report. If zero, no periodic + reports are printed. Default is zero.</TD></TR> + <TR vAlign=top> + <TD><A name=len></A><TT>-l, --len <I>#[KM]</I></TT></TD> + <TD><TT>$IPERF_LEN</TT></TD> + <TD>The length of buffers to read or write. Iperf works by writing an + array of <I>len</I> bytes a number of times. Default is 8 KB for TCP, 1470 + bytes for UDP. Note for UDP, this is the datagram size and needs to be lowered when using + IPv6 addressing to 1450 or less to avoid fragmentation. See also the <A + href="#num">-n</A> + and <A + href="#time">-t</A> + options.</TD></TR> + <TR vAlign=top> + <TD><A name=print_mss></A><TT>-m, --print_mss</TT></TD> + <TD><TT>$IPERF_PRINT_MSS</TT></TD> + <TD>Print the reported TCP MSS size (via the TCP_MAXSEG option) and the + observed read sizes which often correlate with the MSS. The MSS is usually + the MTU - 40 bytes for the TCP/IP header. Often a slightly smaller MSS is + reported because of extra header space from IP options. The interface type + corresponding to the MTU is also printed (ethernet, FDDI, etc.). This + option is not implemented on many OSes, but the read sizes may still + indicate the MSS.</TD></TR> + <TR vAlign=top> + <TD><A name=port></A><TT>-p, --port <I>#</I></TT></TD> + <TD><TT>$IPERF_PORT</TT></TD> + <TD>The server port for the server to listen on and the client to connect + to. This should be the same in both client and server. Default is 5001, + the same as ttcp.</TD></TR> + <TR vAlign=top> + <TD><A name=udp></A><TT>-u, --udp</TT></TD> + <TD><TT>$IPERF_UDP</TT></TD> + <TD>Use UDP rather than TCP. See also the <A + href="#bandwidth">-b</A> + option.</TD></TR> + <TR vAlign=top> + <TD><A name=window></A><TT>-w, --window <I>#[KM]</I></TT></TD> + <TD><TT>$TCP_WINDOW_SIZE</TT></TD> + <TD>Sets the socket buffer sizes to the specified value. For TCP, this + sets the TCP window size. For UDP it is just the buffer which datagrams + are received in, and so limits the largest receivable datagram size.</TD></TR> + <TR vAlign=top> + <TD><A name=bind></A><TT>-B, --bind <I>host</I></TT></TD> + <TD><TT>$IPERF_BIND</TT></TD> + <TD>Bind to <I>host</I>, one of this machine's addresses. For the client + this sets the outbound interface. For a server this sets the incoming + interface. This is only useful on multihomed hosts, which have multiple + network interfaces. + <P>For Iperf in UDP server mode, this is also used to bind and join to a + multicast group. Use addresses in the range 224.0.0.0 to 239.255.255.255 + for multicast. See also the <A + href="#ttl">-T</A> + option.</P></TD></TR> + <TR vAlign=top> + <TD><A name=compatibility></A><TT>-C, --compatibility </TT></TD> + <TD><TT>$IPERF_COMPAT</TT></TD> + <TD>Compatibility mode allows for use with older version of iperf. This mode + is not required for interoperability but it is highly recommended. In + some cases when using representative streaming you could cause a 1.7 server + to crash or cause undesired connection attempts.</P></TD></TR> + <TR vAlign=top> + <TD><A name=mss></A><TT>-M, --mss <I>#[KM}</I></TT></TD> + <TD><TT>$IPERF_MSS</TT></TD> + <TD>Attempt to set the TCP maximum segment size (MSS) via the TCP_MAXSEG + option. The MSS is usually the MTU - 40 bytes for the TCP/IP header. For + ethernet, the MSS is 1460 bytes (1500 byte MTU). This option is not + implemented on many OSes.</TD></TR> + <TR vAlign=top> + <TD><A name=nodelay></A><TT>-N, --nodelay</TT></TD> + <TD><TT>$IPERF_NODELAY</TT></TD> + <TD>Set the TCP no delay option, disabling Nagle's algorithm. Normally + this is only disabled for interactive applications like telnet.</TD></TR> + <TR> + <TD><TT>-V </TT>(from v1.6 or higher)</TD> + <TD>.</TD> + <TD>Bind to an IPv6 address <BR>Server side: <BR>$ iperf -s -V + <P>Client side: <BR>$ iperf -c <Server IPv6 Address> -V + <BR> </P>Note: On version 1.6.3 and later a specific IPv6 Address does + not need to be bound with the <A href="#bind">-B</A> option, previous 1.6 + versions do. Also on most OSes using this option will also respond to IPv4 + clients using IPv4 mapped addresses.</TD></TR> + <TR> + <TH bgColor=#cccccc colSpan=3>Server specific options</TH></TR> + <TR vAlign=top> + <TD><A name=server></A><TT>-s, --server</TT></TD> + <TD><TT>$IPERF_SERVER</TT></TD> + <TD>Run Iperf in server mode.</TD></TR> + <TR> + <TD><TT>-D </TT> (from v1.2 or higher)</TD> + <TD>.</TD> + <TD>Run the server as a daemon (Unix platforms) <BR>On Win32 platforms + where services are available, Iperf will start running as a service.</TD></TR> + <TR> + <TD><TT>-R </TT>(only for Windows, from v1.2 or higher)</TD> + <TD>.</TD> + <TD>Remove the Iperf service (if it's running). </TD></TR><TR> + <TD><TT>-o </TT>(only for Windows, from v1.2 or higher)</TD> + <TD>.</TD> + <TD>Redirect output to given file. </TD></TR> + <TR vAlign=top> + <TD><A name=sclient></A><TT>-c, --client <I>host</I></TT></TD> + <TD><TT>$IPERF_CLIENT</TT></TD> + <TD> If Iperf is in server mode, then specifying a host with -c + will limit the connections that Iperf will accept to the + <I>host</I> specified. Does not work well for UDP.</TD></TR> + <TR vAlign=top> + <TD><A name=sparallel></A><TT>-P, --parallel <I>#</I></TT></TD> + <TD><TT>$IPERF_PARALLEL</TT></TD> + <TD>The number of connections to handle by the server before + closing. Default is 0 (which means to accept connections forever).</TD></TR> + <TR> + <TH bgColor=#cccccc colSpan=3>Client specific options</TH></TR> + <TR vAlign=top> + <TD><A name=bandwidth></A><TT>-b, --bandwidth <I>#[KM]</I></TT></TD> + <TD><TT>$IPERF_BANDWIDTH</TT></TD> + <TD>The UDP bandwidth to send at, in bits/sec. This implies the -u option. + Default is 1 Mbit/sec.</TD></TR> + <TR vAlign=top> + <TD><A name=client></A><TT>-c, --client <I>host</I></TT></TD> + <TD><TT>$IPERF_CLIENT</TT></TD> + <TD>Run Iperf in client mode, connecting to an Iperf server running on + <I>host</I>.</TD></TR> + <TR vAlign=top> + <TD><A name=dualtest></A><TT>-d, --dualtest </TT></TD> + <TD><TT>$IPERF_DUALTEST</TT></TD> + <TD>Run Iperf in dual testing mode. This will cause the server to connect + back to the client on the port specified in the + <A href="#listenport">-L</A> option (or defaults + to the port the client connected to the server on). This is done immediately + therefore running the tests simultaneously. If you want an alternating + test try <A href="#tradeoff">-r.</A></TD></TR> + <TR vAlign=top> + <TD><A name=num></A><TT>-n, --num <I>#[KM]</I></TT></TD> + <TD><TT>$IPERF_NUM</TT></TD> + <TD>The number of buffers to transmit. Normally, Iperf sends for 10 + seconds. The -n option overrides this and sends an array of <I>len</I> + bytes <I>num</I> times, no matter how long that takes. See also the <A + href="#len">-l</A> + and <A + href="#time">-t</A> + options.</TD></TR> + <TR vAlign=top> + <TD><A name=tradeoff></A><TT>-r, --tradeoff </TT></TD> + <TD><TT>$IPERF_TRADEOFF</TT></TD> + <TD>Run Iperf in tradeoff testing mode. This will cause the server to connect + back to the client on the port specified in the + <A href="#listenport">-L</A> option (or defaults + to the port the client connected to the server on). This is done following + the client connection termination, therefore running the tests + alternating. If you want an simultaneous test try + <A href="#dualtest">-d.</A></TD></TR> + <TR vAlign=top> + <TD><A name=time></A><TT>-t, --time <I>#</I></TT></TD> + <TD><TT>$IPERF_TIME</TT></TD> + <TD>The time in seconds to transmit for. Iperf normally works by + repeatedly sending an array of <I>len</I> bytes for <I>time</I> seconds. + Default is 10 seconds. See also the <A + href="#len">-l</A> + and <A + href="#num">-n</A> + options.</TD></TR> + <TR vAlign=top> + <TD><A name=listenport></A><TT>-L, --listenport <I>#</I></TT></TD> + <TD><TT>$IPERF_LISTENPORT</TT></TD> + <TD>This specifies the port that the server will connect back to the + client on. It defaults to the port used to connect to the server + from the client.</TD></TR> + <TR vAlign=top> + <TD><A name=parallel></A><TT>-P, --parallel <I>#</I></TT></TD> + <TD><TT>$IPERF_PARALLEL</TT></TD> + <TD>The number of simultaneous connections to make to the server. Default + is 1. Requires thread support on both the client and server.</TD></TR> + <TR vAlign=top> + <TD><A name=tos></A><TT>-S, --tos <I>#</I></TT></TD> + <TD><TT>$IPERF_TOS</TT></TD> + <TD>The type-of-service for outgoing packets. (Many routers ignore the TOS + field.) You may specify the value in hex with a '0x' prefix, in octal with + a '0' prefix, or in decimal. For example, '0x10' hex = '020' octal = '16' + decimal. The TOS numbers specified in RFC 1349 are: + <PRE> + IPTOS_LOWDELAY minimize delay 0x10 + IPTOS_THROUGHPUT maximize throughput 0x08 + IPTOS_RELIABILITY maximize reliability 0x04 + IPTOS_LOWCOST minimize cost 0x02 + + </PRE> + </TD></TR> + <TR vAlign=top> + <TD><A name=ttl></A><TT>-T, --ttl <I>#</I></TT></TD> + <TD><TT>$IPERF_TTL</TT></TD> + <TD>The time-to-live for outgoing multicast packets. This is essentially + the number of router hops to go through, and is also used for scoping. + Default is 1, link-local.</TD></TR> + <TR> + <TD><TT>-F</TT> (from v1.2 or higher)</TD> + <TD>.</TD> + <TD>Use a representative stream to measure bandwidth, e.g. :- <BR>$ + iperf -c <server address> -F <file-name></TD></TR> + <TR> + <TD><TT>-I </TT>(from v1.2 or higher)</TD> + <TD>.</TD> + <TD>Same as -F, input from stdin.</TD></TR> + <!-- <TR> + <TD><TT>-W </TT>(from v1.2 or higher)</TD> + <TD>.</TD> + <TD>Adaptive Window Sizes. + <BR>Use Iperf to suggest the best Window size for a connection. Iperf will start from a default window size and try to perform a search for the optimal window size</TD></TR> +--> <TR> + <TH bgColor=#cccccc colSpan=3>Miscellaneous options</TH></TR> + <TR vAlign=top> + <TD><A name=help></A><TT>-h, --help</TT></TD> + <TD> </TD> + <TD>Print out a summary of commands and quit.</TD></TR> + <TR vAlign=top> + <TD><A name=version></A><TT>-v, --version</TT></TD> + <TD> </TD> + <TD>Print version information and quit. Prints 'pthreads' if compiled with + POSIX threads, 'win32 threads' if compiled with Microsoft Win32 threads, + or 'single threaded' if compiled without threads.</TD></TR></TBODY></TABLE> +<P> +<HR> +<!-- ----- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- --> +<H2><A name=tuningtcp></A>Tuning a TCP connection</H2> + +The primary goal of Iperf +is to help in tuning TCP connections over a particular path. The most +fundamental tuning issue for TCP is the TCP window size, which controls how much +data can be in the network at any one point. If it is too small, the sender will +be idle at times and get poor performance. The theoretical value to use for the +TCP window size is the <I>bandwidth delay product</I>, +<BLOCKQUOTE>bottleneck bandwidth * round trip time</BLOCKQUOTE>In the below +modi4/cyclops example, the bottleneck link is a 45 Mbit/sec DS3 link and the +round trip time measured with ping is 42 ms. The bandwidth delay product is +<BLOCKQUOTE>45 Mbit/sec * 42 ms <BR>= (45e6) * (42e-3) <BR>= 1890000 bits + <BR>= 230 KByte</BLOCKQUOTE>That is a starting point for figuring the best +window size; setting it higher or lower may produce better results. In our +example, buffer sizes over 130K did not improve the performance, despite the +bandwidth delay product of 230K. +<P>Note that many OSes and hosts have upper limits on the TCP window size. These +may be as low as 64 KB, or as high as several MB. Iperf tries to detect when +these occur and give a warning that the actual and requested window sizes are +not equal (as below, though that is due to rounding in IRIX). PSC has a <A +href="http://www.psc.edu/networking/perf_tune.html">list detailing</A> how to +change the default and maximum window sizes for various OSes. For more +information on TCP window sizes, see the <A +href="http://dast.nlanr.net/Guides/GettingStarted/TCP_window_size.html">User's +Guide to TCP Windows.</A> +<P>Here is an example session, between node1 in Illinois and node2 in North +Carolina. These are connected via the vBNS backbone and a 45 Mbit/sec DS3 link. +Notice we improve bandwidth performance by a factor of 3 using proper TCP window +sizes. Use the adaptive window sizes feature on platforms which allow setting +window sizes in the granularity of bytes. +<BLOCKQUOTE> +<PRE> +<B>node2></B> iperf -s +------------------------------------------------------------ +Server listening on TCP port 5001 +TCP window size: 60.0 KByte (default) +------------------------------------------------------------ +[ 4] local <IP Addr node2> port 5001 connected with <IP Addr node1> port 2357 +[ ID] Interval Transfer Bandwidth +[ 4] 0.0-10.1 sec 6.5 MBytes <B><FONT color=#ff0000>5.2 Mbits/sec + +</FONT>node1></B> iperf -c node2 +------------------------------------------------------------ +Client connecting to node1, TCP port 5001 +TCP window size: 59.9 KByte (default) +------------------------------------------------------------ +[ 3] local <IP Addr node1> port 2357 connected with <IP Addr node2> port 5001 +[ ID] Interval Transfer Bandwidth +[ 3] 0.0-10.0 sec 6.5 MBytes 5.2 Mbits/sec</PRE> + <HR> +<PRE><B>node2></B> iperf -s -w 130k +------------------------------------------------------------ +Server listening on TCP port 5001 +TCP window size: 130 KByte +------------------------------------------------------------ +[ 4] local <IP Addr node 2> port 5001 connected with <IP Addr node 1> port 2530 +[ ID] Interval Transfer Bandwidth +[ 4] 0.0-10.1 sec 19.7 MBytes <B><FONT color=#ff0000>15.7 Mbits/sec + +</FONT>node1></B> iperf -c node2 -w 130k +------------------------------------------------------------ +Client connecting to node2, TCP port 5001 +TCP window size: 129 KByte (WARNING: requested 130 KByte) +------------------------------------------------------------ +[ 3] local <IP Addr node1> port 2530 connected with <IP Addr node2> port 5001 +[ ID] Interval Transfer Bandwidth +[ 3] 0.0-10.0 sec 19.7 MBytes 15.8 Mbits/sec</PRE></BLOCKQUOTE>Another +test to do is run parallel TCP streams. If the total aggregate bandwidth is more +than what an individual stream gets, something is wrong. Either the TCP window +size is too small, or the OS's TCP implementation has bugs, or the network +itself has deficiencies. See above for TCP window sizes; otherwise diagnosing +which is somewhat difficult. If Iperf is compiled with pthreads, a single client +and server can test this, otherwise setup multiple clients and servers on +different ports. Here's an example where a single stream gets 16.5 Mbit/sec, but +two parallel streams together get 16.7 + 9.4 = 26.1 Mbit/sec, even when using +large TCP window sizes: +<BLOCKQUOTE><PRE><B>node2></B> iperf -s -w 300k +------------------------------------------------------------ +Server listening on TCP port 5001 +TCP window size: 300 KByte +------------------------------------------------------------ +[ 4] local <IP Addr node2> port 5001 connected with <IP Addr node1> port 6902 +[ ID] Interval Transfer Bandwidth +[ 4] 0.0-10.2 sec 20.9 MBytes <B><FONT color=#ff0000>16.5 Mbits/sec + +</FONT></B>[ 4] local <IP Addr node2> port 5001 connected with <IP Addr node1> port 6911 +[ 5] local <IP Addr node2> port 5001 connected with <IP Addr node2> port 6912 +[ ID] Interval Transfer Bandwidth +[ 5] 0.0-10.1 sec 21.0 MBytes <B><FONT color=#ff0000>16.7 Mbits/sec +</FONT></B>[ 4] 0.0-10.3 sec 12.0 MBytes <B><FONT color=#ff0000> 9.4 Mbits/sec + +</FONT>node1></B> ./iperf -c node2 -w 300k +------------------------------------------------------------ +Client connecting to node2, TCP port 5001 +TCP window size: 299 KByte (WARNING: requested 300 KByte) +------------------------------------------------------------ +[ 3] local <IP Addr node2> port 6902 connected with <IP Addr node1> port 5001 +[ ID] Interval Transfer Bandwidth +[ 3] 0.0-10.2 sec 20.9 MBytes 16.4 Mbits/sec + +<B>node1></B> iperf -c node2 -w 300k -P 2 +------------------------------------------------------------ +Client connecting to node2, TCP port 5001 +TCP window size: 299 KByte (WARNING: requested 300 KByte) +------------------------------------------------------------ +[ 4] local <IP Addr node2> port 6912 connected with <IP Addr node1> port 5001 +[ 3] local <IP Addr node2> port 6911 connected with <IP Addr node1> port 5001 +[ ID] Interval Transfer Bandwidth +[ 4] 0.0-10.1 sec 21.0 MBytes 16.6 Mbits/sec +[ 3] 0.0-10.2 sec 12.0 MBytes 9.4 Mbits/sec</PRE></BLOCKQUOTE>A +secondary tuning issue for TCP is the maximum transmission unit (MTU). To be +most effective, both hosts should support Path MTU Discovery. PSC has a <A +href="http://www.psc.edu/networking/perf_tune.html">list detailing</A> what OSes +support Path MTU Discovery. Hosts without Path MTU Discovery often use 536 as +the MSS, which wastes bandwidth and processing time. Use the -m option to +display what MSS is being used, and see if this matches what you expect. Often +it is around 1460 bytes for ethernet. +<BLOCKQUOTE><PRE><B>node3></B> iperf -s -m +------------------------------------------------------------ +Server listening on TCP port 5001 +TCP window size: 60.0 KByte (default) +------------------------------------------------------------ +[ 4] local <IP Addr node3> port 5001 connected with <IP Addr node4> port 1096 +[ ID] Interval Transfer Bandwidth +[ 4] 0.0- 2.0 sec 1.8 MBytes 6.9 Mbits/sec +[ 4] <B><FONT color=#ff0000>MSS size 1448 bytes (MTU 1500 bytes, ethernet) +</FONT></B>[ 4] Read lengths occurring in more than 5% of reads: +[ 4] 952 bytes read 219 times (16.2%) +[ 4] 1448 bytes read 1128 times (83.6%)</PRE></BLOCKQUOTE>Here +is a host that doesn't support Path MTU Discovery. It will only send and receive +small 576 byte packets. +<BLOCKQUOTE><PRE><B>node4></B> iperf -s -m +------------------------------------------------------------ +Server listening on TCP port 5001 +TCP window size: 32.0 KByte (default) +------------------------------------------------------------ +[ 4] local <IP Addr node4> port 5001 connected with <IP Addr node3> port 13914 +[ ID] Interval Transfer Bandwidth +[ 4] 0.0- 2.3 sec 632 KBytes 2.1 Mbits/sec +<B><FONT color=#ff0000>WARNING: Path MTU Discovery may not be enabled. +</FONT></B>[ 4] <B><FONT color=#ff0000>MSS size 536 bytes (MTU 576 bytes, minimum) +</FONT></B>[ 4] Read lengths occurring in more than 5% of reads: +[ 4] 536 bytes read 308 times (58.4%) +[ 4] 1072 bytes read 91 times (17.3%) +[ 4] 1608 bytes read 29 times (5.5%)</PRE></BLOCKQUOTE>Iperf +supports other tuning options, which were added for exceptional network +situations like HIPPI-to-HIPPI over ATM. <BR> +<HR> +<!-- ----- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- --> + +<H2><A name=tuningudp></A>Tuning a UDP connection</H2> + +Iperf creates a constant bit rate UDP stream. This is a very artificial +stream, similar to voice communication but not much else. +<P> + +You will want to adjust the datagram size (-l) to the size your application +uses. +<P> + +The server detects UDP datagram loss by ID numbers in the datagrams. Usually +a UDP datagram becomes several IP packets. Losing a single IP packet will lose +the entire datagram. To measure packet loss instead of datagram loss, make the +datagrams small enough to fit into a single packet, using the -l option. The +default size of 1470 bytes works for ethernet. Out-of-order packets are also +detected. (Out-of-order packets cause some ambiguity in the lost packet count; +Iperf assumes they are not duplicate packets, so they are excluded from the lost +packet count.) Since TCP does not report loss to the user, I find UDP tests +helpful to see packet loss along a path. +<P> + +Jitter calculations are continuously computed by the server, as specified by +RTP in RFC 1889. The client records a 64 bit second/microsecond timestamp in the +packet. The server computes the relative transit time as (server's receive time +- client's send time). The client's and server's clocks do not need to be +synchronized; any difference is subtracted out in the jitter calculation. Jitter +is the smoothed mean of differences between consecutive transit times. +<BLOCKQUOTE><PRE><B>node2></B> iperf -s -u -i 1 +------------------------------------------------------------ +Server listening on UDP port 5001 +Receiving 1470 byte datagrams +UDP buffer size: 60.0 KByte (default) +------------------------------------------------------------ +[ 4] local <IP Addr node2> port 5001 connected with <IP Addr node1> port 9726 +[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams +[ 4] 0.0- 1.0 sec 1.3 MBytes 10.0 Mbits/sec 0.209 ms 1/ 894 (0.11%) +[ 4] 1.0- 2.0 sec 1.3 MBytes 10.0 Mbits/sec 0.221 ms 0/ 892 (0%) +[ 4] 2.0- 3.0 sec 1.3 MBytes 10.0 Mbits/sec 0.277 ms 0/ 892 (0%) +[ 4] 3.0- 4.0 sec 1.3 MBytes 10.0 Mbits/sec 0.359 ms 0/ 893 (0%) +[ 4] 4.0- 5.0 sec 1.3 MBytes 10.0 Mbits/sec 0.251 ms 0/ 892 (0%) +[ 4] 5.0- 6.0 sec 1.3 MBytes 10.0 Mbits/sec 0.215 ms 0/ 892 (0%) +[ 4] 6.0- 7.0 sec 1.3 MBytes 10.0 Mbits/sec 0.325 ms 0/ 892 (0%) +[ 4] 7.0- 8.0 sec 1.3 MBytes 10.0 Mbits/sec 0.254 ms 0/ 892 (0%) +[ 4] 8.0- 9.0 sec 1.3 MBytes 10.0 Mbits/sec 0.282 ms 0/ 892 (0%) +[ 4] 0.0-10.0 sec 12.5 MBytes 10.0 Mbits/sec 0.243 ms 1/ 8922 (0.011%) + +<B>node1></B> iperf -c node2 -u -b 10m +------------------------------------------------------------ +Client connecting to node2, UDP port 5001 +Sending 1470 byte datagrams +UDP buffer size: 60.0 KByte (default) +------------------------------------------------------------ +[ 3] local <IP Addr node1> port 9726 connected with <IP Addr node2> port 5001 +[ ID] Interval Transfer Bandwidth +[ 3] 0.0-10.0 sec 12.5 MBytes 10.0 Mbits/sec +[ 3] Sent 8922 datagrams</PRE></BLOCKQUOTE>Notice the higher jitter due to +datagram reassembly when using larger 32 KB datagrams, each split into 23 +packets of 1500 bytes. The higher datagram loss seen here may be due to the +burstiness of the traffic, which is 23 back-to-back packets and then a long +pause, rather than evenly spaced individual packets. +<BLOCKQUOTE><PRE><B>node2></B> iperf -s -u -l 32k -w 128k -i 1 +------------------------------------------------------------ +Server listening on UDP port 5001 +Receiving 32768 byte datagrams +UDP buffer size: 128 KByte +------------------------------------------------------------ +[ 3] local <IP Addr node2> port 5001 connected with <IP Addr node1> port 11303 +[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams +[ 3] 0.0- 1.0 sec 1.3 MBytes 10.0 Mbits/sec 0.430 ms 0/ 41 (0%) +[ 3] 1.0- 2.0 sec 1.1 MBytes 8.5 Mbits/sec 5.996 ms 6/ 40 (15%) +[ 3] 2.0- 3.0 sec 1.2 MBytes 9.7 Mbits/sec 0.796 ms 1/ 40 (2.5%) +[ 3] 3.0- 4.0 sec 1.2 MBytes 10.0 Mbits/sec 0.403 ms 0/ 40 (0%) +[ 3] 4.0- 5.0 sec 1.2 MBytes 10.0 Mbits/sec 0.448 ms 0/ 40 (0%) +[ 3] 5.0- 6.0 sec 1.2 MBytes 10.0 Mbits/sec 0.464 ms 0/ 40 (0%) +[ 3] 6.0- 7.0 sec 1.2 MBytes 10.0 Mbits/sec 0.442 ms 0/ 40 (0%) +[ 3] 7.0- 8.0 sec 1.2 MBytes 10.0 Mbits/sec 0.342 ms 0/ 40 (0%) +[ 3] 8.0- 9.0 sec 1.2 MBytes 10.0 Mbits/sec 0.431 ms 0/ 40 (0%) +[ 3] 9.0-10.0 sec 1.2 MBytes 10.0 Mbits/sec 0.407 ms 0/ 40 (0%) +[ 3] 0.0-10.0 sec 12.3 MBytes 9.8 Mbits/sec 0.407 ms 7/ 401 (1.7%) + +<B>node1></B> iperf -c node2 -b 10m -l 32k -w 128k +------------------------------------------------------------ +Client connecting to node2, UDP port 5001 +Sending 32768 byte datagrams +UDP buffer size: 128 KByte +------------------------------------------------------------ +[ 3] local <IP Addr node2> port 11303 connected with <IP Addr node1> port 5001 +[ ID] Interval Transfer Bandwidth +[ 3] 0.0-10.0 sec 12.5 MBytes 10.0 Mbits/sec +[ 3] Sent 401 datagrams</PRE><PRE></PRE></BLOCKQUOTE> +<P><A name=multicast></A> +<B><FONT size=+1>Multicast</FONT></B> +<P>To test multicast, run several servers with the bind option (-B, --bind) set +to the multicast group address. Run the client, connecting to the multicast +group address and setting the TTL (-T, --ttl) as needed. Unlike normal TCP and +UDP tests, multicast servers may be started after the client. In that case, +datagrams sent before the server started show up as losses in the first periodic +report (61 datagrams on arno below). +<BLOCKQUOTE><PRE><B>node5></B> iperf -c 224.0.67.67 -u --ttl 5 -t 5 +------------------------------------------------------------ +Client connecting to 224.0.67.67, UDP port 5001 +Sending 1470 byte datagrams +Setting multicast TTL to 5 +UDP buffer size: 32.0 KByte (default) +------------------------------------------------------------ +[ 3] local <IP Addr node5> port 1025 connected with 224.0.67.67 port 5001 +[ ID] Interval Transfer Bandwidth +[ 3] 0.0- 5.0 sec 642 KBytes 1.0 Mbits/sec +[ 3] Sent 447 datagrams + +<B>node5></B> iperf -s -u -B 224.0.67.67 -i 1 +------------------------------------------------------------ +Server listening on UDP port 5001 +Binding to local address 224.0.67.67 +Joining multicast group 224.0.67.67 +Receiving 1470 byte datagrams +UDP buffer size: 32.0 KByte (default) +------------------------------------------------------------ +[ 3] local 224.0.67.67 port 5001 connected with <IP Addr node5> port 1025 +[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams +[ 3] 0.0- 1.0 sec 131 KBytes 1.0 Mbits/sec 0.007 ms 0/ 91 (0%) +[ 3] 1.0- 2.0 sec 128 KBytes 1.0 Mbits/sec 0.008 ms 0/ 89 (0%) +[ 3] 2.0- 3.0 sec 128 KBytes 1.0 Mbits/sec 0.010 ms 0/ 89 (0%) +[ 3] 3.0- 4.0 sec 128 KBytes 1.0 Mbits/sec 0.013 ms 0/ 89 (0%) +[ 3] 4.0- 5.0 sec 128 KBytes 1.0 Mbits/sec 0.008 ms 0/ 89 (0%) +[ 3] 0.0- 5.0 sec 642 KBytes 1.0 Mbits/sec 0.008 ms 0/ 447 (0%) + +<B>node6></B> iperf -s -u -B 224.0.67.67 -i 1 +------------------------------------------------------------ +Server listening on UDP port 5001 +Binding to local address 224.0.67.67 +Joining multicast group 224.0.67.67 +Receiving 1470 byte datagrams +UDP buffer size: 60.0 KByte (default) +------------------------------------------------------------ +[ 3] local 224.0.67.67 port 5001 connected with <IP Addr node5> port 1025 +[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams +[ 3] 0.0- 1.0 sec 129 KBytes 1.0 Mbits/sec 0.778 ms 61/ 151 (40%) +[ 3] 1.0- 2.0 sec 128 KBytes 1.0 Mbits/sec 0.236 ms 0/ 89 (0%) +[ 3] 2.0- 3.0 sec 128 KBytes 1.0 Mbits/sec 0.264 ms 0/ 89 (0%) +[ 3] 3.0- 4.0 sec 128 KBytes 1.0 Mbits/sec 0.248 ms 0/ 89 (0%) +[ 3] 0.0- 4.3 sec 554 KBytes 1.0 Mbits/sec 0.298 ms 61/ 447 (14%)</PRE><PRE><HR width="100%"></PRE></BLOCKQUOTE> +<P><A name=ipv6></A> +<DL> + <DT><B><FONT size=+2>IPv6 Mode</FONT></B> + <DD>Download the IPv6 version of this release.<BR>Get the IPv6 address of the node using the 'ifconfig' command.<BR>Use the <FONT color=#000099>-V</FONT> option to indicate that you are using an IPv6 address Please note that we need to explicitly bind the server address also. + <P>Server side:<BR><FONT color=#000099> $ iperf -s -V</FONT> + <P>Client side:<BR><FONT color=#000099>$ iperf -c <Server IPv6 Address> -V </FONT> + <P>Note: Iperf version 1.6.2 and eariler require a IPv6 address to be explicitly bound + with the <A HREF="#bind">-B</A> option for the server.</P></DD></DL> +<HR> +<P><A name=repmode></A> +<DL> + <DT><B><FONT size=+2>Using Representative Streams to measure + bandwidth</FONT></B> + <DD>Use the -F or -I option. If you want to test how your network performs + with compressed / uncompressed streams, just create representative streams and + use the -F option to test it. This is usually due to the link layer + compressing data. + <P>The -F option is for file input.<BR>The -I option is for input from stdin. + <P>E.g. <BR>Client: $ <FONT color=#000099> iperf -c <server address> -F <file-name><BR></FONT> + <BR>Client: $ <FONT color=#000099> iperf -c <server address> -I </FONT></P></DD></DL> +<P><A name=daemon></A> +<HR> +<DL> + <DT><B><FONT size=+2>Running the server as a daemon</FONT></B> + <DD>Use the -D command line option to run the server as a daemon. Redirect the + output to a file.<BR>E.g. <FONT color=#000099>iperf -s -D > + iperfLog</FONT>. <FONT color=#000000>This will have the Iperf Server running + as a daemon and the server messages will be logged in the file iperfLog. +</DD></DL> +<HR> +<P><A name=service></A> +<DL> + <DT><B><FONT size=+2>Using Iperf as a Service under Win32</FONT></B> + <DD>There are three options for Win32: + <P> + <DL> + <DT>-o outputfilename + <DD>output the messages into the specified file + <DT>-s -D + <DD>install Iperf as a service and run it + <DT>-s -R + <DD>uninstall the Iperf service </DD></DL> + <P>Examples: + <DL> + <DT><FONT color=#3366ff>iperf -s -D -o iperflog.txt</FONT> + <DD>will install the Iperf service and run it. Messages will be reported + into "%windir%\system32\iperflog.txt" + <P></P> + <DT><FONT color=#3366ff>iperf -s -R</FONT> + <DD>will uninstall the Iperf service if it is installed. + <P>Note: If you stop want to restart the Iperf service after having killed + it with the Microsoft Management Console or the Windows Task Manager, make + sure to use the proper OPTION in the service properties dialog. + </P></DD></DL></DD></DL> +<HR> +<!--<P><A name=multicast></A> +<DL> + <DT><B><FONT size=+2>Running the multicast server and client</FONT></B> + <DD>Use the -B option while starting the server to bind it to a multicast + address.<BR>E.g. :-<FONT color=#3366ff>iperf -s -u -B 224.0.55.55</FONT>. + + <P>This will have the Iperf server listening for datagrams (-u) for the + address 224.0.55.55(-B 224.0.55.55). + <P>Now, start a client sending packets to this multicast address. + <P>E.g. : <FONT color=#3366ff>iperf -c 224.0.55.55 -u</FONT>. + This will have a UDP client (-u) sending to the multicast address + 224.0.55.55(-c 224.0.55.55). + <P><FONT color=#000000>Start multiple clients or servers as explained above, + sending data to the same multicast server. (If you have multiple servers + listening on the multicast address, each of the servers will be getting the data) +</P></DD></DL> +<HR>--> +<!--<A name=adaptive></A> +<DL> + <DT><B><FONT size=+2>Adaptive window sizes</FONT></B> + <DD>Use the -W option on the client to run the client with the adaptive window + size. Ensure that the server window size is fairly big for this + option.<BR>E.g.. If the server TCP window size is 8KB, it does not help having + a client TCP window size of 256KB.<BR>256KB Server TCP Window Size should + suffice for most high bandwidth networks. + <P>Client changes the TCP window size using a binary exponential + algorithm. This means that you may notice that TCP window size suggested may + vary according to the traffic in the network, Iperf will suggest the best + window size for the current network scenario. +</DL> +<HR width="100%"> +--><P><!-- ----- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- --> +<CENTER> +<P>Copyright 1999,2000,2001,2002,2003,2004 <BR>The Board of Trustees of the University of +Illinois <BR>All rights reserved <BR>See <A +href="ui_license.html">UI License</A> for +complete details.</CENTER> +</BODY> +</HTML> + diff --git a/doc/ui_license.html b/doc/ui_license.html new file mode 100644 index 0000000..c3d8a0c --- /dev/null +++ b/doc/ui_license.html @@ -0,0 +1,90 @@ +<HTML> +<HEAD> +<TITLE>Iperf Copyright</TITLE> +<!-- $Id: ui_license.html,v 1.1.1.1 2004/05/18 01:50:44 kgibbs Exp $ --> +</HEAD> + +<BODY BGCOLOR="#FFFFFF" LINK="#006633" VLINK="#669900" ALINK="#669966"> + +<CENTER> +<P><IMG SRC="dast.gif" + ALT="Distributed Applications Support Team"></P> +</CENTER> + + +<H1 ALIGN=CENTER>Iperf Copyright</H1> + +<HR><!-- ----- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- --> + +<CENTER> +Copyright (c) 1999,2000,2001,2002,2003,2004,2005 The Board of Trustees of the University of Illinois<br> +All Rights Reserved. +<P> + +<a href="http://dast.nlanr.net/Projects/Iperf">Iperf performance test</a><BR> +Mark Gates<BR> +Ajay Tirumala<br> +Jim Ferguson<br> +Jon Dugan<br> +Feng Qin<br> +Kevin Gibbs<br> +John Estabrook<BR> +National Laboratory for Applied Network Research <BR> +National Center for Supercomputing Applications <BR> +University of Illinois at Urbana-Champaign <BR> +<a href="http://www.ncsa.uiuc.edu">http://www.ncsa.uiuc.edu</a> +</center> +<P> + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software (Iperf) +and associated documentation files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: +<p> +<ul> +<li>Redistributions of source code must retain the above copyright notice, this list of + conditions and the following disclaimers. +<p> + +<li>Redistributions in binary form must reproduce the above copyright notice, this list + of conditions and the following disclaimers in the documentation and/or other + materials provided with the distribution. +<p> + +<li>Neither the names of the University of Illinois, NCSA, nor the names of its + contributors may be used to endorse or promote products derived from this + Software without specific prior written permission. +</ul> +<p> + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE CONTIBUTORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. + +</pre> + + +<HR><!-- ----- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- --> + +<CENTER> +<P><FONT FACE="helvetica,arial" SIZE="2"> + +<A HREF="mailto:dast@nlanr.net">dast@nlanr.net</A> + +Last modified: Jan 5, 2004<br> + +<A HREF="http://www.nlanr.net">NLANR</a> || +<A HREF="http://dast.nlanr.net">applications support</a> || +<A HREF="http://ncne.nlanr.net">engineering support</a> || +<A HREF="http://moat.nlanr.net">measurement and operations</a> +</FONT></P> +</CENTER> + +</BODY> +</HTML> |