コード例 #1
0
ファイル: main.c プロジェクト: Grace-Liu/dpdk-ovs
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();
}
コード例 #2
0
ファイル: main.c プロジェクト: kikutak/dpdk-ovs
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();
	}
}