> On 27 Jan 2019, at 20:13, William A Rowe Jr <wr...@rowe-clan.net> wrote:
> 
> On Fri, Jan 25, 2019 at 11:35 AM John Dunlap <j...@lariat.co 
> <mailto:j...@lariat.co>> wrote:
> I'm in the process of optimizing our web application for performance and one 
> thing that I was really excited to try was mod_http2 because it allows the 
> browser to send multiple requests through the same TCP connection with 
> compressed headers. However, when I enabled it and restarted apache I was 
> greeted with this:
> 
> [Fri Jan 25 12:30:57.813355 2019] [http2:warn] [pid 10186] AH10034: The mpm 
> module (prefork.c) is not supported by mod_http2. The mpm determines how 
> things are processed in your server. HTTP/2 has more demands in this regard 
> and the currently selected mpm will just not do. This is an advisory warning. 
> Your server will continue to work, but the HTTP/2 protocol will be inactive.
> 
> To this question, the answer should be blatantly obvious; http2 doesn't 
> simply support multiple requests (connection: keepalive solved that) 
> but supports parallel requests. This clearly isn't compatible with any
> single-threaded/single-worker per connection strategy.
> 
> A hybrid mod_prefork could be coded to dispatch all worker requests
> across to distinct worker processes for a single connection, but I 
> don't anticipate anyone interested in doing such development.
>  
> The last time I tried to use either mpm_worker or mpm_event my application 
> was plagued by seemingly random segfaults. Are there any plans to support 
> other MPM's? If not, the benefits of HTTP2 appear to be permanently out of 
> reach for our mod_perl applications and that, honestly, might force us into 
> seriously reevaluating our technology stack. :(
> 
> Your compatibility with the worker MPM is likely much stronger than
> with the event MPM; however... all request workers can behave in a
> "free threaded" manner under mod_http2, eliminating the relative
> simplicity of the worker MPM. Working out each and any of these
> specific segfaults occurs is the only way to improve the situation.
> 
> For the general mod_perl activity to increase, the Apache Perl Project
> needs active volunteers and contributions. Consider this entire thread
> an open invitation to participate.

Given that Perl is single-threaded by design and history and has no reliable 
support for threading, I think that mod_perl and direct http/2 support in the 
same instance are probably fundamentally incompatible. I.e. if you have 10 perl 
threads running (each in a single process), then it doesn’t matter if you can 
multiplex 20 http/2 connections, they will all just block.  If you’re very 
attached to mod_perl, you should already be using a 2-tier strategy anyway, 
with N fat mod_perl Apache instances handling only HTTP/1.1 requests and a 
second front-end proxy layer of whatever front-end proxy makes sense handling 
HTTP/2 requests for both static and dynamic content requests. This was standard 
advice 20 years ago as far as I recall and is even more prudent now.

- Mark

Reply via email to