mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-14 07:03:44 +01:00
Document our Bloom filter parameter choices.
svn:r17785
This commit is contained in:
parent
0f9f45ff33
commit
73e1a1d26e
@ -1233,6 +1233,16 @@ IMPLEMENT_ORDER_FUNC(find_nth_long, long)
|
|||||||
digestset_t *
|
digestset_t *
|
||||||
digestset_new(int max_elements)
|
digestset_new(int max_elements)
|
||||||
{
|
{
|
||||||
|
/* The probability of false positivies is about P=(1 - exp(-kn/m))^k, where k
|
||||||
|
* is the number of hash functions per entry, m is the bits in the array,
|
||||||
|
* and n is the number of elements inserted. For us, k==4, n<=max_elements,
|
||||||
|
* and m==n_bits= approximately max_elements*32. This gives
|
||||||
|
* P<(1-exp(-4*n/(32*n)))^4 == (1-exp(1/-8))^4 == .00019
|
||||||
|
*
|
||||||
|
* It would be more optimal in space vs false positives to get this false
|
||||||
|
* positive rate by going for k==13, and m==18.5n, but we also want to
|
||||||
|
* conserve CPU, and k==13 is pretty big.
|
||||||
|
*/
|
||||||
int n_bits = 1u << (tor_log2(max_elements)+5);
|
int n_bits = 1u << (tor_log2(max_elements)+5);
|
||||||
digestset_t *r = tor_malloc(sizeof(digestset_t));
|
digestset_t *r = tor_malloc(sizeof(digestset_t));
|
||||||
r->mask = n_bits - 1;
|
r->mask = n_bits - 1;
|
||||||
|
Loading…
Reference in New Issue
Block a user