Closed
Bug 1406303
Opened 7 years ago
Closed 7 years ago
Refactor malloc_rtree_t
Categories
(Core :: Memory Allocator, enhancement)
Core
Memory Allocator
Tracking
()
RESOLVED
FIXED
mozilla58
Tracking | Status | |
---|---|---|
firefox58 | --- | fixed |
People
(Reporter: glandium, Assigned: glandium)
Details
Attachments
(7 files)
(deleted),
text/x-review-board-request
|
n.nethercote
:
review+
|
Details |
(deleted),
text/x-review-board-request
|
n.nethercote
:
review+
|
Details |
(deleted),
text/x-review-board-request
|
n.nethercote
:
review+
|
Details |
(deleted),
text/x-review-board-request
|
n.nethercote
:
review+
|
Details |
(deleted),
text/x-review-board-request
|
n.nethercote
:
review+
|
Details |
(deleted),
text/x-review-board-request
|
n.nethercote
:
review+
|
Details |
(deleted),
text/x-review-board-request
|
n.nethercote
:
review+
|
Details |
No description provided.
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Comment 8•7 years ago
|
||
mozreview-review |
Comment on attachment 8915873 [details]
Bug 1406303 - Refactor malloc_rtree_get/set.
https://reviewboard.mozilla.org/r/187128/#review192574
::: memory/build/mozjemalloc.cpp:1762
(Diff revision 1)
>
> return (ret);
> }
>
> -#define MALLOC_RTREE_GET_GENERATE(f) \
> -/* The least significant bits of the key are ignored. */ \
> +static inline void**
> +malloc_rtree_get_slot(malloc_rtree_t* aTree, uintptr_t aKey, bool aCreate=false)
Spaces around '='.
Is it worth commenting here that the tree must be locked before this function can be called?
::: memory/build/mozjemalloc.cpp:1776
(Diff revision 1)
> - MALLOC_RTREE_LOCK(&rtree->lock); \
> - for (i = lshift = 0, height = rtree->height, node = rtree->root;\
> - i < height - 1; \
> - i++, lshift += bits, node = child) { \
> - bits = rtree->level2bits[i]; \
> - subkey = (key << lshift) >> ((SIZEOF_PTR << 3) - bits); \
> + i++, lshift += bits, node = child) {
> + bits = aTree->level2bits[i];
> + subkey = (aKey << lshift) >> ((SIZEOF_PTR << 3) - bits);
> + child = (void**) node[subkey];
> + if (!child && aCreate) {
> + child = (void**) base_calloc(1 << aTree->level2bits[i+1], sizeof(void*));
Spaces around '+'.
Attachment #8915873 -
Flags: review?(n.nethercote) → review+
Comment 9•7 years ago
|
||
mozreview-review |
Comment on attachment 8915874 [details]
Bug 1406303 - Turn malloc_rtree_t into a C++ class.
https://reviewboard.mozilla.org/r/187130/#review192576
::: memory/build/mozjemalloc.cpp:1770
(Diff revision 1)
> + }
>
> - ret->root = (void**)base_calloc(1, sizeof(void *) << ret->level2bits[0]);
> - if (!ret->root) {
> + ret->mRoot = (void**)base_calloc(1 << ret->mLevel2Bits[0], sizeof(void*));
> + if (!ret->mRoot) {
> - /*
> + /*
> - * We leak the rtree here, since there's no generic base
> + * We leak the rtree here, since there's no generic base
I think this comment would fit on a single line, esp. if it uses C++ style.
::: memory/build/mozjemalloc.cpp:1795
(Diff revision 1)
> i++, lshift += bits, node = child) {
> - bits = aTree->level2bits[i];
> - subkey = (aKey << lshift) >> ((SIZEOF_PTR << 3) - bits);
> + bits = mLevel2Bits[i];
> + subkey = (key << lshift) >> ((SIZEOF_PTR << 3) - bits);
> child = (void**) node[subkey];
> if (!child && aCreate) {
> - child = (void**) base_calloc(1 << aTree->level2bits[i+1], sizeof(void*));
> + child = (void**) base_calloc(1 << mLevel2Bits[i+1], sizeof(void*));
Spaces around '+'.
Attachment #8915874 -
Flags: review?(n.nethercote) → review+
Comment 10•7 years ago
|
||
mozreview-review |
Comment on attachment 8915875 [details]
Bug 1406303 - Simplify the calculation of AddressRadixTree's bits_per_level.
https://reviewboard.mozilla.org/r/187132/#review192578
Thanks for the good commit message. Have you confirmed empirically that the result matches theory? :)
Attachment #8915875 -
Flags: review?(n.nethercote) → review+
Comment 11•7 years ago
|
||
mozreview-review |
Comment on attachment 8915877 [details]
Bug 1406303 - Only store 2 levels of bit sizes for the radix tree.
https://reviewboard.mozilla.org/r/187136/#review192582
::: memory/build/mozjemalloc.cpp:661
(Diff revision 1)
> #endif
>
> malloc_spinlock_t mLock;
> void** mRoot;
> unsigned mHeight;
> - unsigned mLevel2Bits[1]; // Dynamically sized.
> + unsigned mLevel2Bits[2];
It would be useful to have a comment here about why there are two entries.
Actually, I think it would be better to have two separate fields instead of a 2-element array. Can you do that?
Attachment #8915877 -
Flags: review?(n.nethercote) → review+
Comment 12•7 years ago
|
||
> Actually, I think it would be better to have two separate fields instead of
> a 2-element array. Can you do that?
Oh, I see the next patch gets rid of the array.
Comment 13•7 years ago
|
||
mozreview-review |
Comment on attachment 8915878 [details]
Bug 1406303 - Make the number of significant bits used by the radix tree a template parameter.
https://reviewboard.mozilla.org/r/187138/#review192584
::: memory/build/mozjemalloc.cpp:669
(Diff revision 1)
> #if (SIZEOF_PTR == 4)
> static const size_t kNodeSize2Pow = 14;
> #else
> static const size_t kNodeSize2Pow = CACHELINE_2POW;
> #endif
> + static const size_t kBitsPerLevel = kNodeSize2Pow - SIZEOF_PTR_2POW;
I don't like this name because it's not clear that it excludes level 1. What about kBitsAtLevel2Plus? (Or something else where the 1 vs. 2+ distinction is clear.)
Attachment #8915878 -
Flags: review?(n.nethercote) → review+
Comment 14•7 years ago
|
||
mozreview-review |
Comment on attachment 8915879 [details]
Bug 1406303 - Don't heap-allocate the global chunk radix tree.
https://reviewboard.mozilla.org/r/187140/#review192586
Attachment #8915879 -
Flags: review?(n.nethercote) → review+
Comment 15•7 years ago
|
||
mozreview-review |
Comment on attachment 8915876 [details]
Bug 1406303 - Simplify the calculation of AddressRadixTree's height.
https://reviewboard.mozilla.org/r/187134/#review192580
Again: have you checked this empirically?
Attachment #8915876 -
Flags: review?(n.nethercote) → review+
Assignee | ||
Comment 16•7 years ago
|
||
(In reply to Nicholas Nethercote [:njn] from comment #8)
> Is it worth commenting here that the tree must be locked before this
> function can be called?
We're actually only locking on write.
Assignee | ||
Comment 17•7 years ago
|
||
(In reply to Nicholas Nethercote [:njn] from comment #10)
> Comment on attachment 8915875 [details]
> Bug 1406303 - Simplify the calculation of AddressRadixTree's bits_per_level.
>
> https://reviewboard.mozilla.org/r/187132/#review192578
>
> Thanks for the good commit message. Have you confirmed empirically that the
> result matches theory? :)
As a matter of fact, I did.
(In reply to Nicholas Nethercote [:njn] from comment #15)
> Comment on attachment 8915876 [details]
> Bug 1406303 - Simplify the calculation of AddressRadixTree's height.
>
> https://reviewboard.mozilla.org/r/187134/#review192580
>
> Again: have you checked this empirically?
For this one, I actually went in the opposite direction: I had a hunch that it would work this way, checked empirically, and then worked out the math.
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Comment 25•7 years ago
|
||
Pushed by mh@glandium.org:
https://hg.mozilla.org/integration/autoland/rev/e42bb7139c71
Refactor malloc_rtree_get/set. r=njn
https://hg.mozilla.org/integration/autoland/rev/7b2056d32ff5
Turn malloc_rtree_t into a C++ class. r=njn
https://hg.mozilla.org/integration/autoland/rev/cd3472504445
Simplify the calculation of AddressRadixTree's bits_per_level. r=njn
https://hg.mozilla.org/integration/autoland/rev/387202ecf011
Simplify the calculation of AddressRadixTree's height. r=njn
https://hg.mozilla.org/integration/autoland/rev/94b89dd64fc7
Only store 2 levels of bit sizes for the radix tree. r=njn
https://hg.mozilla.org/integration/autoland/rev/6ee5dedf4f64
Make the number of significant bits used by the radix tree a template parameter. r=njn
https://hg.mozilla.org/integration/autoland/rev/d57bcfffe5ba
Don't heap-allocate the global chunk radix tree. r=njn
Comment 26•7 years ago
|
||
bugherder |
https://hg.mozilla.org/mozilla-central/rev/e42bb7139c71
https://hg.mozilla.org/mozilla-central/rev/7b2056d32ff5
https://hg.mozilla.org/mozilla-central/rev/cd3472504445
https://hg.mozilla.org/mozilla-central/rev/387202ecf011
https://hg.mozilla.org/mozilla-central/rev/94b89dd64fc7
https://hg.mozilla.org/mozilla-central/rev/6ee5dedf4f64
https://hg.mozilla.org/mozilla-central/rev/d57bcfffe5ba
Status: NEW → RESOLVED
Closed: 7 years ago
status-firefox58:
--- → fixed
Resolution: --- → FIXED
Target Milestone: --- → mozilla58
You need to log in
before you can comment on or make changes to this bug.
Description
•