static inline void do_vswitchd(void) { static uint64_t last_stats_display_tsc = 0; static uint64_t next_tsc = 0; uint64_t curr_tsc_local; /* handle any packets from vswitchd */ handle_request_from_vswitchd(); /* * curr_tsc is accessed by all cores but is updated here for each loop * which causes cacheline contention. By setting a defined update * period for curr_tsc of 1us this contention is removed. */ curr_tsc_local = rte_rdtsc(); if (curr_tsc_local >= next_tsc) { curr_tsc = curr_tsc_local; next_tsc = curr_tsc_local + tsc_update_period; } /* display stats every 'stats' sec */ if ((curr_tsc - last_stats_display_tsc) / cpu_freq >= stats_display_interval && stats_display_interval != 0) { last_stats_display_tsc = curr_tsc; stats_display(); } flush_clients(); flush_ports(); flush_vhost_devs(); }
static inline void do_vswitchd(void) { static uint64_t last_stats_display_tsc = 0; /* handle any packets from vswitchd */ handle_request_from_vswitchd(); /* display stats every 'stats' sec */ curr_tsc = rte_rdtsc(); if ((curr_tsc - last_stats_display_tsc) / cpu_freq >= stats_display_interval && stats_display_interval != 0) { last_stats_display_tsc = curr_tsc; stats_display(); } }