mirror of
https://github.com/bytecodealliance/wasm-micro-runtime.git
synced 2026-01-16 06:16:41 +00:00
Move exception lock to ModuleInstance data.
This lock acquired on each native function call. This cause performance impact on programs, containing many native function calls, and running in multithreaded environment.
This commit is contained in:
parent
2a2dd19f32
commit
e8b2c51b48
|
|
@ -1962,6 +1962,12 @@ aot_instantiate(AOTModule *module, AOTModuleInstance *parent,
|
|||
module_inst->module = (void *)module;
|
||||
module_inst->e =
|
||||
(WASMModuleInstanceExtra *)((uint8 *)module_inst + extra_info_offset);
|
||||
#if WASM_ENABLE_THREAD_MGR != 0
|
||||
if (os_mutex_init(&module_inst->e->common.exception_lock) != 0) {
|
||||
wasm_runtime_free(module_inst);
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
extra = (AOTModuleInstanceExtra *)module_inst->e;
|
||||
|
||||
#if WASM_ENABLE_GC != 0
|
||||
|
|
@ -2353,6 +2359,10 @@ aot_deinstantiate(AOTModuleInstance *module_inst, bool is_sub_inst)
|
|||
wasm_exec_env_destroy((WASMExecEnv *)module_inst->exec_env_singleton);
|
||||
}
|
||||
|
||||
#if WASM_ENABLE_THREAD_MGR != 0
|
||||
os_mutex_destroy(&module_inst->e->common.exception_lock);
|
||||
#endif
|
||||
|
||||
#if WASM_ENABLE_PERF_PROFILING != 0
|
||||
if (module_inst->func_perf_profilings)
|
||||
wasm_runtime_free(module_inst->func_perf_profilings);
|
||||
|
|
|
|||
|
|
@ -2512,6 +2512,12 @@ wasm_instantiate(WASMModule *module, WASMModuleInstance *parent,
|
|||
module_inst->module = module;
|
||||
module_inst->e =
|
||||
(WASMModuleInstanceExtra *)((uint8 *)module_inst + extra_info_offset);
|
||||
#if WASM_ENABLE_THREAD_MGR != 0
|
||||
if (os_mutex_init(&module_inst->e->common.exception_lock) != 0) {
|
||||
wasm_runtime_free(module_inst);
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if WASM_ENABLE_MULTI_MODULE != 0
|
||||
module_inst->e->sub_module_inst_list =
|
||||
|
|
@ -3501,6 +3507,9 @@ wasm_deinstantiate(WASMModuleInstance *module_inst, bool is_sub_inst)
|
|||
bh_bitmap_delete(module_inst->e->common.elem_dropped);
|
||||
#endif
|
||||
|
||||
#if WASM_ENABLE_THREAD_MGR != 0
|
||||
os_mutex_destroy(&module_inst->e->common.exception_lock);
|
||||
#endif
|
||||
wasm_runtime_free(module_inst);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -334,6 +334,9 @@ typedef struct WASMModuleInstanceExtraCommon {
|
|||
/* The gc heap created */
|
||||
void *gc_heap_handle;
|
||||
#endif
|
||||
#if WASM_ENABLE_THREAD_MGR != 0
|
||||
korp_mutex exception_lock;
|
||||
#endif
|
||||
} WASMModuleInstanceExtraCommon;
|
||||
|
||||
/* Extra info of WASM module instance for interpreter/jit mode */
|
||||
|
|
|
|||
|
|
@ -29,8 +29,6 @@ static bh_list cluster_list_head;
|
|||
static bh_list *const cluster_list = &cluster_list_head;
|
||||
static korp_mutex cluster_list_lock;
|
||||
|
||||
static korp_mutex _exception_lock;
|
||||
|
||||
typedef void (*list_visitor)(void *, void *);
|
||||
|
||||
static uint32 cluster_max_thread_num = CLUSTER_MAX_THREAD_NUM;
|
||||
|
|
@ -51,10 +49,6 @@ thread_manager_init()
|
|||
return false;
|
||||
if (os_mutex_init(&cluster_list_lock) != 0)
|
||||
return false;
|
||||
if (os_mutex_init(&_exception_lock) != 0) {
|
||||
os_mutex_destroy(&cluster_list_lock);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -69,7 +63,6 @@ thread_manager_destroy()
|
|||
cluster = next;
|
||||
}
|
||||
wasm_cluster_cancel_all_callbacks();
|
||||
os_mutex_destroy(&_exception_lock);
|
||||
os_mutex_destroy(&cluster_list_lock);
|
||||
}
|
||||
|
||||
|
|
@ -1540,19 +1533,13 @@ wasm_cluster_is_thread_terminated(WASMExecEnv *exec_env)
|
|||
void
|
||||
exception_lock(WASMModuleInstance *module_inst)
|
||||
{
|
||||
/*
|
||||
* Note: this lock could be per module instance if desirable.
|
||||
* We can revisit on AOT version bump.
|
||||
* It probably doesn't matter though because the exception handling
|
||||
* logic should not be executed too frequently anyway.
|
||||
*/
|
||||
os_mutex_lock(&_exception_lock);
|
||||
os_mutex_lock(&module_inst->e->common.exception_lock);
|
||||
}
|
||||
|
||||
void
|
||||
exception_unlock(WASMModuleInstance *module_inst)
|
||||
{
|
||||
os_mutex_unlock(&_exception_lock);
|
||||
os_mutex_unlock(&module_inst->e->common.exception_lock);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user