File: README

package info (click to toggle)
netpipe 2.3-1
  • links: PTS
  • area: main
  • in suites: potato
  • size: 160 kB
  • ctags: 109
  • sloc: ansic: 979; makefile: 113
file content (254 lines) | stat: -rw-r--r-- 9,418 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
NetPIPE Network Protocol Independent Performance Evaluator, Release 2.3
Copyright 1997, 1998 Iowa State University Research Foundation, Inc.

$Id: README,v 1.9 1998/10/28 14:44:20 ghelmer Exp $

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation.  You should have received a copy of the
GNU General Public License along with this program; if not, write to the
Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

The URL for this document:

ftp://ftp.scl.ameslab.gov/pub/netpipe/README

*** RELEASE 2.3 NOTE *** The PVM interface contributed by Clark
E. Dorman has just been integrated but has not been tested here at the
SCL.  Please email Guy Helmer <ghelmer@scl.ameslab.gov> if you notice
problems with the PVM interface, and please include patches if any are
needed.

Getting NetPIPE
---------------

The NetPIPE implementation in C can be found at:

ftp://ftp.scl.ameslab.gov/pub/netpipe/netpipe-2.3.tar.gz

The source code for NetPIPE 2.3 is provided as a gzipped tar archive,
which can be uncompressed with "gunzip netpipe-2.3.tar.gz" (or "gzip
-d netpipe-2.3.tar.gz"), and then extracted from the uncompressed
archive with the command "tar xvf netpipe-2.3.tar".  If you do not
have the gzip program, it can be obtained as:

ftp://prep.ai.mit.edu/pub/gnu/gzip-1.2.4.tar

Similarly, the NetPIPE implementation in Java can be found at:

ftp://ftp.scl.ameslab.gov/pub/netpipe-Java-1.0.tar.gz

The instructions that follow apply to the C implementation of
NetPIPE.

What is NetPIPE?
----------------

NetPIPE is a protocol independent performance tool that encapsulates
the best of ttcp and netperf and visually represents the network
performance under a variety of conditions. By taking the end-to-end
application view of a network, NetPIPE clearly shows the overhead
associated with different protocol layers. Netpipe answers such
questions as: how soon will a given data block of size k arrive at its
destination? Which network and protocol will transmit size k blocks
the fastest? What is a given network's effective maximum throughput
and saturation level?  Does there exist a block size k for which the
throughput is maximized? How much communication overhead is due to the
network communication protocol layer(s)? How quickly will a small (< 1
kbyte) control message arrive, and which network and protocol are best
for this purpose?

For a paper fully describing NetPIPE and sample investigation of
network performance issues using NetPIPE, see
http://www.scl.ameslab.gov/netpipe/paper/full.html.

Building NetPIPE
----------------

NetPIPE is provided with protocol-specific shims for TCP (using the
Berkeley sockets interface), MPI, and PVM.  If you do not have MPI or
PVM, don't worry; TCP is the typical shim used.  It should be easy to
write new interfaces for other protocols based on the examples shown
by the TCP, MPI and PVM interfaces.

NetPIPE requires an ANSI C compiler.

Review the provided Makefile and change any necessary settings, such
as the CFLAGS compiler flags, required extra libraries, and MPI or PVM
library & include file pathnames if you have these communication
libraries.

Compile NetPIPE with the desired communication interface by using the
command "make TCP", "make MPI", or "make PVM" as appropriate,
corresponding to the executable files NPtcp, NPmpi, or NPpvm
respectively.

Consult the appropriate section below for details on running NetPIPE
over TCP, MPI, or PVM, and the following section on interpreting the
results.

Running NPtcp
-------------

For TCP, run a NetPIPE receiver on one computer by issuing the command
"NPtcp -r".  Run a NetPIPE sender on another computer by issuing the
command "NPtcp -t -h <receiver's address> -o <output file> -P" and any
other options as appropriate (each option affects only the process on
which it is specified -- options are not negotiated between the
transmitter and the receiver):

	-A: specify buffers alignment e.g. "-A 4096"

	-a: asynchronous receive (a.k.a. preposted receive)
		This option currently has no effect on TCP

	-b: specify send and receive TCP buffer sizes e.g. "-b 32768"

	-h: specify hostname of receiver e.g. "-h mumblehost"

	-i: specify increment step size e.g. "-i 64"
		Default is exponential increment calculated at runtime

	-l: lower bound (start value for block size) e.g. "-l 1"

	-O: specify buffer offset e.g. "-O 127"

	-o: specify output filename e.g. "-o output.txt"

	-P: print real-time results on stdout

	-p: specify port e.g. "-p 5150"

	-s: stream option (default mode is "ping pong")
		If this option is used, it must be specified on both
		the sending and receiving processes

	-u: upper bound (stop value for block size) e.g. "-u 1048576"

Running NPmpi
-------------

For MPI, how you run NPmpi may depend on the MPI implementation you
are using.  Assuming you are using the "p4" device (for a cluster of
individual systems interconnected using TCP/IP) in the Argonne MPICH
implementation, you could run NPmpi one of two ways.

	If your system's default machine file begins with the two
	names of the systems you want to test, use "mpirun -np 2
	NPmpi", followed by any of the NetPIPE options listed below.

	Otherwise, create a file that contains the host names of the
	two systems you want to include in the test, one host name on
	each line (assume the file is named "machines.p4").  Then, use
	the command "mpirun -machinefile machines.p4 -np 2 NPmpi",
	followed by any of the NetPIPE options listed below.

To find out how to run NPmpi using any other implementation of MPI,
please consult the implementation's documentation.

The NetPIPE options for MPI are:

	-A: specify buffers alignment e.g. "-A 4096"

	-a: asynchronous receive (a.k.a. preposted receive)
		May not have any effect, depending on your MPI
		implementation

	-i: specify increment step size e.g. "-i 64"
		Default is exponential increment calculated at runtime

	-l: lower bound (start value for block size) e.g. "-l 1"

	-O: specify buffer offset e.g. "-O 127"

	-o: specify output filename e.g. "-o output.txt"

	-P: print real-time results on stdout

	-s: stream option (default mode is "ping pong")
		If this option is used, it must be specified on both
		the sending and receiving processes

	-u: upper bound (stop value for block size) e.g. "-u 1048576"

Running NPpvm
-------------

First, start PVM with the command "pvm" on one machine and a second
machine with the PVM command "add <othermachine>", where
<othermachine> is the name of the other computer to include in the
test.  Exit the PVM command line interface.  Start the receiver
process on one of the machines with the command "NPpvm -r".  Finally,
start the transmitter process on the other machine with the command
"NPpvm -t -o <output file> -P" and any other options as appropriate
(each option affects only the process on which it is specified --
options are not negotiated between the transmitter and the receiver):

	-A: specify buffers alignment e.g. "-A 4096"

	-a: asynchronous receive (a.k.a. preposted receive)
		This option has no effect on PVM

	-i: specify increment step size e.g. "-i 64"
		Default is exponential increment calculated at runtime

	-l: lower bound (start value for block size) e.g. "-l 1"

	-O: specify buffer offset e.g. "-O 127"

	-o: specify output filename e.g. "-o output.txt"

	-P: print real-time results on stdout

	-s: stream option (default mode is "ping pong")
		If this option is used, it must be specified on both
		the sending and receiving processes

	-u: upper bound (stop value for block size) e.g. "-u 1048576"


Interpreting the Results
------------------------

NetPIPE's output file contains five columns: time to transfer the block,
bits per second, bits in block, bytes in block, and variance.  These
columns may be graphed to represent and compare the network's
performance.  For example, the "network signature" graph can be
created by graphing the time column versus the bits per second column
(see the NetPIPE report at the URL above for the details why this
graph is important and how to interpret it).  The more traditional
"throughput versus block size" graph can be created by
graphing the bytes column versus the bits per second column.

See http://www.scl.ameslab.gov/Projects/ClusterCookbook/nprun.html for
a detailed tutorial on running NetPIPE and graphing the results.

Help
----

NetPIPE is currently maintained by Guy Helmer.  Email
"ghelmer@scl.ameslab.gov" or call 515-294-9469 for help or
suggestions.

Changes
-------

version 2.3 (9/24/98)
   * Add PVM interface contributed by Clark E. Dorman <dorman@s3i.com>

   * Revamp README file with instructions for NPmpi and NPpvm, and
     clarify some instructions for NPtcp

version 2.2 (8/21/98):
   * Carefully check all return values from write(2) and read(2)
     system calls in TCP.c.  Handle short reads properly.  Make the Sync()
     function transmit and receive a useful string which can be
     checked for validity.

   * Correct the overloading of SendTime() and RecvTime() functions
     by breaking out SendRepeat() and RecvRepeat() as separate
     functions.

   * Handle systems whose accept(2) system call does not carry socket
     options over from the listening socket.  In particular, set the
     TCP_NODELAY flag and socket buffers on an accepted socket.