task switch from net-rx to idle when there is napi processing to be done

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


--
To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [RT Stable]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]

  Powered by Linux