Open
Conversation
0f65d45 to
89ac317
Compare
Author
|
I've beaten the living shit out of this PR, and it fleshed out a pair of serious bugs in mod_http2 as a result. It now only cores under serious pressure on interpreter destruction, which is tunable to taste. I've always recommended postponing interpreter destruction to global httpd process destruction. This is much more robust than that, but it's the best I can do at this juncture. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This patch enables
1/ true ithread multiplexing for HTTP/2
2/ real resilience under h2load across thousands of concurrent theads/connections.
3/ full support for segfault-free live interpreter destruction under such loads.
4/ fixes the dumbness around pulling an ithread interpreter out of the pool just to run the request cleanup hook, which fires on every request: even on static requests that have nothing to do with mod_perl.
It also disables support for PerlInterpMaxRequests, which was always a dumb idea.
With this patch (and the corresponding mod_http2 patch), I can sustain 1200 req/s under a 10K concurrency load (100 connections x 100 HTTP/2 multiplexed channels) for over a minute without failure. Without this patch set, you can't come anywhere close on a 4 core machine with 32 GB RAM.