Skip to content

Commit 749cf56

Browse files
committed
more metrics
1 parent 8c8d4cf commit 749cf56

File tree

4 files changed

+48
-12
lines changed

4 files changed

+48
-12
lines changed

include/aws/s3/private/s3_meta_request_impl.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ struct aws_s3_meta_request {
139139
struct aws_allocator *allocator;
140140

141141
struct aws_ref_count ref_count;
142+
int count;
142143

143144
void *impl;
144145

include/aws/s3/private/s3_parallel_input_stream.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ AWS_PUSH_SANE_WARNING_LEVEL
1515
struct aws_byte_buf;
1616
struct aws_future_bool;
1717
struct aws_input_stream;
18+
struct aws_s3_meta_request;
1819

1920
struct aws_event_loop_group;
2021

source/s3_auto_ranged_put.c

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1022,19 +1022,12 @@ struct aws_future_http_message *s_s3_prepare_upload_part(struct aws_s3_request *
10221022
printf("PARALLEL retry 8MB read\n");
10231023
// Create unique filename with timestamp and meta_request pointer
10241024
char filename[256];
1025-
struct timespec ts;
1026-
clock_gettime(CLOCK_REALTIME, &ts);
1027-
snprintf(
1028-
filename,
1029-
sizeof(filename),
1030-
"/tmp/s3_read_metrics_%p_%ld_%ld.csv",
1031-
(void *)meta_request,
1032-
ts.tv_sec,
1033-
ts.tv_nsec);
1034-
1035-
FILE *metrics_file = fopen(filename, "w");
10361025
/* BEGIN CRITICAL SECTION */
10371026
aws_s3_meta_request_lock_synced_data(meta_request);
1027+
meta_request->count++;
1028+
snprintf(filename, sizeof(filename), "/tmp/s3_read_metrics_%d.csv", meta_request->count);
1029+
1030+
FILE *metrics_file = fopen(filename, "w");
10381031
/* write every read metric to a file */
10391032
size_t metric_length = aws_array_list_length(&meta_request->read_metrics_list);
10401033
/* write every read metric to a file */
@@ -1061,7 +1054,7 @@ struct aws_future_http_message *s_s3_prepare_upload_part(struct aws_s3_request *
10611054
(unsigned long long)duration,
10621055
throughput_mbps);
10631056
}
1064-
aws_array_list_clean_up(&meta_request->read_metrics_list);
1057+
aws_array_list_clear(&meta_request->read_metrics_list);
10651058
fclose(metrics_file);
10661059

10671060
AWS_LOGF_INFO(

source/s3_meta_request.c

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -511,6 +511,47 @@ static void s_s3_meta_request_destroy(void *user_data) {
511511
aws_cached_signing_config_destroy(meta_request->cached_signing_config);
512512
aws_string_destroy(meta_request->s3express_session_host);
513513
aws_mutex_clean_up(&meta_request->synced_data.lock);
514+
char filename[256];
515+
meta_request->count++;
516+
snprintf(filename, sizeof(filename), "/tmp/s3_read_metrics_%d.csv", meta_request->count);
517+
FILE *metrics_file = fopen(filename, "w");
518+
/* write every read metric to a file */
519+
size_t metric_length = aws_array_list_length(&meta_request->read_metrics_list);
520+
/* write every read metric to a file */
521+
if (metrics_file) {
522+
// Write CSV header
523+
fprintf(metrics_file, "index,offset,size,start_timestamp,end_timestamp,duration_ns,throughput_mbps\n");
524+
// Write all metrics
525+
for (size_t j = 0; j < metric_length; j++) {
526+
struct s3_data_read_metrics m;
527+
aws_array_list_get_at(&meta_request->read_metrics_list, &m, j);
528+
529+
uint64_t duration = m.end_timestamp - m.start_timestamp;
530+
double throughput_mbps = duration > 0 ? (double)(m.size * 8) / (duration / 1000.0) / 1000000.0 : 0.0;
531+
532+
fprintf(
533+
metrics_file,
534+
"%zu,%llu,%llu,%llu,%llu,%llu,%.2f\n",
535+
j,
536+
(unsigned long long)m.offset,
537+
(unsigned long long)m.size,
538+
(unsigned long long)m.start_timestamp,
539+
(unsigned long long)m.end_timestamp,
540+
(unsigned long long)duration,
541+
throughput_mbps);
542+
}
543+
fclose(metrics_file);
544+
545+
AWS_LOGF_INFO(
546+
AWS_LS_S3_META_REQUEST,
547+
"id=%p Wrote %zu read metrics to %s",
548+
(void *)meta_request,
549+
metric_length,
550+
filename);
551+
} else {
552+
AWS_LOGF_ERROR(AWS_LS_S3_META_REQUEST, "id=%p Failed to open metrics file %s", (void *)meta_request, filename);
553+
}
554+
aws_array_list_clean_up(&meta_request->read_metrics_list);
514555
/* endpoint should have already been released and set NULL by the meta request finish call.
515556
* But call release() again, just in case we're tearing down a half-initialized meta request */
516557
aws_s3_endpoint_release(meta_request->endpoint);

0 commit comments

Comments
 (0)