h2. How to measure performance of my hardware

(page in progress)

Overview...

Basic tuning

{code}
... examples...
{code}

Some sample results running on the old lump in the corner, running on current hardware you should easily beat these.

{frame}

... data ...

{frame}

The following tool is including, or can be located in 'cpp/src/tests/' Run with --help to check the options on the latest version.

{code}
$ ./perftest --help

N4qpid7Options9ExceptionE: Test Options:
  -h [ --host ] HOST (localhost)       Broker host to connect to
  -b [ --broker ] HOST (localhost)     Broker host to connect to
  -p [ --port ] PORT (5672)            Broker port to connect to
  -v [ --virtualhost ] VHOST           virtual host
  -n [ --clientname ] ID (cpp)         unique client identifier
  --username USER (guest)              user name for broker log in.
  --password USER (guest)              password for broker log in.
  --help                               print this usage statement
  --setup                              Create shared queues.
  --control                            Run test, print report.
  --publish                            Publish messages.
  --subscribe                          Subscribe for messages.
  --mode shared|fanout|topic (shared)  Test mode.
                                       shared: --qt queues, --npubs publishers 
                                       and --nsubs subscribers per queue.
                                       
                                       fanout: --npubs publishers, --nsubs subs
                                       cribers, fanout exchange.
                                       topic: --qt topics, --npubs publishers a
                                       nd --nsubs subscribers per topic.
                                       
  --npubs N (1)                        Create N publishers.
  --count N (500000)                   Each publisher sends N messages.
  --size BYTES (1024)                  Size of messages in bytes.
  --pub-confirm yes|no (1)             Publisher use confirm-mode.
  --durable yes|no (0)                 Publish messages as durable.
  --unique-data yes|no (0)             Make data for each message unique.
  --nsubs N (1)                        Create N subscribers.
  --sub-ack N (0)                      N>0: Subscriber acks batches of N.
                                       N==0: Subscriber uses unconfirmed mode
  --qt N (1)                           Create N queues or topics.
  --iterations N (1)                   Desired number of iterations of the test
                                       .
  -s [ --summary ]                     Summary output: pubs/sec subs/sec transf
                                       ers/sec Mbytes/sec
  --queue_max_count N (0)              queue policy: count to trigger 'flow to 
                                       disk'
  --queue_max_size N (0)               queue policy: accumulated size to trigge
                                       r 'flow to disk'
  --interval_sub ms (0)                >=0 delay between msg consume
  --interval_pub ms (0)                >=0 delay between msg publish

Logging options:
  --log-output FILE (stderr)  Send log output to FILE. FILE can be a file name 
                              or one of the special values:
                              stderr, stdout, syslog
  -t [ --trace ]              Enables all logging
  --log-enable RULE (error+)  Enables logging for selected levels and component
                              s. RULE is in the form 'LEVEL[+][:PATTERN]' 
                              Levels are one of: 
                               trace debug info notice warning error critical
                              For example:
                              '--log-enable warning+' logs all warning, error 
                              and critical messages.
                              '--log-enable debug:framing' logs debug messages 
                              from the framing namespace. This option can be 
                              used multiple times
  --log-time yes|no (1)       Include time in log messages
  --log-level yes|no (1)      Include severity level in log messages
  --log-source yes|no (0)     Include source file:line in log messages
  --log-thread yes|no (0)     Include thread ID in log messages
  --log-function yes|no (0)   Include function signature in log messages


There are two ways to use perftest: single process or multi-process.

If none of the --setup, --publish, --subscribe or --control options
are given perftest will run a single-process test.
For a  multi-process test first run:
  perftest --setup <other options>
and wait for it to complete. The remaining process should run concurrently::
Run --npubs times: perftest --publish <other options>
Run --nsubs times: perftest --subscribe <other options>
Run once:          perftest --control <other options>
Note the <other options> must be identical for all processes.

{code}