Oh yeah, contention from simultaneous requests, if you're doing that, can also complicate your numbers. Adjusting `#:scgi-max-allow-wait` might be a quick way to see whether that changes your numbers. (Hitting a limit here could give you better numbers, or worse numbers, but removing a limit being hit should change the numbers.) You can also run Wireshark or "tcpdump", to be certain of what's going on at the packet level, but that can be time-consuming to trace through.

Neil Van Dyke wrote on 09/01/2017 02:38 PM:
Thank you very much for doing this work, D. Bohdan.

If I'm reading these results quickly, and if my guess about the distribution is correct, then it looks like Racket SCGI+nginx *might* actually have the best times of any of your tested combinations *except when a GC cycle kicks in*.

results/scgi.txt-Percentage of the requests served within a certain time (ms)
results/scgi.txt-  50%      3
results/scgi.txt-  66%      4
results/scgi.txt-  75%      4
results/scgi.txt-  80%      5
results/scgi.txt-  90%      7
results/scgi.txt-  95%     11
results/scgi.txt-  98%   1018
results/scgi.txt-  99%   1030
results/scgi.txt- 100%  55256 (longest request)

If GC is indeed the cause, if you avoid or reduce the GC hits that are killing you 5% of the time, then maybe 100% of your requests are fast. (I suggest looking at avoiding/reducing GC hits holistically, in an application-specific way, since there's lots of things you can do, depending, and there are costs and benefits. One very likely situation is that there are inefficiencies in the application code itself that are the bottleneck, and it's best to take a look at those before focusing on where the bottleneck moves next. That familiarization with the application code can also help you decide how to address any bottlenecks external to it.)

This performance of Racket SCGI+nginx relative to the others you tested is surprising to me, since I made the Racket `scgi` package for particular non-performance requirements, and performance was really secondary. (If I were prioritizing speed higher, I suspect I could make serving much faster, doing it a different way, and then micro-optimizing on top of that.)

Not to look a gift horse in the mouth, but it's possible that something else was going on, to give surprisingly good numbers. For example, often, errors can cause good performance numbers. Sometimes I used JMeter instead of `ab` to rule out that cause of bad numbers in performance testing (as well as to implement some testing). Also, the bad numbers could be something else, like the OS pushing into swap, sporadic network latency (though looks like you might've controlled for that one), or some other OS/hardware/network burp outside of your Racket process(es).

I'd want to have a better understanding of these numbers before Racketeers started either bragging or donning burlap sacks of shame. :)


--
You received this message because you are subscribed to the Google Groups "Racket 
Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to