mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-28 06:13:31 +01:00
Faster chan_circid_entry_hash implementation
Since this is critical-path, let's tune the value we pass to csiphash a little so it fits into one whole round.
This commit is contained in:
parent
8127f4db30
commit
0ad607d604
@ -76,14 +76,15 @@ chan_circid_entries_eq_(chan_circid_circuit_map_t *a,
|
||||
static INLINE unsigned int
|
||||
chan_circid_entry_hash_(chan_circid_circuit_map_t *a)
|
||||
{
|
||||
struct {
|
||||
void *chan;
|
||||
circid_t circid;
|
||||
} s;
|
||||
memset(&s, 0, sizeof(s));
|
||||
s.chan = a->chan;
|
||||
s.circid = a->circ_id;
|
||||
return (unsigned) siphash24g(&s, sizeof(s));
|
||||
/* Try to squeze the siphash input into 8 bytes to save any extra siphash
|
||||
* rounds. This hash function is in the critical path. */
|
||||
uintptr_t chan = (uintptr_t) (void*) a->chan;
|
||||
uint32_t array[2];
|
||||
array[0] = a->circ_id;
|
||||
/* The low bits of the channel pointer are uninteresting, since the channel
|
||||
* is a pretty big structure. */
|
||||
array[1] = (uint32_t) (chan >> 6);
|
||||
return (unsigned) siphash24g(array, sizeof(array));
|
||||
}
|
||||
|
||||
/** Map from [chan,circid] to circuit. */
|
||||
|
Loading…
Reference in New Issue
Block a user