On 03/03/14 20:34, Vlad Yasevich wrote: > Macvlan currently inherits all of its features from the lower > device. When lower device disables offload support, this causes > macvlan to disable offload support as well. This causes > performance regression when using macvlan/macvtap in bridge > mode. > > It can be easily demonstrated by creating 2 namespaces using > macvlan in bridge mode and running netperf between them: > > MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.0.0.1 () port 0 AF_INET > Recv Send Send > Socket Socket Message Elapsed > Size Size Size Time Throughput > bytes bytes bytes secs. 10^6bits/sec > > 87380 16384 16384 20.00 1204.61 > > To restore the performance, we add software offload features > to the list of "always_on" features for macvlan. This way > when a namespace or a guest using macvtap initially sends a > packet, this packet will not be segmented at macvlan level. > It will only be segmented when macvlan sends the packet > to the lower device. > > MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.0.0.1 () port 0 AF_INET > Recv Send Send > Socket Socket Message Elapsed > Size Size Size Time Throughput > bytes bytes bytes secs. 10^6bits/sec > > 87380 16384 16384 20.00 5507.35 > > Fixes: 6acf54f1cf0a6747bac9fea26f34cfc5a9029523 (macvtap: Add support of packet capture on macvtap device.) > Fixes: 797f87f83b60685ff8a13fa0572d2f10393c50d3 (macvlan: fix netdev feature propagation from lower device) > CC: Florian Westphal <fw@xxxxxxxxx> > CC: Christian Borntraeger <borntraeger@xxxxxxxxxx> > CC: Jason Wang <jasowang@xxxxxxxxxx> > CC: Michael S. Tsirkin <mst@xxxxxxxxxx> > Signed-off-by: Vlad Yasevich <vyasevic@xxxxxxxxxx> > --- > drivers/net/macvlan.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c > index a5d2189..2625d2a 100644 > --- a/drivers/net/macvlan.c > +++ b/drivers/net/macvlan.c > @@ -506,6 +506,9 @@ static int macvlan_change_mtu(struct net_device *dev, int new_mtu) > static struct lock_class_key macvlan_netdev_xmit_lock_key; > static struct lock_class_key macvlan_netdev_addr_lock_key; > > +#define ALWAYS_ON_FEATURS \ there is a ^^ typo. I fixed up the patch and the performance seems back to normal Thanks Tested-by: Christian Borntraeger <borntraeger@xxxxxxxxxx> > + (NETIF_F_SG | NETIF_F_GEN_CSUM | NETIF_F_GSO_SOFTWARE | NETIF_F_LLTX) > + > #define MACVLAN_FEATURES \ > (NETIF_F_SG | NETIF_F_ALL_CSUM | NETIF_F_HIGHDMA | NETIF_F_FRAGLIST | \ > NETIF_F_GSO | NETIF_F_TSO | NETIF_F_UFO | NETIF_F_GSO_ROBUST | \ > @@ -539,7 +542,7 @@ static int macvlan_init(struct net_device *dev) > dev->state = (dev->state & ~MACVLAN_STATE_MASK) | > (lowerdev->state & MACVLAN_STATE_MASK); > dev->features = lowerdev->features & MACVLAN_FEATURES; > - dev->features |= NETIF_F_LLTX; > + dev->features |= ALWAYS_ON_FEATURES; > dev->gso_max_size = lowerdev->gso_max_size; > dev->iflink = lowerdev->ifindex; > dev->hard_header_len = lowerdev->hard_header_len; > @@ -699,7 +702,7 @@ static netdev_features_t macvlan_fix_features(struct net_device *dev, > features = netdev_increment_features(vlan->lowerdev->features, > features, > mask); > - features |= NETIF_F_LLTX; > + features |= ALWAYS_ON_FEATURES; > > return features; > } > -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html