NAME
Internals::GraphArenas - chart a map of where perl locates data
SYNOPSIS
In your-script.pl
#!perl
use Internals::GraphArenas;
Internals::GraphArenas::graph_arenas(); # Prints many C pointers to STDOUT
Pipe it to chart-memory:
$ ./your-script.pl | chart-memory
Open the output:
$ open memory-0.png
Charts your perl's arenas memory as described at
<http://use.perl.org/~jjore/journal/39604> and reproduced below
BLOG POST
At work, I've got a problem on the back burner which is kind of
interesting. We've got some mod_perl processes with big data sets. The
processes fork and then serve requests. I've heard from Operations that
they're not using Linux's Copy-on-Write feature to the extent desired so
I'm trying to understand just what's being shared and not shared.
To that end, I wanted to map out where perl put its data. I made a
picture (<http://diotalevi.isa-geek.net/~josh/090909/memory-0.png>, a
strip, showing the visible linear memory layout from 0x3042e0 at the top
to 0x8b2990 at the bottom. The left edge shows where arenas are. The
really clustered lines to the middle show the pointers from the arenas
to the SV heads. The really splayed lines from the middle to the right
show the "SvANY()" pointer from the SV heads to the SV bodies.
I kind of now suspect that maybe the CoW unshared pages containing SV
heads because of reference counting are maybe compact or sparse. They
sure seem to be highly clustered so maybe it's a-ok to go get a bunch of
values between two forked processes and not worry about reference
counts. Sure, the SV head pages are going to be unshared but maybe those
pages are just full of other SV heads and it's not a big deal. If SV
heads weren't clustered then reference count changes could have affected
lots of other pages.
Anyway, there's a nice little set of pics at
"/diotalevi.isa-geek.net/~josh/090909/. I started truncating precision
by powers of two to get things to visually chunk up more. So when you
look at <http://diotalevi.isa-geek.net/~josh/090909/memory-0.png>,
there's no chunking but when you look at
<http://diotalevi.isa-geek.net/~josh/090909/memory-4.png>, the bottom 4
bits were zeroed out." in http:
INSTALLATION
To install this module type the following:
perl Makefile.PL
make
make test
make install
DEPENDENCIES
This module requires these other modules and libraries:
Imager
COPYRIGHT & LICENSE
Copyright 2009 Joshua ben Jore, all rights reserved.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
SOURCE AVAILABILITY
This source is in Github:
<git://github.com/jbenjore/internals-dumparenas.git>
AUTHOR
Written by Josh ben Jore with inspiration from Spoon's
<http://netjam.org/spoon/viz/>
POD ERRORS
Hey! The above document had some coding errors, which are explained
below:
Around line 28:
Unknown directive: =head
Around line 60:
Unterminated L<...> sequence