[Info-vax] Apache + mod_php performance
Lawrence D'Oliveiro
ldo at nz.invalid
Sun Sep 29 19:43:01 EDT 2024
On Sun, 29 Sep 2024 19:16:48 -0400, Arne Vajhøj wrote:
> On 9/29/2024 6:57 PM, Lawrence D'Oliveiro wrote:
>>
>> On Sun, 29 Sep 2024 10:46:12 -0400, Arne Vajhøj wrote:
>>>
>>> That is not how Apache prefork MPM works.
>>
>> If that’s not how it works, then how can you serve a client from more
>> than one member of the worker pool?
>
> A new request on a new connection goes to another worker. No problem.
But with keepalive, the request will come in on the existing connection.
So you have to dedicate a worker process to each connection? That’s
inefficient.
>>> And I don't understand the "put all the client context into shared
>>> memory" either. Are you saying that if socket descriptors are put in
>>> shared memory then any process that map that memory can use those
>>> sockets????
>>
>> No, but the shared-memory context can contain an index into a table of
>> socket descriptors in private per-process memory. If the process trying
>> to server a client context does not actually have a socket descriptor
>> in the slot for that context, it can ask for one.
>
> I still can't follow the idea.
>
> Client X has a connection to server worker A. That means that A has
> index 77 in shared memory that points to the socket descriptor for the
> connection from X.
>
> Worker B wants to serve X as well and it get index 77 from shared
> memory. And then it does what?
Looks up its entry in its process-private copy of the array that contains
the socket descriptors, to see if it has its own valid fd for that socket.
You would also want to associate a generation number with that socket
entry, so you can detect that the client connection associated with the
previous socket has been closed, so that client entry is in fact for a
different client connection.
More information about the Info-vax
mailing list