Test Author: Pedro
If it breaks: Pedro

Spreader Requote Performance test

Note: This test is fairly cumbersome to setup, because performance is
very sensitive to a number of factors including compilation switches,
hardware used, thread allocation and load on the machine. Pedro has
the best handle on how do all this and should probably be the one
doing this test.


1) Make sure you are testing a release server build

2) Make sure you use real hardware, with hyper threading turned off
and cstates disabled, for the server side

3) Make sure you isolate the CPU on which you are running the
server. This is best done on Linux by editing /etc/default/grub like
this:

# this isolates CPU's 0 to 5 for better performance testing
GRUB_CMDLINE_LINUX="isolcpus=0-5"

4) Now make sure your configuration is set for the lowest latency,
including dedicating a thread to the order manager on the isolated
cores:

OrdermanCfg {
   value {
      executor {
         thread_name: "oman_orders"
	 poll: true
	 hosted_actor: "MDSource"
	 hosted_actor: "OrderManager"
      }
      executor {
         thread_name: "oman_slow"
	 poll: false
	 hosted_actor: "*"
      }
   }
}

Threads {
   value {
      thread_group {name_rx: "mdp3feed" core: 0}
      thread_group {name_rx: "oman_orders" core: 1}
      thread_group {name_rx: "jf_ar_sim" core: 2}
      thread_group {name_rx: ".*" core:6 core:7 core:8 core:9 core:10 }
   }
}

5) Now you are ready to start testing. Start a shell and create a new
synthetic say with 2 CL futures. Use the near month (fast ticking)
future as the non quoting leg, so that the other leg gets quoted
often. Make sure to disable throttling in the synthetic definition
dialog.

6) Place an order for this synthetic, away from the market.

7) Now run for say 3 minutes. Visit http://youserver:8000/perf_trace
You should see a graph indicating the median requote times for the
order you created in 5). Make sure you have at least 100 data points
and data the median time is around 12us. If you get anything greater
than 15us, the test has failed.



