> Hello,
> 
> Today much of the reading of flattened values in the interpreter is 
> implemented both in the platform-specific templateTable_XX.cpp files, and 
> also in the runtime via InterpreterRuntime::read_flat_field. The reason we 
> have both is becuase the interpreterlet implements a fast-path for null-free 
> types, which attempts to allocate the buffered object inside the thread's 
> TLAB, before moving on to copy the src payload to the buffered objected. The 
> copying is done in the VM via a call_VM_leaf call, which notably does not 
> safepoint-poll (nor allow anything that might GC for example).
> 
> The slow-path in the interpreterlet calls into the VM via a call_VM, which 
> notably safepoint-point polls upon exit. The slow-path is taken when 1) the 
> src payload is nullable or 2) the fast-path TLAB allocation fails.
> 
> I propose we redesign the dance around when and how to enter the VM by having 
> the logic of reading a flat field exclusively inside the runtime and thus 
> always entering the VM. This approach allows us to have one canonical way to 
> read flat fields, without having effectively duplicate code in 
> interpreterlets (for all supported platforms) and inside the runtime. A 
> benefit from this is that it becomes easier for porters to port the Valhalla 
> changes to their platform(s) and later on maintain that port, which is a plus.
> 
> Since all objects are NULLABLE in JEP 401 (disregarding F&F interface), all 
> reads of flat fields are already entering the VM via the "slow-path". This 
> means that this change only has a practical effect on 
> null-free/null-restricted fields. I think we should consider if having a 
> fast-path is worth it or not when that time comes, although I anticipate that 
> it doesn't make much difference since the copy is always done in the VM 
> anyway.
> 
> As a small optimization, I've added a check for nullable and marked-as-null 
> before entering the VM. 
> 
> Testing:
> * hotspot_valhalla, jdk_valhalla and Oracle's tier1-4 on linux-x64-debug and 
> linux-aarch64-debug

Joel Sikström has updated the pull request incrementally with one additional 
commit since the last revision:

  Dont handle:ize obj in InterpreterRuntime::read_flat_field

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

Changes:
  - all: https://git.openjdk.org/valhalla/pull/1936/files
  - new: https://git.openjdk.org/valhalla/pull/1936/files/61c1f4cf..469258ee

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=valhalla&pr=1936&range=01
 - incr: https://webrevs.openjdk.org/?repo=valhalla&pr=1936&range=00-01

  Stats: 2 lines in 1 file changed: 0 ins; 1 del; 1 mod
  Patch: https://git.openjdk.org/valhalla/pull/1936.diff
  Fetch: git fetch https://git.openjdk.org/valhalla.git pull/1936/head:pull/1936

PR: https://git.openjdk.org/valhalla/pull/1936

Reply via email to