8 #ifndef SRC_MANAGER_MEMORYINFO_HPP_
9 #define SRC_MANAGER_MEMORYINFO_HPP_
14 #include <condition_variable>
17 #include <unordered_map>
19 #include "generated_config.hpp"
20 #include "../util/log.hpp"
25 class PAPIPerformanceInfo {
27 PAPIPerformanceInfo(
const std::vector<std::string> & measurements) noexcept;
29 void start() noexcept;
32 std::vector<std::pair<std::
string,
long long>> get_counts() const noexcept;
37 void initialize() noexcept;
39 const std::vector<std::
string> & measurements;
43 std::vector<
int> selected_events;
44 std::vector<std::
string> selected_event_names;
45 std::vector<
long long> event_counts;
50 class PAPIPerformanceInfo {};
56 LinuxMemoryInfo(
unsigned int sampling_ms);
58 void start() noexcept;
60 void measure() noexcept;
62 size_t get_rss_bytes_max() const noexcept;
63 size_t get_data_bytes_max() const noexcept;
65 #ifdef INSTRUMENT_MALLOC
66 size_t get_malloc_count() const noexcept;
67 size_t get_malloc_max_size() const noexcept;
70 size_t get_minor_pagefaults() const noexcept;
71 size_t get_major_pagefaults() const noexcept;
72 unsigned long get_user_usecs() const noexcept;
73 unsigned long get_system_usecs() const noexcept;
76 void reset() noexcept;
79 void sample() noexcept;
81 bool stop_requested = false;
83 unsigned int sampling_ms;
85 size_t rss_pages_before;
87 size_t data_pages_before;
88 size_t data_max_pages;
89 size_t major_pagefaults_before;
90 size_t major_pagefaults_after;
91 size_t minor_pagefaults_before;
92 size_t minor_pagefaults_after;
93 unsigned long user_usecs_before;
94 unsigned long user_usecs_after;
95 unsigned long system_usecs_before;
96 unsigned long system_usecs_after;
98 #ifdef INSTRUMENT_MALLOC
99 size_t malloc_allocs_before;
100 size_t malloc_allocs_after;
106 void get_mem_proc_data(
size_t * rss_out,
size_t * data_out) noexcept;
107 void get_mem_syscall_data(
size_t * major_pagefault_out,
size_t * minor_pagefault_out,
108 unsigned long * user_usecs_out,
unsigned long * system_usecs_out) noexcept;
110 std::thread my_thread;
112 std::condition_variable notifier;
113 constexpr
static int ACTION_FINISH = 0;
114 constexpr
static int ACTION_MEASURE = 1;
115 int requested_action;