geopm 3.1.1.dev410+g40bf96ed
GEOPM - Global Extensible Open Power Manager
Loading...
Searching...
No Matches
ApplicationRecordLog.hpp
Go to the documentation of this file.
1/*
2 * Copyright (c) 2015 - 2024 Intel Corporation
3 * SPDX-License-Identifier: BSD-3-Clause
4 */
5
6#ifndef APPLICATIONRECORDLOG_HPP_INCLUDE
7#define APPLICATIONRECORDLOG_HPP_INCLUDE
8
9#include <cstdint>
10#include <cstddef>
11#include <map>
12#include <vector>
13#include <memory>
14
15#include "geopm_time.h"
16#include "record.hpp"
17
18namespace geopm
19{
20 class SharedMemory;
21 class SharedMemoryScopedLock;
22 class Scheduler;
23
57 {
58 public:
62 static std::unique_ptr<ApplicationRecordLog> make_unique(std::shared_ptr<SharedMemory> shmem);
64 virtual ~ApplicationRecordLog() = default;
79 virtual void enter(uint64_t hash, const geopm_time_s &time) = 0;
96 virtual void exit(uint64_t hash, const geopm_time_s &time) = 0;
106 virtual void epoch(const geopm_time_s &time) = 0;
136 virtual void dump(std::vector<record_s> &records,
137 std::vector<short_region_s> &short_regions) = 0;
138 virtual void affinity(const geopm_time_s &time, int cpu_idx) = 0;
139 virtual void cpuset_changed(const geopm_time_s &time) = 0;
140 virtual void start_profile(const geopm_time_s &time, const std::string &profile_name) = 0;
141 virtual void stop_profile(const geopm_time_s &time, const std::string &profile_name) = 0;
142 virtual void overhead(const geopm_time_s &time, double overhead_sec) = 0;
150 static size_t buffer_size(void);
158 static size_t max_record(void);
166 static size_t max_region(void);
167 protected:
169 static constexpr size_t M_LAYOUT_SIZE = 57384;
170 static constexpr int M_MAX_RECORD = 1024;
171 static constexpr int M_MAX_REGION = M_MAX_RECORD + 1;
172 };
174 {
175 public:
176 ApplicationRecordLogImp(std::shared_ptr<SharedMemory> shmem);
177 ApplicationRecordLogImp(std::shared_ptr<SharedMemory> shmem,
178 int process,
179 std::shared_ptr<Scheduler> scheduler);
180 virtual ~ApplicationRecordLogImp() = default;
181 void enter(uint64_t hash, const geopm_time_s &time) override;
182 void exit(uint64_t hash, const geopm_time_s &time) override;
183 void epoch(const geopm_time_s &time) override;
184 void dump(std::vector<record_s> &records,
185 std::vector<short_region_s> &short_regions) override;
186 void affinity(const geopm_time_s &time, int cpu_idx) override;
187 void cpuset_changed(const geopm_time_s &time) override;
188 void start_profile(const geopm_time_s &time, const std::string &profile_name) override;
189 void stop_profile(const geopm_time_s &time, const std::string &profile_name) override;
190 void overhead(const geopm_time_s &time, double overhead_sec) override;
191 private:
192 struct m_layout_s {
193 int32_t num_record;
194 record_s record_table[M_MAX_RECORD];
195 int32_t num_region;
196 short_region_s region_table[M_MAX_REGION];
197 };
198 static_assert(sizeof(m_layout_s) <= M_LAYOUT_SIZE,
199 "Layout size used in geopmdpy/system_files.py to create shared memory footprint is smaller than required by C++ code");
200
201 struct m_region_enter_s {
202 int record_idx;
203 int region_idx;
204 geopm_time_s enter_time;
205 bool is_short;
206 };
207 void check_reset(m_layout_s &layout);
208 void append_record(m_layout_s &layout, const record_s &record);
209 int m_process;
210 std::shared_ptr<SharedMemory> m_shmem;
211 std::map<uint64_t, m_region_enter_s> m_hash_region_enter_map;
212 uint64_t m_epoch_count;
213 uint64_t m_entered_region_hash;
214 std::shared_ptr<Scheduler> m_scheduler;
215 };
216}
217
218#endif
Provides an abstraction for a shared memory buffer that can be used to pass entry,...
Definition ApplicationRecordLog.hpp:57
static size_t max_record(void)
Gets the maximum number of records.
Definition ApplicationRecordLog.cpp:31
virtual void dump(std::vector< record_s > &records, std::vector< short_region_s > &short_regions)=0
Get all events that have occurred since the last call to dump().
virtual void exit(uint64_t hash, const geopm_time_s &time)=0
Create a message in the log defining a region exit.
static constexpr int M_MAX_REGION
Definition ApplicationRecordLog.hpp:171
virtual void affinity(const geopm_time_s &time, int cpu_idx)=0
virtual ~ApplicationRecordLog()=default
Destructor for pure virtual base class.
static size_t max_region(void)
Gets the maximum number of short region events.
Definition ApplicationRecordLog.cpp:36
virtual void cpuset_changed(const geopm_time_s &time)=0
static std::unique_ptr< ApplicationRecordLog > make_unique(std::shared_ptr< SharedMemory > shmem)
Factory constructor.
Definition ApplicationRecordLog.cpp:21
static constexpr size_t M_LAYOUT_SIZE
Definition ApplicationRecordLog.hpp:169
virtual void overhead(const geopm_time_s &time, double overhead_sec)=0
virtual void stop_profile(const geopm_time_s &time, const std::string &profile_name)=0
virtual void epoch(const geopm_time_s &time)=0
Create a message in the log defining an epoch event.
virtual void enter(uint64_t hash, const geopm_time_s &time)=0
Create a message in the log defining a region entry.
virtual void start_profile(const geopm_time_s &time, const std::string &profile_name)=0
static size_t buffer_size(void)
Gets the shared memory size requirement.
Definition ApplicationRecordLog.cpp:26
static constexpr int M_MAX_RECORD
Definition ApplicationRecordLog.hpp:170
Definition ApplicationRecordLog.hpp:174
void start_profile(const geopm_time_s &time, const std::string &profile_name) override
Definition ApplicationRecordLog.cpp:199
void enter(uint64_t hash, const geopm_time_s &time) override
Create a message in the log defining a region entry.
Definition ApplicationRecordLog.cpp:61
void stop_profile(const geopm_time_s &time, const std::string &profile_name) override
Definition ApplicationRecordLog.cpp:214
void affinity(const geopm_time_s &time, int cpu_idx) override
Definition ApplicationRecordLog.cpp:185
void cpuset_changed(const geopm_time_s &time) override
Definition ApplicationRecordLog.cpp:174
virtual ~ApplicationRecordLogImp()=default
void overhead(const geopm_time_s &time, double overhead_sec) override
Definition ApplicationRecordLog.cpp:229
void epoch(const geopm_time_s &time) override
Create a message in the log defining an epoch event.
Definition ApplicationRecordLog.cpp:158
void dump(std::vector< record_s > &records, std::vector< short_region_s > &short_regions) override
Get all events that have occurred since the last call to dump().
Definition ApplicationRecordLog.cpp:244
void exit(uint64_t hash, const geopm_time_s &time) override
Create a message in the log defining a region exit.
Definition ApplicationRecordLog.cpp:88
Definition Accumulator.cpp:12
Record of an application event.
Definition record.hpp:61
Definition record.hpp:72