Edit report at https://bugs.php.net/bug.php?id=74178&edit=1
ID: 74178
Comment by: spam2 at rhsoft dot net
Reported by: alex at alex-at dot ru
Summary: Suggestion/Idea: Stateful / Application Script
Status: Open
Type: Feature/Change Request
Package: FPM related
PHP Version: Next Major Version
Block user comment: N
Private report: N
New Comment:
problem is that you don't gasp how FPM works
isloated processes to overcome the problems of a threading server (memleaks, non-thread-safe
libraries and many more) - whatever you cache and try to be stateful needs to consider how it can be
shared between the processes which are there for one reason: isloation
frankly that don't work even for things existing over a decade like https://bugs.php.net/bug.php?id=73888 where even
the real_path cache is completly useless in real workloads
__________________________
for that below you don't oly use the wrong programming language you are in fact most likely
even use the wrong operating system, at least a default linux kernel is *not* RT capable at all
A very good example of it is large telephony system state. We need to push each extension state to
each state database client approximately each 0.5 seconds. States and channels information gets
pushed to application handling client request via ZeroMQ in real time (and it is combined with
specific client data), but alas we have to reload full state each time each client request is
started
Previous Comments:
------------------------------------------------------------------------
[2017-02-27 20:10:34] alex at alex-at dot ru
By realtime, I mean applications dealing with lots of requests for partially changing state, where
reloading all the state information all the time can be costly, uses lots of CPU time and eventually
makes response times go out of required scale.
A very good example of it is large telephony system state. We need to push each extension state to
each state database client approximately each 0.5 seconds. States and channels information gets
pushed to application handling client request via ZeroMQ in real time (and it is combined with
specific client data), but alas we have to reload full state each time each client request is
started.
------------------------------------------------------------------------
[2017-02-27 20:02:02] alex at alex-at dot ru
>> seriously - it don't work that way in no environment
I don't know where you got this 'double cores = double requests' thing. I'm
talking about quite the contrary as well. For math, 1000/1.1 = 909.something, do you want it or not.
Your i7 was able to run 1.3 request in parallel at average, hence the ~1200.
---
Next thing, I'd prefer to stop the empty bickering here, it's completely pointless.
The whole point of this ticket is that _realtime_ applications like gaming, monitoring, telemetry or
realtime process management can all be encompassed by PHP as well with a relatively small change not
introducing any heavy complexity internally.
I'm quite sure PHP devs already considered this one multiple times, so this is just in case it
simply got lost/forgotten in the pile of things to evolve :)
------------------------------------------------------------------------
[2017-02-27 19:52:52] spam2 at rhsoft dot net
> 1000/1.1 is obviously about 909 requests per second per core
seriously - it don't work that way in no environment as well as "oh, i double the cores
and get twice requests per second" don#t work in real life
also no idea why the feature request is "FPM related" and if what ever you consider would
be FPM specific and not work the same way with mod_php you clearly see it has no place in the
ecosystem
get xdebug and look where you really lose performance
at the same time realize that benchmarking is *not* that easy as you may think - when as example
mod_defalte is part of the game php requests are even faster handeled than static files with the
same content
so before you think you need new features please learn how to benachmark na drealize *waht* youa re
benchmarking in reality - often this are two different things
------------------------------------------------------------------------
[2017-02-27 19:45:13] alex at alex-at dot ru
1000/1.1 is obviously about 909 requests per second per core. With more cores it should be more of
course, but not linearly. And again: it heavily depends on application itself.
In our case, final content is quite small, and will never saturate even 100Mbps. It's using
~50% CPU time in FPM process, and most of that time is taken by script initialization. We need to
reconnect to memcached, to MySQL, open some files for second level cache and pre-connect to ZeroMQ
for case of cache miss (connection and socket start is asynchronous, but takes time). In a case of
both levels cache miss we sometimes need to wait a bit of time for ZeroMQ data to arrive from
publisher. This ZeroMQ magic could be autonomously happening in background if script was running in
'appserver' mode, making latency of cache misses negligible.
------------------------------------------------------------------------
[2017-02-27 19:30:50] spam2 at rhsoft dot net
> Man. 1.1 to 3.5 ms response time is good, but not
> any news. It's only 300 to 900 requests per second
check your math!
on a i7 from 2011 it's 1200 request per seconds, on our current hardware it's 4500
requests per second with small contents and with larger contents it saturates easily the gigabit
network and PHP is for sure not the bottenleck
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=74178
--
Edit this bug report at https://bugs.php.net/bug.php?id=74178&edit=1