Thanks for providing the fix.  

This is most likely the cause, as my own test program is essentially the 
same as yours, except that I collect the samples separately rather than 
checking for the memory decrease immediately.

Alex.

On Wednesday, December 16, 2020 at 10:11:25 AM UTC+8 Matthew Flatt wrote:

> At Tue, 15 Dec 2020 17:00:42 -0800 (PST), Alex Harsanyi wrote:
> > I am trying to use `(current-process-memory 'cumulative)` to determine 
> the 
> > total memory used by an application, including the memory that was 
> > reclaimed by the garbage collector. I would expect the results from the 
> > call to be constantly increasing, and this is indeed the case at a 
> "global" 
> > scale: [...]
> > 
> > However, occasionally, there seems to be a drop in the reported memory 
> use, 
>
> I'm able to replicate that with
>
> #lang racket
>
> (define (work n)
> (length (let loop ([n n])
> (if (zero? n)
> '()
> (cons (make-vector n) (loop (sub1 n)))))))
>
> (let loop ([u (current-memory-use 'cumulative)])
> (work (random 1000))
> (let ([u2 (current-memory-use 'cumulative)])
> (if (u2 . < . u)
> (error "oops")
> (loop u2))))
>
> which reports an error fairly quickly for me.
>
>
> The implementation of
>
> (current-process-memory 'cumulative)
>
> is
>
> (+ (bytes-deallocated) (bytes-allocated))
>
> It's possible for a GC to happen at the start of the call to
> `bytes-allocated`, which I think would produced the blip you see (i.e.,
> there could be bytes not yet attributed to `bytes-deallocated`, but
> they get shifted there before `bytes-allocated` runs).
>
> The solution is make that arithmetic atomic with respect to a GC by
> disabling signals around the arithmetic. I've pushed that change, and
> my test program doesn't error anymore, at least.
>
>
> Matthew
>

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/1a12cc80-caef-440a-877d-556c71dfe1e1n%40googlegroups.com.

Reply via email to