diff --git a/test/perf_test_maatframe.cpp b/test/perf_test_maatframe.cpp index fa1f2bf..6608161 100644 --- a/test/perf_test_maatframe.cpp +++ b/test/perf_test_maatframe.cpp @@ -155,8 +155,30 @@ void ipv4_addr_set_copy(struct ipaddr *ipv4_addr, struct stream_tuple4_v4* v4_ad ipv4_addr->v4=v4_addr; return; } - - +void random_fqdn_generate(char* fqdn_buff, size_t sz) +{ + size_t min_fqdn_len=6, max_fqdn_len=32; + size_t i=0, j=0, len=0; + len=random()%(max_fqdn_len-min_fqdn_len)+min_fqdn_len; + if(len>=sz) + { + len=sz-1; + } + for(i=0; i5) + { + if(random()%3==0) + { + fqdn_buff[i]='.'; + j=0; + } + } + j++; + } + fqdn_buff[i]='\0'; +} void random_keyword_generate(char* keyword_buf, size_t sz) { #define MIN_KEYWORD_LEN 4 @@ -369,20 +391,20 @@ TEST_F(MaatCMDPerfTest, SetExpr50K) return; } const char* high_match_string="maatframe!"; -struct high_match_rate_thread_para +struct thread_para { int thread_id; int test_count; Maat_feather_t feather; - const char* expr_table_name; + const char* table_name; unsigned long long time_elapse_ms; }; void* high_match_rate_scan_thread(void *arg) { - struct high_match_rate_thread_para* para=(struct high_match_rate_thread_para*)arg; + struct thread_para* para=(struct thread_para*)arg; Maat_feather_t feather=para->feather; - const char* expr_table_name=para->expr_table_name; + const char* expr_table_name=para->table_name; struct Maat_rule_t result; scan_status_t mid=NULL; @@ -412,7 +434,7 @@ void* high_match_rate_scan_thread(void *arg) } void* high_match_rate_update_thread(void *arg) { - struct high_match_rate_thread_para* para=(struct high_match_rate_thread_para*)arg; + struct thread_para* para=(struct thread_para*)arg; Maat_feather_t feather=para->feather; const int CMD_EXPR_NUM=10; int config_id=0; @@ -426,7 +448,7 @@ void* high_match_rate_update_thread(void *arg) for(i=0; iexpr_table_name, config_id+i, keyword_buf, 1); + test_add_expr_command_copy(batch, para->table_name, config_id+i, keyword_buf, 1); sleep(1); } int* is_all_hit=(int*)malloc(sizeof(int)); @@ -461,12 +483,12 @@ TEST_F(MaatCMDPerfTest, HighMatchRateOnMultiThread) int global_thread_num=4; unsigned long long time_elapse_ms=0, scan_count=0, scan_per_second=0; pthread_t threads[global_thread_num+1]; - struct high_match_rate_thread_para thread_para[global_thread_num+1]; + struct thread_para thread_para[global_thread_num+1]; for(i=0; irule_id=atoi(table_line+column_offset); @@ -628,76 +650,195 @@ void fqdn_plugin_EX_new_cb(int table_id, const char* key, const char* table_line (*counter)++; return; } -void fqdn_plugin_EX_free_cb(int table_id, MAAT_PLUGIN_EX_DATA* ad, long argl, void *argp) +void perf_fqdn_plugin_EX_free_cb(int table_id, MAAT_PLUGIN_EX_DATA* ad, long argl, void *argp) { - struct fqdn_plugin_ud* u=(struct fqdn_plugin_ud*)(*ad); - u->ref_cnt--; - if(u->ref_cnt>0) return; - free(u); - *ad=NULL; + struct perf_fqdn_plugin_ud* u=(struct perf_fqdn_plugin_ud*)(*ad); + if ((__sync_sub_and_fetch(&u->ref_cnt, 1) == 0)) + { + free(u); + *ad=NULL; + } } -void fqdn_plugin_EX_dup_cb(int table_id, MAAT_PLUGIN_EX_DATA *to, MAAT_PLUGIN_EX_DATA *from, long argl, void *argp) +void perf_fqdn_plugin_EX_dup_cb(int table_id, MAAT_PLUGIN_EX_DATA *to, MAAT_PLUGIN_EX_DATA *from, long argl, void *argp) { - struct fqdn_plugin_ud* u=(struct fqdn_plugin_ud*)(*from); - u->ref_cnt++; + struct perf_fqdn_plugin_ud* u=(struct perf_fqdn_plugin_ud*)(*from); + __sync_add_and_fetch(&(u->ref_cnt), 1); *to=u; } +void* fqdn_plugin_scan_thread(void *arg) +{ -TEST_F(MaatCMDPerfTest, UpdateFQDNPlugin) + struct thread_para* para=(struct thread_para*)arg; + Maat_feather_t feather=para->feather; + + struct perf_fqdn_plugin_ud* result[4]; + + int table_id=0, i=0, j=0, ret=0, hit_times=0; + table_id=Maat_table_register(feather, para->table_name); + memset(&result, 0, sizeof(result)); + struct timespec start, end; + + clock_gettime(CLOCK_MONOTONIC, &start); + for(i=0; itest_count; i++) + { + + ret=Maat_fqdn_plugin_get_EX_data(feather, table_id, "r3---sn-i3belne6.example2.com", (void**)result, 4); + if(ret==2) + { + hit_times++; + } + for(j=0; jtime_elapse_ms=(end.tv_sec-start.tv_sec)*1000+(end.tv_nsec-start.tv_nsec)/1000000; + int* is_all_hit=(int*)malloc(sizeof(int)); + *is_all_hit=(hit_times==para->test_count)?1:0; + return is_all_hit; +} +void* fqdn_plugin_update_thread(void *arg) +{ + struct thread_para* para=(struct thread_para*)arg; + Maat_feather_t feather=para->feather; + const int CMD_EXPR_NUM=10; + int i=0; + struct Maat_cmd_line line_rule; + char line_buff[1024], fqdn_buff[256]; + for(i=0; itable_name; + random_fqdn_generate(fqdn_buff, sizeof(fqdn_buff)); + snprintf(line_buff, 1024, "%d\t1\t%s\tcatid=4\t1", line_rule.rule_id, fqdn_buff); + line_rule.table_line=line_buff; + line_rule.expire_after=0; + Maat_cmd_set_line(feather, &line_rule, MAAT_OP_ADD); + sleep(1); + } + int* is_all_hit=(int*)malloc(sizeof(int)); + *is_all_hit=1; + return is_all_hit; +} + +TEST_F(MaatCMDPerfTest, FQDNPluginOnMultiThread) { #define FQDN_Plugin_EX_data Maat_feather_t feather=MaatCMDPerfTest::_shared_feather; - - int ret=0, i=0; + int* is_all_hit=NULL; + int ret=0; + size_t i=0, j=0; int table_id=0, fqdn_plugin_ex_data_counter=0; const char* table_name="TEST_FQDN_PLUGIN_WITH_EXDATA"; - - const int TEST_CMD_LINE_NUM=5; - const struct Maat_cmd_line *p_line[TEST_CMD_LINE_NUM]; - struct Maat_cmd_line line_rule[TEST_CMD_LINE_NUM]; - const char* table_line[TEST_CMD_LINE_NUM]={ +#define FIXED_LINE_CNT 5 + size_t randomed_line_cnt=100*1000; + size_t total_line_cnt=FIXED_LINE_CNT+randomed_line_cnt; + const struct Maat_cmd_line **p_line=(const struct Maat_cmd_line**)calloc(sizeof(struct Maat_cmd_line*), total_line_cnt); + struct Maat_cmd_line *line_rule=(struct Maat_cmd_line*)calloc(sizeof(struct Maat_cmd_line), total_line_cnt); + const char* fixed_table_line[FIXED_LINE_CNT]={ "201\t0\twww.example1.com\tcatid=1\t1", "202\t1\t.example1.com\tcatid=1\t1", "203\t0\tnews.example1.com\tcatid=2\t1", "204\t0\tr3---sn-i3belne6.example2.com\tcatid=3\t1", "205\t0\tr3---sn-i3belne6.example2.com\tcatid=3\t1" }; + char fqdn_buff[256]; + char** random_lines=(char**)calloc(sizeof(char*), randomed_line_cnt); table_id=Maat_table_register(feather, table_name); ASSERT_GT(table_id, 0); - memset(&line_rule,0,sizeof(line_rule)); - for(i=0;i=0); - EXPECT_EQ(fqdn_plugin_ex_data_counter, 5); + EXPECT_EQ(fqdn_plugin_ex_data_counter, total_line_cnt); - struct fqdn_plugin_ud* result[4]; + struct perf_fqdn_plugin_ud* result[4]; ret=Maat_fqdn_plugin_get_EX_data(feather, table_id, "r3---sn-i3belne6.example2.com", (void**)result, 4); - ASSERT_EQ(ret, 2); - for(i=0; irule_id=atoi(table_line+column_offset); @@ -347,7 +347,7 @@ void fqdn_plugin_EX_new_cb(int table_id, const char* key, const char* table_line } void fqdn_plugin_EX_free_cb(int table_id, MAAT_PLUGIN_EX_DATA* ad, long argl, void *argp) { - struct fqdn_plugin_ud* u=(struct fqdn_plugin_ud*)(*ad); + struct perf_fqdn_plugin_ud* u=(struct perf_fqdn_plugin_ud*)(*ad); u->ref_cnt--; if(u->ref_cnt>0) return; free(u); @@ -355,7 +355,7 @@ void fqdn_plugin_EX_free_cb(int table_id, MAAT_PLUGIN_EX_DATA* ad, long argl, vo } void fqdn_plugin_EX_dup_cb(int table_id, MAAT_PLUGIN_EX_DATA *to, MAAT_PLUGIN_EX_DATA *from, long argl, void *argp) { - struct fqdn_plugin_ud* u=(struct fqdn_plugin_ud*)(*from); + struct perf_fqdn_plugin_ud* u=(struct perf_fqdn_plugin_ud*)(*from); u->ref_cnt++; *to=u; } @@ -375,7 +375,7 @@ TEST(FQDN_Plugin_Table, EX_DATA) ASSERT_TRUE(ret>=0); EXPECT_EQ(fqdn_plugin_ex_data_counter, 5); - struct fqdn_plugin_ud* result[4]; + struct perf_fqdn_plugin_ud* result[4]; ret=Maat_fqdn_plugin_get_EX_data(g_feather, table_id, "www.example1.com", (void**)result, 4); ASSERT_EQ(ret, 2);