From 1a9150fd8435914eec35a0dbdff3a9a2266d9e97 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Mon, 24 Dec 2018 11:07:19 +0100 Subject: [PATCH] Add metrics for reading frames from disk. --- futatabi/frame_on_disk.cpp | 46 ++++++++++++++++++++++++++++++++++++++ futatabi/frame_on_disk.h | 1 + 2 files changed, 47 insertions(+) diff --git a/futatabi/frame_on_disk.cpp b/futatabi/frame_on_disk.cpp index b496b3d..34fcd38 100644 --- a/futatabi/frame_on_disk.cpp +++ b/futatabi/frame_on_disk.cpp @@ -1,22 +1,60 @@ #include #include +#include +#include +#include + #include "frame_on_disk.h" +#include "shared/metrics.h" using namespace std; +using namespace std::chrono; + +namespace { + +// There can be multiple FrameReader classes, so make all the metrics static. +once_flag frame_metrics_inited; + +atomic metric_frame_opened_files{0}; +atomic metric_frame_closed_files{0}; +atomic metric_frame_read_bytes{0}; +atomic metric_frame_read_frames{0}; + +Summary metric_frame_read_time_seconds; + +} // namespace + +FrameReader::FrameReader() +{ + call_once(frame_metrics_inited, []{ + global_metrics.add("frame_opened_files", &metric_frame_opened_files); + global_metrics.add("frame_closed_files", &metric_frame_closed_files); + global_metrics.add("frame_read_bytes", &metric_frame_read_bytes); + global_metrics.add("frame_read_frames", &metric_frame_read_frames); + + vector quantiles{0.01, 0.1, 0.25, 0.5, 0.75, 0.9, 0.99}; + metric_frame_read_time_seconds.init(quantiles, 60.0); + global_metrics.add("frame_read_time_seconds", &metric_frame_read_time_seconds); + }); +} FrameReader::~FrameReader() { if (fd != -1) { close(fd); + ++metric_frame_closed_files; } } string FrameReader::read_frame(FrameOnDisk frame) { + steady_clock::time_point start = steady_clock::now(); + if (int(frame.filename_idx) != last_filename_idx) { if (fd != -1) { close(fd); // Ignore errors. + ++metric_frame_closed_files; } string filename; @@ -35,6 +73,7 @@ string FrameReader::read_frame(FrameOnDisk frame) posix_fadvise(fd, 0, 0, POSIX_FADV_SEQUENTIAL); last_filename_idx = frame.filename_idx; + ++metric_frame_opened_files; } string str; @@ -49,5 +88,12 @@ string FrameReader::read_frame(FrameOnDisk frame) offset += ret; } + + steady_clock::time_point stop = steady_clock::now(); + metric_frame_read_time_seconds.count_event(duration(stop - start).count()); + + metric_frame_read_bytes += frame.size; + ++metric_frame_read_frames; + return str; } diff --git a/futatabi/frame_on_disk.h b/futatabi/frame_on_disk.h index 47fcb32..2ac86fc 100644 --- a/futatabi/frame_on_disk.h +++ b/futatabi/frame_on_disk.h @@ -27,6 +27,7 @@ extern std::vector frame_filenames; // Under frame_mu. // for a single .frames file.) class FrameReader { public: + FrameReader(); ~FrameReader(); std::string read_frame(FrameOnDisk frame); -- 2.39.2