From dcc147edc3953716b8fb80697b2b7babd93e79d4 Mon Sep 17 00:00:00 2001 From: Vinicius da Costa Date: Thu, 16 Jan 2025 17:17:30 +0000 Subject: [PATCH 1/4] Change profiler to use project yaml config flag --- src/clusterfuzz/_internal/metrics/profiler.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/clusterfuzz/_internal/metrics/profiler.py b/src/clusterfuzz/_internal/metrics/profiler.py index 7f08ee7341e..ca9618afdc1 100644 --- a/src/clusterfuzz/_internal/metrics/profiler.py +++ b/src/clusterfuzz/_internal/metrics/profiler.py @@ -13,14 +13,15 @@ # limitations under the License. """Profiling functions.""" from clusterfuzz._internal.base import utils +from clusterfuzz._internal.config import local_config from clusterfuzz._internal.metrics import logs from clusterfuzz._internal.system import environment - def start_if_needed(service): - """Start Google Cloud Profiler if |USE_PYTHON_PROFILER| environment variable - is set.""" - if not environment.get_value('USE_PYTHON_PROFILER'): + """Start Google Cloud Profiler if profiling key in project config + is enabled.""" + config = local_config.ProjectConfig() + if not config.get('profiling.enabled', False): return True project_id = utils.get_application_id() From bc13218426104274fdfecbb0e4a98ef72f0a9a59 Mon Sep 17 00:00:00 2001 From: Vinicius da Costa Date: Thu, 16 Jan 2025 17:21:32 +0000 Subject: [PATCH 2/4] add profiler to remaining fuzzers --- src/clusterfuzz/_internal/bot/fuzzers/centipede/engine.py | 2 ++ src/clusterfuzz/_internal/bot/fuzzers/honggfuzz/engine.py | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/clusterfuzz/_internal/bot/fuzzers/centipede/engine.py b/src/clusterfuzz/_internal/bot/fuzzers/centipede/engine.py index b9fb08262f2..425dbf790be 100644 --- a/src/clusterfuzz/_internal/bot/fuzzers/centipede/engine.py +++ b/src/clusterfuzz/_internal/bot/fuzzers/centipede/engine.py @@ -30,6 +30,7 @@ from clusterfuzz._internal.bot.fuzzers import utils as fuzzer_utils from clusterfuzz._internal.bot.fuzzers.centipede import constants from clusterfuzz._internal.metrics import logs +from clusterfuzz._internal.metrics import profiler from clusterfuzz._internal.system import environment from clusterfuzz._internal.system import new_process from clusterfuzz.fuzz import engine @@ -284,6 +285,7 @@ def fuzz(self, target_path, options, reproducers_dir, max_time): # pylint: disa Returns: A FuzzResult object. """ + profiler.start_if_needed('centipede_fuzz') runner = _get_runner(target_path) _set_sanitizer_options(target_path) timeout = max_time + _CLEAN_EXIT_SECS diff --git a/src/clusterfuzz/_internal/bot/fuzzers/honggfuzz/engine.py b/src/clusterfuzz/_internal/bot/fuzzers/honggfuzz/engine.py index 4380e9bac3a..c49a85c8775 100644 --- a/src/clusterfuzz/_internal/bot/fuzzers/honggfuzz/engine.py +++ b/src/clusterfuzz/_internal/bot/fuzzers/honggfuzz/engine.py @@ -23,6 +23,7 @@ from clusterfuzz._internal.bot.fuzzers import engine_common from clusterfuzz._internal.bot.fuzzers import utils as fuzzer_utils from clusterfuzz._internal.metrics import logs +from clusterfuzz._internal.metrics import profiler from clusterfuzz._internal.system import environment from clusterfuzz._internal.system import new_process from clusterfuzz._internal.system import shell @@ -156,6 +157,7 @@ def fuzz(self, target_path, options, reproducers_dir, max_time): Returns: A FuzzResult object. """ + profiler.start_if_needed("honggfuzz_fuzz") runner = _get_runner() arguments = _DEFAULT_ARGUMENTS[:] arguments.extend(options.arguments) From 270821c430f8ad5f5846ba23becbd86f1d4af47c Mon Sep 17 00:00:00 2001 From: Vinicius da Costa Date: Thu, 16 Jan 2025 17:31:41 +0000 Subject: [PATCH 3/4] lint profiler code --- src/clusterfuzz/_internal/metrics/profiler.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/clusterfuzz/_internal/metrics/profiler.py b/src/clusterfuzz/_internal/metrics/profiler.py index ca9618afdc1..c026ffe5186 100644 --- a/src/clusterfuzz/_internal/metrics/profiler.py +++ b/src/clusterfuzz/_internal/metrics/profiler.py @@ -17,6 +17,7 @@ from clusterfuzz._internal.metrics import logs from clusterfuzz._internal.system import environment + def start_if_needed(service): """Start Google Cloud Profiler if profiling key in project config is enabled.""" From cc5c5e6fd479ca2627570e3811cab66a1d44787a Mon Sep 17 00:00:00 2001 From: Vinicius da Costa Date: Fri, 17 Jan 2025 18:00:34 +0000 Subject: [PATCH 4/4] remove profiler call from fuzzers --- src/clusterfuzz/_internal/bot/fuzzers/afl/launcher.py | 2 -- src/clusterfuzz/_internal/bot/fuzzers/centipede/engine.py | 2 -- src/clusterfuzz/_internal/bot/fuzzers/honggfuzz/engine.py | 2 -- src/clusterfuzz/_internal/bot/fuzzers/libFuzzer/engine.py | 2 -- 4 files changed, 8 deletions(-) diff --git a/src/clusterfuzz/_internal/bot/fuzzers/afl/launcher.py b/src/clusterfuzz/_internal/bot/fuzzers/afl/launcher.py index a51cccbb02b..5cd9299eb76 100755 --- a/src/clusterfuzz/_internal/bot/fuzzers/afl/launcher.py +++ b/src/clusterfuzz/_internal/bot/fuzzers/afl/launcher.py @@ -43,7 +43,6 @@ from clusterfuzz._internal.bot.fuzzers.afl.fuzzer import write_dummy_file from clusterfuzz._internal.fuzzing import strategy from clusterfuzz._internal.metrics import logs -from clusterfuzz._internal.metrics import profiler from clusterfuzz._internal.platforms import android from clusterfuzz._internal.system import environment from clusterfuzz._internal.system import new_process @@ -1661,7 +1660,6 @@ def main(argv): # same python process. logs.configure('run_fuzzer') _verify_system_config() - profiler.start_if_needed('afl_launcher') build_directory = environment.get_value('BUILD_DIR') fuzzer_path = engine_common.find_fuzzer_path(build_directory, target_name) diff --git a/src/clusterfuzz/_internal/bot/fuzzers/centipede/engine.py b/src/clusterfuzz/_internal/bot/fuzzers/centipede/engine.py index 425dbf790be..b9fb08262f2 100644 --- a/src/clusterfuzz/_internal/bot/fuzzers/centipede/engine.py +++ b/src/clusterfuzz/_internal/bot/fuzzers/centipede/engine.py @@ -30,7 +30,6 @@ from clusterfuzz._internal.bot.fuzzers import utils as fuzzer_utils from clusterfuzz._internal.bot.fuzzers.centipede import constants from clusterfuzz._internal.metrics import logs -from clusterfuzz._internal.metrics import profiler from clusterfuzz._internal.system import environment from clusterfuzz._internal.system import new_process from clusterfuzz.fuzz import engine @@ -285,7 +284,6 @@ def fuzz(self, target_path, options, reproducers_dir, max_time): # pylint: disa Returns: A FuzzResult object. """ - profiler.start_if_needed('centipede_fuzz') runner = _get_runner(target_path) _set_sanitizer_options(target_path) timeout = max_time + _CLEAN_EXIT_SECS diff --git a/src/clusterfuzz/_internal/bot/fuzzers/honggfuzz/engine.py b/src/clusterfuzz/_internal/bot/fuzzers/honggfuzz/engine.py index c49a85c8775..4380e9bac3a 100644 --- a/src/clusterfuzz/_internal/bot/fuzzers/honggfuzz/engine.py +++ b/src/clusterfuzz/_internal/bot/fuzzers/honggfuzz/engine.py @@ -23,7 +23,6 @@ from clusterfuzz._internal.bot.fuzzers import engine_common from clusterfuzz._internal.bot.fuzzers import utils as fuzzer_utils from clusterfuzz._internal.metrics import logs -from clusterfuzz._internal.metrics import profiler from clusterfuzz._internal.system import environment from clusterfuzz._internal.system import new_process from clusterfuzz._internal.system import shell @@ -157,7 +156,6 @@ def fuzz(self, target_path, options, reproducers_dir, max_time): Returns: A FuzzResult object. """ - profiler.start_if_needed("honggfuzz_fuzz") runner = _get_runner() arguments = _DEFAULT_ARGUMENTS[:] arguments.extend(options.arguments) diff --git a/src/clusterfuzz/_internal/bot/fuzzers/libFuzzer/engine.py b/src/clusterfuzz/_internal/bot/fuzzers/libFuzzer/engine.py index 6500003cb73..33cec8256e2 100644 --- a/src/clusterfuzz/_internal/bot/fuzzers/libFuzzer/engine.py +++ b/src/clusterfuzz/_internal/bot/fuzzers/libFuzzer/engine.py @@ -29,7 +29,6 @@ from clusterfuzz._internal.bot.fuzzers.libFuzzer import stats from clusterfuzz._internal.fuzzing import strategy from clusterfuzz._internal.metrics import logs -from clusterfuzz._internal.metrics import profiler from clusterfuzz._internal.system import environment from clusterfuzz._internal.system import shell from clusterfuzz.fuzz import engine @@ -280,7 +279,6 @@ def fuzz(self, target_path, options, reproducers_dir, max_time): Returns: A FuzzResult object. """ - profiler.start_if_needed('libfuzzer_fuzz') libfuzzer.set_sanitizer_options(target_path) runner = libfuzzer.get_runner(target_path)