Skip to content

Commit 78d9998

Browse files
committed
add more metrics
1 parent 543fadb commit 78d9998

File tree

7 files changed

+84
-4
lines changed

7 files changed

+84
-4
lines changed

include/aws/s3/private/s3_parallel_input_stream.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ struct aws_byte_buf;
1616
struct aws_future_bool;
1717
struct aws_input_stream;
1818
struct aws_s3_meta_request;
19+
struct aws_s3_request;
1920

2021
struct aws_event_loop_group;
2122

@@ -126,6 +127,7 @@ struct aws_input_stream *aws_input_stream_new_from_parallel_stream(
126127
struct aws_allocator *allocator,
127128
struct aws_parallel_input_stream *stream,
128129
struct aws_s3_meta_request *meta_request,
130+
struct aws_s3_request *request,
129131
uint64_t offset,
130132
size_t request_body_size);
131133

include/aws/s3/private/s3_request.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,11 @@ 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+
int64_t body_read_start_timestamp_ns;
75+
int64_t body_read_end_timestamp_ns;
76+
int64_t body_read_duration_ns;
77+
int64_t body_read_total_ns;
7378
} time_metrics;
7479

7580
struct {

include/aws/s3/s3_client.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1462,6 +1462,18 @@ AWS_S3_API
14621462
void aws_s3_request_metrics_get_request_type(
14631463
const struct aws_s3_request_metrics *metrics,
14641464
enum aws_s3_request_type *out_request_type);
1465+
int aws_s3_request_metrics_get_body_read_start_timestamp_ns(
1466+
const struct aws_s3_request_metrics *metrics,
1467+
int64_t *body_read_start_timestamp_ns);
1468+
int aws_s3_request_metrics_get_body_read_end_timestamp_ns(
1469+
const struct aws_s3_request_metrics *metrics,
1470+
int64_t *body_read_end_timestamp_ns);
1471+
int aws_s3_request_metrics_get_body_read_duration_ns(
1472+
const struct aws_s3_request_metrics *metrics,
1473+
int64_t *body_read_duration_ns);
1474+
int aws_s3_request_metrics_get_body_read_total_ns(
1475+
const struct aws_s3_request_metrics *metrics,
1476+
int64_t *body_read_total_ns);
14651477

14661478
/* Get the AWS CRT error code from request metrics. */
14671479
AWS_S3_API

source/s3_auto_ranged_put.c

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -982,7 +982,12 @@ struct aws_future_http_message *s_s3_prepare_upload_part(struct aws_s3_request *
982982
uint64_t offset = 0;
983983
size_t request_body_size = s_compute_request_body_size(meta_request, request->part_number, &offset);
984984
request->request_stream = aws_input_stream_new_from_parallel_stream(
985-
allocator, meta_request->request_body_parallel_stream, meta_request, offset, request_body_size);
985+
allocator,
986+
meta_request->request_body_parallel_stream,
987+
meta_request,
988+
request,
989+
offset,
990+
request_body_size);
986991
request->content_length = request_body_size;
987992
struct aws_s3_auto_ranged_put *auto_ranged_put = meta_request->impl;
988993

@@ -1025,7 +1030,11 @@ struct aws_future_http_message *s_s3_prepare_upload_part(struct aws_s3_request *
10251030
/* BEGIN CRITICAL SECTION */
10261031
aws_s3_meta_request_lock_synced_data(meta_request);
10271032
meta_request->count++;
1028-
snprintf(filename, sizeof(filename), "/tmp/s3_read_metrics_%d.csv", meta_request->count);
1033+
snprintf(
1034+
filename,
1035+
sizeof(filename),
1036+
"/data/aws-crt-s3-benchmarks/metrics/s3_read_metrics_%d.csv",
1037+
meta_request->count);
10291038

10301039
FILE *metrics_file = fopen(filename, "w");
10311040
/* write every read metric to a file */
@@ -1074,7 +1083,12 @@ struct aws_future_http_message *s_s3_prepare_upload_part(struct aws_s3_request *
10741083
uint64_t offset = 0;
10751084
size_t request_body_size = s_compute_request_body_size(meta_request, request->part_number, &offset);
10761085
request->request_stream = aws_input_stream_new_from_parallel_stream(
1077-
allocator, meta_request->request_body_parallel_stream, meta_request, offset, request_body_size);
1086+
allocator,
1087+
meta_request->request_body_parallel_stream,
1088+
meta_request,
1089+
request,
1090+
offset,
1091+
request_body_size);
10781092
s_s3_prepare_upload_part_finish(part_prep, AWS_ERROR_SUCCESS);
10791093
}
10801094
} else if (request->num_times_prepared == 0) {

source/s3_meta_request.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -513,7 +513,8 @@ static void s_s3_meta_request_destroy(void *user_data) {
513513
aws_mutex_clean_up(&meta_request->synced_data.lock);
514514
char filename[256];
515515
meta_request->count++;
516-
snprintf(filename, sizeof(filename), "/tmp/s3_read_metrics_%d.csv", meta_request->count);
516+
snprintf(
517+
filename, sizeof(filename), "/data/aws-crt-s3-benchmarks/metrics/s3_read_metrics_%d.csv", meta_request->count);
517518
FILE *metrics_file = fopen(filename, "w");
518519
/* write every read metric to a file */
519520
size_t metric_length = aws_array_list_length(&meta_request->read_metrics_list);

source/s3_parallel_input_stream.c

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,7 @@ struct aws_s3_mmap_part_streaming_input_stream_impl {
265265
struct s3_data_read_metrics metrics;
266266

267267
struct aws_s3_meta_request *meta_request;
268+
struct aws_s3_request *request;
268269
};
269270

270271
static int s_aws_s3_mmap_part_streaming_input_stream_seek(
@@ -282,6 +283,11 @@ static int s_aws_s3_mmap_part_streaming_input_stream_read(struct aws_input_strea
282283
AWS_CONTAINER_OF(stream, struct aws_s3_mmap_part_streaming_input_stream_impl, base);
283284
/* Map the content */
284285
size_t read_length = aws_min_size(dest->capacity - dest->len, impl->total_length - impl->total_length_read);
286+
uint64_t time = 0;
287+
if (impl->request->send_data.metrics->time_metrics.body_read_start_timestamp_ns == -1) {
288+
aws_high_res_clock_get_ticks(&time);
289+
impl->request->send_data.metrics->time_metrics.body_read_start_timestamp_ns = time;
290+
}
285291
aws_high_res_clock_get_ticks(&impl->metrics.start_timestamp);
286292
impl->metrics.thread_id = aws_thread_current_thread_id();
287293

@@ -326,6 +332,12 @@ static int s_aws_s3_mmap_part_streaming_input_stream_read(struct aws_input_strea
326332
impl->in_chunk_offset += read_length;
327333
impl->total_length_read += read_length;
328334
aws_high_res_clock_get_ticks(&impl->metrics.end_timestamp);
335+
int64_t duration = impl->metrics.end_timestamp - impl->metrics.start_timestamp;
336+
if (impl->request->send_data.metrics->time_metrics.body_read_total_ns == -1) {
337+
impl->request->send_data.metrics->time_metrics.body_read_total_ns = duration;
338+
} else {
339+
impl->request->send_data.metrics->time_metrics.body_read_total_ns += duration;
340+
}
329341

330342
/* BEGIN CRITICAL SECTION */
331343
aws_s3_meta_request_lock_synced_data(impl->meta_request);
@@ -340,6 +352,13 @@ static int s_aws_s3_mmap_part_streaming_input_stream_read(struct aws_input_strea
340352
/* We reached the end of the stream. */
341353
impl->eos_reached = true;
342354
AWS_ASSERT(impl->total_length_read == impl->total_length);
355+
if (impl->request->send_data.metrics->time_metrics.body_read_end_timestamp_ns == -1) {
356+
aws_high_res_clock_get_ticks(&time);
357+
impl->request->send_data.metrics->time_metrics.body_read_end_timestamp_ns = time;
358+
}
359+
impl->request->send_data.metrics->time_metrics.body_read_duration_ns =
360+
impl->request->send_data.metrics->time_metrics.body_read_end_timestamp_ns -
361+
impl->request->send_data.metrics->time_metrics.body_read_start_timestamp_ns;
343362
}
344363
}
345364

@@ -409,6 +428,7 @@ struct aws_input_stream *aws_input_stream_new_from_parallel_stream(
409428
struct aws_allocator *allocator,
410429
struct aws_parallel_input_stream *stream,
411430
struct aws_s3_meta_request *meta_request,
431+
struct aws_s3_request *request,
412432
uint64_t offset,
413433
size_t request_body_size) {
414434

@@ -431,6 +451,7 @@ struct aws_input_stream *aws_input_stream_new_from_parallel_stream(
431451
impl->loading_chunk_buf = &impl->chunk_buf_1;
432452
impl->reading_chunk_buf = &impl->chunk_buf_2;
433453
impl->meta_request = meta_request;
454+
impl->request = request;
434455

435456
/* Reset the input stream to start */
436457
aws_streaming_input_stream_reset(&impl->base);

source/s3_request.c

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,10 @@ struct aws_s3_request_metrics *aws_s3_request_metrics_new(
193193
metrics->time_metrics.sign_start_timestamp_ns = -1;
194194
metrics->time_metrics.sign_end_timestamp_ns = -1;
195195
metrics->time_metrics.signing_duration_ns = -1;
196+
metrics->time_metrics.body_read_start_timestamp_ns = -1;
197+
metrics->time_metrics.body_read_end_timestamp_ns = -1;
198+
metrics->time_metrics.body_read_duration_ns = -1;
199+
metrics->time_metrics.body_read_total_ns = -1;
196200

197201
metrics->req_resp_info_metrics.response_status = -1;
198202

@@ -426,3 +430,24 @@ int aws_s3_request_metrics_get_error_code(const struct aws_s3_request_metrics *m
426430
AWS_PRECONDITION(metrics);
427431
return metrics->crt_info_metrics.error_code;
428432
}
433+
434+
int aws_s3_request_metrics_get_body_read_start_timestamp_ns(
435+
const struct aws_s3_request_metrics *metrics,
436+
int64_t *body_read_start_timestamp_ns) {
437+
*body_read_start_timestamp_ns = metrics->time_metrics.body_read_start_timestamp_ns;
438+
}
439+
int aws_s3_request_metrics_get_body_read_end_timestamp_ns(
440+
const struct aws_s3_request_metrics *metrics,
441+
int64_t *body_read_end_timestamp_ns) {
442+
*body_read_end_timestamp_ns = metrics->time_metrics.body_read_end_timestamp_ns;
443+
}
444+
int aws_s3_request_metrics_get_body_read_duration_ns(
445+
const struct aws_s3_request_metrics *metrics,
446+
int64_t *body_read_duration_ns) {
447+
*body_read_duration_ns = metrics->time_metrics.body_read_duration_ns;
448+
}
449+
int aws_s3_request_metrics_get_body_read_total_ns(
450+
const struct aws_s3_request_metrics *metrics,
451+
int64_t *body_read_total_ns) {
452+
*body_read_total_ns = metrics->time_metrics.body_read_total_ns;
453+
}

0 commit comments

Comments
 (0)