Greetings,
        I have some questions about optimizing memory usage. I could probably 
get 
some of these answers myself with more study of the mod_perl / perl source, 
but I was hoping someone might just know the answer and be able to tell me :)
        First off, am I correct in the assumption that it has been wise even in 
mod_perl 1 (under Apache's child-per-request model) to preload all of your 
modules for memory savings?
        Where exactly do these savings come from if the processes are forked? 
Is 
there some sort of mmap / shmem way that the Apache children share their Perl 
trees? Or perhaps the processes each have all that memory *allocated* 
individually, but because of COW pages from the OS, you only need one copy 
resident (hence less paging)?
        In answering the above questions - are these reasons / behaviors 
consistent 
with mod_perl 2 under prefork?
        Also - as of the current Perl 5.8 series, we're still not sharing / 
doing COW 
with variable memory (SV/HV/AV) right?
        Now as for an optimization question... if the ops in the code tree are 
shared, let's suppose I declare this subroutine via a scalar passed to eval 
prior to the clone process:

sub _get_Big_Data_Structure {
        return {
                key => {
                        nested => ['values'],
                        lots => {'of' => 'data'},
                },
        };
}

        The thing is that I have a big nested config structure, along with lots 
of 
other big nested structures. A given request doesn't need *all* of the data, 
so I've been brainstorming and thought about writing a "reduce" method that I 
would dispatch around my module tree from one of the prior-to-clone handlers 
that would take these structures, use Data::Dumper to get their "source code" 
form, and eval them into subroutines in some "stash" package. 
        I don't particularly care if this adds seconds to the Apache startup 
time if 
it can reduce my runtime memory usage reasonably. I suppose the only other 
thing I have to be concerned about if the above idea will work is how long 
the "_get_Big_Data_Structure" call would take.
        Thoughts?

Thanks,
Chase Venters

Reply via email to