Subject: Re: CVS commit: syssrc/sys/net
To: None <darrenr@reed.wattle.id.au>
From: Atsushi Onoe <onoe@sm.sony.co.jp>
List: tech-net
Date: 09/30/2002 21:24:01
> Why do we need bpf_tap, bpf_mtap and bpf_mtap2 ?
> That said, your proposal for bpf_mtap2() was:
>
> void bpf_mtap2(caddr_t bpf, caddr_t hdr, int hdrlen, struct mbuf *m);
bpf_tap and bpf_mtap can be integrated or even defined by macro to use
bpf_mtap2.
> The first problems is that the hdr part needs to be in an mbuf,
> sooner or later and putting it directly in with the code in
> if_ieee1394subr.c saves having to copy that again.
Moving the code in if_ieee1394subr.c to bpf_mtap2 doesn't introduce
more or less overhead at all.
> I think you're missing the point I raised.
OK, but it is a different issue from the mbuf initializer.
> IDS software will use BPF to get packets from the network. Having
> spoken to at least one vendor about doing that, their main gripe
> was how slow BPF was. That's the in-kernel BPF being slow.
>
> Hence, I'm interested in knowing what we can do in a general manner
> to make BPF faster, as well as better and less buggy. I made a bunch
> of changes to bpf_filter() after hearing this that made the kernel
> code not use m_xword() and friends all the time (this is now in
> libpcap.)
>
> Replacing the current use of a mbuf on the stack with MGET will not
> make it any quicker.
>
> Actually, in these cases, it makes no difference :-( libpcap generates
> code that expects there to be a 4 byte DLT_NULL header, and this forces
> all bpf accesses to use m_x*() because 'buflen == 0' from bpf_mtap. :(
>
> That said, a bpf_mtap2() will not solve *that* problem either :-/
Yes, but it isn't worse in performance then expose fake mbuf and
hide fake mbuf into bpf is a good point then.
Perhaps, add extra space for link header at using mbuf in drivers
if possible, and use of M_PREPEND() could be better for performance.
Unlike old BSD mbuf functions, our M_PREPEND() can be used also for
mbuf clusters.
Obviously, it cannot be applied for if_loop, but I'm not sure IDS want
to see loopback interface.
How about proposing such manner in use of bpf_mtap if you really think
the performance for bpf is the issue?
Atsushi Onoe