Improve accuracy of get/setAllocationCounter
authorBen Gamari <bgamari.foss@gmail.com>
Mon, 19 Mar 2018 16:02:43 +0000 (12:02 -0400)
committerBen Gamari <ben@smart-cactus.org>
Mon, 19 Mar 2018 16:05:12 +0000 (12:05 -0400)
commit20cbb0165e4d18df510e707791e761942d3c10f0
tree7f11e3bb32433b64db760bf1b2d65d281d53f9ab
parentd27336edcf2667c3c3908694247861beec3fc29b
Improve accuracy of get/setAllocationCounter

Summary:
get/setAllocationCounter didn't take into account allocations in the
current block. This was known at the time, but it turns out to be
important to have more accuracy when using these in a fine-grained
way.

Test Plan:
New unit test to test incrementally larger allocaitons.  Before I got
results like this:

```
+0
+0
+0
+0
+0
+4096
+0
+0
+0
+0
+0
+4064
+0
+0
+4088
+4056
+0
+0
+0
+4088
+4096
+4056
+4096
```

Notice how the results aren't always monotonically increasing.  After
this patch:

```
+344
+416
+488
+560
+632
+704
+776
+848
+920
+992
+1064
+1136
+1208
+1280
+1352
+1424
+1496
+1568
+1640
+1712
+1784
+1856
+1928
+2000
+2072
+2144
```

Reviewers: hvr, erikd, simonmar, jrtc27, trommler

Reviewed By: simonmar

Subscribers: trommler, jrtc27, rwbarton, thomie, carter

Differential Revision: https://phabricator.haskell.org/D4363
12 files changed:
compiler/codeGen/StgCmmForeign.hs
compiler/prelude/primops.txt.pp
includes/Cmm.h
includes/rts/Threads.h
includes/stg/MiscClosures.h
libraries/base/GHC/Conc/Sync.hs
rts/PrimOps.cmm
rts/RtsSymbols.c
rts/Threads.c
testsuite/tests/rts/all.T
testsuite/tests/rts/alloccounter1.hs [new file with mode: 0644]
testsuite/tests/rts/alloccounter1.stdout [new file with mode: 0644]