tech-net archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Unify bpf_mtap & if_ipackets++ on Rx



Hi,

This is another proposal that unifies bpf_mtap and
if_ipackets++, which are executed in each driver now,
into the percpuq if_input framework.

The benefits of the change are:
- We can reduce codes
- We can provide the same behavior between drivers
  - How if_ipackets is counted up
  - Well, actually some drivers periodically update
    packet statistics though
- We can run bpf_mtap in softint
  - This makes it easy to MP-ify bpf

Here is a patch:
  http://www.netbsd.org/~ozaki-r/unify-bpf_mtap-if_ipackets.diff

The patch is almost mechanically generated by spatch.
Let me know if there are mistakes.


We can move most bpf_mtap into softint by the patch
but there remain some bpf_mtap that can run in
hardware interrupt context.

Two of them that are executed from Tx interrupt and can be
moved if_start which is the usual place for bpf_mtap on Tx.

Here is a patch for the change:
  http://www.netbsd.org/~ozaki-r/move-bpf_mtap-txintr.diff

Is this kind of changes correct?


So there are five remaining bpf_mtap that cannot be solved
without big changes. I annotate them:
  http://www.netbsd.org/~ozaki-r/comment-bpf_mtap-hardintr.diff

One solution is to provide a deferred bpf_mtap mechanism that
duplicates mbuf and run bpf_mtap in softint (or workqueue).
It should work but it's perhaps a last resort.

Let me know if there is a better approach.


Any comments or suggestions?

Thanks,
  ozaki-r


Home | Main Index | Thread Index | Old Index