Repository navigation
key the flow table hash with a per-table siphash seed - #2
Merged
Merged
Conversation
Closed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The flow table bucketed keys by an unseeded FNV-1a hash masked to the
low bits. Peers choose most of what gets hashed (source ports, IPv6
interface ids, QUIC Initial connection ids), so they could pick keys
that share a bucket and make every lookup walk one long probe chain.
Add a :hash partition with a constexpr streaming SipHash, a 128-bit
hash_seed and random_seed() over getrandom. Keys now feed their
identity to a hasher through hash_append in place of hash_value, and
byte_key feeds its length first so keys built from several fields do
not collide. flow_table::carve takes a seed, or draws one when given
none, and buckets with SipHash-1-3 under it. The load limit drops from
7/8 to 3/4.
std::hash now uses SipHash under a seed drawn once per
process.
Breaking: a custom demux key needs hash_append instead of hash_value.