[Vm-dev] Measuring allocations
jan.vrany at fit.cvut.cz
Thu Jun 1 15:35:07 UTC 2017
On Thu, 2017-06-01 at 07:52 -0700, Eliot Miranda wrote:
> Hi Jan,
> > On Jun 1, 2017, at 1:17 AM, Jan Vrany <jan.vrany at fit.cvut.cz>
> > wrote:
> > Hi folks,
> > Having a Spur VM, I wonder how to measure heap allocations made
> > by a process executing a particular block, from within the image.
> > For example, let's have following block:
> > [
> > | a |
> > 100 timesRepeat: [
> > a := Array new: 100
> > ]
> > ].
> > When run, this block allocates - if I'm correct - some 100 *
> > (<object
> > header size> + 4*100) bytes.
> Plus the block arg to timesRepeat:. And the size of an Array in 32-
> bits is
Sure, sure. The exact number is not important for me right now.
> > Note that:
> > * Ideally, I'd like to exclude allocations made by other threads
> Then run at high priority.
Good point, thanks. I always forget about that.
> > but having allocations made by all threads would be OK too.
> > * Block can span multiple scavenges even oldspace collects.
> > * As shown in the example above, I need to take garbage into
> > an account.
> > How to best measure this?
> What exactly do you want to measure?
I want to know how much given code allocates. For example that
given piece of code in total allocated 2.5GB. Say.
> There is no allocation count, as that would slow down allocation.
> Time taken to allocate would be derived by sending timeTiRun to the
> above and subtracting the time for a null loop to run, and the time
> taken in GC.
> The time taken in GC is maintained by the vm. See vmParameterAt: and
> surrounding. If you open the About Squeak dialog in a Squeak image
> this is nicely displayed in the VM Stats tab (IIRC).
It is indeed. But in this case I'm not interested in time spent in GC
More information about the Vm-dev