RFR: 8313708: NMT: cleanup _mst_marker
Johan Sjölen
jsjolen at openjdk.org
Fri Aug 11 00:35:28 UTC 2023
On Thu, 3 Aug 2023 18:44:43 GMT, Gerard Ziemski <gziemski at openjdk.org> wrote:
> While learning the NMT code I came across _mst_marker and I don't really like how it combines 16bit index and 16bit position into single 32bit mst_marker using bit sizzling.
>
> Consequently, right now we need the following 3 APIs: build_marker(), bucket_idx_from_marker(), pos_idx_from_marker() to support this. They are really not adding any value, in my opinion, and in fact obfuscate the code.
>
> I'd like to propose that we simplify the code and pass a struct value (as suggested by Thomas) which hides away the 2 individual fields that are implementation detail.
Yes, the packing of two values into one is perhaps a bit unnecessary, but I do prefer the struct approach. Perhaps something like:
```c++
struct alignas(uint32_t) MSTM {
const uint16_t _bucket_idx;
const uint16_t _bucket_pos;
};
STATIC_ASSERT(sizeof(MSTM) == sizeof(uint32_t), "must");
(Shouldn't `MallocHeader` be a packed data structure by the way?)
>the point of the marker is to quickly resolve MST entries. But that could be done in a better way, without having to manually walk bucket chains and count buckets with O(n). For example, by storing MST entries in a linear array (they never go away, so one would not have to deal with deletion) and redefining the mst_marker to be an index into that table. That way, access to these entries would be O(1).
This would be very nice.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/15145#issuecomment-1669220456
More information about the hotspot-runtime-dev
mailing list