[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-hotspot-runtime-dev
Subject:    Re: RFR: 8330181: Move PcDesc cache from nmethod header [v2]
From:       Vladimir Kozlov <kvn () openjdk ! org>
Date:       2024-04-25 22:50:41
Message-ID: GWUUh6BMcorJQQT7eR_757iWx1-va4JYGlcm7y-8-QI=.256a564b-5dfb-45ae-a2c4-28fee325e79d () github ! com
[Download RAW message or body]

On Wed, 24 Apr 2024 15:33:42 GMT, Vladimir Kozlov <kvn@openjdk.org> wrote:

> > Currently PcDescCache (32 bytes in 64-bit VM: PcDesc* _pc_descs[4]) is allocated \
> > in `nmethod` header. 
> > Moved PcDescContainer (which includes cache) to C heap similar to ExceptionCache \
> > to reduce size of `nmethod` header and to remove WXWrite transition when we \
> > update the cache in `PcDescCache::add_pc_desc()`. 
> > Removed `PcDescSearch` class which was leftover from `CompiledMethod` days.
> > 
> > Tested tier1-4,stress,xcomp and performance.
> 
> Vladimir Kozlov has updated the pull request incrementally with one additional \
> commit since the last revision: 
> Remove unneeded ThreadWXEnable

Thank you, John, for review and history lesson. Few comments on your comments ;^)

> As a top level goal, I hope some day soon we will get all the metadata out of code \
> space, both mutable (as in this case) and immutable.

First step for that will be my next PR for \
[JDK-8331087](https://bugs.openjdk.org/browse/JDK-8331087) "Move read-only nmethod \
data from CodeCache". They account for 30% space in CodeCache.

Next step will be converting Relocation Info data to immutable by moving all encoded \
pointer to oops, metadata and other sections. (I not started yet)

I would keep mutable sections (oops, metadata) together with code for now because \
`oops_do()` and `metadata_do()` process them together with code. And these section \
are relatively very small  (vs whole nmethod size):

 relocation     = 509520 (6.003523%)
 constants      = 288 (0.003393%)
 main code      = 4957240 (58.409695%)
 stub code      = 286832 (3.379657%)
 oops           = 20824 (0.245363%)
 metadata       = 126944 (1.495744%)


> (But malloc still does not fully integrate with HotSpot's Native Memory Tracking, \
> so that might be an issue.)

It is not issue anymore because we are using our wrapper \
[os:malloc()](https://github.com/openjdk/jdk/blob/master/src/hotspot/share/runtime/os.cpp#L629) \
which does NMT.

> As a further investment, I'd replace ad hoc compressed data (which is always hard \
> to maintain) with uniformly compressed data, using Unsigned5 (from Pack200)

Yes, it should be done to compress 0s in data we are already compressing \
(ScopesDesc).

Compressing all data have an issue because some data (PcDesc) needs random access in \
big array. We discussed possibility to compress by chunks such arrays to reduce \
access time. This needs careful investigation.

Thanks again for review, @rose00

-------------

PR Comment: https://git.openjdk.org/jdk/pull/18895#issuecomment-2078291565


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic