The graph pretty much tells the story. Things are much better after upgrading to a server with two more CPUs! You can see that the latencies are below their old levels starting on the 19th.

This afternoon I dusted off my old Bank Teller simulation that I use in Data Structures class and set it up to approximate the API calls and latencies that I was experiencing. Sure enough a 30% drop in performance makes a much bigger difference than you would think!

Here are the results, which I think pretty well match my experience. I control the amount of time to handle a request by randomly selecting a number within a given range. In my case the baseline range was 2 -- 10 time units. I seeded my random number generator so I'm getting the same sequence of random numbers each time I run this.

With 4 "CPU's" and baseline times to handle each request:

→ ~/D/C/C/python:git(prep)$ python
Processed  120  customers.
Average Time =  9.03333333333
Average Wait Time =  3.06666666667
Customers in Queue at end: 3

If I increase the low end of the range to 3 and the top to 13 (roughly 30% on each end) I see this:

→ ~/D/C/C/python:git(prep)$ python
Processed  101  customers.
Average Time =  28.3168316832
Average Wait Time =  20.2772277228
Customers in Queue at end: 22

Wow, thats a lot more than I would naively expect. I definitely need to go re-read a queuing theory chapter. Keeping the range at 3 -- 13, but increasing the number of CPU's from 4 to 6 I get this:

→ ~/D/C/C/python:git(prep)$ python
Processed  120  customers.
Average Time =  9.60833333333
Average Wait Time =  1.59166666667
Customers in Queue at end: 1

I need to clean up the code before I'm willing to publish it here. But if you are really interested contact me and I'll be happy to share it as is.


comments powered by Disqus