Skip to content

Conversation

@XuechunHou
Copy link
Collaborator

No description provided.

fjeremic and others added 30 commits March 12, 2020 11:44
As part of eclipse-openj9#8830 we started using this API in several String
constructors which are quite performance sensitive. Rather than relying
on frequency information always being correct we simply force the
inlining of this small method which will exposed the allocation of the
array which we will store into the String object.

Closes: eclipse-openj9#8831

Signed-off-by: Filip Jeremic <[email protected]>
This patch prints more details when things fail and makes it easier
to distinguish client and server log dumps in the output.

Signed-off-by: Younes Manton <[email protected]>
These JITServer tests are somewhat sensitive to timing because once
the client finishes its work it will exit, but some tests need a long
running client that keeps generating compilation activity while they
start/stop/manipulate the server.

This patch modifies JarTester (the app the client runs) to loop
forever. JarTester loads and compiles a list of classes via
short-lived classloader instances, so simply wrapping that code
in a loop will allow it to keep generating compilation activity.

Signed-off-by: Younes Manton <[email protected]>
These tests were disabled temporarily while a large number of
failures were investigated. The suspected bug has since been
fixed.

Signed-off-by: Younes Manton <[email protected]>
Adds --enable-jitserver for jdk14+

Signed-off-by: Peter Shipton <[email protected]>
A final field should not be modified after initialization. The two final
fields mentioned below are modified after initialization in native code
so they no longer satisfy the conditions of the final keyword. Hence,
the final keyword is removed for the two fields.

MethodHandle.kind is set in the following native method:
1. Java_java_lang_invoke_PrimitiveHandle_lookupMethod

VarHandle.modifiers is set in the following native methods:
1. Java_java_lang_invoke_FieldVarHandle_lookupField
2. Java_java_lang_invoke_FieldVarHandle_unreflectField

Signed-off-by: Babneet Singh <[email protected]>
fixed namespace error

retrieved method signiture

a new way of retrieving method full name

changed to an easier way to retrieve compiled method signature

attempted to add -XX:persistentLoggingDatabasePort flag, hit segmentation fault..

added if clause for persistent logging, retrieved clientUID info

fixed namespace error

retrieved method signiture

Attempt to add logger to openj9.

make Changes and stuff

Add conditionals to check for mongo and cassandra support

-XX flags needed for persistent logging completed

Fix an issue with my previous merge

IMplement environment variable ifdef wrapper thing

port initialization on different DBMS

added if clause for persistent logging, retrieved clientUID info

a new way of retrieving method full name

changed to an easier way to retrieve compiled method signature

attempted to add -XX:persistentLoggingDatabasePort flag, hit segmentation fault..

retrieved method signiture

Attempt to add logger to openj9.

Add conditionals to check for mongo and cassandra support

-XX flags needed for persistent logging completed

IMplement environment variable ifdef wrapper thing

add general persistent logging support flag for checking if persistent logging is enabled regardless of dbms

fix more merge conflicts I forgot

Add more env variable processing

Add fix that allows you to enable the cassandra logger

debug TR_PersistLogging flag

Bring in changes by Ida for persistentLogger spec, dynamically load mongoc library

addressed code review feedback

addressed code review feedback

addressed code review feedback

added if clause for persistent logging, retrieved clientUID info

fixed namespace error

retrieved method signiture

a new way of retrieving method full name

changed to an easier way to retrieve compiled method signature

attempted to add -XX:persistentLoggingDatabasePort flag, hit segmentation fault..

added if clause for persistent logging, retrieved clientUID info

fixed namespace error

retrieved method signiture

Attempt to add logger to openj9.

make Changes and stuff

Add conditionals to check for mongo and cassandra support

-XX flags needed for persistent logging completed

Fix an issue with my previous merge

IMplement environment variable ifdef wrapper thing

port initialization on different DBMS

added if clause for persistent logging, retrieved clientUID info

a new way of retrieving method full name

changed to an easier way to retrieve compiled method signature

attempted to add -XX:persistentLoggingDatabasePort flag, hit segmentation fault..

retrieved method signiture

Attempt to add logger to openj9.

Add conditionals to check for mongo and cassandra support

-XX flags needed for persistent logging completed

IMplement environment variable ifdef wrapper thing

add general persistent logging support flag for checking if persistent logging is enabled regardless of dbms

fix more merge conflicts I forgot

Add more env variable processing

Add fix that allows you to enable the cassandra logger

debug TR_PersistLogging flag

Bring in changes by Ida for persistentLogger spec, dynamically load mongoc library

addressed code review feedback

addressed code review feedback

addressed code review feedback

Begin conversion of mongo to c strings and reformat to code conventions

re-enable flags

Reformat mongologger

addressed code review feedback

addressed code review feedback

addressed code review feedback

Address Feedback. Convert to C Strings. Cleanup Mongoc

Finish making c style changes

Re-add client UID setter and getter in J9PersistentInfo.cpp

Dynamic Load Cassandra
Added new API destroyJITServer to shutdown the JITServer.
Also added code to gracefully terminate the Listener thread.

Signed-off-by: Ashutosh Mehra <[email protected]>
Define an isZeroInitializable method that indicates whether a class's
instances have fields that can be trivially initialized by zeroing
memory.

For prototype support of value types, a class with a value type field
that has not been inlined into the class must have that value type
field of its instances initialized with the default value for the value
type.  The implementation of isZeroInitializable is introduced to detect
that case.

Signed-off-by:  Henry Zongaro <[email protected]>
When low virtual memory is detected, the JIT will decrease the
`scratchSpaceLimit` (i.e. maximum amount of memory a compilation
thread is allowed to use) to 64 MB. This is done only if the current
scratchSpaceLimit is still at the default value of 256 MB.
However, a recent commit has changed the default scratchSpaceLimit
under `-Xtune:virtualized` option to 30 MB. Thus, we may actually
increase the scratchSpaceLimit from 30 MB to 64 MB when low virtual
memory is detected.
This commit adds a check that prevents the increase of the
scratchSpaceLimit under low virtual memory conditions.

Signed-off-by: Marius Pirvu <[email protected]>
Constant Dynamic, Method Handle Constant, and Method Type Constant
 is not currently supported in AOT. Therefore, this
commit throws the appropriate exception in ILGen if this
condition is met. However, because all of these exceptions are a
TR::RecoverableILGenException, if the compiler is generating IL for an
inlined method, it will not abort the compile, but simply refuse to
inline that particular method.

Signed-off-by: Irwin D'Souza <[email protected]>
JITServer has been using getCodeStart() as the reference for offset
calculations when dealing with the patching involved in runtime assumptions.
However, this reference is dependent not only on the startPC but also
on the size of preprologue. This will create problems if we use the reference
before we generate the preprologue or have determined the preprologue
size. We use _binaryBufferStart to remove the preprologue size depedency.

Issue: eclipse-openj9#8786

Signed-off-by: Harry Yu <[email protected]>
When getIndexAt() is called, the passed-in parameter
objectReferenceLocation is not necessarily the reference
that’s stored in the known object table. It should not be
used to pass into updateKnownObjectTableAtServer()
to update the table at the server.

Pass the reference object location from the client to
updateKnownObjectTableAtServer() in getOrCreateIndexAt()
instead of the one passed in from the caller of
getOrCreateIndexAt().

Fixes eclipse-openj9#8952

Signed-off-by: Annabelle Huo <[email protected]>
z14 systems have a multiple facilities for miscellaneous-instruction-extensions (MIE).
This commit looks for the presence of the MIE-2 facility and if available,
sets the associated flag.

Signed-off-by: Pushkar Bettadpur <[email protected]>
This change adds prototype IL generation support for the value type
withfield bytecode in the case where the class specified is resolved.
If the class or field is unresolved, the JIT compilation is
aborted with an UnsupportedValueTypeOperation exception.

Signed-off-by: Yi Zhang <[email protected]>
com.ibm.oti.reflect.* is mostly unused except for the
annotation parsers.  Delete the unused Method/Field/
Constructor implementations and leave the annotation
forwarders.

Further cleanup here may be possible

Signed-off-by: Dan Heidinga <[email protected]>
Signed-off-by: Dan Heidinga <[email protected]>
Remove unused & obsolete reflect implemention
…rver

Fix known object table update at the server
Ashutosh Mehra and others added 29 commits April 8, 2020 00:02
Currently the code uses _systemBytesAllocated when enforcing scratch
space limit. _systemBytesAllocated represents memory allocated using
J9MemorySegments which are by default 16 MB in size for scratch
segments. This causes two problems:
1. It prevents allocation of new system segment when scratch space limit
is not a multiple of system segment size(=16 MB), even though the actual
usage (_regionBytesAllocated) + requested amount is less than scratch
space limit. Eg scratch space limit is set to 30 MB, and one system segment
is allocated (of 16 MB), so _systemBytesAllocated = 16 MB.
Lets say current usage (i.e._regionBytesAllocated is 14 MB).
If we get a request of 4 MB, then we would throw std::bad_alloc even
though the usage would be well below the scratch space limit after
requested memory is allocated.
2. It allows memory usage beyond scratch space limit and upto system
segment size even when the limit is less than the systemt segment size.
Eg if scratch space limit is set to 12 MB, it would allow still allow
usage upto 16 MB.

_regionBytesAllocated represents memory allocated using
TR_MemorySegments which are currently 64 KB in size. Because of much
lower granularity, this variable is a much better approximation for
the actualy physical memory usage in scrach space segments and
therefore it should be used for imposing the scratch space limit.

Signed-off-by: Ashutosh Mehra <[email protected]>
- In order to support PR builds from other GitHub
  servers and other GH orgs a few changes were required.
- Trim characters from version when reponame ends with 'jdk-*'
- Accept any GH org name.
- Support 'zos' as a PR shortname.
- Pass all OpenJ9 and OMR variables to get_source.sh. This
  ensures we are getting the intended repo and branch,
  even if we further checkout something else afterwards.

[skip ci]

Signed-off-by: Adam Brousseau <[email protected]>
sysconf(_SC_LEVEL1_DCACHE_LINESIZE) returns 0 on some systems.
This commit changes j9sysinfo_get_cache_info() to return 64 as the
L1 data cache line size for AArch64 on such systems.

Signed-off-by: KONNO Kazuhiro <[email protected]>
System.getCallerClass() might return a null caller class for a caller
within a JVMTI callback function when
walkStackFrames()/cInterpGetStackClassJEP176Iterator() walked off the
end of the stack. Refer eclipse-openj9#8993 for more info;
In such case, assume java.base for the module of such callers.

Signed-off-by: Jason Feng <[email protected]>
Fix typo in function name containesZeroOrOneConcreteClass
This commit excludes testSoftMxUserScenario from AArch64.
The test sets the -Xmx value based on the available memory on the
test server.  The AArch64 test server has 128GB memory, and that
makes the test with compressed refs build fail.

Signed-off-by: KONNO Kazuhiro <[email protected]>
This commit adds r29-r31 to `jitCalleeSavedRegisterList` for aarch64
because `CLEAR_LOCAL_REGISTER_MAP_ENTRIES` expects `jitCalleeSavedRegisterList` to
have (`J9SW_POTENTIAL_SAVED_REGISTERS` - `J9SW_JIT_CALLEE_PRESERVED_SIZE`) elements.

Signed-off-by: Akira Saitoh <[email protected]>
Prevent increasing the scratchSpaceLimit on low virtual memory
AArch64: Return 64 as L1 data cache line size when info unavailable
…ents-9133

Consolidate jitdump functionality into JitDump.cpp
Assume java.base for the module of a null caller class
…_alloc_fix

Use _regionBytesAllocated to enforce scratch space limit
This adds support for substitutability test in the acmp* bytecodes which
is needed to support value types.

Overview:
-----------

Instead of doing a reference comparison when the ifacmp* bytecodes are
executed with valueType operands, as is the case with reference type
today, valueTypes will perform a structural comparison instead
(substitutability test). This overload of the ifacmp* bytecodes is
required because valueTypes subclass java.lang.Object and use a*
bytecodes. It is possible for the static type of a valueType to be a
reference type (see example below) but the reflexive properties of the
`==` must still be maintained.

Object p = (Object) Point.makePoint(1, 2);
if (p == p) //must be true

The original acmp (legacy acmp) operation in the ifacmp* bytecodes
performs a simple ref comparison, lhs == rhs. This must be updated to
check if both operands are valueTypes, and  if they are of the same
type. If that is the case a structural comparison must be performed.
Example below:

```
acmpSub(lhs, rhs) {
        if (lhs == rhs) return true
        if ((lhs == NULL) || (rhs == NULL)) return false
        if ((lhs.class == rhs.class) && (lhs.isValue)) return
isSubstitutable(lhs, rhs)
        return false
}
```

The structural comparison must iterate through each field and perform an
equality comparison. If the field is byte, short, char, int the
comparison in icmp_eq is performed. If the field is a long the
comparison in lcmp is performed. If the field is a float an icmp
comparison of Float.floatToIntBits of both values is performed. If the
field is a double an lcmp comparison of Double.doubleToLongBits of both
values is performed. Note: this behaviour differs from the float f =
...; f == f case which performs a fcmp* operation. If the field is a
reference type that is java.lang.Object or an Interface or any type that
may contain a valueType (i.e InlineObject, Object, restricted-abstract
classes or interfaces) or if the field is a value type and both values
are not NULL a recursive acmpSub is performed. For all other types the
legacy acmp is performed. Example is below:

```
isSubstitutable(lhs, rhs) {
        for each primitive perform primitive comparison (icmp, lcmp,
Float.floatToIntBits then icmp, )
        for each ref that is j.l.Object, interface, a valueType and
both operands are not NULL perform acmSub (recursive)
        for all other refs perform legacy acmp
        return result
}
```

There are cases where the JVM may optimize the individual field
comparisons of the substitutability test and simply perform a memcmp
over the range of the operands. This optimization is possible in cases
where the substitutability test will not require recursion and there are
no floating point types.
The acmpSub will check to see if the fast comparison flag exists, if so
it will perform a memcmp with both operands that does something like
memcmp(lhs, rhs, lhs.size).

This is based on Adithya's work in
eclipse-openj9#8133

Signed-off-by: Tobi Ajila <[email protected]>
AArch64: Exclude testSoftMxUserScenario
Clear peeking ilgen callNode from callsite
…lleeSavedRegisterList

AArch64: Fix jitCalleeSavedRegisterList
Reduce CompInfo_isCompiled message from the server
Enable --enable-jitserver for all xlinux and plinux
This commit enables DDR tests that were disabled for AArch64 in eclipse-openj9#8569.

Signed-off-by: KONNO Kazuhiro <[email protected]>
Enable DDR JITExt test for AArch64 again
@XuechunHou XuechunHou requested a review from cmbuhler April 9, 2020 18:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.