Hi,

Posting such a topic in such a list might probably sound a bit
aggressive, but this patch should not be misinterpreted. I think it's
clear to everybody that it would be great to update pf in dragonfly, but
that's a lot of work and nobody is working on this. This patch followed
a complaint on the mailing list about the slowness of pf on dragonfly,
and I guess that making it SMP was the faster way (one day of work) to
solve this issue. I don't think that anybody ever claimed that pf had
become faster or better on dfly than on openbsd, or that openBSD is
lagging behind.

That being said, i subscribed to this list to reply to your last assertion.

> it's so obvious... two things needing to access the same data
> structures cannot run in parallel.

> packet filters CAN profit from MP, but it is way less than people keep
> thinking.

This is obvious indeed, that's why the goal of this patch is to avoid
the need to access the same data structures. This is due to the design
of the dragonfly network stack. Packets are hashed, for instance with
tcp they are hashed using the two tuples (host, port) for destination
and origin, and they are dispatched to a fixed cpu according to this
hash. The packet is then handled by this cpu, and the thread is pinned
to this cpu.

Things are more complex in practice due to hardware hashes, forwarding
and other things i'm not an expert on the topic, but basically, it
reduce the amount of sharing needed.

You can take advantage of this design to make a packet filtering almost
lockless. Indeed, you only need to access the local state for a lot of
rules, and since the state structure is owned by the current cpu, you
don't need any lock. (for nat/rdr or stateful firewalling, things are a
bit less easy).

In practice, this work as a real impact on my router, hence I really
think that's nice to have, even if obviously having an up to date pf or
good ipv6 support is more important (and a lot harder to do).

Regards,
joris

Reply via email to