Profile workspace CPU phases
This commit is contained in:
@@ -157,8 +157,11 @@ struct WasmRequestProfile
|
||||
static const u64 HOSTCALL_OPERATION_MAX = 96;
|
||||
u64 dispatch_us = 0;
|
||||
u64 workspace_setup_us = 0;
|
||||
u64 workspace_setup_cpu_us = 0;
|
||||
u64 workspace_birth_us = 0;
|
||||
u64 workspace_birth_cpu_us = 0;
|
||||
u64 context_apply_us = 0;
|
||||
u64 context_apply_cpu_us = 0;
|
||||
u64 component_resolve_count = 0;
|
||||
u64 component_resolve_total_us = 0;
|
||||
u64 component_path_total_us = 0;
|
||||
@@ -2299,8 +2302,13 @@ private:
|
||||
response["workspace_wait_us"] = (f64)(workspace_wall_us > workspace_cpu_us ? workspace_wall_us - workspace_cpu_us : 0);
|
||||
response["dispatch_us"] = (f64)self->dispatch_us;
|
||||
response["workspace_setup_us"] = (f64)self->workspace_setup_us;
|
||||
response["workspace_setup_cpu_us"] = (f64)self->workspace_setup_cpu_us;
|
||||
response["workspace_birth_us"] = (f64)self->workspace_birth_us;
|
||||
response["workspace_birth_cpu_us"] = (f64)self->workspace_birth_cpu_us;
|
||||
response["context_apply_us"] = (f64)self->context_apply_us;
|
||||
response["context_apply_cpu_us"] = (f64)self->context_apply_cpu_us;
|
||||
u64 phase_cpu_us = self->workspace_setup_cpu_us + self->workspace_birth_cpu_us + self->context_apply_cpu_us;
|
||||
response["execution_cpu_us"] = (f64)(workspace_cpu_us > phase_cpu_us ? workspace_cpu_us - phase_cpu_us : 0);
|
||||
response["hostcall_count"] = (f64)self->hostcall_count;
|
||||
response["hostcall_us"] = (f64)self->hostcall_total_us;
|
||||
std::vector<u64> invoked_hostcalls;
|
||||
@@ -3452,6 +3460,9 @@ inline WasmResponse wasm_worker_serve(WasmWorker& worker, const DValue& context_
|
||||
WasmWorkspace workspace(worker);
|
||||
workspace.workspace_setup_us = (u64)std::chrono::duration_cast<std::chrono::microseconds>(
|
||||
std::chrono::steady_clock::now() - workspace_start).count();
|
||||
f64 setup_cpu_finished = wasm_thread_cpu_time();
|
||||
workspace.workspace_setup_cpu_us = cpu_started > 0 && setup_cpu_finished > cpu_started ?
|
||||
(u64)((setup_cpu_finished - cpu_started) * 1000000.0) : 0;
|
||||
if(request)
|
||||
{
|
||||
workspace.set_perf_snapshot(my_pid, (u64)parent_pid, request->server ? request->server->request_count : 0,
|
||||
@@ -3461,15 +3472,23 @@ inline WasmResponse wasm_worker_serve(WasmWorker& worker, const DValue& context_
|
||||
workspace.dispatch_us = (u64)((serve_started - request->stats.time_start) * 1000000.0);
|
||||
}
|
||||
auto birth_start = std::chrono::steady_clock::now();
|
||||
f64 birth_cpu_start = wasm_thread_cpu_time();
|
||||
String error = workspace.birth();
|
||||
workspace.workspace_birth_us = (u64)std::chrono::duration_cast<std::chrono::microseconds>(
|
||||
std::chrono::steady_clock::now() - birth_start).count();
|
||||
f64 birth_cpu_finished = wasm_thread_cpu_time();
|
||||
workspace.workspace_birth_cpu_us = birth_cpu_start > 0 && birth_cpu_finished > birth_cpu_start ?
|
||||
(u64)((birth_cpu_finished - birth_cpu_start) * 1000000.0) : 0;
|
||||
if(error == "")
|
||||
{
|
||||
auto context_start = std::chrono::steady_clock::now();
|
||||
f64 context_cpu_start = wasm_thread_cpu_time();
|
||||
error = workspace.apply_context(context_tree);
|
||||
workspace.context_apply_us = (u64)std::chrono::duration_cast<std::chrono::microseconds>(
|
||||
std::chrono::steady_clock::now() - context_start).count();
|
||||
f64 context_cpu_finished = wasm_thread_cpu_time();
|
||||
workspace.context_apply_cpu_us = context_cpu_start > 0 && context_cpu_finished > context_cpu_start ?
|
||||
(u64)((context_cpu_finished - context_cpu_start) * 1000000.0) : 0;
|
||||
}
|
||||
if(error == "")
|
||||
error = workspace.invoke_entry(entry_source_path, handler, &response.handler_present);
|
||||
|
||||
Reference in New Issue
Block a user