Best option to process packet ACL

Zé Claudio Pastore zclaudio at bsd.com.br
Wed Apr 27 19:21:51 UTC 2016


Hello everyone,

I would like to hear your suggestion regarding the best approach to process
IP packets for filtering, in such a way I can avoid lowering my pps rate.

Today a have a simple application proxies http application. It's dual
threaded on a 4 core system with low CPU power. The current application
uses two threads, one for control and one for data flow processing.

I need to implement a simple set of stateless filtering, I will process
only:

- src-ip
- dst-ip
- src-port
- dst-port
- iplen
- proto (tcp/udp/other)

My current rate of requests per second is high, around 200K. I have no idea
how I can leverage the IDLE CPUs the best way to implement this ACL
filtering trying not to impact on the pps rate I have today.

I have implemented it serial today (not threaded) and I get 40% performance
loss. I will handle max 128 filter rules, this is a decision which is made.
This is going to be first match wins.

My current plans are to test:

1) Create 6 threads, one to test each aspect of the ACL (src-ip, dst-ip,
etc) the first thread that returns false to parent thread I stop processing
that rule and go to the next, and tell all other threads to die/exit since
they don't matter anymore.

2) Create one thread to process a batch of rules, say, 8 rules per thread
per request. Don't know if I would limit total number of threads and lock
requests while threads ar e busy.

3) Someone suggested "do as pf/ipfw do" but I have no idea how it's done,
how multithreaded it is and what is done on each thread.

4) Other suggestion?

This is going to run FreeBSD 11, I use libevent2 on the current application
so far.

Thanks.


More information about the freebsd-hackers mailing list