1. dpdk多线程使用hyperscan模式查询,访问全局的db时报错。
应该使用rte_malloc()
和rte_free()
为hyperscan分配内存。如下:
void *hs_rte_malloc(size_t *size)
{
return rte_malloc("hs_malloc", size, 0);
}
void hs_rte_free(void *ptr)
{
rte_free(ptr);
}
void hs_init() {
...
/* 设置自定义hs动态分配内存和释放内存的函数 */
hs_set_allocator(hs_rte_malloc, hs_rte_free);
...
}
2. dpdk多线程使用hyperscan,只有一个scratch时报段错误。
将pattern
中的16进制做转换,例如:
/* 0x00 ==> \x00 */
int i = 0, j = 0;
if (pattern[i] == 0x00) {
expression[j++] = '\\';
expression[j++] = '\x';
expression[j++] = '\0';
expression[j++] = '\0';
}