Regarding skb and skb_frags

Jeff Haran Jeff.Haran at citrix.com
Fri May 2 12:21:25 EDT 2014


> -----Original Message-----
> From: Pranay Srivastava [mailto:pranjas at gmail.com]
> Sent: Thursday, May 01, 2014 8:17 PM
> To: Jeff Haran
> Cc: Valdis.Kletnieks at vt.edu; kernelnewbies
> Subject: Re: Regarding skb and skb_frags
> 
> On Thu, May 1, 2014 at 9:50 PM, Jeff Haran <Jeff.Haran at citrix.com> wrote:
> >> -----Original Message-----
> >> From: kernelnewbies-bounces at kernelnewbies.org
> >> [mailto:kernelnewbies-bounces at kernelnewbies.org] On Behalf Of Pranay
> >> Srivastava
> >> Sent: Thursday, May 01, 2014 7:10 AM
> >> To: Valdis.Kletnieks at vt.edu
> >> Cc: kernelnewbies
> >> Subject: Re: Regarding skb and skb_frags
> >>
> >> On Thu, May 1, 2014 at 7:29 PM,  <Valdis.Kletnieks at vt.edu> wrote:
> >> > On Thu, 01 May 2014 16:12:43 +0530, Pranay Srivastava said:
> >> >
> >> >> My question is that an Ethernet frame won't be bigger than 1500
> >> >> bytes [correct?]
> >> >
> >> > Incorrect.  10G and faster ethernet support jumbograms.  We run our
> >> > HPC 10G network with an MTU of 9000 (which is 2 pages and a bit more).
> >> >
> >> Ok. So in any case the driver won't poke past ethernet header to look
> >> for the size [Correct?].
> >> So it means only when MTU is bigger than page size would there be a
> >> possibility of skb_frags [Correct?].
> >
> > I'm not sure what kernel version you are looking at, but when I do a search
> for skb_frags in the latest kernel sources at http://lxr.linux.no, I don't see any
> variables or structure members named skb_frags, though it shows up in
> comments in one driver.
> >
> > That being said, I believe skb fragments are also used to implement
> scatter/gather lists of packet payload data, even in packets less than or equal to
> the usual 1500 bytes.
> >
> > On the systems I work with, I've seen this happening in packets originating
> from the target system, i.e. egress path of local traffic.
> I think i get it with egress path since you are actually sending out packet
> possible via scatter/gather. But this skb won't be allocated by the driver, it'll be
> given to the driver by upper networking subsystem. I'm confused about the
> inbound packets, would they ever be having skb fragments [sorry to confuse
> with skb_frags i wasn'
> reffering to structure]?
> 
> I'm more inclined to know from a device driver's perspective if it'll have to
> create an skb when a packet arrives which is non-linear.

I suppose that will be up to the driver and the hardware it supports. I've never worked with a driver that delivers non-linear packets on ingress, but I don't know of any requirement that they not do so. There's also the case of GRO where multiple ingress packets get combined into a single large skb. In that case it might make perfect sense to deliver non-linear skbs on ingress since the original frames may have been DMA'ed into different memory buffers, though I have to admit I don't know the details of the GRO implementation well enough to say whether this in fact happens.

Jeff Haran



More information about the Kernelnewbies mailing list