Geoip cache options patch

Eugaia ngx.eugaia at gmail.com
Tue Dec 21 03:08:07 MSK 2010


Hi,

On 21/12/2010 01:24, Akins, Brian wrote:
> On 12/20/10 5:56 PM, "Eugaia"<ngx.eugaia at gmail.com>  wrote:
>
>> Each worker process will see virtual data usage of 50MB for the data,
>> but unless I'm mistaken, the overall system usage should still only be
>> 50MB because the data is shared in the same physical memory by the OS
>> until such a time that it's changed (which it won't unless you re-read
>> the config, and in which case it would change for all worker processes).
> I think with the memory cache it reads the entire geoip datafile into memory
> for each worker process
The reading of the data is done by the master process at conf-read time, 
and this happens before the main process forks to the worker processes.
>   - and the memory shows as resident for each process.
> At least when I switched to using mmap cache, the memory moved from resident
> to shared.
According to :

http://en.wikipedia.org/wiki/Fork_(operating_system)#Fork_and_page_sharing

(and I'm assuming whatever OS you're using does this), the pages for the 
child process are shared with the parent process, until they are 
changed.  Since the data is being read into pool-allocated pages that 
won't (under normal circumstances) change once you fork to the child 
process, these pages will remain unchanged and will (probably) still be 
shared between all process, master and worker.

I'm guessing that although the underlying pages are probably shared, the 
data utilized by each process will probably show as being 'resident', 
and thus this can't be used as a good indicator to the actual total 
physical memory usage.

Nevertheless, adding a mmaping option is a nice addition.

Marcus.



More information about the nginx-devel mailing list