Fixed the ``bytes allocated off by n problem''.
This commit is contained in:
parent
01d0669607
commit
fbebc96bfa
Binary file not shown.
|
@ -26,17 +26,18 @@
|
||||||
gc-user-secs gc-user-usecs
|
gc-user-secs gc-user-usecs
|
||||||
gc-sys-secs gc-sys-usecs
|
gc-sys-secs gc-sys-usecs
|
||||||
gc-real-secs gc-real-usecs
|
gc-real-secs gc-real-usecs
|
||||||
|
bytes-minor bytes-major
|
||||||
))
|
))
|
||||||
|
|
||||||
(define (mk-stats)
|
(define (mk-stats)
|
||||||
(make-stats #f #f #f #f #f #f #f #f #f #f #f #f #f))
|
(make-stats #f #f #f #f #f #f #f #f #f #f #f #f #f #f #f))
|
||||||
|
|
||||||
(define verbose-timer (make-parameter #f))
|
(define verbose-timer (make-parameter #f))
|
||||||
|
|
||||||
(define (set-stats! t)
|
(define (set-stats! t)
|
||||||
(foreign-call "ikrt_stats_now" t))
|
(foreign-call "ikrt_stats_now" t))
|
||||||
|
|
||||||
(define (print-stats message bytes t1 t0)
|
(define (print-stats message t1 t0)
|
||||||
(define (print-time msg msecs gc-msecs)
|
(define (print-time msg msecs gc-msecs)
|
||||||
(fprintf
|
(fprintf
|
||||||
(console-error-port)
|
(console-error-port)
|
||||||
|
@ -78,7 +79,12 @@
|
||||||
(stats-sys-usecs t1) (stats-sys-usecs t0))
|
(stats-sys-usecs t1) (stats-sys-usecs t0))
|
||||||
(msecs (stats-gc-sys-secs t1) (stats-gc-sys-secs t0)
|
(msecs (stats-gc-sys-secs t1) (stats-gc-sys-secs t0)
|
||||||
(stats-gc-sys-usecs t1) (stats-gc-sys-usecs t0))))
|
(stats-gc-sys-usecs t1) (stats-gc-sys-usecs t0))))
|
||||||
(fprintf (console-error-port) " ~a bytes allocated\n" bytes))
|
(fprintf (console-error-port) " ~a bytes allocated\n"
|
||||||
|
(diff-bytes
|
||||||
|
(stats-bytes-minor t0)
|
||||||
|
(stats-bytes-major t0)
|
||||||
|
(stats-bytes-minor t1)
|
||||||
|
(stats-bytes-major t1))))
|
||||||
|
|
||||||
(define time-it
|
(define time-it
|
||||||
(case-lambda
|
(case-lambda
|
||||||
|
@ -88,31 +94,20 @@
|
||||||
(unless (procedure? proc)
|
(unless (procedure? proc)
|
||||||
(die 'time-it "not a procedure" proc))
|
(die 'time-it "not a procedure" proc))
|
||||||
(let* ([t0 (mk-stats)]
|
(let* ([t0 (mk-stats)]
|
||||||
[t1 (mk-stats)]
|
[t1 (mk-stats)])
|
||||||
[bytes-min (bytes-minor)]
|
(define k
|
||||||
[bytes-maj (bytes-major)])
|
|
||||||
(set-stats! t0)
|
|
||||||
(call-with-values proc
|
|
||||||
(case-lambda
|
(case-lambda
|
||||||
[(v)
|
[(v)
|
||||||
(set-stats! t1)
|
(set-stats! t1)
|
||||||
(print-stats message
|
(print-stats message t1 t0)
|
||||||
(diff-bytes bytes-min bytes-maj
|
|
||||||
(bytes-minor) (bytes-major))
|
|
||||||
t1 t0)
|
|
||||||
v]
|
v]
|
||||||
[v*
|
[v*
|
||||||
(set-stats! t1)
|
(set-stats! t1)
|
||||||
(print-stats message
|
(print-stats message t1 t0)
|
||||||
(diff-bytes bytes-min bytes-maj
|
(apply values v*)]))
|
||||||
(bytes-minor) (bytes-major))
|
(set-stats! t0)
|
||||||
t1 t0)
|
(call-with-values proc k))]))
|
||||||
(apply values v*)])))]))
|
|
||||||
|
|
||||||
(define (bytes-minor)
|
|
||||||
(foreign-call "ikrt_bytes_allocated"))
|
|
||||||
(define (bytes-major)
|
|
||||||
(foreign-call "ikrt_bytes_allocated_major"))
|
|
||||||
(define (diff-bytes mnr0 mjr0 mnr1 mjr1)
|
(define (diff-bytes mnr0 mjr0 mnr1 mjr1)
|
||||||
(+ (fx- mnr1 mnr0) (* (fx- mjr1 mjr0) #x10000000)))
|
(+ (fx- mnr1 mnr0) (* (fx- mjr1 mjr0) #x10000000)))
|
||||||
|
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
1332
|
1333
|
||||||
|
|
|
@ -839,6 +839,15 @@ ikrt_stats_now(ikptr t, ikpcb* pcb){
|
||||||
ref(t, off_record_data + 10 * wordsize) = fix(pcb->collect_stime.tv_usec);
|
ref(t, off_record_data + 10 * wordsize) = fix(pcb->collect_stime.tv_usec);
|
||||||
ref(t, off_record_data + 11 * wordsize) = fix(pcb->collect_rtime.tv_sec);
|
ref(t, off_record_data + 11 * wordsize) = fix(pcb->collect_rtime.tv_sec);
|
||||||
ref(t, off_record_data + 12 * wordsize) = fix(pcb->collect_rtime.tv_usec);
|
ref(t, off_record_data + 12 * wordsize) = fix(pcb->collect_rtime.tv_usec);
|
||||||
|
{
|
||||||
|
/* minor bytes */
|
||||||
|
long int bytes_in_heap = ((long int) pcb->allocation_pointer) -
|
||||||
|
((long int) pcb->heap_base);
|
||||||
|
long int bytes = bytes_in_heap + pcb->allocation_count_minor;
|
||||||
|
ref(t, off_record_data + 13 * wordsize) = fix(bytes);
|
||||||
|
}
|
||||||
|
/* major bytes */
|
||||||
|
ref(t, off_record_data + 14 * wordsize) = fix(pcb->allocation_count_major);
|
||||||
return void_object;
|
return void_object;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -868,24 +877,6 @@ ikrt_gmt_offset(ikptr t){
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ikptr
|
|
||||||
ikrt_bytes_allocated(ikpcb* pcb){
|
|
||||||
int bytes_in_heap = ((long int) pcb->allocation_pointer) -
|
|
||||||
((long int) pcb->heap_base);
|
|
||||||
int bytes = bytes_in_heap + pcb->allocation_count_minor;
|
|
||||||
return fix(bytes);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
ikptr
|
|
||||||
ikrt_bytes_allocated_major(ikpcb* pcb){
|
|
||||||
return fix(pcb->allocation_count_major);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
ikptr
|
ikptr
|
||||||
ikrt_fork(){
|
ikrt_fork(){
|
||||||
int pid = fork();
|
int pid = fork();
|
||||||
|
|
Loading…
Reference in New Issue