summaryrefslogtreecommitdiff
path: root/test/test_performance.cpp
diff options
context:
space:
mode:
authorchenzizhan <[email protected]>2023-08-24 16:29:43 +0800
committerchenzizhan <[email protected]>2023-08-24 16:29:43 +0800
commit259a3af66f6fc97527786b326236f6e8673846cb (patch)
treed6a64e8f8c8d02878c14480af1afb869948aef72 /test/test_performance.cpp
parent2da464f85e41401227e4b342571253cb819cad70 (diff)
doc: new serialize performance benchmark
Diffstat (limited to 'test/test_performance.cpp')
-rw-r--r--test/test_performance.cpp744
1 files changed, 372 insertions, 372 deletions
diff --git a/test/test_performance.cpp b/test/test_performance.cpp
index e311b66..cc24e05 100644
--- a/test/test_performance.cpp
+++ b/test/test_performance.cpp
@@ -10,377 +10,377 @@
// /* merge */
// /* -------------------------------------------------------------------------- */
-// TEST(test_performance, merge_performance_when_comprehensive_sampling_multi_instance)
-// {
-// const int INSTANCE_NUM = 100;
-// const int MAX_CELL_NUM = 65535;
-// const int DIMENSION_TOTAL = 100000;
-// // const int INSTANCE_NUM = 2;
-// // const int MAX_CELL_NUM = 1000;
-// // const int DIMENSION_TOTAL = 1024;
-// Fieldstat_tag_list_wrapper *tags[DIMENSION_TOTAL];
-// for (int i = 0; i < DIMENSION_TOTAL; i++)
-// {
-// tags[i] = new Fieldstat_tag_list_wrapper("my key", i);
-// }
-
-// struct fieldstat *instances[INSTANCE_NUM];
-// for (int i = 0; i < INSTANCE_NUM; i++) {
-// struct fieldstat *tmp_i = fieldstat_new();
-// int cube_id = fieldstat_register_cube(tmp_i, &TEST_SHARED_TAG, 1, SAMPLING_MODE_COMPREHENSIVE, MAX_CELL_NUM);
-// int metric_id = fieldstat_register_counter(tmp_i, cube_id, "metric name", COUNTER_MERGE_BY_SUM);
-// for (int j = 0; j < MAX_CELL_NUM; j++) {
-// int cell_id = fieldstat_cube_add(tmp_i, cube_id, tags[rand() % DIMENSION_TOTAL]->get_tag(), 1, 1);
-// if (cell_id == -1) {
-// printf("cell_id == -1\n");
-// continue;
-// }
-
-// fieldstat_counter_incrby(tmp_i, cube_id, metric_id, cell_id, 1);
-// }
-// instances[i] = tmp_i;
-// }
+TEST(test_performance, merge_performance_when_comprehensive_sampling_multi_instance)
+{
+ const int INSTANCE_NUM = 100;
+ const int MAX_CELL_NUM = 65535;
+ const int DIMENSION_TOTAL = 100000;
+ // const int INSTANCE_NUM = 2;
+ // const int MAX_CELL_NUM = 1000;
+ // const int DIMENSION_TOTAL = 1024;
+ Fieldstat_tag_list_wrapper *tags[DIMENSION_TOTAL];
+ for (int i = 0; i < DIMENSION_TOTAL; i++)
+ {
+ tags[i] = new Fieldstat_tag_list_wrapper("my key", i);
+ }
+
+ struct fieldstat *instances[INSTANCE_NUM];
+ for (int i = 0; i < INSTANCE_NUM; i++) {
+ struct fieldstat *tmp_i = fieldstat_new();
+ int cube_id = fieldstat_register_cube(tmp_i, &TEST_SHARED_TAG, 1, SAMPLING_MODE_COMPREHENSIVE, MAX_CELL_NUM);
+ int metric_id = fieldstat_register_counter(tmp_i, cube_id, "metric name", COUNTER_MERGE_BY_SUM);
+ for (int j = 0; j < MAX_CELL_NUM; j++) {
+ int cell_id = fieldstat_cube_add(tmp_i, cube_id, tags[rand() % DIMENSION_TOTAL]->get_tag(), 1, 1);
+ if (cell_id == -1) {
+ printf("cell_id == -1\n");
+ continue;
+ }
+
+ fieldstat_counter_incrby(tmp_i, cube_id, metric_id, cell_id, 1);
+ }
+ instances[i] = tmp_i;
+ }
-// struct fieldstat *instance_dest = fieldstat_new();
-// printf("prepare done\n");
-
-// clock_t start = clock();
-// // getchar();
-// for (int i = 0; i < INSTANCE_NUM; i++) {
-// fieldstat_merge(instance_dest, instances[i]);
-// }
-// // exit(0);
-// clock_t end = clock();
-
-// double elapsed_secs = double(end - start) / CLOCKS_PER_SEC;
-// printf("merge_performance_when_comprehensive_sampling_multi_instance elapsed_secs: %f\n", elapsed_secs);
-// EXPECT_TRUE(elapsed_secs < 0.1);
-
-// fieldstat_free(instance_dest);
-// for (int i = 0; i < INSTANCE_NUM; i++) {
-// fieldstat_free(instances[i]);
-// }
-// for (int i = 0; i < DIMENSION_TOTAL; i++) {
-// delete tags[i];
-// }
-// }
-
-// clock_t perform_merge_test(std::function<void (struct fieldstat*, int, int, int)> metric_add_func,
-// std::function<int(struct fieldstat*, int)> metric_register_func, enum sampling_mode mode, bool merge_empty_dest)
-// {
-// const int MAX_CELL_NUM = 1000;
-// Fieldstat_tag_list_wrapper *tags[MAX_CELL_NUM];
-// for (int i = 0; i < MAX_CELL_NUM; i++) {
-// tags[i] = new Fieldstat_tag_list_wrapper("my key", i);
-// }
-// struct fieldstat *instance = fieldstat_new();
-// int cube_id = fieldstat_register_cube(instance, &TEST_SHARED_TAG, 1, mode, MAX_CELL_NUM);
-// int metric_id = metric_register_func(instance, cube_id);
-// for (int j = 0; j < MAX_CELL_NUM; j++) {
-// int cell_id = fieldstat_cube_add(instance, cube_id, tags[j]->get_tag(), 1, 1);
-// metric_add_func(instance, cube_id, metric_id, cell_id);
-// }
-
-// struct fieldstat *instance_dest = fieldstat_new();
-// if (!merge_empty_dest) {
-// fieldstat_merge(instance_dest, instance);
-// }
-
-// clock_t start = clock();
-// fieldstat_merge(instance_dest, instance);
-// clock_t end = clock();
-
-// fieldstat_free(instance_dest);
-// fieldstat_free(instance);
-// for (int i = 0; i < MAX_CELL_NUM; i++) {
-// delete tags[i];
-// }
-
-// return end - start;
-// }
-
-// TEST(test_performance, merge_performance_one_instance_comprehensive_counter_empty_dest)
-// {
-// auto metric_add_func = [](struct fieldstat *instance, int cube_id, int metric_id, int cell_id) {
-// fieldstat_counter_incrby(instance, cube_id, metric_id, cell_id, 1);
-// };
-// auto metric_register_func = [](struct fieldstat *instance, int cube_id) {
-// return fieldstat_register_counter(instance, cube_id, "metric name", COUNTER_MERGE_BY_SUM);
-// };
-
-// clock_t elapsed = perform_merge_test(metric_add_func, metric_register_func, SAMPLING_MODE_COMPREHENSIVE, true);
-// printf("merge_performance_one_instance_comprehensive_counter_empty_dest elapsed_secs: %ld\n", elapsed);
-// EXPECT_TRUE(elapsed < 1000000);
-// }
-
-// TEST(test_performance, merge_performance_one_instance_comprehensive_hll_empty_dest)
-// {
-// // int metric_id = fieldstat_register_hll(instance, cube_id, "czz_test hll metric", 10);
-// // int ret = fieldstat_hll_add(instance, cube_id, metric_id, cell_id, "hello", 5);
-
-// auto metric_add_func = [](struct fieldstat *instance, int cube_id, int metric_id, int cell_id) {
-// fieldstat_hll_add(instance, cube_id, metric_id, cell_id, "hello", 5);
-// };
-// auto metric_register_func = [](struct fieldstat *instance, int cube_id) {
-// return fieldstat_register_hll(instance, cube_id, "hll metric", 6);
-// };
-
-// clock_t elapsed = perform_merge_test(metric_add_func, metric_register_func, SAMPLING_MODE_COMPREHENSIVE, true);
-// printf("merge_performance_one_instance_comprehensive_hll_empty_dest elapsed_secs: %ld\n", elapsed);
-// EXPECT_TRUE(elapsed < 1500);
-// }
-
-// TEST(test_performance, merge_performance_one_instance_comprehensive_histogram_empty_dest)
-// {
-// // int metric_id = fieldstat_register_hist(instance, cube_id, "czz_test", 1, 100000, 1);
-// // int ret = fieldstat_hist_record(instance, cube_id, metric_id, cell_id, 1234);
-
-// auto metric_add_func = [](struct fieldstat *instance, int cube_id, int metric_id, int cell_id) {
-// fieldstat_hist_record(instance, cube_id, metric_id, cell_id, 1234);
-// };
-// auto metric_register_func = [](struct fieldstat *instance, int cube_id) {
-// return fieldstat_register_hist(instance, cube_id, "histogram metric", 1, 100000, 1);
-// };
-
-// clock_t elapsed = perform_merge_test(metric_add_func, metric_register_func, SAMPLING_MODE_COMPREHENSIVE, true);
-// printf("merge_performance_one_instance_comprehensive_histogram_empty_dest elapsed_secs: %ld\n", elapsed);
-// EXPECT_TRUE(elapsed < 5000);
-// }
-
-// TEST(test_performance, merge_performance_one_instance_topk_counter_empty_dest)
-// {
-// auto metric_add_func = [](struct fieldstat *instance, int cube_id, int metric_id, int cell_id) {
-// fieldstat_counter_incrby(instance, cube_id, metric_id, cell_id, rand() % 1000);
-// };
-// auto metric_register_func = [](struct fieldstat *instance, int cube_id) {
-// return fieldstat_register_counter(instance, cube_id, "metric name", COUNTER_MERGE_BY_SUM);
-// };
-
-// clock_t elapsed = perform_merge_test(metric_add_func, metric_register_func, SAMPLING_MODE_TOPK, true);
-// printf("merge_performance_one_instance_topk_counter_empty_dest elapsed_secs: %ld\n", elapsed);
-// EXPECT_TRUE(elapsed < 1000);
-// }
-
-// TEST(test_performance, merge_performance_one_instance_comprehensive_counter_full_dest)
-// {
-// // int metric_id = fieldstat_register_counter(tmp_i, cube_id, "metric name", false);
-// // fieldstat_counter_incrby(instance, cube_id, metric_id, cell_id, 1);
-// auto metric_add_func = [](struct fieldstat *instance, int cube_id, int metric_id, int cell_id) {
-// fieldstat_counter_incrby(instance, cube_id, metric_id, cell_id, 1);
-// };
-// auto metric_register_func = [](struct fieldstat *instance, int cube_id) {
-// return fieldstat_register_counter(instance, cube_id, "metric name", COUNTER_MERGE_BY_SUM);
-// };
-
-// clock_t elapsed = perform_merge_test(metric_add_func, metric_register_func, SAMPLING_MODE_COMPREHENSIVE, false);
-// printf("merge_performance_one_instance_comprehensive_counter_full_dest elapsed_secs: %ld\n", elapsed);
-// EXPECT_TRUE(elapsed < 1000);
-// }
-
-// TEST(test_performance, merge_performance_one_instance_comprehensive_hll_full_dest)
-// {
-// // int metric_id = fieldstat_register_hll(instance, cube_id, "czz_test hll metric", 10);
-// // int ret = fieldstat_hll_add(instance, cube_id, metric_id, cell_id, "hello", 5);
-
-// auto metric_add_func = [](struct fieldstat *instance, int cube_id, int metric_id, int cell_id) {
-// fieldstat_hll_add(instance, cube_id, metric_id, cell_id, "hello", 5);
-// };
-// auto metric_register_func = [](struct fieldstat *instance, int cube_id) {
-// return fieldstat_register_hll(instance, cube_id, "hll metric", 6);
-// };
-
-// clock_t elapsed = perform_merge_test(metric_add_func, metric_register_func, SAMPLING_MODE_COMPREHENSIVE, false);
-// printf("merge_performance_one_instance_comprehensive_hll_full_dest elapsed_secs: %ld\n", elapsed);
-// EXPECT_TRUE(elapsed < 1300);
-// }
-
-// TEST(test_performance, merge_performance_one_instance_comprehensive_histogram_full_dest)
-// {
-// // int metric_id = fieldstat_register_hist(instance, cube_id, "czz_test", 1, 600000, 3);
-// // int ret = fieldstat_hist_record(instance, cube_id, metric_id, cell_id, 1234);
-
-// auto metric_add_func = [](struct fieldstat *instance, int cube_id, int metric_id, int cell_id) {
-// fieldstat_hist_record(instance, cube_id, metric_id, cell_id, 1234);
-// };
-// auto metric_register_func = [](struct fieldstat *instance, int cube_id) {
-// return fieldstat_register_hist(instance, cube_id, "histogram metric", 1, 100000, 1);
-// };
-
-// clock_t elapsed = perform_merge_test(metric_add_func, metric_register_func, SAMPLING_MODE_COMPREHENSIVE, false);
-// printf("merge_performance_one_instance_comprehensive_histogram_full_dest elapsed_secs: %ld\n", elapsed);
-// EXPECT_TRUE(elapsed < 3 * 1000);
-// }
-
-// TEST(test_performance, merge_performance_one_instance_topk_counter_full_dest)
-// {
-// auto metric_add_func = [](struct fieldstat *instance, int cube_id, int metric_id, int cell_id) {
-// fieldstat_counter_incrby(instance, cube_id, metric_id, cell_id, rand() % 1000);
-// };
-// auto metric_register_func = [](struct fieldstat *instance, int cube_id) {
-// return fieldstat_register_counter(instance, cube_id, "metric name", COUNTER_MERGE_BY_SUM);
-// };
-
-// clock_t elapsed = perform_merge_test(metric_add_func, metric_register_func, SAMPLING_MODE_TOPK, false);
-// printf("merge_performance_one_instance_topk_counter_full_dest elapsed_secs: %ld\n", elapsed);
-// EXPECT_TRUE(elapsed < 1500);
-// }
+ struct fieldstat *instance_dest = fieldstat_new();
+ printf("prepare done\n");
-// /* -------------------------------------------------------------------------- */
-// /* add */
-// /* -------------------------------------------------------------------------- */
-// TEST(test_performance, performance_test_add_cells_comprehensive)
-// {
-// size_t cell_count = 100000;
-// struct fieldstat_tag tags[cell_count];
-// for (size_t i = 0; i < cell_count; i++) {
-// tags[i] = TEST_TAG_INT;
-// tags[i].value_longlong = i;
-// }
-// // getchar();
-// struct fieldstat *instance = fieldstat_new();
-// fieldstat_register_cube(instance, &TEST_TAG_INT_collided, 1, SAMPLING_MODE_COMPREHENSIVE, cell_count);
-// fieldstat_register_counter(instance, 0, "test", COUNTER_MERGE_BY_SUM);
-
-// clock_t start = clock();
-// for (size_t i = 0; i < cell_count; i++) {
-// fieldstat_cube_add(instance, 0, &tags[i % cell_count], 1, 1);
-// }
-// clock_t end = clock();
-// double seconds = (double)(end - start) / cell_count;
-// printf("performance_test_add_cells_comprehensive time cost: %f\n", seconds);
-// EXPECT_TRUE(seconds < 1);
-// fieldstat_free(instance);
-// }
-
-// TEST(test_performance, performance_test_add_cells_topk)
-// {
-// size_t cell_count = 100000;
-// struct fieldstat_tag tags[cell_count];
-// for (size_t i = 0; i < cell_count; i++) {
-// tags[i] = TEST_TAG_INT;
-// // tags[i].value_longlong = rand() % 10000;
-// if (rand()%2)
-// tags[i].value_longlong = i;
-// else
-// tags[i].value_longlong = rand() % 1000;
-// }
-// struct fieldstat *instance = fieldstat_new();
-// fieldstat_register_cube(instance, &TEST_TAG_INT_collided, 1, SAMPLING_MODE_TOPK, 1000);
-// fieldstat_register_counter(instance, 0, "test", COUNTER_MERGE_BY_SUM);
-
-// // getchar();
-// clock_t start = clock();
-// for (size_t i = 0; i < cell_count; i++) {
-// fieldstat_cube_add(instance, 0, &tags[i % cell_count], 1, 1);
-// }
-// clock_t end = clock();
-// double seconds = (double)(end - start) / cell_count;
-// // exit(0);
-
-// EXPECT_TRUE(seconds < 1);
-// printf("performance_test_on_1000_cells_topk_1000000_times time cost: %f\n", seconds);
-
-// fieldstat_free(instance);
-// }
-
-// TEST(test_performance, performance_test_add_cells_histogram_record)
-// {
-// struct fieldstat *instance = fieldstat_new();
-// fieldstat_register_cube(instance, &TEST_TAG_INT_collided, 1, SAMPLING_MODE_COMPREHENSIVE, 10);
-// fieldstat_register_hist(instance, 0, "test", 1, 1000000, 3);
-// int cell_id = fieldstat_cube_add(instance, 0, &TEST_TAG_DOUBLE, 1, 1);
-// size_t test_num = 100000;
-// long long vals[test_num];
-// for (size_t i = 0; i < test_num; i++) {
-// vals[i] = rand() % 1000000 + 1;
-// }
-
-// clock_t start = clock();
-// for (size_t i = 0; i < test_num; i++) {
-// fieldstat_hist_record(instance, 0, 0, cell_id, vals[i]);
-// }
-// clock_t end = clock();
-// double seconds = (double)(end - start) / test_num;
-// printf("performance_test_add_cells_histogram_record time cost: %f\n", seconds);
-// EXPECT_TRUE(seconds < 1);
-// fieldstat_free(instance);
-// }
-
-// TEST(test_performance, performance_test_add_cells_hll_add)
-// {
-// struct fieldstat *instance = fieldstat_new();
-// fieldstat_register_cube(instance, &TEST_TAG_INT_collided, 1, SAMPLING_MODE_COMPREHENSIVE, 10);
-// fieldstat_register_hll(instance, 0, "test", 6);
-// int cell_id = fieldstat_cube_add(instance, 0, &TEST_TAG_DOUBLE, 1, 1);
-// size_t test_num = 100000;
-// std::string vals[test_num];
-// for (size_t i = 0; i < test_num; i++) {
-// vals[i] = std::to_string(rand() % 1000000 + 1);
-// }
-
-// clock_t start = clock();
-// for (size_t i = 0; i < test_num; i++) {
-// fieldstat_hll_add(instance, 0, 0, cell_id, vals[i].c_str(), vals[i].length());
-// }
-// clock_t end = clock();
-// double seconds = (double)(end - start) / test_num;
-// printf("performance_test_add_cells_hll_add time cost: %f\n", seconds);
-// EXPECT_TRUE(seconds < 1);
-// fieldstat_free(instance);
-// }
+ clock_t start = clock();
+ // getchar();
+ for (int i = 0; i < INSTANCE_NUM; i++) {
+ fieldstat_merge(instance_dest, instances[i]);
+ }
+ // exit(0);
+ clock_t end = clock();
-// /* -------------------------------------------------------------------------- */
-// /* export */
-// /* -------------------------------------------------------------------------- */
-// using namespace std;
-
-// TEST(test_performance, export_many_cells)
-// {
-// const int MAX_CELL_NUM = 1000;
-// const int TAG_NUM = 3000;
-// const int CUBE_NUM = 10;
-// const int METRIC_NUM = 10;
-
-// Fieldstat_tag_list_wrapper *tags[TAG_NUM];
-// for (int i = 0; i < TAG_NUM; i++) {
-// tags[i] = new Fieldstat_tag_list_wrapper("my key", i);
-// }
-
-// struct fieldstat *instance = fieldstat_new();
-// int cell_id[MAX_CELL_NUM];
-// for (int i = 0; i < CUBE_NUM; i++) {
-// Fieldstat_tag_list_wrapper cube_tag("shared key", i);
-// int cube_id = fieldstat_register_cube(instance, cube_tag.get_tag(), cube_tag.get_tag_count(), SAMPLING_MODE_COMPREHENSIVE, MAX_CELL_NUM);
-// for (int k = 0; k < MAX_CELL_NUM; k++) {
-// cell_id[k] = fieldstat_cube_add(instance, cube_id, tags[rand() % TAG_NUM]->get_tag(), 1, 1);
-// }
-// for (int j = 0; j < METRIC_NUM; j++) {
-// string metric_name = "metric name" + to_string(i) + to_string(j);
-// int metric_id = fieldstat_register_counter(instance, cube_id, metric_name.c_str(), COUNTER_MERGE_BY_SUM);
-
-// for (int k = 0; k < MAX_CELL_NUM; k++) {
-// fieldstat_counter_incrby(instance, cube_id, metric_id, cell_id[k], 1);
-// }
-// }
-// }
-
-// struct fieldstat_json_exporter *fieldstat_json_exporter = fieldstat_json_exporter_new(instance);
-// printf("export_many_cells\n");
-// // getchar();
-// clock_t start = clock();
-// char *json_string = fieldstat_json_exporter_export(fieldstat_json_exporter);
-// clock_t end = clock();
-// // exit(0);
-// free(json_string);
-// fieldstat_json_exporter_free(fieldstat_json_exporter);
-
-// printf("export_many_cells us: %ld\n", end - start);
-// fieldstat_free(instance);
-
-// for (int i = 0; i < TAG_NUM; i++) {
-// delete tags[i];
-// }
-// }
+ double elapsed_secs = double(end - start) / CLOCKS_PER_SEC;
+ printf("merge_performance_when_comprehensive_sampling_multi_instance elapsed_secs: %f\n", elapsed_secs);
+ EXPECT_TRUE(elapsed_secs < 0.1);
+
+ fieldstat_free(instance_dest);
+ for (int i = 0; i < INSTANCE_NUM; i++) {
+ fieldstat_free(instances[i]);
+ }
+ for (int i = 0; i < DIMENSION_TOTAL; i++) {
+ delete tags[i];
+ }
+}
+
+clock_t perform_merge_test(std::function<void (struct fieldstat*, int, int, int)> metric_add_func,
+ std::function<int(struct fieldstat*, int)> metric_register_func, enum sampling_mode mode, bool merge_empty_dest)
+{
+ const int MAX_CELL_NUM = 1000;
+ Fieldstat_tag_list_wrapper *tags[MAX_CELL_NUM];
+ for (int i = 0; i < MAX_CELL_NUM; i++) {
+ tags[i] = new Fieldstat_tag_list_wrapper("my key", i);
+ }
+ struct fieldstat *instance = fieldstat_new();
+ int cube_id = fieldstat_register_cube(instance, &TEST_SHARED_TAG, 1, mode, MAX_CELL_NUM);
+ int metric_id = metric_register_func(instance, cube_id);
+ for (int j = 0; j < MAX_CELL_NUM; j++) {
+ int cell_id = fieldstat_cube_add(instance, cube_id, tags[j]->get_tag(), 1, 1);
+ metric_add_func(instance, cube_id, metric_id, cell_id);
+ }
+
+ struct fieldstat *instance_dest = fieldstat_new();
+ if (!merge_empty_dest) {
+ fieldstat_merge(instance_dest, instance);
+ }
+
+ clock_t start = clock();
+ fieldstat_merge(instance_dest, instance);
+ clock_t end = clock();
+
+ fieldstat_free(instance_dest);
+ fieldstat_free(instance);
+ for (int i = 0; i < MAX_CELL_NUM; i++) {
+ delete tags[i];
+ }
+
+ return end - start;
+}
+
+TEST(test_performance, merge_performance_one_instance_comprehensive_counter_empty_dest)
+{
+ auto metric_add_func = [](struct fieldstat *instance, int cube_id, int metric_id, int cell_id) {
+ fieldstat_counter_incrby(instance, cube_id, metric_id, cell_id, 1);
+ };
+ auto metric_register_func = [](struct fieldstat *instance, int cube_id) {
+ return fieldstat_register_counter(instance, cube_id, "metric name", COUNTER_MERGE_BY_SUM);
+ };
+
+ clock_t elapsed = perform_merge_test(metric_add_func, metric_register_func, SAMPLING_MODE_COMPREHENSIVE, true);
+ printf("merge_performance_one_instance_comprehensive_counter_empty_dest elapsed_secs: %ld\n", elapsed);
+ EXPECT_TRUE(elapsed < 1000000);
+}
+
+TEST(test_performance, merge_performance_one_instance_comprehensive_hll_empty_dest)
+{
+ // int metric_id = fieldstat_register_hll(instance, cube_id, "czz_test hll metric", 10);
+ // int ret = fieldstat_hll_add(instance, cube_id, metric_id, cell_id, "hello", 5);
+
+ auto metric_add_func = [](struct fieldstat *instance, int cube_id, int metric_id, int cell_id) {
+ fieldstat_hll_add(instance, cube_id, metric_id, cell_id, "hello", 5);
+ };
+ auto metric_register_func = [](struct fieldstat *instance, int cube_id) {
+ return fieldstat_register_hll(instance, cube_id, "hll metric", 6);
+ };
+
+ clock_t elapsed = perform_merge_test(metric_add_func, metric_register_func, SAMPLING_MODE_COMPREHENSIVE, true);
+ printf("merge_performance_one_instance_comprehensive_hll_empty_dest elapsed_secs: %ld\n", elapsed);
+ EXPECT_TRUE(elapsed < 1500);
+}
+
+TEST(test_performance, merge_performance_one_instance_comprehensive_histogram_empty_dest)
+{
+ // int metric_id = fieldstat_register_hist(instance, cube_id, "czz_test", 1, 100000, 1);
+ // int ret = fieldstat_hist_record(instance, cube_id, metric_id, cell_id, 1234);
+
+ auto metric_add_func = [](struct fieldstat *instance, int cube_id, int metric_id, int cell_id) {
+ fieldstat_hist_record(instance, cube_id, metric_id, cell_id, 1234);
+ };
+ auto metric_register_func = [](struct fieldstat *instance, int cube_id) {
+ return fieldstat_register_hist(instance, cube_id, "histogram metric", 1, 100000, 1);
+ };
+
+ clock_t elapsed = perform_merge_test(metric_add_func, metric_register_func, SAMPLING_MODE_COMPREHENSIVE, true);
+ printf("merge_performance_one_instance_comprehensive_histogram_empty_dest elapsed_secs: %ld\n", elapsed);
+ EXPECT_TRUE(elapsed < 5000);
+}
+
+TEST(test_performance, merge_performance_one_instance_topk_counter_empty_dest)
+{
+ auto metric_add_func = [](struct fieldstat *instance, int cube_id, int metric_id, int cell_id) {
+ fieldstat_counter_incrby(instance, cube_id, metric_id, cell_id, rand() % 1000);
+ };
+ auto metric_register_func = [](struct fieldstat *instance, int cube_id) {
+ return fieldstat_register_counter(instance, cube_id, "metric name", COUNTER_MERGE_BY_SUM);
+ };
+
+ clock_t elapsed = perform_merge_test(metric_add_func, metric_register_func, SAMPLING_MODE_TOPK, true);
+ printf("merge_performance_one_instance_topk_counter_empty_dest elapsed_secs: %ld\n", elapsed);
+ EXPECT_TRUE(elapsed < 1000);
+}
+
+TEST(test_performance, merge_performance_one_instance_comprehensive_counter_full_dest)
+{
+ // int metric_id = fieldstat_register_counter(tmp_i, cube_id, "metric name", false);
+ // fieldstat_counter_incrby(instance, cube_id, metric_id, cell_id, 1);
+ auto metric_add_func = [](struct fieldstat *instance, int cube_id, int metric_id, int cell_id) {
+ fieldstat_counter_incrby(instance, cube_id, metric_id, cell_id, 1);
+ };
+ auto metric_register_func = [](struct fieldstat *instance, int cube_id) {
+ return fieldstat_register_counter(instance, cube_id, "metric name", COUNTER_MERGE_BY_SUM);
+ };
+
+ clock_t elapsed = perform_merge_test(metric_add_func, metric_register_func, SAMPLING_MODE_COMPREHENSIVE, false);
+ printf("merge_performance_one_instance_comprehensive_counter_full_dest elapsed_secs: %ld\n", elapsed);
+ EXPECT_TRUE(elapsed < 1000);
+}
+
+TEST(test_performance, merge_performance_one_instance_comprehensive_hll_full_dest)
+{
+ // int metric_id = fieldstat_register_hll(instance, cube_id, "czz_test hll metric", 10);
+ // int ret = fieldstat_hll_add(instance, cube_id, metric_id, cell_id, "hello", 5);
+
+ auto metric_add_func = [](struct fieldstat *instance, int cube_id, int metric_id, int cell_id) {
+ fieldstat_hll_add(instance, cube_id, metric_id, cell_id, "hello", 5);
+ };
+ auto metric_register_func = [](struct fieldstat *instance, int cube_id) {
+ return fieldstat_register_hll(instance, cube_id, "hll metric", 6);
+ };
+
+ clock_t elapsed = perform_merge_test(metric_add_func, metric_register_func, SAMPLING_MODE_COMPREHENSIVE, false);
+ printf("merge_performance_one_instance_comprehensive_hll_full_dest elapsed_secs: %ld\n", elapsed);
+ EXPECT_TRUE(elapsed < 1300);
+}
+
+TEST(test_performance, merge_performance_one_instance_comprehensive_histogram_full_dest)
+{
+ // int metric_id = fieldstat_register_hist(instance, cube_id, "czz_test", 1, 600000, 3);
+ // int ret = fieldstat_hist_record(instance, cube_id, metric_id, cell_id, 1234);
+
+ auto metric_add_func = [](struct fieldstat *instance, int cube_id, int metric_id, int cell_id) {
+ fieldstat_hist_record(instance, cube_id, metric_id, cell_id, 1234);
+ };
+ auto metric_register_func = [](struct fieldstat *instance, int cube_id) {
+ return fieldstat_register_hist(instance, cube_id, "histogram metric", 1, 100000, 1);
+ };
+
+ clock_t elapsed = perform_merge_test(metric_add_func, metric_register_func, SAMPLING_MODE_COMPREHENSIVE, false);
+ printf("merge_performance_one_instance_comprehensive_histogram_full_dest elapsed_secs: %ld\n", elapsed);
+ EXPECT_TRUE(elapsed < 3 * 1000);
+}
+
+TEST(test_performance, merge_performance_one_instance_topk_counter_full_dest)
+{
+ auto metric_add_func = [](struct fieldstat *instance, int cube_id, int metric_id, int cell_id) {
+ fieldstat_counter_incrby(instance, cube_id, metric_id, cell_id, rand() % 1000);
+ };
+ auto metric_register_func = [](struct fieldstat *instance, int cube_id) {
+ return fieldstat_register_counter(instance, cube_id, "metric name", COUNTER_MERGE_BY_SUM);
+ };
+
+ clock_t elapsed = perform_merge_test(metric_add_func, metric_register_func, SAMPLING_MODE_TOPK, false);
+ printf("merge_performance_one_instance_topk_counter_full_dest elapsed_secs: %ld\n", elapsed);
+ EXPECT_TRUE(elapsed < 1500);
+}
+
+/* -------------------------------------------------------------------------- */
+/* add */
+/* -------------------------------------------------------------------------- */
+TEST(test_performance, performance_test_add_cells_comprehensive)
+{
+ size_t cell_count = 100000;
+ struct fieldstat_tag tags[cell_count];
+ for (size_t i = 0; i < cell_count; i++) {
+ tags[i] = TEST_TAG_INT;
+ tags[i].value_longlong = i;
+ }
+ // getchar();
+ struct fieldstat *instance = fieldstat_new();
+ fieldstat_register_cube(instance, &TEST_TAG_INT_collided, 1, SAMPLING_MODE_COMPREHENSIVE, cell_count);
+ fieldstat_register_counter(instance, 0, "test", COUNTER_MERGE_BY_SUM);
+
+ clock_t start = clock();
+ for (size_t i = 0; i < cell_count; i++) {
+ fieldstat_cube_add(instance, 0, &tags[i % cell_count], 1, 1);
+ }
+ clock_t end = clock();
+ double seconds = (double)(end - start) / cell_count;
+ printf("performance_test_add_cells_comprehensive time cost: %f\n", seconds);
+ EXPECT_TRUE(seconds < 1);
+ fieldstat_free(instance);
+}
+
+TEST(test_performance, performance_test_add_cells_topk)
+{
+ size_t cell_count = 100000;
+ struct fieldstat_tag tags[cell_count];
+ for (size_t i = 0; i < cell_count; i++) {
+ tags[i] = TEST_TAG_INT;
+ // tags[i].value_longlong = rand() % 10000;
+ if (rand()%2)
+ tags[i].value_longlong = i;
+ else
+ tags[i].value_longlong = rand() % 1000;
+ }
+ struct fieldstat *instance = fieldstat_new();
+ fieldstat_register_cube(instance, &TEST_TAG_INT_collided, 1, SAMPLING_MODE_TOPK, 1000);
+ fieldstat_register_counter(instance, 0, "test", COUNTER_MERGE_BY_SUM);
+
+ // getchar();
+ clock_t start = clock();
+ for (size_t i = 0; i < cell_count; i++) {
+ fieldstat_cube_add(instance, 0, &tags[i % cell_count], 1, 1);
+ }
+ clock_t end = clock();
+ double seconds = (double)(end - start) / cell_count;
+ // exit(0);
+
+ EXPECT_TRUE(seconds < 1);
+ printf("performance_test_on_1000_cells_topk_1000000_times time cost: %f\n", seconds);
+
+ fieldstat_free(instance);
+}
+
+TEST(test_performance, performance_test_add_cells_histogram_record)
+{
+ struct fieldstat *instance = fieldstat_new();
+ fieldstat_register_cube(instance, &TEST_TAG_INT_collided, 1, SAMPLING_MODE_COMPREHENSIVE, 10);
+ fieldstat_register_hist(instance, 0, "test", 1, 1000000, 3);
+ int cell_id = fieldstat_cube_add(instance, 0, &TEST_TAG_DOUBLE, 1, 1);
+ size_t test_num = 100000;
+ long long vals[test_num];
+ for (size_t i = 0; i < test_num; i++) {
+ vals[i] = rand() % 1000000 + 1;
+ }
+
+ clock_t start = clock();
+ for (size_t i = 0; i < test_num; i++) {
+ fieldstat_hist_record(instance, 0, 0, cell_id, vals[i]);
+ }
+ clock_t end = clock();
+ double seconds = (double)(end - start) / test_num;
+ printf("performance_test_add_cells_histogram_record time cost: %f\n", seconds);
+ EXPECT_TRUE(seconds < 1);
+ fieldstat_free(instance);
+}
+
+TEST(test_performance, performance_test_add_cells_hll_add)
+{
+ struct fieldstat *instance = fieldstat_new();
+ fieldstat_register_cube(instance, &TEST_TAG_INT_collided, 1, SAMPLING_MODE_COMPREHENSIVE, 10);
+ fieldstat_register_hll(instance, 0, "test", 6);
+ int cell_id = fieldstat_cube_add(instance, 0, &TEST_TAG_DOUBLE, 1, 1);
+ size_t test_num = 100000;
+ std::string vals[test_num];
+ for (size_t i = 0; i < test_num; i++) {
+ vals[i] = std::to_string(rand() % 1000000 + 1);
+ }
+
+ clock_t start = clock();
+ for (size_t i = 0; i < test_num; i++) {
+ fieldstat_hll_add(instance, 0, 0, cell_id, vals[i].c_str(), vals[i].length());
+ }
+ clock_t end = clock();
+ double seconds = (double)(end - start) / test_num;
+ printf("performance_test_add_cells_hll_add time cost: %f\n", seconds);
+ EXPECT_TRUE(seconds < 1);
+ fieldstat_free(instance);
+}
+
+/* -------------------------------------------------------------------------- */
+/* export */
+/* -------------------------------------------------------------------------- */
+using namespace std;
+
+TEST(test_performance, export_many_cells)
+{
+ const int MAX_CELL_NUM = 1000;
+ const int TAG_NUM = 3000;
+ const int CUBE_NUM = 10;
+ const int METRIC_NUM = 10;
+
+ Fieldstat_tag_list_wrapper *tags[TAG_NUM];
+ for (int i = 0; i < TAG_NUM; i++) {
+ tags[i] = new Fieldstat_tag_list_wrapper("my key", i);
+ }
+
+ struct fieldstat *instance = fieldstat_new();
+ int cell_id[MAX_CELL_NUM];
+ for (int i = 0; i < CUBE_NUM; i++) {
+ Fieldstat_tag_list_wrapper cube_tag("shared key", i);
+ int cube_id = fieldstat_register_cube(instance, cube_tag.get_tag(), cube_tag.get_tag_count(), SAMPLING_MODE_COMPREHENSIVE, MAX_CELL_NUM);
+ for (int k = 0; k < MAX_CELL_NUM; k++) {
+ cell_id[k] = fieldstat_cube_add(instance, cube_id, tags[rand() % TAG_NUM]->get_tag(), 1, 1);
+ }
+ for (int j = 0; j < METRIC_NUM; j++) {
+ string metric_name = "metric name" + to_string(i) + to_string(j);
+ int metric_id = fieldstat_register_counter(instance, cube_id, metric_name.c_str(), COUNTER_MERGE_BY_SUM);
+
+ for (int k = 0; k < MAX_CELL_NUM; k++) {
+ fieldstat_counter_incrby(instance, cube_id, metric_id, cell_id[k], 1);
+ }
+ }
+ }
+
+ struct fieldstat_json_exporter *fieldstat_json_exporter = fieldstat_json_exporter_new(instance);
+ printf("export_many_cells\n");
+ // getchar();
+ clock_t start = clock();
+ char *json_string = fieldstat_json_exporter_export(fieldstat_json_exporter);
+ clock_t end = clock();
+ // exit(0);
+ free(json_string);
+ fieldstat_json_exporter_free(fieldstat_json_exporter);
+
+ printf("export_many_cells us: %ld\n", end - start);
+ fieldstat_free(instance);
+
+ for (int i = 0; i < TAG_NUM; i++) {
+ delete tags[i];
+ }
+}
/* -------------------------------------------------------------------------- */
/* serialize */
@@ -389,7 +389,7 @@
clock_t perform_serialize_test(std::function<void (struct fieldstat*, int, int, int)> metric_add_func,
std::function<int(struct fieldstat*, int)> metric_register_func, enum sampling_mode mode)
{
- const int MAX_CELL_NUM = 10000;
+ const int MAX_CELL_NUM = 100000;
Fieldstat_tag_list_wrapper *tags[MAX_CELL_NUM];
for (int i = 0; i < MAX_CELL_NUM; i++) {
tags[i] = new Fieldstat_tag_list_wrapper("my key", i);
@@ -434,7 +434,7 @@ TEST(test_performance, serialize_counter)
clock_t elapsed = perform_serialize_test(metric_add_func, metric_register_func, SAMPLING_MODE_COMPREHENSIVE);
printf("serialize_counter elapsed_secs: %ld\n", elapsed);
- EXPECT_TRUE(elapsed < 1000000); // every one 1us
+ EXPECT_TRUE(elapsed < 100000); // every one 1us
}
TEST(test_performance, serialize_histogram)
@@ -448,7 +448,7 @@ TEST(test_performance, serialize_histogram)
clock_t elapsed = perform_serialize_test(metric_add_func, metric_register_func, SAMPLING_MODE_COMPREHENSIVE);
printf("serialize_histogram elapsed_secs: %ld\n", elapsed);
- EXPECT_TRUE(elapsed < 1000000); // every one 1us
+ EXPECT_TRUE(elapsed < 100000); // every one 1us
}
TEST(test_performance, serialize_hll)
@@ -462,7 +462,7 @@ TEST(test_performance, serialize_hll)
clock_t elapsed = perform_serialize_test(metric_add_func, metric_register_func, SAMPLING_MODE_COMPREHENSIVE);
printf("serialize_hll elapsed_secs: %ld\n", elapsed);
- EXPECT_TRUE(elapsed < 1000000); // every one 1us
+ EXPECT_TRUE(elapsed < 100000); // every one 1us
}
int main(int argc, char *argv[])