MBUF - Do not limit an objcache common pool to 10 magazines.
authorMatthew Dillon <dillon@apollo.backplane.com>
Wed, 9 Sep 2009 16:17:57 +0000 (09:17 -0700)
committerMatthew Dillon <dillon@apollo.backplane.com>
Wed, 9 Sep 2009 16:17:57 +0000 (09:17 -0700)
* An objcache's common magazine pool was limited to 10 in order to return
  memory to the system sooner rather then later.

  This created a situation with the mbuf allocator where high-rate
  mbuf producers (GigE, 10GigE) would sometimes not be able to allocate
  a large enough batch of mbufs and drop packets.  10 magazines x 64 is
  only 640 mbufs.

* Increase the limit from 10 to 1000.

Tested-with: 10GigE setup from Aggelos Economopoulos <aoiko@cc.ece.ntua.gr>

sys/kern/kern_objcache.c

index 291d3ec..febdb61 100644 (file)
@@ -271,8 +271,8 @@ objcache_create(const char *name, int *cluster_limit0, int mag_capacity,
        /* bound result to acceptable range */
        if (nmagdepot < 2)
                nmagdepot = 2;
-       if (nmagdepot > 10)
-               nmagdepot = 10;
+       if (nmagdepot > 1000)
+               nmagdepot = 1000;
 
        /* put empty magazines in depot */
        for (i = 0; i < nmagdepot; i++) {