Hi Willy

> Overall we could say that you have 2ms RTT in HTTP if we use foo.html as a
> reference. That's equivalent to a 200km WAN link. The positive point is that
> you would not lose anything more by making it geographically redundant :-)

:) I will have our network people look at that…. 

>>> Also you can try with ab -k in a second test (keep-alive) which will save
>>> you from connection setup times. It will save two round trips per request,
>>> one of which appears in the measure. On a sane local server, you should
>>> almost not notice the difference. Here I already expect a difference.
>> 
>> again: from a physical host:
>> 
>> ab -c 8 -n 500 "https:/example.com/foo.php"
>> Time per request:       36.914 [ms] (mean)
> 
> I seem to remember that ab renegociates SSL for every connection. I may be
> wrong but that's what I had in mind, so possibly you're benchmarking the
> worst case (new client for each connection) which is always important to
> determine.
> 
>> ab -kc 8 -n 500 "https:/example.com/foo.php"
>> Time per request:       36.833 [ms] (mean)
> 
> Seems strange that these are the same numbers, because once the connection
> is established, it should remain fast. Did ab report that it used keep-alive ?
> It's also possible that for any reason the connection was closed after each
> response.

My colleague Simon found the "option httpclose" in the configuration. Removing 
that changes things for html but not for php:

ab -c 8 -n 5000 "https://example.com/foo.html";
Requests per second:    238.83 [#/sec] (mean)
Time per request:       33.497 [ms] (mean)

ab -kc 8 -n 5000 "https://example.com/foo.html";
Requests per second:    2035.50 [#/sec] (mean)
Time per request:       3.930 [ms] (mean)

Progress!

ab -c 8 -n 5000 "https://example.com/foo.php";
Requests per second:    223.16 [#/sec] (mean)
Time per request:       35.849 [ms] (mean)

ab -kc 8 -n 5000 "https://example.com/foo.php";
Requests per second:    223.52 [#/sec] (mean)
Time per request:       35.791 [ms] (mean)

No progress :(

>> this is infrastructure we are building and providing ourselves: The load
>> balancing VM is on a host that has 9 VMs running (33 virtual CPUs) on a
>> system with 24 real cores.
> 
> OK if you're building it yourself, at least you won't be victim of your
> provider's choices nor of noisy neighbours. That said, as you can see,
> making 33 virtual CPUs out of 24 real ones necessarily means you add a
> lot of latency because you need to schedule between them and you can't
> offer less than a timeslice (generally 1ms, but could even be 10).

of course - we are aware of that. However, most (all) of the VMs have very very 
light loads
> 
> 
>> The VM of the load balancer currently is configured with 8 vCPUs and 16GB of 
>> RAM.
> 
> You can safely remove 6 CPUs that you will probably never use. If you could
> dedicate 2 real cores instead (one for the interrupts, one for haproxy), it
> would be much more efficient because there would be only full time slices.

changed the VM type. Will see if I can pin it to 2 real CPUs

> HAProxy does not use *any* I/O once started. It does not even have this
> possibility. It will only use network, CPU and memory.

I figured as much

>> Ah - we are not selling this - does that make us less dishonest? :)
> 
> :-)
> You can tune whatever you want if you have control over everything, which
> is good. Most cloud users do not have this chance and only have the option
> to leave and try another one which is less overloaded. But with todays
> dedicated hosting prices, it makes no sense to be hosted outside on VMs,
> it's only seeking trouble.

Well - we are building a cloud service, and the application we are putting on 
this Cloud now is a test case to see how things work and scale. (That's one of 
the reasons I came here asking for advice - I still need to establish base line 
performance for a lot of components and applications in order to tune the 
system). Right now I feel like I'm playing "Whack a Mole" but blindfolded. 

Of course it doesn't help that the application we putting into production in a 
few months time seems to be written by people that thought that 3 users on 
their system already was a lot. We are looking to scale it to 50'000 users… The 
WTF rate / minute is quite high as I try to scale it (the 60ms for the 
status.php is just the beginning… I have seen requests that took 390'000 ms - 
because the app goes out and updates several thousand files and corresponding 
database entries on the main thread…. sigh)

Back to whacking, it is - and thanks for your inputs. Highly appreciated!

cheers
Jens-Christian


Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail

Reply via email to