In many application there are no timers queued, and the call to rte_timer_managecan be optimized in that case avoid reading HPET and lock overhead. Signed-off-by: Stephen Hemminger --- lib/librte_timer/rte_timer.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) --- a/lib/librte_timer/rte_timer.c 2013-03-28 08:50:50.246413714 -0700 +++ b/lib/librte_timer/rte_timer.c 2013-05-29 08:49:09.305899903 -0700 @@ -404,9 +404,14 @@ void rte_timer_manage(void) union rte_timer_status status; struct rte_timer *tim, *tim2; unsigned lcore_id = rte_lcore_id(); - uint64_t cur_time = rte_get_hpet_cycles(); + uint64_t cur_time; int ret; + /* optimize for the case where per-cpu list is empty */ + if (LIST_EMPTY(&priv_timer[lcore_id].pending)) + return; + + cur_time = rte_get_hpet_cycles(); __TIMER_STAT_ADD(manage, 1); /* browse ordered list, add expired timers in 'expired' list */