Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
398 commits
Select commit Hold shift + click to select a range
cea75b5
Merge branch 'upstream-master'
Nov 27, 2023
35ac477
Merge branch 'upstream-master'
Nov 28, 2023
04195d4
Merge branch 'upstream-master'
Nov 29, 2023
8444396
Merge branch 'upstream-master'
Nov 30, 2023
ba8789d
Merge branch 'upstream-master'
Dec 1, 2023
3086466
Merge branch 'upstream-master'
Dec 2, 2023
7ad4457
Merge branch 'upstream-master'
Dec 3, 2023
4e2975e
Merge branch 'upstream-master'
Dec 4, 2023
5dd3216
Merge branch 'upstream-master'
Dec 5, 2023
6102803
Merge branch 'upstream-master'
Dec 6, 2023
1b1a7b7
Merge branch 'upstream-master'
Dec 7, 2023
f935d5f
Merge branch 'upstream-master'
Dec 8, 2023
3388ad6
Merge branch 'upstream-master'
Dec 9, 2023
a618393
Merge branch 'upstream-master'
Dec 11, 2023
79214ff
Merge branch 'upstream-master'
Dec 12, 2023
56e4827
Merge branch 'upstream-master'
Dec 13, 2023
a8795aa
Merge branch 'upstream-master'
Dec 14, 2023
79a44a7
Merge branch 'upstream-master'
Dec 15, 2023
e9a23f9
Merge branch 'upstream-master'
Dec 16, 2023
ff45815
Merge branch 'upstream-master'
Dec 18, 2023
02c1d1f
Merge branch 'upstream-master'
Dec 19, 2023
e03e0c3
Merge branch 'upstream-master'
Dec 20, 2023
f8c8b66
Merge branch 'upstream-master'
Dec 21, 2023
0eb4108
Merge branch 'upstream-master'
Dec 22, 2023
828e664
Merge branch 'upstream-master'
Dec 23, 2023
58fa95f
Merge branch 'upstream-master'
Dec 24, 2023
13329f9
Merge branch 'upstream-master'
Dec 27, 2023
1de1709
Merge branch 'upstream-master'
Dec 30, 2023
43ec8d5
Merge branch 'upstream-master'
Jan 1, 2024
221b69b
Merge branch 'upstream-master'
Jan 2, 2024
ff13206
Merge branch 'upstream-master'
Jan 3, 2024
c0cd9f5
Merge branch 'upstream-master'
Jan 4, 2024
651ce89
Merge branch 'upstream-master'
Jan 5, 2024
8fc3e56
Merge branch 'upstream-master'
Jan 6, 2024
9a68be2
Merge branch 'upstream-master'
Jan 7, 2024
80cccf0
Merge branch 'upstream-master'
Jan 8, 2024
b47f2aa
Merge branch 'upstream-master'
Jan 9, 2024
a115a86
Merge branch 'upstream-master'
Jan 10, 2024
bda5c77
Merge branch 'upstream-master'
Jan 11, 2024
f853f93
Merge branch 'upstream-master'
Jan 12, 2024
ceaa291
Merge branch 'upstream-master'
Jan 13, 2024
37840d7
Merge branch 'upstream-master'
Jan 15, 2024
b834dff
Merge branch 'upstream-master'
Jan 16, 2024
43331de
Merge branch 'upstream-master'
Jan 17, 2024
4b77b24
Merge branch 'upstream-master'
Jan 18, 2024
27cf2b7
Merge branch 'upstream-master'
Jan 19, 2024
69cbfbc
Merge branch 'upstream-master'
Jan 20, 2024
e7cd571
Merge branch 'upstream-master'
Jan 21, 2024
07774d2
Merge branch 'upstream-master'
Jan 22, 2024
6817a6f
Merge branch 'upstream-master'
Jan 23, 2024
bf05049
Merge branch 'upstream-master'
Jan 24, 2024
8f809dd
Merge branch 'upstream-master'
Jan 25, 2024
81286e6
Merge branch 'upstream-master'
Jan 26, 2024
889a251
Merge branch 'upstream-master'
Jan 27, 2024
ffdce34
Merge branch 'upstream-master'
Jan 29, 2024
988baf7
Merge branch 'upstream-master'
Jan 30, 2024
49f4eef
Merge branch 'upstream-master'
Jan 31, 2024
66ea160
Merge branch 'upstream-master'
Feb 1, 2024
818ad74
Merge branch 'upstream-master'
Feb 2, 2024
33a458a
Merge branch 'upstream-master'
Feb 3, 2024
bc7ccac
Merge branch 'upstream-master'
Feb 4, 2024
0ca0511
Merge branch 'upstream-master'
Feb 5, 2024
fa29ec0
Merge branch 'upstream-master'
Feb 6, 2024
6920ff7
Merge branch 'upstream-master'
Feb 7, 2024
de678e3
Merge branch 'upstream-master'
Feb 8, 2024
ba575dd
Merge branch 'upstream-master'
Feb 9, 2024
6f33aa0
Merge branch 'upstream-master'
Feb 10, 2024
773edd8
Merge branch 'upstream-master'
Feb 12, 2024
3b3c0c8
Merge branch 'upstream-master'
Feb 13, 2024
99266a6
Merge branch 'upstream-master'
Feb 14, 2024
a176eb4
Merge branch 'upstream-master'
Feb 15, 2024
20ebcf7
Merge branch 'upstream-master'
Feb 16, 2024
4928303
Merge branch 'upstream-master'
Feb 17, 2024
0916a37
Merge branch 'upstream-master'
Feb 18, 2024
0eaff72
Merge branch 'upstream-master'
Feb 19, 2024
c6008ea
Merge branch 'upstream-master'
Feb 20, 2024
80c7aa7
Merge branch 'upstream-master'
Feb 21, 2024
bd61549
Merge branch 'upstream-master'
Feb 22, 2024
6041303
Merge branch 'upstream-master'
Feb 23, 2024
04f5717
Merge branch 'upstream-master'
Feb 24, 2024
e05db59
Merge branch 'upstream-master'
Feb 25, 2024
e64f60c
Merge branch 'upstream-master'
Feb 26, 2024
3846d7c
Merge branch 'upstream-master'
Feb 27, 2024
62eadd1
Merge branch 'upstream-master'
Feb 28, 2024
719f875
Merge branch 'upstream-master'
Feb 29, 2024
7da47c7
Merge branch 'upstream-master'
Mar 1, 2024
9b85552
Merge branch 'upstream-master'
Mar 2, 2024
7eb27d3
Merge branch 'upstream-master'
Mar 3, 2024
edc0928
Merge branch 'upstream-master'
Mar 4, 2024
a91c4a5
Trigger Gitlab CI for 'latest' JDK
jbachorik Mar 4, 2024
53bb10f
Trigger Gitlab CI for JDK 23 instead of 'latest'
jbachorik Mar 4, 2024
4413fdc
Trigger Gitlab CI for 'latest' JDK build only
jbachorik Mar 4, 2024
7a35eb7
Merge branch 'upstream-master'
Mar 5, 2024
3d808fd
Merge branch 'upstream-master'
Mar 6, 2024
79f636a
Merge branch 'upstream-master'
Mar 7, 2024
d48868f
Merge branch 'upstream-master'
Mar 8, 2024
a35e4f4
Merge branch 'upstream-master'
Mar 9, 2024
b0eed71
Merge branch 'upstream-master'
Mar 10, 2024
22c29ba
Merge branch 'upstream-master'
Mar 11, 2024
687a9d4
Merge branch 'upstream-master'
Mar 12, 2024
0718938
Merge branch 'upstream-master'
Mar 13, 2024
be7866f
Merge branch 'upstream-master'
Mar 14, 2024
cf21033
Merge branch 'upstream-master'
Mar 15, 2024
0d885e7
Merge branch 'upstream-master'
Mar 16, 2024
9b844e7
Merge branch 'upstream-master'
Mar 17, 2024
8073465
Merge branch 'upstream-master'
Mar 18, 2024
0ee563a
Merge branch 'upstream-master'
Mar 19, 2024
29ef3a7
Merge branch 'upstream-master'
Mar 20, 2024
2938227
Merge branch 'upstream-master'
Mar 21, 2024
37d9792
Merge branch 'upstream-master'
Mar 22, 2024
d44a6bf
Merge branch 'upstream-master'
Mar 23, 2024
8ab9750
Merge branch 'upstream-master'
Mar 25, 2024
bca704e
Merge branch 'upstream-master'
Mar 26, 2024
374df15
Merge branch 'upstream-master'
Mar 27, 2024
379de38
Merge branch 'upstream-master'
Mar 28, 2024
024dedf
Merge branch 'upstream-master'
Mar 29, 2024
a36ed67
Merge branch 'upstream-master'
Mar 30, 2024
35eed6f
Merge branch 'upstream-master'
Mar 31, 2024
c789720
Merge branch 'upstream-master'
Apr 1, 2024
9152316
Merge branch 'upstream-master'
Apr 2, 2024
e733bea
Merge branch 'upstream-master'
Apr 3, 2024
435e23f
Merge branch 'upstream-master'
Apr 4, 2024
e524cda
Merge branch 'upstream-master'
Apr 5, 2024
3d790a6
Merge branch 'upstream-master'
Apr 6, 2024
09a31d5
Merge branch 'upstream-master'
Apr 8, 2024
6a2b956
Merge branch 'upstream-master'
Apr 9, 2024
9288036
Merge branch 'upstream-master'
Apr 10, 2024
d633fdf
Merge branch 'upstream-master'
Apr 11, 2024
3b42bad
Merge branch 'upstream-master'
Apr 12, 2024
ae1eb33
Merge branch 'upstream-master'
Apr 13, 2024
bc62b1c
Merge branch 'upstream-master'
Apr 15, 2024
803cebe
Merge branch 'upstream-master'
Apr 16, 2024
7edd321
Merge branch 'upstream-master'
Apr 17, 2024
12baa60
Merge branch 'upstream-master'
Apr 18, 2024
2db5630
Merge branch 'upstream-master'
Apr 19, 2024
b3f0008
Merge branch 'upstream-master'
Apr 20, 2024
0f26f90
Merge branch 'upstream-master'
Apr 22, 2024
a54af54
Merge branch 'upstream-master'
Apr 23, 2024
41b0f18
Merge branch 'upstream-master'
Apr 24, 2024
ad144f5
Merge branch 'upstream-master'
Apr 25, 2024
5cc43db
Merge branch 'upstream-master'
Apr 26, 2024
e05fa0a
Merge branch 'upstream-master'
Apr 27, 2024
e68a472
Merge branch 'upstream-master'
Apr 29, 2024
82f1011
Merge branch 'upstream-master'
Apr 30, 2024
663fa5f
Merge branch 'upstream-master'
May 1, 2024
437d4ea
Merge branch 'upstream-master'
May 2, 2024
b7cd4d8
Merge branch 'upstream-master'
May 3, 2024
8e4683f
Merge branch 'upstream-master'
May 4, 2024
2118df9
Merge branch 'upstream-master'
May 6, 2024
78a2653
Merge branch 'upstream-master'
May 7, 2024
d5ee90a
Merge branch 'upstream-master'
May 8, 2024
cd05d06
Merge branch 'upstream-master'
May 9, 2024
dfe53e4
Merge branch 'upstream-master'
May 10, 2024
e8538a5
Merge branch 'upstream-master'
May 11, 2024
5938e9a
Merge branch 'upstream-master'
May 12, 2024
ee173e5
Merge branch 'upstream-master'
May 13, 2024
4d5a043
Merge branch 'upstream-master'
May 14, 2024
9dca743
Merge branch 'upstream-master'
May 15, 2024
f3248fd
Merge branch 'upstream-master'
May 16, 2024
d5bcd9a
Merge branch 'upstream-master'
May 17, 2024
21b6e06
Merge branch 'upstream-master'
May 18, 2024
06d2c2f
Merge branch 'upstream-master'
May 20, 2024
fc2e735
Merge branch 'upstream-master'
May 21, 2024
fe04dd2
Merge branch 'upstream-master'
May 22, 2024
2cf8e88
Merge branch 'upstream-master'
May 23, 2024
8420203
Merge branch 'upstream-master'
May 24, 2024
350cde5
Merge branch 'upstream-master'
May 25, 2024
0eecac1
Merge branch 'upstream-master'
May 26, 2024
aafeb8d
Merge branch 'upstream-master'
May 27, 2024
c5bf050
Merge branch 'upstream-master'
May 28, 2024
d5bfa3b
Merge branch 'upstream-master'
May 29, 2024
12272d4
Merge branch 'upstream-master'
May 30, 2024
e49e81c
Merge branch 'upstream-master'
May 31, 2024
6a9e9a4
Merge branch 'upstream-master'
Jun 1, 2024
8710f51
Merge branch 'upstream-master'
Jun 2, 2024
8d6d253
Merge branch 'upstream-master'
Jun 3, 2024
7ce0e9d
Merge branch 'upstream-master'
Jun 4, 2024
5a131e5
Merge branch 'upstream-master'
Jun 5, 2024
d225e4d
Merge branch 'upstream-master'
Jun 6, 2024
4d63e8d
Merge branch 'upstream-master'
Jun 7, 2024
7e4b16c
Merge branch 'upstream-master'
Jun 8, 2024
1678d98
Merge branch 'upstream-master'
Jun 9, 2024
68c64bb
Merge branch 'upstream-master'
Jun 10, 2024
938bab3
Merge branch 'upstream-master'
Jun 11, 2024
234d141
Merge branch 'upstream-master'
Jun 12, 2024
1576a35
Merge branch 'upstream-master'
Jun 13, 2024
003baee
Merge branch 'upstream-master'
Jun 14, 2024
a78b2fb
Merge branch 'upstream-master'
Jun 15, 2024
4973227
Do not fix JDK version in gitlab script
jbachorik Jun 17, 2024
46195f7
Merge branch 'upstream-master'
Jun 17, 2024
1c54cce
Merge branch 'upstream-master'
Jun 18, 2024
a1330b0
Merge branch 'upstream-master'
Jun 19, 2024
3612471
Merge branch 'upstream-master'
Jun 20, 2024
0f61d48
Merge branch 'upstream-master'
Jun 21, 2024
43c1499
Merge branch 'upstream-master'
Jun 22, 2024
37063a3
Merge branch 'upstream-master'
Jun 23, 2024
d2b275e
Merge branch 'upstream-master'
Jun 24, 2024
e9160f2
Merge branch 'upstream-master'
Jun 25, 2024
a7d0c49
Merge branch 'upstream-master'
Jun 26, 2024
d8a92cb
Merge branch 'upstream-master'
Jun 27, 2024
400af85
Merge branch 'upstream-master'
Jun 28, 2024
2bda8f2
Merge branch 'upstream-master'
Jun 29, 2024
6eb79ee
Merge branch 'upstream-master'
Jun 30, 2024
aac3f6b
Merge branch 'upstream-master'
Jul 1, 2024
744aaa7
Merge branch 'upstream-master'
Jul 2, 2024
2856942
Merge branch 'upstream-master'
Jul 3, 2024
48bc2d4
Merge branch 'upstream-master'
Jul 4, 2024
ad72d71
Merge branch 'upstream-master'
Jul 5, 2024
9470880
Merge branch 'upstream-master'
Jul 6, 2024
ab89485
Merge branch 'upstream-master'
Jul 7, 2024
4c4d72b
Merge branch 'upstream-master'
Jul 8, 2024
77577b0
Merge branch 'upstream-master'
Jul 9, 2024
b375c74
Merge branch 'upstream-master'
Jul 10, 2024
b5307cd
Merge branch 'upstream-master'
Jul 11, 2024
a3e85ad
Merge branch 'upstream-master'
Jul 12, 2024
89eb5fe
Merge branch 'upstream-master'
Jul 13, 2024
4a55cc9
Merge branch 'upstream-master'
Jul 15, 2024
c432101
Merge branch 'upstream-master'
Jul 16, 2024
64b6d01
Merge branch 'upstream-master'
Jul 17, 2024
d176c41
Merge branch 'upstream-master'
Jul 18, 2024
2b3309d
Merge branch 'upstream-master'
Jul 19, 2024
5bfad18
Merge branch 'upstream-master'
Jul 20, 2024
a3b2632
Merge branch 'upstream-master'
Jul 21, 2024
941aad8
Merge branch 'upstream-master'
Jul 22, 2024
d417e09
Merge branch 'upstream-master'
Jul 23, 2024
ba9867d
Merge branch 'upstream-master'
Jul 24, 2024
7558150
Merge branch 'upstream-master'
Jul 25, 2024
a832a38
Merge branch 'upstream-master'
Jul 26, 2024
a5c89d4
Merge branch 'upstream-master'
Jul 27, 2024
9b049f9
Merge branch 'upstream-master'
Jul 28, 2024
ca92f7b
Merge branch 'upstream-master'
Jul 29, 2024
958d1d2
Merge branch 'upstream-master'
Jul 30, 2024
db67f23
Merge branch 'upstream-master'
Jul 31, 2024
4c05817
Merge branch 'upstream-master'
Aug 1, 2024
ef10321
Merge branch 'upstream-master'
Aug 2, 2024
0dfb56c
Merge branch 'upstream-master'
Aug 3, 2024
ee043e4
Merge branch 'upstream-master'
Aug 5, 2024
7214e39
Merge branch 'upstream-master'
Aug 6, 2024
6b3ac81
Merge branch 'upstream-master'
Aug 7, 2024
663df42
Merge branch 'upstream-master'
Aug 8, 2024
18f392f
Merge branch 'upstream-master'
Aug 9, 2024
7e78899
Merge branch 'upstream-master'
Aug 10, 2024
55a812e
Merge branch 'upstream-master'
Aug 12, 2024
030f34f
Merge branch 'upstream-master'
Aug 13, 2024
bf4699d
Merge branch 'upstream-master'
Aug 14, 2024
3853dd7
Merge branch 'upstream-master'
Aug 15, 2024
819aa23
Merge branch 'upstream-master'
Aug 16, 2024
6006208
Merge branch 'upstream-master'
Aug 17, 2024
3a5bfec
WIP
jbachorik Aug 19, 2024
79d0669
WIP
jbachorik Aug 20, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions .github/workflows/dd-sync.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# .github/workflows/sync-upstream.yml
name: Sync Upstream

on:
schedule:
- cron: '22 14 * * *' # Runs every day at 14:15 UTC
workflow_dispatch:

jobs:
sync:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v2
with:
persist-credentials: false
fetch-depth: 0

- name: Pull latest changes from upstream
run: |
git config --global user.email "sync@datadoghq.com"
git config --global user.name "Datadog Syncup Service"
git remote add upstream https://github.com/openjdk/jdk.git
git fetch upstream
git checkout -b upstream-master upstream/master
git checkout master
git merge upstream-master

- name: Push changes to downstream
uses: ad-m/github-push-action@master
with:
github_token: ${{ secrets.GH_PAT }}
branch: master
43 changes: 43 additions & 0 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
image: alpine

stages: [prepare, trigger]

prepare:
stage: prepare
image: "486234852809.dkr.ecr.us-east-1.amazonaws.com/images/docker:24.0.4-gbi-focal"
tags: [ "arch:arm64" ]
script:
- echo "Preparing to trigger the build pipeline"
- echo "FEATURE_VERSION=$(cat make/conf/version-numbers.conf | grep 'DEFAULT_VERSION_FEATURE=' | cut -d '=' -f 2)" > build.env
artifacts:
reports:
dotenv: build.env
expire_in: 1 day

build:
stage: trigger
needs: [prepare]
variables:
JDK_VERSION: "latest"
DEBUG_LEVEL: "fastdebug"
HASH: "${CI_COMMIT_SHORT_SHA}"
trigger:
project: DataDog/openjdk-build
strategy: depend
branch: main
forward:
pipeline_variables: true

test:
stage: trigger
needs: [prepare, build]
variables:
JDK_VERSION: "${FEATURE_VERSION}"
DEBUG_LEVEL: "fastdebug"
HASH: "${CI_COMMIT_SHORT_SHA}"
trigger:
project: DataDog/apm-reliability/async-profiler-build
strategy: depend
branch: main
forward:
pipeline_variables: true
9 changes: 9 additions & 0 deletions src/hotspot/os/posix/dtrace/hotspot_gc.d
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
provider hotspot_gc {
probe AllocObject__sample(char*, size_t, size_t);
};

#pragma D attributes Standard/Standard/Common provider hotspot_gc provider
#pragma D attributes Private/Private/Unknown provider hotspot_gc module
#pragma D attributes Private/Private/Unknown provider hotspot_gc function
#pragma D attributes Standard/Standard/Common provider hotspot_gc name
#pragma D attributes Evolving/Evolving/Common provider hotspot_gc args
6 changes: 4 additions & 2 deletions src/hotspot/share/gc/shared/allocTracer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@
#endif

void AllocTracer::send_allocation_outside_tlab(Klass* klass, HeapWord* obj, size_t alloc_size, JavaThread* thread) {
JFR_ONLY(JfrAllocationTracer tracer(klass, obj, alloc_size, true, thread);)
EventObjectAllocationOutsideTLAB event;
if (event.should_commit()) {
event.set_objectClass(klass);
Expand All @@ -42,7 +41,6 @@ void AllocTracer::send_allocation_outside_tlab(Klass* klass, HeapWord* obj, size
}

void AllocTracer::send_allocation_in_new_tlab(Klass* klass, HeapWord* obj, size_t tlab_size, size_t alloc_size, JavaThread* thread) {
JFR_ONLY(JfrAllocationTracer tracer(klass, obj, alloc_size, false, thread);)
EventObjectAllocationInNewTLAB event;
if (event.should_commit()) {
event.set_objectClass(klass);
Expand All @@ -52,6 +50,10 @@ void AllocTracer::send_allocation_in_new_tlab(Klass* klass, HeapWord* obj, size_
}
}

void AllocTracer::send_allocation_sample(Klass* klass, HeapWord* obj, size_t alloc_size, size_t weight, bool large_allocation, JavaThread* thread) {
JFR_ONLY(JfrAllocationTracer tracer(klass, obj, alloc_size, large_allocation, thread);)
}

void AllocTracer::send_allocation_requiring_gc_event(size_t size, uint gcId) {
EventAllocationRequiringGC event;
if (event.should_commit()) {
Expand Down
1 change: 1 addition & 0 deletions src/hotspot/share/gc/shared/allocTracer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ class AllocTracer : AllStatic {
public:
static void send_allocation_outside_tlab(Klass* klass, HeapWord* obj, size_t alloc_size, JavaThread* thread);
static void send_allocation_in_new_tlab(Klass* klass, HeapWord* obj, size_t tlab_size, size_t alloc_size, JavaThread* thread);
static void send_allocation_sample(Klass* klass, HeapWord* obj, size_t alloc_size, size_t weight, bool large_allocation, JavaThread* thread);
static void send_allocation_requiring_gc_event(size_t size, uint gcId);
};

Expand Down
53 changes: 43 additions & 10 deletions src/hotspot/share/gc/shared/memAllocator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
#include "gc/shared/memAllocator.hpp"
#include "gc/shared/threadLocalAllocBuffer.inline.hpp"
#include "gc/shared/tlab_globals.hpp"
#include "jfr/jfrEvents.hpp"
#include "memory/universe.hpp"
#include "oops/arrayOop.hpp"
#include "oops/oop.inline.hpp"
Expand All @@ -41,6 +42,7 @@
#include "services/lowMemoryDetector.hpp"
#include "utilities/align.hpp"
#include "utilities/copy.hpp"
#include "utilities/dtrace.hpp"
#include "utilities/globalDefinitions.hpp"

class MemAllocator::Allocation: StackObj {
Expand Down Expand Up @@ -171,7 +173,8 @@ void MemAllocator::Allocation::notify_allocation_jvmti_sampler() {
return;
}

if (!_allocated_outside_tlab && _allocated_tlab_size == 0 && !_tlab_end_reset_for_sample) {
bool hit_mark = _allocated_tlab_size != 0 || _tlab_end_reset_for_sample;
if (!_allocated_outside_tlab && !hit_mark) {
// Sample if it's a non-TLAB allocation, or a TLAB allocation that either refills the TLAB
// or expands it due to taking a sampler induced slow path.
return;
Expand All @@ -181,23 +184,21 @@ void MemAllocator::Allocation::notify_allocation_jvmti_sampler() {
// before doing the callback. The callback is done in the destructor of
// the JvmtiSampledObjectAllocEventCollector.
size_t bytes_since_last = 0;

size_t bytes_since_allocation = 0;
{
PreserveObj obj_h(_thread, _obj_ptr);
JvmtiSampledObjectAllocEventCollector collector;
size_t size_in_bytes = _allocator._word_size * HeapWordSize;
ThreadLocalAllocBuffer& tlab = _thread->tlab();

if (!_allocated_outside_tlab) {
bytes_since_last = tlab.bytes_since_last_sample_point();
if (_thread->heap_samplers().jvmti().check_for_sampling(&bytes_since_allocation, size_in_bytes, !_allocated_outside_tlab)) {
JvmtiExport::sampled_object_alloc_event_collector(obj_h());
}

_thread->heap_sampler().check_for_sampling(obj_h(), size_in_bytes, bytes_since_last);
}

if (_tlab_end_reset_for_sample || _allocated_tlab_size != 0) {
if (hit_mark) {
ThreadHeapSampler& sampler = _thread->heap_samplers().jvmti();
// Tell tlab to forget bytes_since_last if we passed it to the heap sampler.
_thread->tlab().set_sample_end(bytes_since_last != 0);
sampler.update_bytes(_thread->tlab().set_sample_end(sampler.bytes_until_sample()), !_allocated_outside_tlab);
}
}

Expand All @@ -217,6 +218,36 @@ void MemAllocator::Allocation::notify_allocation_jfr_sampler() {
AllocTracer::send_allocation_in_new_tlab(obj()->klass(), mem, _allocated_tlab_size * HeapWordSize,
size_in_bytes, _thread);
}

EventObjectAllocationSample event;
if (!event.should_commit()) {
return;
}

bool hit_mark = _allocated_tlab_size != 0 || _tlab_end_reset_for_sample;
if (!_allocated_outside_tlab && !hit_mark) {
// Sample if it's a non-TLAB allocation, or a TLAB allocation that either refills the TLAB
// or expands it due to taking a sampler induced slow path.
return;
}

ThreadHeapSampler& sampler = _thread->heap_samplers().jfr();
if (sampler.bytes_until_sample() == static_cast<size_t>(-1)) {
return;
}

size_t bytes_since_allocation = 0;
if (sampler.check_for_sampling(&bytes_since_allocation, size_in_bytes, !_allocated_outside_tlab)) {
size_t weight = bytes_since_allocation == 0 ? size_in_bytes : bytes_since_allocation;
AllocTracer::send_allocation_sample(obj()->klass(), mem, size_in_bytes, weight, _allocated_outside_tlab, _thread);
HOTSPOT_GC_ALLOCOBJECT_SAMPLE(obj()->klass()->name()->as_C_string(), size_in_bytes, weight);
}

if (hit_mark) {
// Tell tlab to forget bytes_since_last if we passed it to the heap sampler.
size_t bytes_inc = _thread->tlab().set_sample_end(sampler.bytes_until_sample());
sampler.update_bytes(bytes_inc, !_allocated_outside_tlab);
}
}

void MemAllocator::Allocation::notify_allocation_dtrace_sampler() {
Expand Down Expand Up @@ -258,7 +289,9 @@ HeapWord* MemAllocator::mem_allocate_inside_tlab_slow(Allocation& allocation) co
HeapWord* mem = nullptr;
ThreadLocalAllocBuffer& tlab = _thread->tlab();

if (JvmtiExport::should_post_sampled_object_alloc()) {
EventObjectAllocationSample event;

if (JvmtiExport::should_post_sampled_object_alloc() || event.should_commit()) {
tlab.set_back_allocation_end();
mem = tlab.allocate(_word_size);

Expand Down
24 changes: 15 additions & 9 deletions src/hotspot/share/gc/shared/threadLocalAllocBuffer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ ThreadLocalAllocBuffer::ThreadLocalAllocBuffer() :
_desired_size(0),
_refill_waste_limit(0),
_allocated_before_last_gc(0),
_bytes_since_last_sample_point(0),
_number_of_refills(0),
_refill_waste(0),
_gc_waste(0),
Expand Down Expand Up @@ -203,6 +202,7 @@ void ThreadLocalAllocBuffer::initialize(HeapWord* start,
set_end(end);
set_allocation_end(end);
invariants();
_end_backup = nullptr;
}

void ThreadLocalAllocBuffer::initialize() {
Expand Down Expand Up @@ -313,21 +313,27 @@ void ThreadLocalAllocBuffer::print_stats(const char* tag) {
_refill_waste * HeapWordSize);
}

void ThreadLocalAllocBuffer::set_sample_end(bool reset_byte_accumulation) {
size_t ThreadLocalAllocBuffer::set_sample_end(size_t bytes_until_sample) {
size_t heap_words_remaining = pointer_delta(_end, _top);
size_t bytes_until_sample = thread()->heap_sampler().bytes_until_sample();
size_t words_until_sample = bytes_until_sample / HeapWordSize;

if (reset_byte_accumulation) {
_bytes_since_last_sample_point = 0;
}

if (heap_words_remaining > words_until_sample) {
HeapWord* new_end = _top + words_until_sample;
if (_end_backup != nullptr) {
if (new_end > _end_backup) {
HeapWord* tmp = new_end;
new_end = _end_backup;
_end_backup = tmp;
}
}
set_end(new_end);
_bytes_since_last_sample_point += bytes_until_sample;
return bytes_until_sample;
} else {
_bytes_since_last_sample_point += heap_words_remaining * HeapWordSize;
if (_end_backup != nullptr) {
set_end(_end_backup);
_end_backup = nullptr;
}
return heap_words_remaining * HeapWordSize;
}
}

Expand Down
5 changes: 2 additions & 3 deletions src/hotspot/share/gc/shared/threadLocalAllocBuffer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,12 +51,12 @@ class ThreadLocalAllocBuffer: public CHeapObj<mtThread> {
HeapWord* _top; // address after last allocation
HeapWord* _pf_top; // allocation prefetch watermark
HeapWord* _end; // allocation end (can be the sampling end point or _allocation_end)
HeapWord* _end_backup; // backup of _end for interleaved jvmti and jfr sampling
HeapWord* _allocation_end; // end for allocations (actual TLAB end, excluding alignment_reserve)

size_t _desired_size; // desired size (including alignment_reserve)
size_t _refill_waste_limit; // hold onto tlab if free() is larger than this
size_t _allocated_before_last_gc; // total bytes allocated up until the last gc
size_t _bytes_since_last_sample_point; // bytes since last sample point.

static size_t _max_size; // maximum size of any TLAB
static int _reserve_for_allocation_prefetch; // Reserve at the end of the TLAB
Expand Down Expand Up @@ -124,7 +124,6 @@ class ThreadLocalAllocBuffer: public CHeapObj<mtThread> {
size_t free() const { return pointer_delta(end(), top()); }
// Don't discard tlab if remaining space is larger than this.
size_t refill_waste_limit() const { return _refill_waste_limit; }
size_t bytes_since_last_sample_point() const { return _bytes_since_last_sample_point; }

// For external inspection.
const HeapWord* start_relaxed() const;
Expand Down Expand Up @@ -168,7 +167,7 @@ class ThreadLocalAllocBuffer: public CHeapObj<mtThread> {
void initialize();

void set_back_allocation_end();
void set_sample_end(bool reset_byte_accumulation);
size_t set_sample_end(size_t bytes_until_sample);

static size_t refill_waste_limit_increment();

Expand Down
4 changes: 4 additions & 0 deletions src/hotspot/share/jfr/recorder/service/jfrEventThrottler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
#include "jfr/recorder/service/jfrEventThrottler.hpp"
#include "jfr/utilities/jfrSpinlockHelper.hpp"
#include "logging/log.hpp"
#include "runtime/threadHeapSampler.hpp"

constexpr static const JfrSamplerParams _disabled_params = {
0, // sample points per window
Expand Down Expand Up @@ -72,6 +73,9 @@ void JfrEventThrottler::configure(JfrEventId event_id, int64_t sample_size, int6
}
assert(_throttler != nullptr, "JfrEventThrottler has not been properly initialized");
_throttler->configure(sample_size, period_ms);

// TODO: Hack to get the allocation sampler going
ThreadHeapSamplers::set_jfr_sampling_interval(512 * 1024);
}

/*
Expand Down
2 changes: 1 addition & 1 deletion src/hotspot/share/prims/jvmtiEnv.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3760,7 +3760,7 @@ JvmtiEnv::SetHeapSamplingInterval(jint sampling_interval) {
if (sampling_interval < 0) {
return JVMTI_ERROR_ILLEGAL_ARGUMENT;
}
ThreadHeapSampler::set_sampling_interval(sampling_interval);
ThreadHeapSamplers::set_jvmti_sampling_interval(sampling_interval);
return JVMTI_ERROR_NONE;
} /* end SetHeapSamplingInterval */

Expand Down
4 changes: 2 additions & 2 deletions src/hotspot/share/runtime/thread.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,7 @@ class Thread: public ThreadShadow {
ThreadLocalAllocBuffer _tlab; // Thread-local eden
jlong _allocated_bytes; // Cumulative number of bytes allocated on
// the Java heap
ThreadHeapSampler _heap_sampler; // For use when sampling the memory.
ThreadHeapSamplers _heap_samplers; // Used by the JVMTI allocation sampler

ThreadStatisticalInfo _statistical_info; // Statistics about the thread

Expand Down Expand Up @@ -418,7 +418,7 @@ class Thread: public ThreadShadow {
void incr_allocated_bytes(jlong size) { _allocated_bytes += size; }
inline jlong cooked_allocated_bytes();

ThreadHeapSampler& heap_sampler() { return _heap_sampler; }
ThreadHeapSamplers& heap_samplers() { return _heap_samplers; }

ThreadStatisticalInfo& statistical_info() { return _statistical_info; }

Expand Down
Loading