when we run vpp by only main thread, ping command does work correctly.
But when we run vpp by main thread and worker thread, ping any peer address will be unreachable, it does not work.
After we debuged it , we find there are some thread barrier sync issue when worker thread existed, as follow:
vlib_main_or_worker_loop
if (!is_main)
{
vlib_worker_thread_barrier_check (); ---------woker thread will be blocked here when ping command started, so it can't receive icmp_echo packets in time.
vec_foreach (fqm, tm->frame_queue_mains)
vlib_frame_queue_dequeue (vm, fqm);
}
cause that , CLI ping command which waiting for icmp_echo packets will call 'vlib_worker_thread_barrier_sync' suspend worker thread. Maybe there is deadlock.
Then we find a solution to fix this bug.