MCPcopy Create free account
hub / github.com/ClickHouse/ClickHouse / processThreadLocalChanges

Method processThreadLocalChanges

src/Common/ThreadProfileEvents.cpp:355–457  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

353}
354
355bool PerfEventsCounters::processThreadLocalChanges(const std::string & needed_events_list)
356{
357 const auto valid_event_indices = eventIndicesFromString(needed_events_list);
358
359 // find state changes (if there are any)
360 bool old_state[NUMBER_OF_RAW_EVENTS];
361 for (size_t i = 0; i < NUMBER_OF_RAW_EVENTS; ++i)
362 old_state[i] = thread_events_descriptors_holder.descriptors[i] != -1;
363
364 bool new_state[NUMBER_OF_RAW_EVENTS];
365 std::fill_n(new_state, NUMBER_OF_RAW_EVENTS, false);
366 for (size_t opened_index : valid_event_indices)
367 new_state[opened_index] = true;
368
369 std::vector<size_t> events_to_open;
370 std::vector<size_t> events_to_release;
371 for (size_t i = 0; i < NUMBER_OF_RAW_EVENTS; ++i)
372 {
373 bool old_one = old_state[i];
374 bool new_one = new_state[i];
375
376 if (old_one == new_one)
377 {
378 if (old_one
379 && !validatePerfEventDescriptor(
380 thread_events_descriptors_holder.descriptors[i]))
381 {
382 events_to_open.push_back(i);
383 }
384 continue;
385 }
386
387 if (new_one)
388 events_to_open.push_back(i);
389 else
390 events_to_release.push_back(i);
391 }
392
393 // release unused descriptors
394 for (size_t i : events_to_release)
395 {
396 int & fd = thread_events_descriptors_holder.descriptors[i];
397 disablePerfEvent(fd);
398 releasePerfEvent(fd);
399 fd = -1;
400 }
401
402 if (events_to_open.empty())
403 {
404 return true;
405 }
406
407 // check permissions
408 // cat /proc/sys/kernel/perf_event_paranoid
409 // -1: Allow use of (almost) all events by all users
410 // >=0: Disallow raw tracepoint access by users without CAP_IOC_LOCK
411 // >=1: Disallow CPU event access by users without CAP_SYS_ADMIN
412 // >=2: Disallow kernel profiling by users without CAP_SYS_ADMIN

Callers

nothing calls this directly

Calls 9

disablePerfEventFunction · 0.85
releasePerfEventFunction · 0.85
hasLinuxCapabilityFunction · 0.85
openPerfEventDisabledFunction · 0.85
errnoToStringFunction · 0.85
getLoggerFunction · 0.70
push_backMethod · 0.45
emptyMethod · 0.45

Tested by

no test coverage detected