Skip to content

Commit

Permalink
[Wisp] support Async IO in non-wisp flow
Browse files Browse the repository at this point in the history
Summary:
Use -XX:+UseAsyncIO to enable ThreadPool based asynchronous IO

Test Plan:

Reviewed-by: leiyu, zhengxiaolinX

Issue:  dragonwell-project/dragonwell8#213
  • Loading branch information
识月 authored and joeylee.lz committed Mar 17, 2021
1 parent b6966b0 commit 4e9be1a
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 0 deletions.
3 changes: 3 additions & 0 deletions src/share/vm/classfile/vmSymbols.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -349,6 +349,8 @@
template(initializeSystemClass_name, "initializeSystemClass") \
template(initializeWispClass_name, "initializeWispClass") \
template(startWispDaemons_name, "startWispDaemons") \
template(initializeAsyncIOClass_name, "initializeAsyncIOClass") \
template(startAsyncIODaemon_name, "startAsyncIODaemon") \
template(loadClass_name, "loadClass") \
template(loadClassInternal_name, "loadClassInternal") \
template(get_name, "get") \
Expand Down Expand Up @@ -646,6 +648,7 @@
template(com_alibaba_wisp_engine_WispEngine, "com/alibaba/wisp/engine/WispEngine") \
template(com_alibaba_wisp_engine_WispCarrier, "com/alibaba/wisp/engine/WispCarrier") \
template(com_alibaba_wisp_engine_WispEventPump, "com/alibaba/wisp/engine/WispEventPump") \
template(com_alibaba_wisp_engine_WispAsyncIO, "com/alibaba/wisp/engine/WispAsyncIO") \
template(isInCritical_name, "isInCritical") \
template(jdkParkStatus_name, "jdkParkStatus") \
template(jvmParkStatus_name, "jvmParkStatus") \
Expand Down
6 changes: 6 additions & 0 deletions src/share/vm/prims/jvm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -416,6 +416,12 @@ JVM_ENTRY(jobject, JVM_InitProperties(JNIEnv *env, jobject properties))
}
}

{
if (UseAsyncIO && EnableCoroutine) {
PUTPROP(props, "com.alibaba.wisp.enableAsyncIO", "true");
}
}

// JVM monitoring and management support
// Add the sun.management.compiler property for the compiler's name
{
Expand Down
4 changes: 4 additions & 0 deletions src/share/vm/runtime/globals_ext.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,10 @@
diagnostic(bool, VerboseWisp, false, \
"Print verbose Wisp information") \
\
product(bool, UseAsyncIO, false, \
"Enable Thread-based asynchronous IO") \
\
\
manageable(bool, PrintThreadCoroutineInfo, false, \
"print the park/unpark information for thread coroutine") \
\
Expand Down
25 changes: 25 additions & 0 deletions src/share/vm/runtime/thread.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1113,6 +1113,24 @@ static void call_startWispDaemons(TRAPS) {
vmSymbols::void_method_signature(), CHECK);
}

static void call_initializeAsyncIOClass(TRAPS) {
Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::com_alibaba_wisp_engine_WispAsyncIO(), true, CHECK);
instanceKlassHandle klass (THREAD, k);

JavaValue result(T_VOID);
JavaCalls::call_static(&result, klass, vmSymbols::initializeAsyncIOClass_name(),
vmSymbols::void_method_signature(), CHECK);
}

static void call_startAsyncIODaemon(TRAPS) {
Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::com_alibaba_wisp_engine_WispAsyncIO(), true, CHECK);
instanceKlassHandle klass (THREAD, k);

JavaValue result(T_VOID);
JavaCalls::call_static(&result, klass, vmSymbols::startAsyncIODaemon_name(),
vmSymbols::void_method_signature(), CHECK);
}

char java_runtime_name[128] = "";
char java_runtime_version[128] = "";
char java_distro_name[128] = "";
Expand Down Expand Up @@ -3889,6 +3907,8 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) {
initialize_class(vmSymbols::java_dyn_CoroutineSupport(), CHECK_0);
Coroutine::initialize_coroutine_support((JavaThread*) THREAD);
call_initializeWispClass(CHECK_0);
} else if (UseAsyncIO) {
call_initializeAsyncIOClass(CHECK_0);
}

// get the Java runtime name after java.lang.System is initialized
Expand Down Expand Up @@ -3964,6 +3984,11 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) {
if (HAS_PENDING_EXCEPTION) {
vm_exit_during_initialization(Handle(THREAD, PENDING_EXCEPTION));
}
} else if (UseAsyncIO) {
call_startAsyncIODaemon(THREAD);
if (HAS_PENDING_EXCEPTION) {
vm_exit_during_initialization(Handle(THREAD, PENDING_EXCEPTION));
}
}

#ifndef USDT2
Expand Down

0 comments on commit 4e9be1a

Please sign in to comment.