Skip to contentSkip to conversation

ehea: Reduce memory usage in buffer pools

PATCH Applied Anton Blanchard 2 participants 4 messages Nov 23, 2011 – Nov 25, 2011

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/2 ehea: Reduce memory usage in buffer pools

Now that we enable multiqueue by default the ehea driver is using quite a lot of memory for its buffer pools. With 4 queues we consume 64MB in the jumbo packet ring, 16MB in the medium packet ring and 16MB in the tiny packet ring.

We should only fill the jumbo ring once the MTU is increased but for now halve it's size so it consumes 32MB. Also reduce the tiny packet ring, with 4 queues we had 16k entries which is overkill.

---

drivers/net/ethernet/ibm/ehea/ehea.h +2 -2
Index: linux-build/drivers/net/ethernet/ibm/ehea/ehea.h
===================================================================
@@ -61,9 +61,9 @@
 #ifdef EHEA_SMALL_QUEUES
 #define EHEA_MAX_CQE_COUNT      1023
 #define EHEA_DEF_ENTRIES_SQ     1023
-#define EHEA_DEF_ENTRIES_RQ1    4095
+#define EHEA_DEF_ENTRIES_RQ1    1023
 #define EHEA_DEF_ENTRIES_RQ2    1023
-#define EHEA_DEF_ENTRIES_RQ3    1023
+#define EHEA_DEF_ENTRIES_RQ3    511
 #else
 #define EHEA_MAX_CQE_COUNT      4080
 #define EHEA_DEF_ENTRIES_SQ     4080
#1 lore raw

PATCH 2/2 ehea: Use round_jiffies_relative to align workqueue

Use round_jiffies_relative to align the ehea workqueue and avoid extra wakeups.

---

drivers/net/ethernet/ibm/ehea/ehea_main.c +4 -2
Index: linux-build/drivers/net/ethernet/ibm/ehea/ehea_main.c
===================================================================
@@ -371,7 +371,8 @@ static void ehea_update_stats(struct wor
 out_herr:
 	free_page((unsigned long)cb2);
 resched:
-	schedule_delayed_work(&port->stats_work, msecs_to_jiffies(1000));
+	schedule_delayed_work(&port->stats_work,
+			      round_jiffies_relative(msecs_to_jiffies(1000)));
 }
 
 static void ehea_refill_rq1(struct ehea_port_res *pr, int index, int nr_of_wqes)
@@ -2434,7 +2435,8 @@ static int ehea_open(struct net_device *
 	}
 
 	mutex_unlock(&port->port_lock);
-	schedule_delayed_work(&port->stats_work, msecs_to_jiffies(1000));
+	schedule_delayed_work(&port->stats_work,
+			      round_jiffies_relative(msecs_to_jiffies(1000)));
 
 	return ret;
 }
maintainer Applied
#3 lore raw
In reply to Anton Blanchard

From: Anton Blanchard <[email protected]>
Date: Wed, 23 Nov 2011 21:13:02 +1100

Quoted 11 lines

Now that we enable multiqueue by default the ehea driver is using quite a lot of memory for its buffer pools. With 4 queues we consume 64MB in the jumbo packet ring, 16MB in the medium packet ring and 16MB in the tiny packet ring.

We should only fill the jumbo ring once the MTU is increased but for now halve it's size so it consumes 32MB. Also reduce the tiny packet ring, with 4 queues we had 16k entries which is overkill.

Applied.