net/mlx4_en: Adjust RX frag strides to frag sizes
authorIdo Shamay <idos@mellanox.com>
Tue, 3 Feb 2015 15:57:20 +0000 (17:57 +0200)
committerDavid S. Miller <davem@davemloft.net>
Thu, 5 Feb 2015 00:17:45 +0000 (16:17 -0800)
This patch improves memory utilization and therefore the packets rate
for special MTU's. Instead of setting the frag_stride to the maximal
hard coded frag_size, use the actual frag_size that is set according to
the MTU, when setting the stride of the last frag.
So, for example, for MTU 1600, where the frag_size of the 2nd frag is
86, the frag_size is set to 128 instead of 4096. See below:

Before:
 frag:0 - size:1536 prefix:0 stride:1536
 frag:1 - size:86 prefix:1536 stride:4096

 frag 0 allocator: - size:32768 frags:21
 frag 1 allocator: - size:32768 frags:8

After:
 frag:0 - size:1536 prefix:0 stride:1536
 frag:1 - size:86 prefix:1536 stride:128

 frag 0 allocator: - size:32768 frags:21
 frag 1 allocator: - size:32768 frags:256

Signed-off-by: Ido Shamay <idos@mellanox.com>
Signed-off-by: Amir Vadai <amirv@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlx4/en_rx.c

index 30a2203a7cd1e2e441130f53d9d73237ef51bd57..698d60de1255269c11363c0196fd16800d5c4f13 100644 (file)
@@ -1063,8 +1063,9 @@ void mlx4_en_calc_rx_buf(struct net_device *dev)
                        (eff_mtu > buf_size + frag_sizes[i]) ?
                                frag_sizes[i] : eff_mtu - buf_size;
                priv->frag_info[i].frag_prefix_size = buf_size;
-               priv->frag_info[i].frag_stride = ALIGN(frag_sizes[i],
-                                                      SMP_CACHE_BYTES);
+               priv->frag_info[i].frag_stride =
+                               ALIGN(priv->frag_info[i].frag_size,
+                                     SMP_CACHE_BYTES);
                buf_size += priv->frag_info[i].frag_size;
                i++;
        }