Improved memory managment for NUMA architectures
- Dominant language
- C++
- Stars
- 5.5k
- Forks
- 816
- Avg merge
- 4d 21h
- Merged PRs (30d)
- 2
Description
While investigating Hyperscan for use in a DPI system I've noticed that the current memory allocation method will create a bottleneck for multi-threaded/multi-streamed NUMA (Non-Uniform Memory Architectures) systems, such as Linux. The bottleneck is created around the four static functions in the file alloc.c. It requires a mutli-threaded caller to wrap these methods with a critical region semaphore, mutex or spinlock. In addition, the static variables associated with these methods create false-sharing issues in the cache of multi-threaded systems.
Do you plan to improve the Hyperscan interface to improve memory management?
Possible solutions could include:
* Functions to create and place scratch and stream objects at specific memory locations, much like the hs_deserialize_at() function
* Create a new pair of functions for scratch and stream objects, one for discovering the size required for the allocation, and the second for placement of the object into a memory buffer
* Provide a C++ interface that accepts a virtualized memory management object as a parameter to the creation functions
Regards,
Daris Nevil
Contributor guide
Assessment
This issue has not been assessed yet.