my code is on master commit f5667c3055dbd6755277f085c6778c2b1104aa6e

in stat_segment.c: stat_validate_counter_vector(), create two dimension: 
*counter[thread_num][max]
*
--------------------------------------------------------------------------------------------------

static void
stat_validate_counter_vector ( stat_segment_directory_entry_t * ep , u32 max )
{
stat_segment_main_t *sm = &stat_segment_main;
stat_segment_shared_header_t *shared_header = sm -> shared_header ;
counter_t **counters = 0 ;
vlib_thread_main_t *tm = vlib_get_thread_main ();
int i;
u64 *offset_vector = 0 ;

vec_validate_aligned (counters, tm -> n_vlib_mains - 1 ,
CLIB_CACHE_LINE_BYTES);
for (i = 0 ; i < tm -> n_vlib_mains ; i++)
{
vec_validate_aligned ( counters [i], max, CLIB_CACHE_LINE_BYTES);
vec_add1 (offset_vector,
stat_segment_offset (shared_header, counters [i]));
}
ep -> offset = stat_segment_offset (shared_header, counters);
ep -> offset_vector = stat_segment_offset (shared_header, offset_vector);
}
*but in* *do_stat_segment_updates(),* access counter by counter [max] 
*[thread_num],  this lead to unpredict behavior, like man thread hang on.*
for (i = start; i < vec_len (vlib_mains); i++)
{

f64 this_vector_rate;

this_vlib_main = vlib_mains [i];

this_vector_rate = vlib_last_vector_length_per_node (this_vlib_main);
vector_rate += this_vector_rate;

/* Set the per-worker rate */
counters [ 0 ][i - start] = this_vector_rate;
}
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.

View/Reply Online (#14074): https://lists.fd.io/g/vpp-dev/message/14074
Mute This Topic: https://lists.fd.io/mt/34309766/21656
Group Owner: vpp-dev+ow...@lists.fd.io
Unsubscribe: https://lists.fd.io/g/vpp-dev/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to