aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Hemminger <shemminger@vyatta.com>2008-11-03 17:14:38 -0800
committerDavid S. Miller <davem@davemloft.net>2008-11-03 17:14:38 -0800
commit24f8b2385e03a4f4c8dac513d03b5eaa475822b9 (patch)
tree28ed1f956f3f140cf813f25ac166ad9d3a0cd2ab
parentb9ac99855dcc0316ba2feee2b0d3e578f8315b75 (diff)
downloadkernel_samsung_espresso10-24f8b2385e03a4f4c8dac513d03b5eaa475822b9.zip
kernel_samsung_espresso10-24f8b2385e03a4f4c8dac513d03b5eaa475822b9.tar.gz
kernel_samsung_espresso10-24f8b2385e03a4f4c8dac513d03b5eaa475822b9.tar.bz2
net: increase receive packet quantum
This patch gets about 1.25% back on tbench regression. My change to NAPI for multiqueue support changed the time limit on network receive processing. Under sustained loads like tbench, this can cause the receiver to reschedule prematurely. Signed-off-by: Stephen Hemminger <shemminger@vyatta.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/core/dev.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/net/core/dev.c b/net/core/dev.c
index 3a2b8be..8f9d3b3 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -2373,7 +2373,7 @@ EXPORT_SYMBOL(__napi_schedule);
static void net_rx_action(struct softirq_action *h)
{
struct list_head *list = &__get_cpu_var(softnet_data).poll_list;
- unsigned long start_time = jiffies;
+ unsigned long time_limit = jiffies + 2;
int budget = netdev_budget;
void *have;
@@ -2384,13 +2384,10 @@ static void net_rx_action(struct softirq_action *h)
int work, weight;
/* If softirq window is exhuasted then punt.
- *
- * Note that this is a slight policy change from the
- * previous NAPI code, which would allow up to 2
- * jiffies to pass before breaking out. The test
- * used to be "jiffies - start_time > 1".
+ * Allow this to run for 2 jiffies since which will allow
+ * an average latency of 1.5/HZ.
*/
- if (unlikely(budget <= 0 || jiffies != start_time))
+ if (unlikely(budget <= 0 || time_after(jiffies, time_limit)))
goto softnet_break;
local_irq_enable();