You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Gatekeeper version 1.2 introduces a general Hopscotch hash table library to implement the flow table, Gatekeeper counts with its own hash table library. We now may be able to replace all hash tables in Gatekeeper that use DPDK's hash library; search for rte_hash_create().
Currently, there are two use cases for hash tables:
lls/cache.c: hash table for ARP and ND resolutions.
gk/rt.c: hash table for cache of Ethernet headers. While the code has a single writer, care must be taken to support concurrent readers. The new code should leverage the internal QID of Gatekeeper's hash table to simplify the allocation of caches of Ethernet headers (see get_new_ether_cache_locked()). An entry array will be needed to hold the key of the entries and the data pointer. The GT block uses the code of this cache as well, so it makes sense to move it into its own library.
These use cases may require one to improve our hash library to support concurrent readers while a single writer updates the table. But before this improvement is done, one should review the synchronization model of the use cases to check if they can be rewritten in such a way that no synchronization is needed. If the improvement of our hash library is necessary, it must not have any significant performance penalty since this library is used to implement the flow table of Gatekeeper.
The hash tables of the use cases above are relatively small, so one can set their performance parameters as follows: max_probes = 8 and scale_num_bucket = 2.
The text was updated successfully, but these errors were encountered:
Gatekeeper version 1.2 introduces a general Hopscotch hash table library to implement the flow table, Gatekeeper counts with its own hash table library. We now may be able to replace all hash tables in Gatekeeper that use DPDK's hash library; search for
rte_hash_create()
.Currently, there are two use cases for hash tables:
lls/cache.c
: hash table for ARP and ND resolutions.gk/rt.c
: hash table for cache of Ethernet headers. While the code has a single writer, care must be taken to support concurrent readers. The new code should leverage the internal QID of Gatekeeper's hash table to simplify the allocation of caches of Ethernet headers (seeget_new_ether_cache_locked()
). An entry array will be needed to hold the key of the entries and the data pointer. The GT block uses the code of this cache as well, so it makes sense to move it into its own library.These use cases may require one to improve our hash library to support concurrent readers while a single writer updates the table. But before this improvement is done, one should review the synchronization model of the use cases to check if they can be rewritten in such a way that no synchronization is needed. If the improvement of our hash library is necessary, it must not have any significant performance penalty since this library is used to implement the flow table of Gatekeeper.
The hash tables of the use cases above are relatively small, so one can set their performance parameters as follows:
max_probes = 8
andscale_num_bucket = 2
.The text was updated successfully, but these errors were encountered: