#Centipede Write individual user feature counts to fuzzing-stats*.csv reports PiperOrigin-RevId: 617704863
diff --git a/centipede/centipede.cc b/centipede/centipede.cc index e295a3d..059499d 100644 --- a/centipede/centipede.cc +++ b/centipede/centipede.cc
@@ -238,6 +238,22 @@ .num_bounded_path_features = fs_.CountFeatures(fd::kBoundedPath), .num_pc_pair_features = fs_.CountFeatures(fd::kPCPair), .num_user_features = fs_.CountFeatures(fd::kUserDomains), + .num_user0_features = fs_.CountFeatures(fd::kUserDomains[0]), + .num_user1_features = fs_.CountFeatures(fd::kUserDomains[1]), + .num_user2_features = fs_.CountFeatures(fd::kUserDomains[2]), + .num_user3_features = fs_.CountFeatures(fd::kUserDomains[3]), + .num_user4_features = fs_.CountFeatures(fd::kUserDomains[4]), + .num_user5_features = fs_.CountFeatures(fd::kUserDomains[5]), + .num_user6_features = fs_.CountFeatures(fd::kUserDomains[6]), + .num_user7_features = fs_.CountFeatures(fd::kUserDomains[7]), + .num_user8_features = fs_.CountFeatures(fd::kUserDomains[8]), + .num_user9_features = fs_.CountFeatures(fd::kUserDomains[9]), + .num_user10_features = fs_.CountFeatures(fd::kUserDomains[10]), + .num_user11_features = fs_.CountFeatures(fd::kUserDomains[11]), + .num_user12_features = fs_.CountFeatures(fd::kUserDomains[12]), + .num_user13_features = fs_.CountFeatures(fd::kUserDomains[13]), + .num_user14_features = fs_.CountFeatures(fd::kUserDomains[14]), + .num_user15_features = fs_.CountFeatures(fd::kUserDomains[15]), .num_unknown_features = fs_.CountFeatures(fd::kUnknown), .num_funcs_in_frontier = coverage_frontier_.NumFunctionsInFrontier(), },
diff --git a/centipede/stats.h b/centipede/stats.h index cd870f7..012a218 100644 --- a/centipede/stats.h +++ b/centipede/stats.h
@@ -66,6 +66,22 @@ uint64_t num_bounded_path_features = 0; uint64_t num_pc_pair_features = 0; uint64_t num_user_features = 0; + uint64_t num_user0_features = 0; + uint64_t num_user1_features = 0; + uint64_t num_user2_features = 0; + uint64_t num_user3_features = 0; + uint64_t num_user4_features = 0; + uint64_t num_user5_features = 0; + uint64_t num_user6_features = 0; + uint64_t num_user7_features = 0; + uint64_t num_user8_features = 0; + uint64_t num_user9_features = 0; + uint64_t num_user10_features = 0; + uint64_t num_user11_features = 0; + uint64_t num_user12_features = 0; + uint64_t num_user13_features = 0; + uint64_t num_user14_features = 0; + uint64_t num_user15_features = 0; uint64_t num_unknown_features = 0; uint64_t num_funcs_in_frontier = 0; @@ -124,18 +140,23 @@ // In other words: do not change the names or the order of the old fields // without a very good reason. static constexpr std::initializer_list<FieldInfo> kFieldInfos = { + // Coverage 1. { &Stats::num_covered_pcs, "NumCoveredPcs", "Coverage", kFuzzStat | kMin | kMax | kAvg, }, + + // Execution. { &Stats::num_executions, "NumExecs", "Number of executions", kFuzzStat | kMin | kMax | kAvg, }, + + // Corpus. { &Stats::active_corpus_size, "ActiveCorpusSize", @@ -154,18 +175,24 @@ "Avg element size", kFuzzStat | kMin | kMax | kAvg, }, + + // Metadata. { &Stats::timestamp_unix_micros, "UnixMicros", "Timestamp", kTimestamp | kMin | kMax, }, + + // Execution 2. { &Stats::fuzz_time_sec, "FuzzTimeSec", "Fuzz time (sec)", kFuzzStat | kMin | kMax | kAvg, }, + + // Coverage 2. { &Stats::num_target_crashes, "NumProxyCrashes", @@ -232,6 +259,7 @@ "Num funcs in frontier", kFuzzStat | kMin | kMax | kAvg, }, + // Rusage. Each shard of a run is a thread of the same process, but it // measures the following metrics for the whole process. That means that // all the shards should return more or less the same number for the same @@ -263,6 +291,105 @@ "Engine rusage VSize (MB)", kRUsageStat | kMax, }, + + // Coverage 3. A breakdown of the total in `Stats::num_user_features` by + // individual feature types. + { + &Stats::num_user0_features, + "NumUser0Fts", + "Num user0 features", + kFuzzStat | kMin | kMax | kAvg, + }, + { + &Stats::num_user1_features, + "NumUser1Fts", + "Num user1 features", + kFuzzStat | kMin | kMax | kAvg, + }, + { + &Stats::num_user2_features, + "NumUser2Fts", + "Num user2 features", + kFuzzStat | kMin | kMax | kAvg, + }, + { + &Stats::num_user3_features, + "NumUser3Fts", + "Num user3 features", + kFuzzStat | kMin | kMax | kAvg, + }, + { + &Stats::num_user4_features, + "NumUser4Fts", + "Num user4 features", + kFuzzStat | kMin | kMax | kAvg, + }, + { + &Stats::num_user5_features, + "NumUser5Fts", + "Num user5 features", + kFuzzStat | kMin | kMax | kAvg, + }, + { + &Stats::num_user6_features, + "NumUser6Fts", + "Num user6 features", + kFuzzStat | kMin | kMax | kAvg, + }, + { + &Stats::num_user7_features, + "NumUser7Fts", + "Num user7 features", + kFuzzStat | kMin | kMax | kAvg, + }, + { + &Stats::num_user8_features, + "NumUser8Fts", + "Num user8 features", + kFuzzStat | kMin | kMax | kAvg, + }, + { + &Stats::num_user9_features, + "NumUser9Fts", + "Num user9 features", + kFuzzStat | kMin | kMax | kAvg, + }, + { + &Stats::num_user10_features, + "NumUser10Fts", + "Num user10 features", + kFuzzStat | kMin | kMax | kAvg, + }, + { + &Stats::num_user11_features, + "NumUser11Fts", + "Num user11 features", + kFuzzStat | kMin | kMax | kAvg, + }, + { + &Stats::num_user12_features, + "NumUser12Fts", + "Num user12 features", + kFuzzStat | kMin | kMax | kAvg, + }, + { + &Stats::num_user13_features, + "NumUser13Fts", + "Num user13 features", + kFuzzStat | kMin | kMax | kAvg, + }, + { + &Stats::num_user14_features, + "NumUser14Fts", + "Num user14 features", + kFuzzStat | kMin | kMax | kAvg, + }, + { + &Stats::num_user15_features, + "NumUser15Fts", + "Num user15 features", + kFuzzStat | kMin | kMax | kAvg, + }, }; };
diff --git a/centipede/stats_test.cc b/centipede/stats_test.cc index 45b4f74..6336e21 100644 --- a/centipede/stats_test.cc +++ b/centipede/stats_test.cc
@@ -92,6 +92,10 @@ .num_bounded_path_features = 26 * j, .num_pc_pair_features = 27 * j, .num_user_features = 28 * j, + // NOTE: These two don't add up to `num_user_features`, but that's + // ok for the purposes of this test. + .num_user0_features = 28 * j + 1, + .num_user10_features = 28 * j + 2, .num_unknown_features = 29 * j, .num_funcs_in_frontier = 31 * j, }, @@ -173,6 +177,54 @@ "Num funcs in frontier:", " Experiment A: min:\t31\tmax:\t93\tavg:\t62.0\t--\t31\t93", " Experiment B: min:\t62\tmax:\t124\tavg:\t93.0\t--\t62\t124", + "Num user0 features:", + " Experiment A: min:\t29\tmax:\t85\tavg:\t57.0\t--\t29\t85", + " Experiment B: min:\t57\tmax:\t113\tavg:\t85.0\t--\t57\t113", + "Num user1 features:", + " Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + " Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + "Num user2 features:", + " Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + " Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + "Num user3 features:", + " Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + " Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + "Num user4 features:", + " Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + " Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + "Num user5 features:", + " Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + " Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + "Num user6 features:", + " Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + " Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + "Num user7 features:", + " Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + " Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + "Num user8 features:", + " Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + " Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + "Num user9 features:", + " Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + " Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + "Num user10 features:", + " Experiment A: min:\t30\tmax:\t86\tavg:\t58.0\t--\t30\t86", + " Experiment B: min:\t58\tmax:\t114\tavg:\t86.0\t--\t58\t114", + "Num user11 features:", + " Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + " Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + "Num user12 features:", + " Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + " Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + "Num user13 features:", + " Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + " Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + "Num user14 features:", + " Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + " Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + "Num user15 features:", + " Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + " Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", "Flags:", " Experiment A: AAA", " Experiment B: BBB", @@ -205,6 +257,8 @@ new_stats.num_bounded_path_features += 1; new_stats.num_pc_pair_features += 1; new_stats.num_user_features += 1; + new_stats.num_user0_features += 1; + new_stats.num_user10_features += 1; new_stats.num_unknown_features += 1; new_stats.num_funcs_in_frontier += 1; @@ -274,6 +328,54 @@ "Num funcs in frontier:", " Experiment A: min:\t32\tmax:\t94\tavg:\t63.0\t--\t32\t94", " Experiment B: min:\t63\tmax:\t125\tavg:\t94.0\t--\t63\t125", + "Num user0 features:", + " Experiment A: min:\t30\tmax:\t86\tavg:\t58.0\t--\t30\t86", + " Experiment B: min:\t58\tmax:\t114\tavg:\t86.0\t--\t58\t114", + "Num user1 features:", + " Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + " Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + "Num user2 features:", + " Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + " Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + "Num user3 features:", + " Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + " Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + "Num user4 features:", + " Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + " Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + "Num user5 features:", + " Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + " Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + "Num user6 features:", + " Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + " Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + "Num user7 features:", + " Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + " Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + "Num user8 features:", + " Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + " Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + "Num user9 features:", + " Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + " Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + "Num user10 features:", + " Experiment A: min:\t31\tmax:\t87\tavg:\t59.0\t--\t31\t87", + " Experiment B: min:\t59\tmax:\t115\tavg:\t87.0\t--\t59\t115", + "Num user11 features:", + " Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + " Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + "Num user12 features:", + " Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + " Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + "Num user13 features:", + " Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + " Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + "Num user14 features:", + " Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + " Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + "Num user15 features:", + " Experiment A: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", + " Experiment B: min:\t0\tmax:\t0\tavg:\t0.0\t--\t0\t0", "Flags:", " Experiment A: AAA", " Experiment B: BBB", @@ -311,6 +413,10 @@ .num_bounded_path_features = 26 * j, .num_pc_pair_features = 27 * j, .num_user_features = 28 * j, + // NOTE: These two don't add up to `num_user_features`, but that's + // ok for the purposes of this test. + .num_user0_features = 28 * j + 1, + .num_user10_features = 28 * j + 2, .num_unknown_features = 29 * j, .num_funcs_in_frontier = 31 * j, }, @@ -377,6 +483,8 @@ new_stats.num_bounded_path_features += 1; new_stats.num_pc_pair_features += 1; new_stats.num_user_features += 1; + new_stats.num_user0_features += 1; + new_stats.num_user10_features += 1; new_stats.num_unknown_features += 1; new_stats.num_funcs_in_frontier += 1; @@ -424,7 +532,23 @@ "NumUnknownFts_Min,NumUnknownFts_Max,NumUnknownFts_Avg," "NumFuncsInFrontier_Min,NumFuncsInFrontier_Max,NumFuncsInFrontier_Avg," // NOLINT "EngineRusageAvgCores_Max,EngineRusageCpuPct_Max," - "EngineRusageRssMb_Max,EngineRusageVSizeMb_Max,", + "EngineRusageRssMb_Max,EngineRusageVSizeMb_Max," + "NumUser0Fts_Min,NumUser0Fts_Max,NumUser0Fts_Avg," + "NumUser1Fts_Min,NumUser1Fts_Max,NumUser1Fts_Avg," + "NumUser2Fts_Min,NumUser2Fts_Max,NumUser2Fts_Avg," + "NumUser3Fts_Min,NumUser3Fts_Max,NumUser3Fts_Avg," + "NumUser4Fts_Min,NumUser4Fts_Max,NumUser4Fts_Avg," + "NumUser5Fts_Min,NumUser5Fts_Max,NumUser5Fts_Avg," + "NumUser6Fts_Min,NumUser6Fts_Max,NumUser6Fts_Avg," + "NumUser7Fts_Min,NumUser7Fts_Max,NumUser7Fts_Avg," + "NumUser8Fts_Min,NumUser8Fts_Max,NumUser8Fts_Avg," + "NumUser9Fts_Min,NumUser9Fts_Max,NumUser9Fts_Avg," + "NumUser10Fts_Min,NumUser10Fts_Max,NumUser10Fts_Avg," + "NumUser11Fts_Min,NumUser11Fts_Max,NumUser11Fts_Avg," + "NumUser12Fts_Min,NumUser12Fts_Max,NumUser12Fts_Avg," + "NumUser13Fts_Min,NumUser13Fts_Max,NumUser13Fts_Avg," + "NumUser14Fts_Min,NumUser14Fts_Max,NumUser14Fts_Avg," + "NumUser15Fts_Min,NumUser15Fts_Max,NumUser15Fts_Avg,", // Line 1. "21,63,42.0," "12,36,24.0," @@ -445,7 +569,23 @@ "29,87,58.0," "31,93,62.0," "603,606," - "609,612,", + "609,612," + "29,85,57.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "30,86,58.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0,", // Line 2. "21,64,42.5," "12,37,24.5," @@ -466,7 +606,23 @@ "29,88,58.5," "31,94,62.5," "604,607," - "610,613,", + "610,613," + "29,86,57.5," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "30,87,58.5," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0,", "", // empty line at EOF // clang-format on }, @@ -493,7 +649,23 @@ "NumUnknownFts_Min,NumUnknownFts_Max,NumUnknownFts_Avg," "NumFuncsInFrontier_Min,NumFuncsInFrontier_Max,NumFuncsInFrontier_Avg," // NOLINT "EngineRusageAvgCores_Max,EngineRusageCpuPct_Max," - "EngineRusageRssMb_Max,EngineRusageVSizeMb_Max,", + "EngineRusageRssMb_Max,EngineRusageVSizeMb_Max," + "NumUser0Fts_Min,NumUser0Fts_Max,NumUser0Fts_Avg," + "NumUser1Fts_Min,NumUser1Fts_Max,NumUser1Fts_Avg," + "NumUser2Fts_Min,NumUser2Fts_Max,NumUser2Fts_Avg," + "NumUser3Fts_Min,NumUser3Fts_Max,NumUser3Fts_Avg," + "NumUser4Fts_Min,NumUser4Fts_Max,NumUser4Fts_Avg," + "NumUser5Fts_Min,NumUser5Fts_Max,NumUser5Fts_Avg," + "NumUser6Fts_Min,NumUser6Fts_Max,NumUser6Fts_Avg," + "NumUser7Fts_Min,NumUser7Fts_Max,NumUser7Fts_Avg," + "NumUser8Fts_Min,NumUser8Fts_Max,NumUser8Fts_Avg," + "NumUser9Fts_Min,NumUser9Fts_Max,NumUser9Fts_Avg," + "NumUser10Fts_Min,NumUser10Fts_Max,NumUser10Fts_Avg," + "NumUser11Fts_Min,NumUser11Fts_Max,NumUser11Fts_Avg," + "NumUser12Fts_Min,NumUser12Fts_Max,NumUser12Fts_Avg," + "NumUser13Fts_Min,NumUser13Fts_Max,NumUser13Fts_Avg," + "NumUser14Fts_Min,NumUser14Fts_Max,NumUser14Fts_Avg," + "NumUser15Fts_Min,NumUser15Fts_Max,NumUser15Fts_Avg,", // Line 1. "42,84,63.0," "24,48,36.0," @@ -514,7 +686,23 @@ "58,116,87.0," "62,124,93.0," "804,808," - "812,816,", + "812,816," + "57,113,85.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "58,114,86.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0,", // Line 2. "42,85,63.5," "24,49,36.5," @@ -535,7 +723,23 @@ "58,117,87.5," "62,125,93.5," "805,809," - "813,817,", + "813,817," + "57,114,85.5," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "58,115,86.5," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0," + "0,0,0.0,", "", // empty line at EOF // clang-format on },