netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] Reduce frequency of cleanup timer in bridge
@ 2007-05-19 22:46 Baruch Even
  2007-05-30 19:12 ` [PATCH 1/2] bridge: reduce frequency of forwarding " Stephen Hemminger
  0 siblings, 1 reply; 4+ messages in thread
From: Baruch Even @ 2007-05-19 22:46 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: netdev, power

The bridge cleanup timer is fired 10 times a second for timers that are
at least 15 seconds ahead in time and that are not critical to be
cleaned asap.

This patch calculates the next time to run the timer as the minimum of
all timers or a minimum based on the current state.

Signed-Off-By: Baruch Even <baruch@ev-en.org>

--- 2.6.22-rc2/net/bridge/br_fdb.c	2007-05-20 00:51:11.000000000 +0300
+++ 2.6-rc2/net/bridge/br_fdb.c	2007-05-20 00:50:31.000000000 +0300
@@ -121,6 +121,7 @@
 {
 	struct net_bridge *br = (struct net_bridge *)_data;
 	unsigned long delay = hold_time(br);
+	unsigned long next_timer = jiffies + br->forward_delay;
 	int i;
 
 	spin_lock_bh(&br->hash_lock);
@@ -129,14 +130,21 @@
 		struct hlist_node *h, *n;
 
 		hlist_for_each_entry_safe(f, h, n, &br->hash[i], hlist) {
+			unsigned long this_timer;
+			if (f->is_static)
+				continue;
+			this_timer = f->ageing_timer + delay;
+			if (time_before_eq(this_timer, jiffies))
-			if (!f->is_static &&
-			    time_before_eq(f->ageing_timer + delay, jiffies))
 				fdb_delete(f);
+			else if (this_timer < next_timer)
+				next_timer = this_timer;
 		}
 	}
 	spin_unlock_bh(&br->hash_lock);
 
+	/* Add HZ/4 to ensure we round the jiffies upwards to be after the next
+	 * timer, otherwise we might round down and will have no-op run. */
+	mod_timer(&br->gc_timer, round_jiffies(next_timer + HZ/4));
-	mod_timer(&br->gc_timer, jiffies + HZ/10);
 }
 
 /* Completely flush all dynamic entries in forwarding database.*/


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

* [PATCH 1/2] bridge: reduce frequency of forwarding cleanup timer in bridge
  2007-05-19 22:46 [PATCH] Reduce frequency of cleanup timer in bridge Baruch Even
@ 2007-05-30 19:12 ` Stephen Hemminger
  2007-05-30 19:14   ` [PATCH 2/2] bridge: round off STP perodic timers Stephen Hemminger
  0 siblings, 1 reply; 4+ messages in thread
From: Stephen Hemminger @ 2007-05-30 19:12 UTC (permalink / raw)
  To: David S. Miller; +Cc: Baruch Even, netdev, power, bridge

The bridge cleanup timer is fired 10 times a second for timers that are
at least 15 seconds ahead in time and that are not critical to be
cleaned asap.

This patch calculates the next time to run the timer as the minimum of
all timers or a minimum based on the current state.

Signed-off-by: Baruch Even <baruch@ev-en.org>
Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>

--- 2.6.22-rc2/net/bridge/br_fdb.c	2007-05-20 00:51:11.000000000 +0300
+++ 2.6-rc2/net/bridge/br_fdb.c	2007-05-20 00:50:31.000000000 +0300
@@ -121,6 +121,7 @@
 {
 	struct net_bridge *br = (struct net_bridge *)_data;
 	unsigned long delay = hold_time(br);
+	unsigned long next_timer = jiffies + br->forward_delay;
 	int i;
 
 	spin_lock_bh(&br->hash_lock);
@@ -129,14 +130,21 @@
 		struct hlist_node *h, *n;
 
 		hlist_for_each_entry_safe(f, h, n, &br->hash[i], hlist) {
+			unsigned long this_timer;
+			if (f->is_static)
+				continue;
+			this_timer = f->ageing_timer + delay;
+			if (time_before_eq(this_timer, jiffies))
-			if (!f->is_static &&
-			    time_before_eq(f->ageing_timer + delay, jiffies))
 				fdb_delete(f);
+			else if (this_timer < next_timer)
+				next_timer = this_timer;
 		}
 	}
 	spin_unlock_bh(&br->hash_lock);
 
+	/* Add HZ/4 to ensure we round the jiffies upwards to be after the next
+	 * timer, otherwise we might round down and will have no-op run. */
+	mod_timer(&br->gc_timer, round_jiffies(next_timer + HZ/4));
-	mod_timer(&br->gc_timer, jiffies + HZ/10);
 }
 
 /* Completely flush all dynamic entries in forwarding database.*/


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

* [PATCH 2/2] bridge: round off STP perodic timers
  2007-05-30 19:12 ` [PATCH 1/2] bridge: reduce frequency of forwarding " Stephen Hemminger
@ 2007-05-30 19:14   ` Stephen Hemminger
  2007-05-31  8:21     ` David Miller
  0 siblings, 1 reply; 4+ messages in thread
From: Stephen Hemminger @ 2007-05-30 19:14 UTC (permalink / raw)
  To: David S. Miller; +Cc: Baruch Even, netdev, power, bridge

Peroidic STP timers don't have to be exact.
The hold timer runs at 1HZ, and the hello timer normally runs
at 2HZ; save power by aligning it them to next second.

Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>

---
 net/bridge/br_stp.c       |    3 ++-
 net/bridge/br_stp_timer.c |    2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)

--- a/net/bridge/br_stp.c	2007-05-30 11:42:16.000000000 -0700
+++ b/net/bridge/br_stp.c	2007-05-30 11:51:51.000000000 -0700
@@ -178,7 +178,8 @@ void br_transmit_config(struct net_bridg
 		br_send_config_bpdu(p, &bpdu);
 		p->topology_change_ack = 0;
 		p->config_pending = 0;
-		mod_timer(&p->hold_timer, jiffies + BR_HOLD_TIME);
+		mod_timer(&p->hold_timer,
+			  round_jiffies(jiffies + BR_HOLD_TIME));
 	}
 }
 
--- a/net/bridge/br_stp_timer.c	2007-05-30 11:42:16.000000000 -0700
+++ b/net/bridge/br_stp_timer.c	2007-05-30 11:53:08.000000000 -0700
@@ -42,7 +42,7 @@ static void br_hello_timer_expired(unsig
 	if (br->dev->flags & IFF_UP) {
 		br_config_bpdu_generation(br);
 
-		mod_timer(&br->hello_timer, jiffies + br->hello_time);
+		mod_timer(&br->hello_timer, round_jiffies(jiffies + br->hello_time));
 	}
 	spin_unlock(&br->lock);
 }

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

* Re: [PATCH 2/2] bridge: round off STP perodic timers
  2007-05-30 19:14   ` [PATCH 2/2] bridge: round off STP perodic timers Stephen Hemminger
@ 2007-05-31  8:21     ` David Miller
  0 siblings, 0 replies; 4+ messages in thread
From: David Miller @ 2007-05-31  8:21 UTC (permalink / raw)
  To: shemminger; +Cc: baruch, netdev, power, bridge

From: Stephen Hemminger <shemminger@linux-foundation.org>
Date: Wed, 30 May 2007 12:14:22 -0700

> Peroidic STP timers don't have to be exact.
> The hold timer runs at 1HZ, and the hello timer normally runs
> at 2HZ; save power by aligning it them to next second.
> 
> Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>

Applied, thanks Stephen.

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

end of thread, other threads:[~2007-05-31  8:21 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-05-19 22:46 [PATCH] Reduce frequency of cleanup timer in bridge Baruch Even
2007-05-30 19:12 ` [PATCH 1/2] bridge: reduce frequency of forwarding " Stephen Hemminger
2007-05-30 19:14   ` [PATCH 2/2] bridge: round off STP perodic timers Stephen Hemminger
2007-05-31  8:21     ` David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).