Skip to content

Commit 7cb8d55

Browse files
add more metrics to request
1 parent 1762f83 commit 7cb8d55

File tree

4 files changed

+57
-1
lines changed

4 files changed

+57
-1
lines changed

include/aws/s3/private/s3_request.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,26 @@ struct aws_s3_request_metrics {
7070
/* The time duration for the request from start signing to finish signing (sign_end_timestamp_ns -
7171
* sign_start_timestamp_ns). When sign_end_timestamp_ns is 0, means data not available. */
7272
int64_t signing_duration_ns;
73+
74+
/* The time stamp when the request started to acquire memory. -1 means data not
75+
* available. Timestamp are from `aws_high_res_clock_get_ticks` */
76+
int64_t mem_acquire_start_timestamp_ns;
77+
/* The time stamp when the response to acquire memory. -1 means data not
78+
* available. Timestamp are from `aws_high_res_clock_get_ticks` */
79+
int64_t mem_acquire_end_timestamp_ns;
80+
/* The time duration for the request from start mem acquire to finish mem acquire (mem_acquire_end_timestamp_ns
81+
* - mem_acquire_start_timestamp_ns). When sign_end_timestamp_ns is 0, means data not available. */
82+
int64_t mem_acquire_duration_ns;
83+
84+
/* The time stamp when the request started to be delivered (i.e. on body callback is invoked or write to file
85+
* initiated). -1 means data not available. Timestamp are from `aws_high_res_clock_get_ticks` */
86+
int64_t deliver_start_timestamp_ns;
87+
/* The time stamp when the response finished to be delivered. -1 means data not
88+
* available. Timestamp are from `aws_high_res_clock_get_ticks` */
89+
int64_t deliver_end_timestamp_ns;
90+
/* The time duration for the request from start of delivery to finish of delivery (deliver_end_timestamp_ns -
91+
* deliver_start_timestamp_ns). When deliver_duration_ns is 0, means data not available. */
92+
int64_t deliver_duration_ns;
7393
} time_metrics;
7494

7595
struct {

source/s3_client.c

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1850,6 +1850,14 @@ static void s_on_pool_buffer_reserved(void *user_data) {
18501850
struct aws_s3_meta_request *meta_request = request->meta_request;
18511851
AWS_PRECONDITION(meta_request);
18521852

1853+
if (request->send_data.metrics) {
1854+
struct aws_s3_request_metrics *metric = request->send_data.metrics;
1855+
aws_high_res_clock_get_ticks((uint64_t *)&metric->time_metrics.mem_acquire_end_timestamp_ns);
1856+
AWS_ASSERT(metric->time_metrics.mem_acquire_start_timestamp_ns != 0);
1857+
metric->time_metrics.mem_acquire_duration_ns =
1858+
metric->time_metrics.mem_acquire_end_timestamp_ns - metric->time_metrics.mem_acquire_start_timestamp_ns;
1859+
}
1860+
18531861
struct aws_future_s3_buffer_ticket *future_ticket = payload->buffer_future;
18541862

18551863
int error_code = aws_future_s3_buffer_ticket_get_error(future_ticket);
@@ -1889,10 +1897,19 @@ void s_acquire_mem_and_prepare_request(
18891897
void *user_data) {
18901898

18911899
if (request->ticket == NULL && request->should_allocate_buffer_from_pool) {
1900+
1901+
if (request->send_data.metrics) {
1902+
struct aws_s3_request_metrics *metric = request->send_data.metrics;
1903+
aws_high_res_clock_get_ticks((uint64_t *)&metric->time_metrics.mem_acquire_start_timestamp_ns);
1904+
}
1905+
18921906
struct aws_allocator *allocator = request->allocator;
18931907
struct aws_s3_meta_request *meta_request = request->meta_request;
18941908
struct aws_s3_buffer_pool_reserve_meta meta = {
1895-
.client = client, .meta_request = meta_request, .size = meta_request->part_size};
1909+
.client = client,
1910+
.meta_request = meta_request,
1911+
.size = meta_request->part_size,
1912+
};
18961913

18971914
struct aws_s3_reserve_memory_payload *payload =
18981915
aws_mem_calloc(allocator, 1, sizeof(struct aws_s3_reserve_memory_payload));

source/s3_meta_request.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1933,6 +1933,11 @@ static void s_s3_meta_request_event_delivery_task(struct aws_task *task, void *a
19331933
}
19341934
}
19351935
if (error_code == AWS_ERROR_SUCCESS) {
1936+
if (request->send_data.metrics) {
1937+
struct aws_s3_request_metrics *metric = request->send_data.metrics;
1938+
aws_high_res_clock_get_ticks((uint64_t *)&metric->time_metrics.deliver_start_timestamp_ns);
1939+
}
1940+
19361941
if (meta_request->recv_file) {
19371942
/* Write the data directly to the file. No need to seek, since the event will always be
19381943
* delivered with the right order. */
@@ -1978,6 +1983,14 @@ static void s_s3_meta_request_event_delivery_task(struct aws_task *task, void *a
19781983
error_code,
19791984
aws_error_str(error_code));
19801985
}
1986+
1987+
if (request->send_data.metrics) {
1988+
struct aws_s3_request_metrics *metric = request->send_data.metrics;
1989+
aws_high_res_clock_get_ticks((uint64_t *)&metric->time_metrics.deliver_end_timestamp_ns);
1990+
AWS_ASSERT(metric->time_metrics.deliver_start_timestamp_ns != 0);
1991+
metric->time_metrics.deliver_duration_ns = metric->time_metrics.deliver_end_timestamp_ns -
1992+
metric->time_metrics.deliver_start_timestamp_ns;
1993+
}
19811994
}
19821995
}
19831996
aws_atomic_fetch_sub(&client->stats.num_requests_streaming_response, 1);

source/s3_request.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,12 @@ struct aws_s3_request_metrics *aws_s3_request_metrics_new(
192192
metrics->time_metrics.sign_start_timestamp_ns = -1;
193193
metrics->time_metrics.sign_end_timestamp_ns = -1;
194194
metrics->time_metrics.signing_duration_ns = -1;
195+
metrics->time_metrics.mem_acquire_start_timestamp_ns = -1;
196+
metrics->time_metrics.mem_acquire_end_timestamp_ns = -1;
197+
metrics->time_metrics.mem_acquire_duration_ns = -1;
198+
metrics->time_metrics.deliver_start_timestamp_ns = -1;
199+
metrics->time_metrics.deliver_end_timestamp_ns = -1;
200+
metrics->time_metrics.deliver_duration_ns = -1;
195201

196202
metrics->req_resp_info_metrics.response_status = -1;
197203

0 commit comments

Comments
 (0)