HomeFreeBSD

Rework locking in BPF code to remove rwlock from fast path.

Description

Rework locking in BPF code to remove rwlock from fast path.

On high packets rate the contention on rwlock in bpf_*tap*() functions
can lead to packets dropping. To avoid this, migrate this code to use
epoch(9) KPI and ConcurrencyKit's lists.

  • all lists changed to use CK_LIST;
  • reference counting added to bpf_if and bpf_d;
  • now bpf_if references ifnet and releases this reference on destroy;
  • each bpf_d descriptor references bpf_if when it is attached;
  • new struct bpf_program_buffer introduced to keep BPF filter programs;
  • bpf_program_buffer, bpf_d and bpf_if structures are freed by epoch_call();
  • bpf_freelist and ifnet_departure event are no longer needed, thus both are removed;

Reviewed by: melifaro
Sponsored by: Yandex LLC
Differential Revision: https://reviews.freebsd.org/D20224

Details

Provenance
aeAuthored on
Reviewer
melifaro
Differential Revision
D20224: Eliminate rwlock from fast path processing in BPF code
Parents
rS347525: MFC r347160: Decode some more ATA commands found in ACS-4.
Branches
Unknown
Tags
Unknown