Re: [PHP-DEV] Re: Zend mm

2011-02-24 Thread Julien Pauli
You should take care not to mistake the GC and the MM, they are two
different things and surprisingly, they dont interact with each other.
Zend GC is a layer above Zend MM, and Zend GC can be totally disabled,
Zend MM cant at all.

Zend MM is a BIG layer over malloc()/free() which goals are mainly to
abstract the OS MM (mainly Unix/Win32) and to avoid memory
fragmentation and too many system calls which could lead to
performance problems. Lots of other programms use such a tool, like
Apache httpd for example.

Zend MM can also help you (in debug mode only) by showing its state
after a script has run, alowing you to easily track memory leaks while
using it (e**() functions) without the need to use tools such as
valgrind.
ZendMM can track all the PHP memory usage, and provide feature such as
memory_limit.

Finally, ZendMM is a super malloc(), it nearly can be foreseen as a
custom implementation of libc malloc() using a heap over the heap and
trying to optimize it as possible.

Simply looking at the structs in zend_alloc.h let you guess it's goal,
but you need to know how memory management works in computer programs
for that.

Julien.P



On Wed, Feb 2, 2011 at 7:52 AM, Adi Mutu adi_mut...@yahoo.com wrote:

 Thanks a lot, for all the help about zend mm guys,  i'm very grateful.
 Thanks,A.

 --- On Sun, 1/30/11, Ben Schmidt mail_ben_schm...@yahoo.com.au wrote:

 From: Ben Schmidt mail_ben_schm...@yahoo.com.au
 Subject: Re: [PHP-DEV] Re: Zend mm
 To: Adi Mutu adi_mut...@yahoo.com
 Cc: internals@lists.php.net, t...@daylessday.org
 Date: Sunday, January 30, 2011, 4:45 PM

 On 30/01/11 4:11 AM, Adi Mutu wrote:
 I have looked at the sources, but i'm only at the begining of
 analyzing the php sources.i've understand how to write extensions
 for example, but this memory manager seems more complicated to me.

 Yes, it is. Memory management is a low-level and subtle area. It takes a
 lot of careful thought to design and even to understand the algorithms
 involved. It is hard to debug, because an error caused in one place may
 not show itself until completely different code is executing. It is also
 an area which doesn't change much. Almost all the other code in the PHP
 interpreter, and therefore PHP scripts themselves, rely on the memory
 manager code doing its job unintrusively and correctly, so once it is
 working well, it tends to be left that way, except for fixing small bugs
 as they are found, or a big and careful development effort to address
 some limitation (e.g. improving the garbage collection to collect
 cycles, which was something done fairly recently).

 The bottom line is that this is not an area that is all that easy for
 beginners to get their teeth into. But it's also an area that isn't
 necessary for beginners to understand in much detail, either. Unless you
 have a particular project in mind that involves the memory manager, you
 probably don't need to touch it.

 I don't want to discourage you, but just point out that perhaps this is
 something you might look at later, or even not at all, as you may find
 there are many worthwhile projects that take up all your time before you
 ever get to understanding the memory manager fully.

 It would be useful if for example, could explain me the structures
 that are used in the Zend memory manager, how they're chained
 etc.and if you can tell me in words what do zend_mm_aloc_int() and
 zend_mm_free_int() basically do...Thank you for your time,Adrian

 I suspect these structures and functions are fairly easy to understand
 by someone familiar with the area of memory management, which is why you
 have been advised to consult the source code. So perhaps what you need
 to do is not learn about PHP's memory manager, but just learn about
 memory management in general. Then it should be fairly easy to
 understand what PHP's memory manager is doing from its code.

 I'm afraid I doubt the people here have the time to teach you this over
 email. :-) So here are some references which might be of use to you.

 - I believe the 'standard textbook' for learning about memory management
   is this one here:
   http://www.cs.kent.ac.uk/people/staff/rej/gcbook/gcbook.html

 - This page also mentions that a new edition is due out soon:
   http://c2.com/cgi/wiki?GarbageCollectionBook

 - You can also check out this site: http://www.memorymanagement.org/

 - Relating this to, PHP: PHP is a garbage collected language which I
   believe uses reference counting and a clever collector to detect and
   free cycles. I haven't looked in detail into the implementation, but I
   know some documentation is available on the subject here:
   http://www.php.net/manual/en/features.gc.php

 Hope this helps!

 Ben.








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



Re: [PHP-DEV] Re: Zend mm

2011-02-01 Thread Adi Mutu

Thanks a lot, for all the help about zend mm guys,  i'm very grateful.
Thanks,A.

--- On Sun, 1/30/11, Ben Schmidt mail_ben_schm...@yahoo.com.au wrote:

From: Ben Schmidt mail_ben_schm...@yahoo.com.au
Subject: Re: [PHP-DEV] Re: Zend mm
To: Adi Mutu adi_mut...@yahoo.com
Cc: internals@lists.php.net, t...@daylessday.org
Date: Sunday, January 30, 2011, 4:45 PM

On 30/01/11 4:11 AM, Adi Mutu wrote:
 I have looked at the sources, but i'm only at the begining of
 analyzing the php sources.i've understand how to write extensions
 for example, but this memory manager seems more complicated to me.

Yes, it is. Memory management is a low-level and subtle area. It takes a
lot of careful thought to design and even to understand the algorithms
involved. It is hard to debug, because an error caused in one place may
not show itself until completely different code is executing. It is also
an area which doesn't change much. Almost all the other code in the PHP
interpreter, and therefore PHP scripts themselves, rely on the memory
manager code doing its job unintrusively and correctly, so once it is
working well, it tends to be left that way, except for fixing small bugs
as they are found, or a big and careful development effort to address
some limitation (e.g. improving the garbage collection to collect
cycles, which was something done fairly recently).

The bottom line is that this is not an area that is all that easy for
beginners to get their teeth into. But it's also an area that isn't
necessary for beginners to understand in much detail, either. Unless you
have a particular project in mind that involves the memory manager, you
probably don't need to touch it.

I don't want to discourage you, but just point out that perhaps this is
something you might look at later, or even not at all, as you may find
there are many worthwhile projects that take up all your time before you
ever get to understanding the memory manager fully.

 It would be useful if for example, could explain me the structures
 that are used in the Zend memory manager, how they're chained
 etc.and if you can tell me in words what do zend_mm_aloc_int() and
 zend_mm_free_int() basically do...Thank you for your time,Adrian

I suspect these structures and functions are fairly easy to understand
by someone familiar with the area of memory management, which is why you
have been advised to consult the source code. So perhaps what you need
to do is not learn about PHP's memory manager, but just learn about
memory management in general. Then it should be fairly easy to
understand what PHP's memory manager is doing from its code.

I'm afraid I doubt the people here have the time to teach you this over
email. :-) So here are some references which might be of use to you.

- I believe the 'standard textbook' for learning about memory management
  is this one here:
  http://www.cs.kent.ac.uk/people/staff/rej/gcbook/gcbook.html

- This page also mentions that a new edition is due out soon:
  http://c2.com/cgi/wiki?GarbageCollectionBook

- You can also check out this site: http://www.memorymanagement.org/

- Relating this to, PHP: PHP is a garbage collected language which I
  believe uses reference counting and a clever collector to detect and
  free cycles. I haven't looked in detail into the implementation, but I
  know some documentation is available on the subject here:
  http://www.php.net/manual/en/features.gc.php

Hope this helps!

Ben.






  

Re: [PHP-DEV] Re: Zend mm

2011-01-31 Thread Sebastian Bergmann
Am 31.01.2011 01:45, schrieb Ben Schmidt:
 - Relating this to, PHP: PHP is a garbage collected language which I
   believe uses reference counting and a clever collector to detect and
   free cycles. I haven't looked in detail into the implementation, but I
   know some documentation is available on the subject here:
   http://www.php.net/manual/en/features.gc.php

 http://www.research.ibm.com/people/d/dfb/papers/Bacon01Concurrent.pdf is
 the algorithm used by PHP's garbage collector.

-- 
Sebastian BergmannCo-Founder and Principal Consultant
http://sebastian-bergmann.de/   http://thePHP.cc/

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



Re: [PHP-DEV] Re: Zend mm

2011-01-30 Thread Ben Schmidt

On 30/01/11 4:11 AM, Adi Mutu wrote:
 I have looked at the sources, but i'm only at the begining of
 analyzing the php sources.i've understand how to write extensions
 for example, but this memory manager seems more complicated to me.

Yes, it is. Memory management is a low-level and subtle area. It takes a
lot of careful thought to design and even to understand the algorithms
involved. It is hard to debug, because an error caused in one place may
not show itself until completely different code is executing. It is also
an area which doesn't change much. Almost all the other code in the PHP
interpreter, and therefore PHP scripts themselves, rely on the memory
manager code doing its job unintrusively and correctly, so once it is
working well, it tends to be left that way, except for fixing small bugs
as they are found, or a big and careful development effort to address
some limitation (e.g. improving the garbage collection to collect
cycles, which was something done fairly recently).

The bottom line is that this is not an area that is all that easy for
beginners to get their teeth into. But it's also an area that isn't
necessary for beginners to understand in much detail, either. Unless you
have a particular project in mind that involves the memory manager, you
probably don't need to touch it.

I don't want to discourage you, but just point out that perhaps this is
something you might look at later, or even not at all, as you may find
there are many worthwhile projects that take up all your time before you
ever get to understanding the memory manager fully.

 It would be useful if for example, could explain me the structures
 that are used in the Zend memory manager, how they're chained
 etc.and if you can tell me in words what do zend_mm_aloc_int() and
 zend_mm_free_int() basically do...Thank you for your time,Adrian

I suspect these structures and functions are fairly easy to understand
by someone familiar with the area of memory management, which is why you
have been advised to consult the source code. So perhaps what you need
to do is not learn about PHP's memory manager, but just learn about
memory management in general. Then it should be fairly easy to
understand what PHP's memory manager is doing from its code.

I'm afraid I doubt the people here have the time to teach you this over
email. :-) So here are some references which might be of use to you.

- I believe the 'standard textbook' for learning about memory management
  is this one here:
  http://www.cs.kent.ac.uk/people/staff/rej/gcbook/gcbook.html

- This page also mentions that a new edition is due out soon:
  http://c2.com/cgi/wiki?GarbageCollectionBook

- You can also check out this site: http://www.memorymanagement.org/

- Relating this to, PHP: PHP is a garbage collected language which I
  believe uses reference counting and a clever collector to detect and
  free cycles. I haven't looked in detail into the implementation, but I
  know some documentation is available on the subject here:
  http://www.php.net/manual/en/features.gc.php

Hope this helps!

Ben.




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



[PHP-DEV] Re: Zend mm

2011-01-29 Thread Adi Mutu

I have looked at the sources, but i'm only at the begining of analyzing the php 
sources.i've understand how to write extensions for example, but this 
memory manager seems more complicated to me.
It would be useful if for example, could explain me the structures that are 
used in the Zend memory manager, how they're chained etc.and if you can 
tell me in words what do zend_mm_aloc_int() and zend_mm_free_int() basically 
do...Thank you for your time,Adrian