Logging warnings instead of infos and always as the user can select

what metrics he wants to measure and perf measurements will be disabled by default
This commit is contained in:
Andrey Skobtsov 2020-05-21 23:20:55 +03:00
parent bf5c7c4411
commit 72e5545c51
2 changed files with 7 additions and 20 deletions

View File

@ -170,8 +170,6 @@ const PerfEventInfo PerfEventsCounters::raw_events_info[] = {
#undef HARDWARE_EVENT #undef HARDWARE_EVENT
std::atomic<PerfEventsCounters::Id> PerfEventsCounters::counters_id = 0; std::atomic<PerfEventsCounters::Id> PerfEventsCounters::counters_id = 0;
std::atomic<bool> PerfEventsCounters::perf_unavailability_logged = false;
std::atomic<bool> PerfEventsCounters::particular_events_unavailability_logged = false;
thread_local PerfDescriptorsHolder PerfEventsCounters::thread_events_descriptors_holder{}; thread_local PerfDescriptorsHolder PerfEventsCounters::thread_events_descriptors_holder{};
thread_local std::optional<PerfEventsCounters::Id> PerfEventsCounters::current_thread_counters_id = std::nullopt; thread_local std::optional<PerfEventsCounters::Id> PerfEventsCounters::current_thread_counters_id = std::nullopt;
@ -356,24 +354,19 @@ bool PerfEventsCounters::processThreadLocalChanges(const std::string & needed_ev
if (events_to_open.empty()) if (events_to_open.empty())
return true; return true;
// check paranoid // check permissions
Int32 perf_event_paranoid = 0; Int32 perf_event_paranoid = 0;
bool is_pref_available = getPerfEventParanoid(perf_event_paranoid); bool is_pref_available = getPerfEventParanoid(perf_event_paranoid);
if (!is_pref_available) if (!is_pref_available)
{ {
bool expected_value = false; LOG_WARNING(getLogger(), "Perf events are unsupported");
if (perf_unavailability_logged.compare_exchange_strong(expected_value, true))
LOG_INFO(getLogger(), "Perf events are unsupported");
return false; return false;
} }
// check CAP_SYS_ADMIN
bool has_cap_sys_admin = hasLinuxCapability(CAP_SYS_ADMIN); bool has_cap_sys_admin = hasLinuxCapability(CAP_SYS_ADMIN);
if (perf_event_paranoid >= 3 && !has_cap_sys_admin) if (perf_event_paranoid >= 3 && !has_cap_sys_admin)
{ {
bool expected_value = false; LOG_WARNING(getLogger(), "Not enough permissions to record perf events");
if (perf_unavailability_logged.compare_exchange_strong(expected_value, true))
LOG_INFO(getLogger(), "Not enough permissions to record perf events");
return false; return false;
} }
@ -392,8 +385,8 @@ bool PerfEventsCounters::processThreadLocalChanges(const std::string & needed_ev
DIR * fd_dir = opendir(dir_path.c_str()); DIR * fd_dir = opendir(dir_path.c_str());
if (fd_dir == nullptr) if (fd_dir == nullptr)
{ {
LOG_WARNING(getLogger(), "Unable to get file descriptors used by the current process errno = " << errno LOG_WARNING(getLogger(), "Unable to get file descriptors used by the current process: "
<< ", message = " << strerror(errno)); << "errno = " << errno << ", message = " << strerror(errno));
return false; return false;
} }
UInt64 opened_descriptors = 0; UInt64 opened_descriptors = 0;
@ -412,8 +405,6 @@ bool PerfEventsCounters::processThreadLocalChanges(const std::string & needed_ev
} }
// open descriptors for new events // open descriptors for new events
bool expected = false;
bool log_unsupported_event = particular_events_unavailability_logged.compare_exchange_strong(expected, true);
for (size_t i : events_to_open) for (size_t i : events_to_open)
{ {
const PerfEventInfo & event_info = raw_events_info[i]; const PerfEventInfo & event_info = raw_events_info[i];
@ -421,9 +412,9 @@ bool PerfEventsCounters::processThreadLocalChanges(const std::string & needed_ev
// disable by default to add as little extra time as possible // disable by default to add as little extra time as possible
fd = openPerfEventDisabled(perf_event_paranoid, has_cap_sys_admin, event_info.event_type, event_info.event_config); fd = openPerfEventDisabled(perf_event_paranoid, has_cap_sys_admin, event_info.event_type, event_info.event_config);
if (fd == -1 && log_unsupported_event) if (fd == -1)
{ {
LOG_INFO(getLogger(), "Perf event is unsupported: `" << event_info.settings_name LOG_WARNING(getLogger(), "Perf event is unsupported: `" << event_info.settings_name
<< "` (event_type=" << event_info.event_type << ", event_config=" << event_info.event_config << ")"); << "` (event_type=" << event_info.event_type << ", event_config=" << event_info.event_config << ")");
} }
} }

View File

@ -201,10 +201,6 @@ private:
using ParsedEvents = std::pair<std::string, std::vector<size_t>>; using ParsedEvents = std::pair<std::string, std::vector<size_t>>;
static std::atomic<Id> counters_id; static std::atomic<Id> counters_id;
// used to write information about perf unavailability only once for all threads
static std::atomic<bool> perf_unavailability_logged;
// used to write information about particular perf events unavailability only once for all threads
static std::atomic<bool> particular_events_unavailability_logged;
static thread_local PerfDescriptorsHolder thread_events_descriptors_holder; static thread_local PerfDescriptorsHolder thread_events_descriptors_holder;
static thread_local std::optional<Id> current_thread_counters_id; static thread_local std::optional<Id> current_thread_counters_id;