[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Xen-users] SG off drops packets
 
 
  
  
    Here is an update: 
    the slots variable is calculated like this 
    599         slots = DIV_ROUND_UP(offset + len, PAGE_SIZE) + 
    600                 xennet_count_skb_frag_slots(skb); 
     
    printk shows, that xennet_count_skb_frag_slots(skb) = 0. The length
    is also correct (something small, e.g. 66). Interestingly, with all
    the problematic packets the offset is 4032 (always the same). So
    with a PAGE_SIZE of 4096 this causes the DIV_ROUND_UP to return 2,
    which results in the packet being dropped (without notice). 
     
    Any help and/or pointer to help is highly appreciated :) 
    Lennart 
     
     
    On 21.05.2015 14:33, Lennart Schulte
      wrote: 
     
    
      
      Hi, 
      I'm running Debian Sid as dom0 (Debian 3.16.7-ckt7-1 (2015-03-01)
      x86_64 with Xen 4.4.1-7). I also bootstrapped Debian Sid for the
      domUs, but booting vanilla Linux kernel 3.19 (which is where the
      problem seems to be). 
      I have set up a virtual network with 3 nodes: sender router and
      receiver. Routes are statically set via ip route and
      scatter-gather (SG) is switched off on every node via ethtool. 
       
      I noticed that some small packets (pings as well as small TCP
      packets (< 200 bytes)) are being dropped apparently at random
      by the eth interface of the domU router (TX drop). Neither the tc
      queues on the node nor the corresponding vif interface on the dom0
      show any abnormal packet drops. 
       
      Since xen-netfront is responsible for the sending of packets
      without offloading, I checked that part of the code and found the
      problem being caused by line 614 (sg is off, a printk showed slots
      = 2): 
       
      563 static int xennet_start_xmit(struct sk_buff *skb, struct
      net_device *dev) 
      564 { 
              .. 
      613         if (unlikely(!netif_carrier_ok(dev) || 
      614                      (slots > 1 &&
      !xennet_can_sg(dev)) || 
      615                      netif_needs_gso(dev, skb,
      netif_skb_features(skb)))) { 
      616                 spin_unlock_irqrestore(&queue->tx_lock,
      flags); 
      617                 goto drop; 
      618         } 
              .. 
      693 } 
       
      I'm not too familiar with the xen code, therefore could someone
      explain what the slots variable is and maybe even why this line
      causes only some small packets to be dropped? 
       
      Thanks, 
      Lennart 
     
  
 |  
 _______________________________________________
Xen-users mailing list
Xen-users@xxxxxxxxxxxxx
http://lists.xen.org/xen-users 
 
    
     |