Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
5e0faf49
Commit
5e0faf49
authored
Aug 02, 2019
by
antirez
Browse files
tracking_collisions.c: sha1 + crc64 implemented.
parent
a368209b
Changes
1
Hide whitespace changes
Inline
Side-by-side
utils/tracking_collisions.c
View file @
5e0faf49
...
...
@@ -10,6 +10,11 @@
* And counts the resulting collisons generated in the 24 bits of output
* needed for the tracking feature invalidation table (16 millions + entries)
*
* Compile with:
*
* cc -O2 ./tracking_collisions.c ../src/crc64.c ../src/sha1.c
* ./a.out
*
* --------------------------------------------------------------------------
*
* Copyright (C) 2019 Salvatore Sanfilippo
...
...
@@ -20,16 +25,47 @@
#include <stdint.h>
#include <string.h>
#include <stdio.h>
#include "../src/crc64.h"
#include "../src/sha1.h"
#define TABLE_SIZE (1<<24)
int
Table
[
TABLE_SIZE
];
uint64_t
crc64Hash
(
char
*
key
,
size_t
len
)
{
return
crc64
(
0
,(
unsigned
char
*
)
key
,
len
);
}
uint64_t
sha1Hash
(
char
*
key
,
size_t
len
)
{
SHA1_CTX
ctx
;
unsigned
char
hash
[
20
];
SHA1Init
(
&
ctx
);
SHA1Update
(
&
ctx
,(
unsigned
char
*
)
key
,
len
);
SHA1Final
(
hash
,
&
ctx
);
uint64_t
hash64
;
memcpy
(
&
hash64
,
hash
,
sizeof
(
hash64
));
return
hash64
;
}
/* Test the hashing function provided as callback and return the
* number of collisions found. */
unsigned
long
testHashingFunction
(
uint64_t
(
*
hash
)(
char
*
,
size_t
))
{
unsigned
long
collisions
=
0
;
memset
(
Table
,
0
,
sizeof
(
Table
));
char
*
prefixes
[]
=
{
"object"
,
"message"
,
"user"
,
NULL
};
for
(
int
i
=
0
;
prefixes
[
i
]
!=
NULL
;
i
++
)
{
for
(
int
j
=
0
;
j
<
TABLE_SIZE
/
2
;
j
++
)
{
char
keyname
[
128
];
size_t
keylen
=
snprintf
(
keyname
,
sizeof
(
keyname
),
"%s:%d"
,
prefixes
[
i
],
j
);
uint64_t
bucket
=
hash
(
keyname
,
keylen
)
%
TABLE_SIZE
;
if
(
Table
[
bucket
])
{
collisions
++
;
}
else
{
Table
[
bucket
]
=
1
;
}
}
}
return
collisions
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment