Replies: 75 comments 5 replies
-
Any chance of getting more significant levels of concurrency being tested? At least 1,000+ concurrency, and ideally 10,000+. Concurrency seems to be exceptionally under-represented in these tests. |
Beta Was this translation helpful? Give feedback.
-
Hi @robertmeta. Thanks for the input! Would you mind reviewing the thread on issue #49 regarding concurrency levels and perhaps add to that conversation? It's my opinion that higher concurrency levels beyond what we have provided here would be useful if we were ready to benchmark high-connection low-utilization Websockets. But presently we are testing high-traffic traditional HTTP where responding to requests as quickly as possible is the paramount objective. As with anything though, I'm prepared to be proven wrong. :) |
Beta Was this translation helpful? Give feedback.
-
I'm with bhauer, this isn't, "how many users can we serve per server on our chat service". |
Beta Was this translation helpful? Give feedback.
-
Some things I would like to see in the future:
|
Beta Was this translation helpful? Give feedback.
-
Hi @drewcrawford. Thanks for the ideas! No rush, since this is just long-term planning, but I am curious about your second idea concerning multi-row reads and writes. In my head I conceive of that as executing a single Your third idea was echoed by another reader, so that's got "high demand" from my perspective. :) A test of relationships is a great idea too. |
Beta Was this translation helpful? Give feedback.
-
A commenter on HN named Terretta suggested the following. I'm just copying this here for easy future reference.
|
Beta Was this translation helpful? Give feedback.
-
Another HN commenter named kbenson suggested a goal of defining a simple blog-style application. This is ambitious but we've already passed the threshold at which we require community contributions in order to move forward (even adding one more simple test will require several pull requests from the community to see that test implemented in more than a small sampling of the frameworks). With that in mind, I think it's a great item to have on the long-term plan. If we keep the requirements simple, it could be done. |
Beta Was this translation helpful? Give feedback.
-
or
The key insight being
The interesting thing about this test is that it does reads/writes in the same connection. Whereas in the single row access case the dominating factor might be setting up the connection or acquiring it from a shared pool, here the test is about how quick the ORM bindings are once they're in place and how fast you can move memory between the DB process and the application process. |
Beta Was this translation helpful? Give feedback.
-
@drewcrawford, thanks! I understand what you have in mind now. For some reason, I read your original statement to imply something much more complicated. But you simply mean for a test that operates over multiple rows in a single resultset, in the case of reading, with per-row functionality occurring within the application rather than within SQL functions. Your pseudo-code illustrates the idea well. |
Beta Was this translation helpful? Give feedback.
-
Note that requirements for each test type are now posted at the results web site: http://www.techempower.com/benchmarks/#section=code |
Beta Was this translation helpful? Give feedback.
-
I just edited this issue to indicate the updates test is "present," and to add quick notes about the need to implement plaintext tests (both small and large payloads) and a larger work-load JSON test (something involving a complex and large data structure). |
Beta Was this translation helpful? Give feedback.
-
A test that exercises form rendering, validation, and CSRF protection could be interesting. I'm pretty sure most of the full stack frameworks have utilities for those. Maybe the test would have three parts? One server-side implementation, but three sets of wrk parameters: (a) GET the form, (b) POST the form with errors, (c) POST the form successfully. |
Beta Was this translation helpful? Give feedback.
-
I've added test type 16, a more complex routing table/map/tree based on Christopher Lord's comment on the Google Group: https://groups.google.com/d/msg/framework-benchmarks/r0B3tPaCMPs/_PG1_p1McbwJ |
Beta Was this translation helpful? Give feedback.
-
Heavy model test:
This test may reveal cost of class loading [1], method calling and GC. [1] Some languages like php loads class for each request. |
Beta Was this translation helpful? Give feedback.
-
I think a pretty simple additional test would be serving static context of different sizes (100k, 1m, 10m, 100m?). Frameworks that perform similar to (maybe even better than) Apache httpd in this domain could make life a lot easier for full-blown web applications than those that serve small content extremely well but degrade significantly when content sizes get large. With our framework PLAIN, for instance, we generate dynamic content of 3D data (JT, 3DXML, CATIA) that quickly reaches sizes >100m. Streaming those to files and then serve them with an httpd or the like would be a big drawback in terms of performance and complexity. |
Beta Was this translation helpful? Give feedback.
-
They may not be implemented, or the code path might a neglected one, or carry unnecessary overhead in a particular framework etc; don't know haven't seen benchmarks 😄 Why I'd most like to see TLS is because the encryption itself on a pre-negotiated connection is really fast on modern CPUs; however the integration of the crypto library; whether OpenSSL, boring SSL, libsodium; Libressl; etc (do not roll your own crypto); can be pretty crufty. Can be too many allocations, too much copying, too granular, not granular enough, all sorts of things. The TechEmpower benchmarks have done wonders for the performance of frameworks http performance by having a set of standardized measurements independently done; and I'd like to see that effect replicated for https; whichever framework you are into. Its good for the web ecosystem as a whole. |
Beta Was this translation helpful? Give feedback.
-
I agree that HTTPS between microservices, or between the load balancer and web frontend is a good idea in general. Benchmarking this would bring visibility to the performance overhead of frameworks in this area (an aim of the test would be to be directly comparable to a http test so the https overhead could be measured for each framework). |
Beta Was this translation helpful? Give feedback.
-
I think is Redis a great use case example. Communication is performed securely using a secure tunnel (such as using Spiped, Ghostunnel, etc'. The separation of concerns between security and services is important. It allows security patches to be easily implemented across the board without patching each framework / service separately. Also, the security implementation is often superior to a BYO solution.
I would love have benchmarks about TLS/SSL, but I'm not sure the benchmarks should include any frameworks. Once we use a framework's internal TLS/SSL in a benchmark, we're telling developers that this is a production grade setup. I'm not even sure I want to know how many applications in the wild use security implementations with known vulnerabilities... it a source for worry for me on SO whenever someone asks about implementing TLS/SSL in a backend application server. Than again, I'll probably implement TLS/SSL and let security be damned - the pressure to add TLS/SSL is too great and (re)explaining why security concerns should be separated from the framework is getting tiring. |
Beta Was this translation helpful? Give feedback.
-
Right an article on a site dedicated to edge services (F5) ... Also most of your "edge" services will use the exact same underlying lib. Eg ngnix using openssl. And if we take openssl it's often part of the os. So the big issue is ... How did they implement it? Did they do a lot of copying and allocations? Are there added bottle necks? As someone who works in a very secure environment we are required to have a high security edge layer (no one said I was ditching that and we actually have many layers there) but we are also required to have ssl/TLS "Inside" that security ring. To assume a security layer and you are done in banking, health, government, education is dangerous and in some cases illegal |
Beta Was this translation helpful? Give feedback.
-
And... if memory serves, openssl uses insecure defaults... but maybe that changed.
In your experience, do you use a framework's SSL/TLS implementation for production (to secure internal network communication), or do you tunnel the communication through secure channeling (i.e., I agree that if secure production environments rely on the framework's SSL/TLS layer, than it's important to both test and benchmark that option. |
Beta Was this translation helpful? Give feedback.
-
websockets +1 |
Beta Was this translation helpful? Give feedback.
-
Commenters above who've thoughts about TLS/SSL tests please see and weigh in on the stand-alone issue (#3290). |
Beta Was this translation helpful? Give feedback.
-
Many microservices are running in 'tiny' containers. It would be interesting to see how the stacks behave in such an environment. For example: allocated 1 CPU and 500MB RAM. |
Beta Was this translation helpful? Give feedback.
-
For some time I've been running some of the TechEmpower benchmarks and trying to make sense of the results. One thought that keeps coming back is that these benchmarks are stressing the frameworks at 100% cpu. That should not be the normal operating mode of a server. I'd be interested to see latency vs throughput numbers. wrk2 can be used for such benchmarks. |
Beta Was this translation helpful? Give feedback.
-
Added a future HTTP/2 test type based on the following comment: #2978 (comment) |
Beta Was this translation helpful? Give feedback.
-
HTTP2 +1 |
Beta Was this translation helpful? Give feedback.
-
It seams the only performance you measure is response time.
as it was done as described in this article : https://jaxenter.com/energy-efficient-programming-languages-137264.html Github Repo : https://github.com/greensoftwarelab/Energy-Languages This only issue about greensoftwarelab tests is they used the Debian Benchmarks Game which only apply to few use case far away of the web use. |
Beta Was this translation helpful? Give feedback.
-
I am also interested in the performance of HTTP/3. Though there are few libraries supporting it now and HTTP/2 is still on the waiting list, adding this test type could give the library contributors a motive and speed up its support, especially in the more popular web frameworks. There is a WRK variant supporting HTTP/3 now so the tool should be ready. |
Beta Was this translation helpful? Give feedback.
-
Vert.x supports connecting to the database with domain sockets, with both PostgreSQL and MySQL. I am wondering how much performance improvements this brings, especially in IO-intensive workloads. Therefore, as far as I'm concerned, adding a domain socket variant of the "single database query" test would be good. |
Beta Was this translation helpful? Give feedback.
-
Building on "13. Future: JSON responses with larger workloads (complex data structure serialization).", I'd like to propose a variant using Protobuf, as complex data structure serialization is where Protobuf shines. |
Beta Was this translation helpful? Give feedback.
-
We plan to add new test types over time. The following is a summary of tests we have presently and those we plan to specify and implement in the future.
For the time being, we're still interested in relatively simple tests that exercise various components of the frameworks. But we're also interested in hearing your thoughts on more tests for the long term. If you have any ideas, please post them here.
Beta Was this translation helpful? Give feedback.
All reactions