Provided by: rds-tools_1.4.1-OFED-1.4.2-1ubuntu1_amd64 bug

NAME

     rds-stress — send messages between processes over RDS sockets

SYNOPSIS

     rds-stress [-p port_number] [-r receive_address] [-s send_address] [-a ack_bytes]
                [-q request_bytes] [-D rdma_bytes] [-d queue_depth] [-t nr_tasks] [-c] [-R] [-V]
                [-v]

DESCRIPTION

     rds-stress sends messages between groups tasks, usually running on seperate machines.

     First a passive receiving instance is started.

           $ rds-stress

     Then an active sending instance is started, giving it the address and port at which it will
     find a listening passive receiver.  In addition, it is given configuration options which
     both instances will use.

           $ rds-stress -s recvhost -p 4000 -t 1 -d 1

     The active sender will parse the options, connect to the passive receiver, and send the
     options over this connection.  From this point on both instances exhibit the exact same
     behaviour.

     They will create a number of child tasks as specified by the -t option.  Once the children
     are created the parent sleeps for a second at a time, printing a summary of statistics at
     each interval.

     Each child will open an RDS socket, each binding to a port number in order after the port
     number given on the command line.  The first child would bind to port 4001 in our example.
     Each child sets the send and receive buffers to exactly fit the number of messages, requests
     and acks, that will be in flight as determind by the command line arguments.

     The children then enter their loop.  They will keep a number of sent messages outstanding as
     specified by the -d option.  When they reach this limit they will wait to receive acks which
     will allow them to send again.  As they receive messages from their peers they immediately
     send acks.

     Every second, the parent process will display statistics of the ongoing stress test. The
     output is described in section OUTPUT below.

     If the -T option is given, the test will terminate after the specified time, and a summary
     is printed.

     Each child maintains outstanding messages to all other children of the other instance.  They
     do not send to their siblings.

OPTIONS

     The following options are available for use on the command line:

     -p port_number
             Each parent binds a TCP socket to this port number and their respective address.
             They will trade the negotiated options over this socket.  Each child will bind an
             RDS socket to the range of ports immediately following this port number, for as many
             children as there are.

     -s send_address
             A connection attempt is made to this address.  Once its complete and the options are
             sent over it then children will be created and work will proceed.

     -r receive_address
             This specifies the address that messages will be sent from.  If -s is not specified
             then rds-stress waits for a connection on this address before proceeding.

             If this option is not given, rds-stress will choose an appropriate address.  The
             passive process will accept connections on all local interfaces, and obtain the
             address once the control connection is established.  The active process will choose
             a local address based on the interface through which it connects to the destination
             address.

     -a ack_bytes
             This specifies the size of the ack messages, in bytes. There is a minimum size which
             depends on the format of the ack messages, which may change over time.  See section
             "Message Sizes" below.

     -q request_bytes
             This specifies the size of the request messages, in bytes.  It also has a minimum
             size which may change over time.  See section "Message Sizes" below.

     -D rdma_bytes
             RDSv3 is capable of transmitting part of a message via RDMA directly from
             application buffer to application buffer. This option enables RDMA support in rds-
             stress: request packets include parameters for an RDMA READ or WRITE operation,
             which the receiving process executes at the time the ACK packet is sent.  See
             section "Message Sizes" below.

     -d queue_depth
             Each child will try to maintain this many sent messages outstanding to each of its
             peers on the remote address.

     -t nr_tasks
             Each parent will create this many children tasks.

     -T seconds
             Specify the duration of the test run. After the specified number of seconds, all
             processes on both ends of the connection will terminate, and the active instance
             will print a summary. By default, rds-stress will keep on sending and receiving
             messages.

     -z      This flag can be used in conjunction with -T. It suppresses the ongoing display of
             statistics, and prints a summary only.

     -c      This causes rds-stress to create child tasks which just consume CPU cycles.  One
             task is created for each CPU in the system.  First each child observes the maximum
             rate at which it can consume cycles.  This means that this option should only be
             given on an idle system.  rds-stress can then calculate the CPU use of the system by
             observing the lesser rate at which the children consume cycles.  This option is
             *not* shared between the active and passive instances.  It must be specified on each
             rds-stress command line.

     -R      This tells the rds-stress parent process to run with SCHED_RR priority, giving it
             precedence over the child processes. This is useful when running with lots of tasks,
             where there is a risk of the child processes starving the parent, and skewing the
             results.

     -v      With this option enabled, packets are filled with a pattern that is verified by the
             receiver. This check can help detect data corruption occuring under high load.

   Message Sizes
     Options which set a message size (such as -a) specify a number of bytes by default. By
     appending K, M, or G, you can specify the size in kilobytes, megabytes or gigabytes,
     respectively. For instance, the following will run rds-stress with a message and ACK size of
     1024 bytes, and an RDMA message size of 1048576 bytes:

           rds-stress ... -q 1K -a 1K -D 1M

OUTPUT

     Each parent outputs columns of statistics at a regular interval:

     tsks    The number of child tasks which are running.

     tx/s    The number of sendmsg() calls that all children are executing, per second.

     tx+rx K/s
             The total number of bytes that are flowing through sendmsg() and recvmsg() for all
             children.  This includes both request and ack messages.

     rw+rr K/s
             The total number of bytes that are being transferred via RDMA READs and WRITEs for
             all children.

     tx us/c
             The average number of microseconds spent in sendmsg() calls.

     rtt us  The average round trip time for a request and ack message pair.  This measures the
             total time between when a task sends a request and when it finally receives the ack
             for that message.  Because it includes the time it takes for the receiver to wake
             up, receive the message, and send an ack, it can grow to be quite large under load.

     cpu %   This is the percentage of available CPU resources on this machine that are being
             consumed since rds-stress started running.  It will show -1.00 if -c is not given.
             It is calculated based on the amount of CPU resources that CPU soaking tasks are
             able to consume.  This lets it measure CPU use by the system, say in interrupt
             handlers, that task-based CPU accounting does not include.  For this to work rds-
             stress must be started with -c on an idle system.