Subject: Re: CVS commit: src/sys/dev/ic
To: None <thorpej@shagadelic.org>
From: Izumi Tsutsui <tsutsui@ceres.dti.ne.jp>
List: source-changes
Date: 11/15/2006 00:24:18
thorpej@shagadelic.org wrote:
> > I wonder which is more efficient way to copy received buffer,
> > allocating a new mbuf, or moving data toward 2 bytes in the
> > same mbuf, which is used in vge(4).
>
> Maybe allocate a new mbuf, copy a "typical" amount of data (i.e.
> Ethernet header + IPv4 header + TCP/IP header + typical TCP options)
> into new mbuf (offset 2 bytes from beginning of mbuf), adjust the
> received packet past the data copied into the new mbuf, prepend the
> new mbuf onto the received packet.
Hmm.
Should some upper layer provide such function?
> Allocating mbufs is fairly cheap because of pool_cache. A lot cheaper
> than copying an entire packet (especially an overlapping copy like vge
> uses!)
Well, but for now most of our drivers which pad ETHER_ALIGN on RX
manually allocate a new mbuf (with a cluster if needed) and copy
entire each packet by memcpy(9), don't they? ;-p
The vge(4)'s method looks a bit faster than that.
(though maybe I should have more precise benchmarks)
---
Izumi Tsutsui