Bug #81275 [Asn]: status page, contain bugus value in request duration sometimes
| From: | bukka@php.net | Date: | Tue, 08 Feb 2022 22:42:17 +0000 |
| Subject: | Bug #81275 [Asn]: status page, contain bugus value in request duration sometimes | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-239561@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=81275&edit=1
ID: 81275
Updated by: bukka@php.net
Reported by: tsmtgdi at gmail dot com
Summary: status page, contain bugus value in request duration
sometimes
Status: Assigned
Type: Bug
Package: FPM related
Operating System: Suse
PHP Version: 8.1Git-2021-07-19 (Git)
Assigned To: bukka
Block user comment: N
Private report: N
New Comment:
Thanks for the reproducing script which worked perfectly for me in this setup https://github.com/bukka/php-util/tree/7ac45d4e51465f60ad69589f9e06a8ef5b5cec16/tests/fpm/scoreboard-race
. I was able to recreate the issue with PHP-8.0 and after applying https://github.com/php/php-src/pull/8049 , the
issue is no longer present. I will merge it tomorrow.
Previous Comments:
------------------------------------------------------------------------
[2021-09-05 19:23:26] bukka@php.net
Ah so it's not maybe such a theoretical issue that I thought initially. That PR looks like a
potential fix indeed. I will need to test it to confirm though. Will also think about creating some
test for this (most likely the slow one if possible).
------------------------------------------------------------------------
[2021-08-03 13:10:14] nikic@php.net
This is the PR I had in mind: https://github.com/php/php-src/pull/3188
------------------------------------------------------------------------
[2021-08-03 13:05:24] ramsey@php.net
bukka, can you take a look? nikic thinks there might already be a PR for this, but I can't find
it.
------------------------------------------------------------------------
[2021-07-20 01:20:27] tsmtgdi at gmail dot com
I tried doing
int scoreboard_size = sizeof(struct fpm_scoreboard_s) + (scoreboard_p->nprocs) *
sizeof(struct fpm_scoreboard_proc_s*);
int scoreboard_nprocs_size = sizeof(struct fpm_scoreboard_proc_s) * scoreboard_p->nprocs;
scoreboardCopy = (struct fpm_scoreboard_s*)emalloc(scoreboard_size +
scoreboard_nprocs_size);
memcpy(scoreboardCopy, scoreboard_p, scoreboard_size + scoreboard_nprocs_size);
To have a full copy, both of the fpm_scoreboard_s and the array of fpm_scoreboard_proc_s, but the
problem is still present.
------------------------------------------------------------------------
[2021-07-19 20:06:49] tsmtgdi at gmail dot com
After reviewing the code, I think the logic is correct, the problem is in some missing mutex or sync
problem, for example I discovered having a single fpm process will never trigger the error.
Also I had case of
[pid] => 0
[state] => (null)
[start time] => 0
[start since] => 1626722020
[requests] => 0
[request duration] => 51276947114
Which is... in theory impossible
What I discovered is that, the proc = *scoreboard_p->procs[i];
Is not doing a correct copy, I have stack trace in which the proc is different from the
scoreboard_p->procs[0]
https://pastebin.com/Hxgwq1c1
I can say that "maybe" the operation is done outside of the mutex (in fact around line 196
you have a
/* copy the scoreboard not to bother other processes */
scoreboard = *scoreboard_p;
fpm_unlock(scoreboard_p->lock);)
I will later try to use this copy.
------------------------------------------------------------------------
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=81275
--
Edit this bug report at https://bugs.php.net/bug.php?id=81275&edit=1