Skip to content

Commit 3e0d338

Browse files
authored
Merge pull request #19769 from theresa-m/scc_perf
Call getCpeTypeForProtocol only if URL is not cached
2 parents 5e609cd + 7747b8c commit 3e0d338

File tree

2 files changed

+24
-40
lines changed

2 files changed

+24
-40
lines changed

runtime/jcl/common/shared.c

Lines changed: 20 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ typedef struct URLElements {
7171
} URLElements;
7272

7373

74-
static J9ClassPathEntry *getCachedURL(JNIEnv *env, jint helperID, const char *pathChars, jsize pathLen, UDATA cpeType, U_16 cpeStatus, const char *correctedPath);
74+
static J9ClassPathEntry *getCachedURL(JNIEnv *env, jint helperID, const URLElements *urlElements, U_16 cpeStatus);
7575
static const char* copyString(J9PortLibrary* portlib, const char* toCopy, UDATA length, J9SharedStringFarm** farmRoot, const J9UTF8** makeUTF8);
7676
UDATA urlHashFn(void* item, void *userData);
7777
static jint createURLEntry(JNIEnv *env, jint helperID, J9ClassPathEntry **cpEntry_, const char *correctedPathCopy, UDATA cpeType, U_16 cpeStatus);
@@ -615,7 +615,7 @@ getCpeTypeForProtocol(JNIEnv *env, const char *protocol, jsize protocolLen, cons
615615

616616
/* THREADING: Must be protected by jclCacheMutex */
617617
static J9ClassPathEntry *
618-
getCachedURL(JNIEnv *env, jint helperID, const char *pathChars, jsize pathLen, UDATA cpeType, U_16 cpeStatus, const char *correctedPath)
618+
getCachedURL(JNIEnv *env, jint helperID, const URLElements *urlElements, U_16 cpeStatus)
619619
{
620620
J9JavaVM* vm = ((J9VMThread*)env)->javaVM;
621621
struct URLhtEntry* anElement = NULL;
@@ -625,15 +625,14 @@ getCachedURL(JNIEnv *env, jint helperID, const char *pathChars, jsize pathLen, U
625625

626626
PORT_ACCESS_FROM_JAVAVM(vm);
627627

628-
Trc_JCL_com_ibm_oti_shared_getCachedURL_Entry(env, helperID, cpeType);
628+
Trc_JCL_com_ibm_oti_shared_getCachedURL_Entry_1(env, helperID);
629629

630630
if (urlHashTable) {
631631
struct URLhtEntry dummy;
632632

633-
dummy.origPath = pathChars;
634-
dummy.origPathLen = pathLen;
633+
dummy.origPath = urlElements->pathChars;
634+
dummy.origPathLen = urlElements->pathLen;
635635
dummy.helperID = helperID;
636-
dummy.cpeType = cpeType;
637636

638637
anElement = (struct URLhtEntry*)hashTableFind(urlHashTable, (void*)&dummy);
639638
}
@@ -643,10 +642,21 @@ getCachedURL(JNIEnv *env, jint helperID, const char *pathChars, jsize pathLen, U
643642
} else {
644643
URLhtEntry newEntry;
645644
const char* origPathCopy;
645+
char *correctedPath = NULL;
646+
UDATA cpeType = getCpeTypeForProtocol(
647+
env,
648+
urlElements->protocolChars,
649+
urlElements->protocolLen,
650+
urlElements->pathChars,
651+
urlElements->pathLen,
652+
&correctedPath);
653+
if (CPE_TYPE_UNKNOWN == cpeType) {
654+
goto _error;
655+
}
646656

647657
/* We must make a copy of the path
648658
This is kept in the URLhtEntry and must be valid for the lifetime of the JVM */
649-
if (!(origPathCopy = getCachedString(env, (const char*)pathChars, (jsize)pathLen, &(config->jclStringFarm), NULL))) {
659+
if (!(origPathCopy = getCachedString(env, urlElements->pathChars, urlElements->pathLen, &(config->jclStringFarm), NULL))) {
650660
Trc_JCL_com_ibm_oti_shared_getCachedURL_FailedStringCopy(env);
651661
goto _error;
652662
}
@@ -657,7 +667,7 @@ getCachedURL(JNIEnv *env, jint helperID, const char *pathChars, jsize pathLen, U
657667

658668
/* The original (not corrected) path is used as a key so that the correction does not have to be performed for each lookup */
659669
newEntry.origPath = (const char*)origPathCopy;
660-
newEntry.origPathLen = pathLen;
670+
newEntry.origPathLen = urlElements->pathLen;
661671
newEntry.helperID = helperID;
662672
newEntry.cpeType = cpeType;
663673
newEntry.data = urlEntry;
@@ -818,10 +828,6 @@ urlHashEqualFn(void* left, void* right, void *userData)
818828
Trc_JCL_com_ibm_oti_shared_urlHashEqualFn_Exit1();
819829
return 0;
820830
}
821-
if (leftItem->cpeType != rightItem->cpeType) {
822-
Trc_JCL_com_ibm_oti_shared_urlHashEqualFn_Exit2();
823-
return 0;
824-
}
825831
result = J9UTF8_DATA_EQUALS(leftItem->origPath, leftItem->origPathLen, rightItem->origPath, rightItem->origPathLen);
826832
Trc_JCL_com_ibm_oti_shared_urlHashEqualFn_ExitResult(result);
827833
return result;
@@ -1246,14 +1252,12 @@ Java_com_ibm_oti_shared_SharedClassURLHelperImpl_findSharedClassImpl3(JNIEnv* en
12461252
jmethodID urlGetProtocolID = NULL;
12471253
J9ROMClass* romClass = NULL;
12481254
J9ClassPathEntry* urlEntry = NULL;
1249-
UDATA cpeType = 0;
12501255
UDATA oldState;
12511256
const J9UTF8* partition = NULL;
12521257
omrthread_monitor_t jclCacheMutex = config->jclCacheMutex;
12531258
U_16 cpeStatus = minimizeUpdateChecks ? CPE_STATUS_IGNORE_ZIP_LOAD_STATE : 0;
12541259
J9ClassLoader* classloader;
12551260
URLElements urlElements = {0};
1256-
char *correctedPath = NULL;
12571261

12581262
Trc_JCL_com_ibm_oti_shared_SharedClassURLHelperImpl_findSharedClassImpl_Entry(env, helperID);
12591263

@@ -1285,20 +1289,10 @@ Java_com_ibm_oti_shared_SharedClassURLHelperImpl_findSharedClassImpl3(JNIEnv* en
12851289
if (!getStringPair(env, &nameChars, &nameLen, &partitionChars, &partitionLen, classNameObj, partitionObj)) {
12861290
goto _errorPostClassNamePartition;
12871291
}
1288-
cpeType = getCpeTypeForProtocol(
1289-
env,
1290-
urlElements.protocolChars,
1291-
urlElements.protocolLen,
1292-
urlElements.pathChars,
1293-
urlElements.pathLen,
1294-
&correctedPath);
1295-
if (CPE_TYPE_UNKNOWN == cpeType) {
1296-
goto _errorPostClassNamePartition;
1297-
}
12981292

12991293
omrthread_monitor_enter(jclCacheMutex);
13001294

1301-
urlEntry = getCachedURL(env, helperID, urlElements.pathChars, urlElements.pathLen, cpeType, cpeStatus, correctedPath);
1295+
urlEntry = getCachedURL(env, helperID, &urlElements, cpeStatus);
13021296
if (NULL == urlEntry) {
13031297
omrthread_monitor_exit(jclCacheMutex);
13041298
goto _errorPostClassNamePartition;
@@ -1364,7 +1358,6 @@ Java_com_ibm_oti_shared_SharedClassURLHelperImpl_storeSharedClassImpl3(JNIEnv* e
13641358
J9ROMClass* romClass = NULL;
13651359
J9ROMClass* newROMClass = NULL;
13661360
J9ClassPathEntry* urlEntry = NULL;
1367-
UDATA cpeType = 0;
13681361
J9ClassLoader* classloader;
13691362
UDATA oldState;
13701363
jint result;
@@ -1373,7 +1366,6 @@ Java_com_ibm_oti_shared_SharedClassURLHelperImpl_storeSharedClassImpl3(JNIEnv* e
13731366
SCAbstractAPI * sharedapi = (SCAbstractAPI *)(config->sharedAPIObject);
13741367
U_16 cpeStatus = minimizeUpdateChecks ? CPE_STATUS_IGNORE_ZIP_LOAD_STATE : 0;
13751368
URLElements urlElements = {0};
1376-
char *correctedPath = NULL;
13771369

13781370
Trc_JCL_com_ibm_oti_shared_SharedClassURLHelperImpl_storeSharedClassImpl_Entry(env, helperID);
13791371

@@ -1406,20 +1398,10 @@ Java_com_ibm_oti_shared_SharedClassURLHelperImpl_storeSharedClassImpl3(JNIEnv* e
14061398
if (!getStringChars(env, &partitionChars, &partitionLen, partitionObj)) {
14071399
goto _errorPostPathProtocol;
14081400
}
1409-
cpeType = getCpeTypeForProtocol(
1410-
env,
1411-
urlElements.protocolChars,
1412-
urlElements.protocolLen,
1413-
urlElements.pathChars,
1414-
urlElements.pathLen,
1415-
&correctedPath);
1416-
if (CPE_TYPE_UNKNOWN == cpeType) {
1417-
goto _errorPostPartition;
1418-
}
14191401

14201402
omrthread_monitor_enter(jclCacheMutex);
14211403

1422-
urlEntry = getCachedURL(env, helperID, urlElements.pathChars, urlElements.pathLen, cpeType, cpeStatus, correctedPath);
1404+
urlEntry = getCachedURL(env, helperID, &urlElements, cpeStatus);
14231405
if (NULL == urlEntry) {
14241406
omrthread_monitor_exit(jclCacheMutex);
14251407
goto _errorPostPartition;

runtime/jcl/j9jcl.tdf

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ TraceEntry=Trc_JCL_com_ibm_oti_shared_getCachedToken_Entry Overhead=1 Level=1 Te
210210
TraceExit=Trc_JCL_com_ibm_oti_shared_getCachedToken_ExitFound Overhead=1 Level=1 Template="JCL: com.ibm.oti.shared getCachedToken: Exiting with found cached token"
211211
TraceExit=Trc_JCL_com_ibm_oti_shared_getCachedToken_ExitNull Overhead=1 Level=1 Template="JCL: com.ibm.oti.shared getCachedToken: Exiting with NULL"
212212

213-
TraceEntry=Trc_JCL_com_ibm_oti_shared_getCachedURL_Entry Overhead=1 Level=2 Template="JCL: com.ibm.oti.shared getCachedURL: Entering for helperID=%d, cpeType=%d"
213+
TraceEntry=Trc_JCL_com_ibm_oti_shared_getCachedURL_Entry Obsolete Overhead=1 Level=2 Template="JCL: com.ibm.oti.shared getCachedURL: Entering for helperID=%d, cpeType=%d"
214214
TraceExit=Trc_JCL_com_ibm_oti_shared_getCachedURL_ExitFound Overhead=1 Level=2 Template="JCL: com.ibm.oti.shared getCachedURL: Exiting with found cached URL"
215215
TraceExit=Trc_JCL_com_ibm_oti_shared_getCachedURL_ExitNull Overhead=1 Level=2 Template="JCL: com.ibm.oti.shared getCachedURL: Exiting with NULL"
216216

@@ -245,7 +245,7 @@ TraceExit=Trc_JCL_com_ibm_oti_shared_releaseStringPair_Exit Obsolete Overhead=1
245245

246246
TraceEntry=Trc_JCL_com_ibm_oti_shared_urlHashEqualFn_Entry Noenv Overhead=1 Level=6 Template="JCL: com.ibm.oti.shared urlHashEqualFn: Entering with left=%p, right=%p"
247247
TraceExit=Trc_JCL_com_ibm_oti_shared_urlHashEqualFn_Exit1 Noenv Overhead=1 Level=6 Template="JCL: com.ibm.oti.shared urlHashEqualFn: Exiting as helper IDs don't match"
248-
TraceExit=Trc_JCL_com_ibm_oti_shared_urlHashEqualFn_Exit2 Noenv Overhead=1 Level=6 Template="JCL: com.ibm.oti.shared urlHashEqualFn: Exiting as cpeTypes don't match"
248+
TraceExit=Trc_JCL_com_ibm_oti_shared_urlHashEqualFn_Exit2 Obsolete Noenv Overhead=1 Level=6 Template="JCL: com.ibm.oti.shared urlHashEqualFn: Exiting as cpeTypes don't match"
249249
TraceExit=Trc_JCL_com_ibm_oti_shared_urlHashEqualFn_Exit3 Noenv Overhead=1 Level=6 Template="JCL: com.ibm.oti.shared urlHashEqualFn: Exiting as partition lengths don't match"
250250
TraceExit=Trc_JCL_com_ibm_oti_shared_urlHashEqualFn_Exit4 Noenv Overhead=1 Level=6 Template="JCL: com.ibm.oti.shared urlHashEqualFn: Exiting as partitions don't match"
251251
TraceExit=Trc_JCL_com_ibm_oti_shared_urlHashEqualFn_ExitResult Noenv Overhead=1 Level=6 Template="JCL: com.ibm.oti.shared urlHashEqualFn: Exiting with result=%d"
@@ -711,3 +711,5 @@ TraceEvent=Trc_JCL_memoryManagement_verifyMemoryUsageAfterGC_memoryUsage Test No
711711
TraceExit=Trc_JCL_com_ibm_oti_shared_getCpeTypeForProtocol_ExitFail1 Noenv Overhead=1 Level=3 Template="JCL: com.ibm.oti.shared getCpeTypeForProtocol: Protocol is NULL"
712712
TraceExit=Trc_JCL_com_ibm_oti_shared_getCpeTypeForProtocol_ExitFail2 Noenv Overhead=1 Level=3 Template="JCL: com.ibm.oti.shared getCpeTypeForProtocol: Call to correctURLPath failed"
713713
TraceExit=Trc_JCL_com_ibm_oti_shared_getCpeTypeForProtocol_ExitFail3 Noenv Overhead=1 Level=3 Template="JCL: com.ibm.oti.shared getCpeTypeForProtocol: Attempt to determine path type resulted in error code %d"
714+
715+
TraceEntry=Trc_JCL_com_ibm_oti_shared_getCachedURL_Entry_1 Overhead=1 Level=2 Template="JCL: com.ibm.oti.shared getCachedURL: Entering for helperID=%d"

0 commit comments

Comments
 (0)