All of lore.kernel.org
 help / color / mirror / Atom feed
* task switch from net-rx to idle when there is napi processing to be done
@ 2012-01-25  2:39 Venkat Subbiah
  2012-01-25  8:55 ` Uwe Kleine-König
  0 siblings, 1 reply; 7+ messages in thread
From: Venkat Subbiah @ 2012-01-25  2:39 UTC (permalink / raw)
  To: RT

In the process of debugging a napi ethernet driver performance issue, 
what I am noticing is

1. While the driver is in the middle of a napi packet processing loop, 
there is a task switch from
sirq-net-rx to idle even though there is pending napi processing to be done.

2. This task switch seems to happen every second
venkat@vs-lnx:~/nfss/trace$ grep "sched_switch: task sirq-net-rx" trace 
| grep swapper
    sirq-net-rx/0-7     [000]  3800.664615: sched_switch: task 
sirq-net-rx/0:7 [50] (R) ==> swapper:0 [120]
    sirq-net-rx/0-7     [000]  3801.663616: sched_switch: task 
sirq-net-rx/0:7 [50] (R) ==> swapper:0 [120]
    sirq-net-rx/0-7     [000]  3802.664615: sched_switch: task 
sirq-net-rx/0:7 [50] (R) ==> swapper:0 [120]
    sirq-net-rx/0-7     [000]  3803.664615: sched_switch: task 
sirq-net-rx/0:7 [50] (R) ==> swapper:0 [120]
    sirq-net-rx/0-7     [000]  3804.664614: sched_switch: task 
sirq-net-rx/0:7 [50] (R) ==> swapper:0 [120]
    sirq-net-rx/0-7     [000]  3805.664619: sched_switch: task 
sirq-net-rx/0:7 [50] (R) ==> swapper:0 [120]

3. A log of one of the task switch is as
    sirq-net-rx/0-7     [000]  3800.664567: cvm_oct_napi_poll_38: 
napi_poll_cnt=2480984 backlog=2 rx_count=18 drop_cnt=0
    sirq-net-rx/0-7     [000]  3800.664569: cvm_oct_napi_poll_38 
<-net_rx_action
    sirq-net-rx/0-7     [000]  3800.664608: preempt_schedule_irq 
<-need_resched
    sirq-net-rx/0-7     [000]  3800.664610: __schedule 
<-preempt_schedule_irq
    sirq-net-rx/0-7     [000]  3800.664615: sched_switch: task 
sirq-net-rx/0:7 [50] (R) ==> swapper:0 [120]
<idle>-0     [000]  3800.714604: __schedule <-cpu_idle
<idle>-0     [000]  3800.714608: sched_switch: task swapper:0 [120] (R) 
==> sirq-net-rx/0:7 [50]
    sirq-net-rx/0-7     [000]  3800.714611: __schedule 
<-preempt_schedule_irq
    sirq-net-rx/0-7     [000]  3800.714691: cvm_oct_napi_poll_38: 
napi_poll_cnt=2480985 backlog=1 rx_count=32 drop_cnt=0


4. The logs in 3 tell show that the driver was in the napi polling 
thread method cvm_oct_napi_poll_38 when the scheduler was invoked.
Looks like this was probably due to a hard irq happening. The main 
problem I see  is the scheduler switching the tasks from
sirq-net-rx to idle even though there is napi processing to be done. 
Appreciate any hints to debug this further.

Notes
------
* This is with PREEMPT_RT turned on and 2.6.32 version of the kernel 
which has a backport of 2.6.33.9-rt31 patch.

Thanks a lot for reading this far and any thoughts you may have!
-Venkat



^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2012-01-26 20:35 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-01-25  2:39 task switch from net-rx to idle when there is napi processing to be done Venkat Subbiah
2012-01-25  8:55 ` Uwe Kleine-König
2012-01-25  9:18   ` Mike Galbraith
2012-01-25 11:40     ` Venkat Subbiah
2012-01-25 11:30   ` Venkat Subbiah
2012-01-26 15:29     ` Steven Rostedt
2012-01-26 20:35       ` Venkat Subbiah

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.