Verified Commit 42abcb06 authored by Marc Vef's avatar Marc Vef
Browse files

Changing init_t to flush_t sending the flush time relative to process launch

parent dc95e70f
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -55,7 +55,7 @@ public:
     * actually sent
     */
    struct msgpack_data {
        std::chrono::time_point<std::chrono::system_clock> init_t_;
        uint32_t flush_t_;
        std::string hostname_;
        int pid_;
        std::string io_type_;
@@ -68,7 +68,7 @@ public:
        template <class T>
        void
        pack(T& pack) {
            pack(init_t_, hostname_, pid_, io_type_, start_t_, end_t_,
            pack(flush_t_, hostname_, pid_, io_type_, start_t_, end_t_,
                 req_size_, total_iops_, total_bytes_);
        }

@@ -83,6 +83,9 @@ private:

    msgpack_data msgpack_data_{};

    // Initialization time used to compute relative timestamps
    std::chrono::time_point<std::chrono::system_clock> init_t_;

    std::mutex data_mtx_{};
    std::thread flush_thread_{};
    std::condition_variable flush_thread_cv_{};
+12 −9
Original line number Diff line number Diff line
@@ -51,7 +51,7 @@ namespace gkfs::messagepack {
ClientMetrics::ClientMetrics(client_metric_io_type io_type,
                             client_metric_flush_type ftype, int flush_interval)
    : flush_interval_(flush_interval) {
    msgpack_data_.init_t_ = std::chrono::system_clock::now();
    init_t_ = std::chrono::system_clock::now();
    msgpack_data_.hostname_ = gkfs::rpc::get_my_hostname(true);
    msgpack_data_.pid_ = getpid();
    if(io_type == client_metric_io_type::write) {
@@ -91,10 +91,9 @@ ClientMetrics::add_event(
        return;
    auto end = std::chrono::system_clock::now();
    std::lock_guard<std::mutex> const data_lock(data_mtx_);
    auto start_offset = std::chrono::duration<double, std::micro>(
            start - msgpack_data_.init_t_);
    auto end_offset = std::chrono::duration<double, std::micro>(
            end - msgpack_data_.init_t_);
    auto start_offset =
            std::chrono::duration<double, std::micro>(start - init_t_);
    auto end_offset = std::chrono::duration<double, std::micro>(end - init_t_);
    auto duration = std::chrono::duration<double, std::micro>(end_offset -
                                                              start_offset);
    msgpack_data_.total_bytes_ += size;
@@ -112,6 +111,7 @@ void
ClientMetrics::reset_metrics() {
    msgpack_data_.start_t_.clear();
    msgpack_data_.end_t_.clear();
    msgpack_data_.flush_t_ = 0;
    msgpack_data_.req_size_.clear();
    msgpack_data_.total_bytes_ = 0;
    msgpack_data_.total_iops_ = 0;
@@ -124,6 +124,10 @@ ClientMetrics::flush_msgpack() {
    std::lock_guard<std::mutex> const data_lock(data_mtx_);
    if(msgpack_data_.total_iops_ == 0)
        return;
    auto flush_t_now = std::chrono::system_clock::now();
    msgpack_data_.flush_t_ = static_cast<size_t>(
            std::chrono::duration<double, std::micro>(flush_t_now - init_t_)
                    .count());
    auto data = msgpack_data_.pack_msgpack();
    if(flush_type_ == client_metric_flush_type::file) {
        auto fd =
@@ -188,13 +192,12 @@ ClientMetrics::path() const {
}
void
ClientMetrics::path(const string& path, const string prefix) {
    const std::time_t t =
            std::chrono::system_clock::to_time_t(msgpack_data_.init_t_);
    const std::time_t t = std::chrono::system_clock::to_time_t(init_t_);
    std::stringstream init_t_stream;
    init_t_stream << std::put_time(std::localtime(&t), "%F_%T");
    flush_path_ = path + "/" + prefix + "_" + init_t_stream.str() + "_" +
                  msgpack_data_.hostname_ + "_" + to_string(msgpack_data_.pid_) +
            ".msgpack";
                  msgpack_data_.hostname_ + "_" +
                  to_string(msgpack_data_.pid_) + ".msgpack";
}
int
ClientMetrics::flush_count() const {
+1 −0
Original line number Diff line number Diff line
@@ -62,6 +62,7 @@ report_msgpack(std::vector<unsigned char>& buffer) {
    json_obj["total_iops"] = undata.total_iops_;
    json_obj["start_t_micro"] = undata.start_t_;
    json_obj["end_t_micro"] = undata.end_t_;
    json_obj["flush_t"] = undata.flush_t_;
    json_obj["req_size"] = undata.req_size_;
    json_obj["[extra]avg_thruput_mib"] = avg_thruput;