perfmon: fix per-worker data initialization
When perfmon_init is called at initialization time worker threads are not created yet and vec_len(vlib_mains) returns 1. Initialize per-worker data when the number of workers is known, when enabling data collection instead. Type: fix Change-Id: I36887cc7b2a3e88d9728d3cd7262d9b1c968dd3c Signed-off-by: Benoît Ganne <bganne@cisco.com>
This commit is contained in:

committed by
Damjan Marion

parent
e11dce20c9
commit
7176b800fa
@ -426,6 +426,11 @@ I: marvell
|
||||
M: Damjan Marion <damarion@cisco.com>
|
||||
F: src/plugins/marvell/
|
||||
|
||||
Plugin - performance counter
|
||||
I: perfmon
|
||||
M: Dave Barach <dave@barachs.net>
|
||||
F: src/plugins/perfmon/
|
||||
|
||||
Plugin - PPPoE
|
||||
I: pppoe
|
||||
M: Hongjun Ni <hongjun.ni@intel.com>
|
||||
|
@ -110,14 +110,8 @@ perfmon_init (vlib_main_t * vm)
|
||||
/* Default data collection interval */
|
||||
pm->timeout_interval = 2.0; /* seconds */
|
||||
vec_validate (pm->pm_fds, 1);
|
||||
vec_validate (pm->pm_fds[0], vec_len (vlib_mains) - 1);
|
||||
vec_validate (pm->pm_fds[1], vec_len (vlib_mains) - 1);
|
||||
vec_validate (pm->perf_event_pages, 1);
|
||||
vec_validate (pm->perf_event_pages[0], vec_len (vlib_mains) - 1);
|
||||
vec_validate (pm->perf_event_pages[1], vec_len (vlib_mains) - 1);
|
||||
vec_validate (pm->rdpmc_indices, 1);
|
||||
vec_validate (pm->rdpmc_indices[0], vec_len (vlib_mains) - 1);
|
||||
vec_validate (pm->rdpmc_indices[1], vec_len (vlib_mains) - 1);
|
||||
pm->page_size = getpagesize ();
|
||||
|
||||
pm->perfmon_table = 0;
|
||||
|
@ -130,6 +130,10 @@ enable_current_events (perfmon_main_t * pm)
|
||||
|
||||
for (i = 0; i < limit; i++)
|
||||
{
|
||||
vec_validate (pm->pm_fds[i], vec_len (vlib_mains) - 1);
|
||||
vec_validate (pm->perf_event_pages[i], vec_len (vlib_mains) - 1);
|
||||
vec_validate (pm->rdpmc_indices[i], vec_len (vlib_mains) - 1);
|
||||
|
||||
c = vec_elt_at_index (pm->single_events_to_collect,
|
||||
pm->current_event + i);
|
||||
|
||||
@ -169,6 +173,7 @@ enable_current_events (perfmon_main_t * pm)
|
||||
close (fd);
|
||||
return;
|
||||
}
|
||||
CLIB_MEM_UNPOISON (p, pm->page_size);
|
||||
}
|
||||
else
|
||||
p = 0;
|
||||
@ -239,12 +244,18 @@ disable_events (perfmon_main_t * pm)
|
||||
clib_unix_warning ("disable ioctl");
|
||||
|
||||
if (pm->perf_event_pages[i][my_thread_index])
|
||||
if (munmap (pm->perf_event_pages[i][my_thread_index],
|
||||
pm->page_size) < 0)
|
||||
clib_unix_warning ("munmap");
|
||||
{
|
||||
if (munmap (pm->perf_event_pages[i][my_thread_index],
|
||||
pm->page_size) < 0)
|
||||
clib_unix_warning ("munmap");
|
||||
CLIB_MEM_POISON (pm->perf_event_pages[i][my_thread_index],
|
||||
pm->page_size);
|
||||
pm->perf_event_pages[i][my_thread_index] = 0;
|
||||
}
|
||||
|
||||
(void) close (pm->pm_fds[i][my_thread_index]);
|
||||
pm->pm_fds[i][my_thread_index] = 0;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user