Tracking down a problem with php on FreeBSD

Ruslan Mahmatkhanov cvs-src at yandex.ru
Sat Feb 5 20:04:31 UTC 2011


05.02.2011 22:43, Ivan Voras пишет:
>>>> - `top -mio` shows very high (80000-90000 for VCSW) VCSW/IVCSW values
>>>> for php-fpm processes and LA is more than 120
>
> I think this is significant, especially with this:
>
>> When attaching to any hanging php-fpm proccess with truss, than i see a lot
>> of this calls:
>> sched_yield(0x80516c000,0x1,0x4d4828b6,0x8012ef45c,0xffffffff808bfd80,0x7fffffffa078)
>> = 0 (0x0)
>> sched_yield(0x80516c000,0x1,0x4d4828b6,0x8012ef45c,0xffffffff808bfd80,0x7fffffffa078)
>> = 0 (0x0)
>> sched_yield(0x80516c000,0x1,0x4d4828b6,0x8012ef45c,0xffffffff808bfd80,0x7fffffffa078)
>> = 0 (0x0)
>> sched_yield(0x80516c000,0x1,0x4d4828b6,0x8012ef45c,0xffffffff808bfd80,0x7fffffffa078)
>> = 0 (0x0)
>
> "Normal" processes of the type PHP is have no need to call
> sched_yield() arbitrarily, unless they are implementing something they
> shouldn't - like a synchronization primitive (semaphore/lock). If "a
> lot" means "of the same order of magnitude as your VCSW rate", this is
> the reason for it.
>
> I've analyzed my php-cgi binary and modules and they don't use sched_yield.
>
> And yes, grepping for it in the source finds it only in FPM:
>
> sapi/fpm/fpm/fpm_atomic.h:140:          sched_yield();
>
> It seems they are trying to implement a spinlock by hand, instead of
> using what the OS provides. (on the other hand, the implementation
> might be correct but they may be using it wrong).
>
> In any case, this points to bugs in FPM. if so, unfortunately I can't
> help you further.

Ok, thank you. I'll try to ask FPM people once again (i sent them the 
same message that is in hackers@ but with no response)

> If you really want to continue using FPM, I guess you should probably
> replace this hand-made lock implementation by sem(4) or see if
> "robust" pthreads mutexes can be committed and MFCed (maybe with David
> Xu).

Can you please tell me more what you mean by ""robust" pthreads mutexes" 
and if it can help somehow without modifying fpm code? Is there any 
patches that we can apply to our development server to play with?

>
> Here is the FPM file:
>
> http://svn.php.net/viewvc/php/php-src/branches/PHP_5_3/sapi/fpm/fpm/fpm_atomic.h?revision=305417&view=markup

-- 
Regards,
Ruslan


More information about the freebsd-hackers mailing list