Skip to content

Conversation

bukka
Copy link
Member

@bukka bukka commented Apr 9, 2022

The fix introduces early locking of scoreboard when it is updated which prevents the race condition causing an incorrect number of active processes being set.

This is unfortunately not easily repeatable in the test environment so this was tested manually using following setup: https://github.com/bukka/php-util/tree/92a02d92914821bd194867360d563ed5a462a80f/tests/fpm/status-wrong-active-procs . It allows to load test FPM using wrk which triggers around 15k requests in 30s and then polls the status pages to check if the active process are above the set maximum of 5. This was quickly achievable before the fix (often 6 active processes were visible) but it no longer happens after this fix. The load test also didn't show any visible perf regression.

@bukka bukka added the SAPI: fpm label Apr 9, 2022
@nikic
Copy link
Member

nikic commented Apr 10, 2022

Looks reasonable to me.

The fix introduces early locking of scoreboard when it is updated
which prevents the race condition causing an incorrect number of
active processes being set.
@bukka bukka force-pushed the fpm_scoreboard_update_rc branch from 120326c to 5db4105 Compare April 11, 2022 16:54
@bukka bukka changed the base branch from master to PHP-8.0 April 11, 2022 16:55
@bukka
Copy link
Member Author

bukka commented Apr 11, 2022

Just for the records, I have done extra testing of this with various number of max_children (5, 10, 64) with a bit more optimized configuration that can be seen here: https://github.com/bukka/php-util/blob/aa07dbe8075edfe8d03111bf81fc87654802403c/tests/fpm/status-wrong-active-procs/fpm.conf . I haven't noticed any perf regression that would be caused slightly longer lock that this PR introduces. Just to note this test executes really short requests so if there was any impact, it would be more visible here than for longer request. I'm quite happy with this and will be most likely merging it tomorrow.

@bukka
Copy link
Member Author

bukka commented Apr 12, 2022

Merged as 33bb201

@bukka bukka closed this Apr 12, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants