snakemake: increase build efficiency

This commit is contained in:
Alwin Berger 2024-10-10 15:14:13 +02:00
parent d4ee679d0e
commit 6d197274dd

View File

@ -1,6 +1,6 @@
import csv import csv
import os import os
def_flags="--no-default-features --features std,snapshot_fast,restarting,do_hash_notify_state,trace_job_response_times,fuzz_int,shortcut" def_flags="--release --no-default-features --features std,snapshot_fast,restarting,do_hash_notify_state,trace_job_response_times,fuzz_int,shortcut"
remote="remote/" remote="remote/"
RUNTIME=1800 RUNTIME=1800
TARGET_REPS_A=2 TARGET_REPS_A=2
@ -12,77 +12,110 @@ NODE_ID= 0 if os.getenv('NODE_ID') == None else int(os.environ['NODE_ID'])
MY_RANGE_A=range(NODE_ID*REP_PER_NODE_A,(NODE_ID+1)*REP_PER_NODE_A) MY_RANGE_A=range(NODE_ID*REP_PER_NODE_A,(NODE_ID+1)*REP_PER_NODE_A)
MY_RANGE_B=range(NODE_ID*REP_PER_NODE_B,(NODE_ID+1)*REP_PER_NODE_B) MY_RANGE_B=range(NODE_ID*REP_PER_NODE_B,(NODE_ID+1)*REP_PER_NODE_B)
rule build_default:
input:
"../Cargo.toml",
"../src"
output:
directory("bins/target_default")
shell:
"cargo build --target-dir {output} {def_flags}"
rule build_showmap: rule build_showmap:
input:
"bins/target_default"
output: output:
directory("bins/target_showmap") directory("bins/target_showmap")
shell: shell:
"cargo build --target-dir {output} {def_flags},config_stg" "cp -r -a --reflink=auto {input} {output} && cargo build --target-dir {output} {def_flags},config_stg"
rule build_random: rule build_random:
input:
"bins/target_default"
output: output:
directory("bins/target_random") directory("bins/target_random")
shell: shell:
"cargo build --target-dir {output} {def_flags},feed_longest" "cp -r -a --reflink=auto {input} {output} && cargo build --target-dir {output} {def_flags},feed_longest"
rule build_frafl: rule build_frafl:
input:
"bins/target_default"
output: output:
directory("bins/target_frafl") directory("bins/target_frafl")
shell: shell:
"cargo build --target-dir {output} {def_flags},config_frafl,feed_longest" "cp -r -a --reflink=auto {input} {output} && cargo build --target-dir {output} {def_flags},config_frafl,feed_longest"
rule build_afl: rule build_afl:
input:
"bins/target_default"
output: output:
directory("bins/target_afl") directory("bins/target_afl")
shell: shell:
"cargo build --target-dir {output} {def_flags},config_afl,observer_hitcounts" "cp -r -a --reflink=auto {input} {output} && cargo build --target-dir {output} {def_flags},config_afl,observer_hitcounts"
rule build_stg: rule build_stg:
input:
"bins/target_default"
output: output:
directory("bins/target_stg") directory("bins/target_stg")
shell: shell:
"cargo build --target-dir {output} {def_flags},config_stg" "cp -r -a --reflink=auto {input} {output} && cargo build --target-dir {output} {def_flags},config_stg"
rule build_stgpath: rule build_stgpath:
input:
"bins/target_default"
output: output:
directory("bins/target_stgpath") directory("bins/target_stgpath")
shell: shell:
"cargo build --target-dir {output} {def_flags},feed_stg_abbhash,sched_stg_abbhash,mutate_stg" "cp -r -a --reflink=auto {input} {output} && cargo build --target-dir {output} {def_flags},feed_stg_abbhash,sched_stg_abbhash,mutate_stg"
rule build_feedgeneration1: rule build_feedgeneration1:
input:
"bins/target_default"
output: output:
directory("bins/target_feedgeneration1") directory("bins/target_feedgeneration1")
shell: shell:
"cargo build --target-dir {output} {def_flags},feed_genetic,gensize_1" "cp -r -a --reflink=auto {input} {output} && cargo build --target-dir {output} {def_flags},feed_genetic,gensize_1"
rule build_feedgeneration10: rule build_feedgeneration10:
input:
"bins/target_default"
output: output:
directory("bins/target_feedgeneration10") directory("bins/target_feedgeneration10")
shell: shell:
"cargo build --target-dir {output} {def_flags},feed_genetic,gensize_10" "cp -r -a --reflink=auto {input} {output} && cargo build --target-dir {output} {def_flags},feed_genetic,gensize_10"
rule build_feedgeneration100: rule build_feedgeneration100:
input:
"bins/target_default"
output: output:
directory("bins/target_feedgeneration100") directory("bins/target_feedgeneration100")
shell: shell:
"cargo build --target-dir {output} {def_flags},config_genetic,gensize_100" "cp -r -a --reflink=auto {input} {output} && cargo build --target-dir {output} {def_flags},config_genetic,gensize_100"
rule build_genetic100: rule build_genetic100:
input:
"bins/target_default"
output: output:
directory("bins/target_genetic100") directory("bins/target_genetic100")
shell: shell:
"cargo build --target-dir {output} {def_flags},config_genetic,mutate_stg,gensize_100" "cp -r -a --reflink=auto {input} {output} && cargo build --target-dir {output} {def_flags},config_genetic,mutate_stg,gensize_100"
rule build_feedgeneration1000: rule build_feedgeneration1000:
input:
"bins/target_default"
output: output:
directory("bins/target_feedgeneration1000") directory("bins/target_feedgeneration1000")
shell: shell:
"cargo build --target-dir {output} {def_flags},config_genetic,gensize_1000" "cp -r -a --reflink=auto {input} {output} && cargo build --target-dir {output} {def_flags},config_genetic,gensize_1000"
rule build_genetic1000: rule build_genetic1000:
input:
"bins/target_default"
output: output:
directory("bins/target_genetic1000") directory("bins/target_genetic1000")
shell: shell:
"cargo build --target-dir {output} {def_flags},config_genetic,mutate_stg,gensize_1000" "cp -r -a --reflink=auto {input} {output} && cargo build --target-dir {output} {def_flags},config_genetic,mutate_stg,gensize_1000"
rule run_bench: rule run_bench:
input: input:
@ -107,8 +140,8 @@ rule run_bench:
export RUST_BACKTRACE=1 export RUST_BACKTRACE=1
mkdir -p $(dirname {output[0]}) mkdir -p $(dirname {output[0]})
set +e set +e
echo $(pwd)/{input[1]}/debug/fret -n $(pwd)/timedump/{wildcards.fuzzer}/{wildcards.target}#{wildcards.num} -s {select_task} -t -a -g -k {input[0]} -c ./target_symbols.csv fuzz --random -t {RUNTIME} -s {wildcards.num} echo $(pwd)/{input[1]}/release/fret -n $(pwd)/timedump/{wildcards.fuzzer}/{wildcards.target}#{wildcards.num} -s {select_task} -t -a -g -k {input[0]} -c ./target_symbols.csv fuzz --random -t {RUNTIME} -s {wildcards.num}
$(pwd)/{input[1]}/debug/fret -n $(pwd)/timedump/{wildcards.fuzzer}/{wildcards.target}#{wildcards.num} -s {select_task} -t -a -g -k {input[0]} -c ./target_symbols.csv fuzz --random -t {RUNTIME} -s {wildcards.num} > {output[1]} 2>&1 $(pwd)/{input[1]}/release/fret -n $(pwd)/timedump/{wildcards.fuzzer}/{wildcards.target}#{wildcards.num} -s {select_task} -t -a -g -k {input[0]} -c ./target_symbols.csv fuzz --random -t {RUNTIME} -s {wildcards.num} > {output[1]} 2>&1
exit 0 exit 0
""" """
else: else:
@ -116,8 +149,8 @@ rule run_bench:
export RUST_BACKTRACE=1 export RUST_BACKTRACE=1
mkdir -p $(dirname {output[0]}) mkdir -p $(dirname {output[0]})
set +e set +e
echo $(pwd)/{input[1]}/debug/fret -n $(pwd)/timedump/{wildcards.fuzzer}/{wildcards.target}#{wildcards.num} -s {select_task} -t -a -g -k {input[0]} -c ./target_symbols.csv fuzz -t {RUNTIME} -s {wildcards.num} echo $(pwd)/{input[1]}/release/fret -n $(pwd)/timedump/{wildcards.fuzzer}/{wildcards.target}#{wildcards.num} -s {select_task} -t -a -g -k {input[0]} -c ./target_symbols.csv fuzz -t {RUNTIME} -s {wildcards.num}
$(pwd)/{input[1]}/debug/fret -n $(pwd)/timedump/{wildcards.fuzzer}/{wildcards.target}#{wildcards.num} -s {select_task} -t -a -g -k {input[0]} -c ./target_symbols.csv fuzz -t {RUNTIME} -s {wildcards.num} > {output[1]} 2>&1 $(pwd)/{input[1]}/release/fret -n $(pwd)/timedump/{wildcards.fuzzer}/{wildcards.target}#{wildcards.num} -s {select_task} -t -a -g -k {input[0]} -c ./target_symbols.csv fuzz -t {RUNTIME} -s {wildcards.num} > {output[1]} 2>&1
exit 0 exit 0
""" """
shell(script) shell(script)
@ -143,7 +176,7 @@ rule run_showmap:
bkp=line['return_function'] bkp=line['return_function']
select_task=line['select_task'] select_task=line['select_task']
script=""" script="""
export FUZZER=$(pwd)/{input[1]}/debug/fret export FUZZER=$(pwd)/{input[1]}/release/fret
mkdir -p $(dirname {output}) mkdir -p $(dirname {output})
set +e set +e
echo $FUZZER -n $(pwd)/{remote}/timedump/{wildcards.fuzzer}/{wildcards.target}#{wildcards.num}_case -s {select_task} -t -a -r -g -k {input[0]} -c ./target_symbols.csv showmap -i {input[2]} echo $FUZZER -n $(pwd)/{remote}/timedump/{wildcards.fuzzer}/{wildcards.target}#{wildcards.num}_case -s {select_task} -t -a -r -g -k {input[0]} -c ./target_symbols.csv showmap -i {input[2]}