Profile FastCGI transport phases

This commit is contained in:
udo
2026-07-16 20:49:13 +00:00
parent bbfbd63b53
commit 83c05111a9
5 changed files with 23 additions and 4 deletions
+2
View File
@@ -1224,6 +1224,7 @@ FastCGIServer::read_fgci(Connection& connection)
request.resources.params_buffer.size());
request.resources.params_buffer.clear();
request.flags.params_closed = true;
request.stats.time_params = time_precise();
//std::cout << "Params " << var_dump(request.params) << "\n";
request.flags.status = on_request(request);
if (request.flags.status == 0 && !request.in.empty())
@@ -1261,6 +1262,7 @@ FastCGIServer::read_fgci(Connection& connection)
}
} else {
request.flags.input_closed = true;
request.stats.time_input = time_precise();
if (request.flags.params_closed && request.flags.status == 0) {
request.flags.status = on_complete(request);
request_write_fgci(connection, request_id, request);
+2
View File
@@ -305,6 +305,8 @@ struct Request {
struct Stats {
u32 bytes_written = 0;
f64 time_init = 0;
f64 time_params = 0;
f64 time_input = 0;
f64 time_start = 0;
f64 time_end = 0;
u64 mem_high = 0;
+14 -2
View File
@@ -1145,6 +1145,8 @@ public:
u64 parent_pid = 0;
u64 request_count = 0;
f64 time_init = 0;
f64 time_params = 0;
f64 time_input = 0;
f64 time_start = 0;
bool active = false;
} request_perf;
@@ -1153,12 +1155,15 @@ public:
{
}
void set_perf_snapshot(u64 worker_pid, u64 parent_pid, u64 request_count, f64 time_init, f64 time_start)
void set_perf_snapshot(u64 worker_pid, u64 parent_pid, u64 request_count,
f64 time_init, f64 time_params, f64 time_input, f64 time_start)
{
request_perf.worker_pid = worker_pid;
request_perf.parent_pid = parent_pid;
request_perf.request_count = request_count;
request_perf.time_init = time_init;
request_perf.time_params = time_params;
request_perf.time_input = time_input;
request_perf.time_start = time_start;
request_perf.active = true;
}
@@ -2165,6 +2170,12 @@ private:
response["request_count"] = (f64)self->request_perf.request_count;
if(self->request_perf.time_start > 0 && self->request_perf.time_init > 0)
response["accept_us"] = (f64)((self->request_perf.time_start - self->request_perf.time_init) * 1000000.0);
if(self->request_perf.time_params > 0 && self->request_perf.time_init > 0)
response["transport_params_us"] = (f64)((self->request_perf.time_params - self->request_perf.time_init) * 1000000.0);
if(self->request_perf.time_input > 0 && self->request_perf.time_params > 0)
response["transport_input_us"] = (f64)((self->request_perf.time_input - self->request_perf.time_params) * 1000000.0);
if(self->request_perf.time_start > 0 && self->request_perf.time_input > 0)
response["handler_queue_us"] = (f64)((self->request_perf.time_start - self->request_perf.time_input) * 1000000.0);
if(self->request_perf.time_start > 0)
response["running_us"] = (f64)((now - self->request_perf.time_start) * 1000000.0);
if(self->request_perf.time_init > 0)
@@ -3298,7 +3309,8 @@ inline WasmResponse wasm_worker_serve(WasmWorker& worker, const DValue& context_
std::chrono::steady_clock::now() - workspace_start).count();
if(request)
{
workspace.set_perf_snapshot(my_pid, (u64)parent_pid, request->server ? request->server->request_count : 0, request->stats.time_init, request->stats.time_start);
workspace.set_perf_snapshot(my_pid, (u64)parent_pid, request->server ? request->server->request_count : 0,
request->stats.time_init, request->stats.time_params, request->stats.time_input, request->stats.time_start);
if(request->stats.time_start > 0 && serve_started > request->stats.time_start)
workspace.dispatch_us = (u64)((serve_started - request->stats.time_start) * 1000000.0);
}