Hi,

On Wednesday 13 August 2008 10:09:43 Dmitry Stogov wrote:
> Hi Lucas,
>
> I took a look into patch and I still don't like it.
> I may miss some things and make mistakes so correct me if I'm wrong.
>
> 1) It makes some slowdown for all SAPIs except Apache1, because it adds
> additional block/unblock code (mainly in zend_alloc.c)

The added block/unblocks are really needed, for instance in _zend_mm_alloc_int 
when a small free block is found, it has to maintain the cache, etc and an 
interruption here can cause some unwanted behaviors.

>
> 3) The patch cannot solve all issues caused by SIGALARM handling,
> because PHP has thousand places which may stay data in inconsistent
> state (or data allocated in permanent heap). Wrapping all of them with
> block/unblock is not a decision.
>
> small issues:
>
> 4) block/unblock code in estrndup() and some other functions is useless.
> It should be removed.

I added that in estrndup() during testing as an interrupt in this function 
caused "String is non-zero terminated" warnings.

>
> 5) TSRM_FETCH() in zend_hash and zend_alloc functions will slowdown
> Windows ZTS build even if it doesn't use signals. It may be changed to
> some other macro that will do TSRM_FETCH only if signals are enabled.

This can be done.

For zend_alloc, as _emalloc already does TSRMLS_FETCH(), it is possible to 
pass the tsrm_ls directly as argument to _zend_mm_alloc_int(). _efree, 
_erealloc, etc do TSRMLS_FETCH() too.

There is a ~5% slowdown on bench.php with ZTS builds with the patch applied. 
And ~3% when passing tsrm_ls to _zend_mm_alloc_int/free/realloc(). Passing the 
tsrm_ls to hash functions may avoid this slowdown but this requires huge 
changes.

>
> May be if we really like safe SIGALARM handling we may use Windows
> decision for UNIX too. I mean setup of EG(timed_out) flag in signal
> handler and checking it in execute loop. As an optimization we can check
> it not on each instruction but only on enter in function and JMP*
> opcodes (loops). Anyway, this solution may cause comparable slowdown.

It may be a good solution too. Just removing #ifdefs around timed_out (so, 
without any optimization) gives a 1 to 2% slowdown.

Regards,

Arnaud


-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to