diff --git a/.github/workflows/actions.yml b/.github/workflows/actions.yml index e66cea34..d61678a2 100644 --- a/.github/workflows/actions.yml +++ b/.github/workflows/actions.yml @@ -144,7 +144,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - benchmark: [bm_empty, bm_server_redis, min_mysql_close_dup_0_0] + benchmark: [bm_empty, bm_server_redis, mysql/min_mysql_close_dup_0_0] steps: - uses: actions/checkout@v4 with: @@ -163,11 +163,15 @@ jobs: - name: Fix artifact permissions if: always() run: sudo chmod -R a+r results/ + + - name: Create unique name + run: echo "ARTIFACT_NAME=$(echo '${{ matrix.benchmark }}' | tr '/' '_')" >> $GITHUB_ENV + - name: Upload results uses: actions/upload-artifact@v4 if: always() with: - name: results-${{ matrix.benchmark }} + name: results-${{ env.ARTIFACT_NAME }} path: results/ Run-External-Benchmark: diff --git a/.github/workflows/openeuler.yml b/.github/workflows/openeuler.yml index e813e528..0ddf745b 100644 --- a/.github/workflows/openeuler.yml +++ b/.github/workflows/openeuler.yml @@ -12,15 +12,15 @@ jobs: matrix: test: - bm_empty - - min_mysql_close_dup_0_0 - - min_mysql_getdents64_close_0_0 - - min_mysql_lseek_read_1_0 - - min_mysql_newfstatat_0_1 - - min_mysql_newfstatat_openat_0_1 - - min_mysql_openat_fsync_0_2 - - min_mysql_pread64_faccessat2_0_5 - - min_mysql_read_close_0_0 - - min_mysql_read_write_0_1 + - mysql/min_mysql_close_dup_0_0 + - mysql/min_mysql_getdents64_close_0_0 + - mysql/min_mysql_lseek_read_1_0 + - mysql/min_mysql_newfstatat_0_1 + - mysql/min_mysql_newfstatat_openat_0_1 + - mysql/min_mysql_openat_fsync_0_2 + - mysql/min_mysql_pread64_faccessat2_0_5 + - mysql/min_mysql_read_close_0_0 + - mysql/min_mysql_read_write_0_1 env: TEST_TAG: ghcr.io/${{ github.repository }}/openeuler_for_csb:latest @@ -54,9 +54,12 @@ jobs: run: | sudo chmod -R a+r /tmp/csb/results/ + - name: Create unique name + run: echo "ARTIFACT_NAME=$(echo '${{ matrix.test }}' | tr '/' '_')" >> $GITHUB_ENV + - name: Upload results uses: actions/upload-artifact@v4 if: always() with: - name: openeuler-results-${{ matrix.test }} + name: openeuler-results-${{ env.ARTIFACT_NAME }} path: /tmp/csb/results/ diff --git a/bench/CMakeLists.txt b/bench/CMakeLists.txt index f0673321..f6d71167 100644 --- a/bench/CMakeLists.txt +++ b/bench/CMakeLists.txt @@ -18,7 +18,10 @@ elseif(CSB_THREAD_SANITIZER) target_link_options(CSB INTERFACE -fsanitize=thread) endif() -file(GLOB TARGETS CONFIGURE_DEPENDS targets/*.h) +# search subdirectories as well +file(GLOB_RECURSE TARGETS CONFIGURE_DEPENDS targets/*.h) +# exclude files under syz +list(FILTER TARGETS EXCLUDE REGEX ".*/syz/.*") set(BM_DEFS _GNU_SOURCE) @@ -51,8 +54,18 @@ set(BM_FILE benchmark.c) foreach(target IN ITEMS ${TARGETS}) get_filename_component(bm_target_prefix ${target} NAME_WLE) + get_filename_component(PARENT "${target}" DIRECTORY) + + if("${PARENT}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}/targets") + set(TARGET_PREFIX "") + else() + # get direct parent directory name + get_filename_component(PARENT "${PARENT}" NAME) + string(TOLOWER "${PARENT}_" TARGET_PREFIX) + endif() + set(bm_target_name "\"${target}\"") - set(TEST_CASE ${bm_target_prefix}) + set(TEST_CASE "${TARGET_PREFIX}${bm_target_prefix}") string(TOLOWER ${TEST_CASE} TEST_CASE) @@ -67,7 +80,7 @@ foreach(target IN ITEMS ${TARGETS}) -Wno-unused-function) # use -fno-var-tracking to speed up compilation of big auto-generated test # cases - if(bm_target_prefix MATCHES "^min_.*") + if(bm_target_prefix MATCHES ".*min_.*") target_compile_options(${TEST_CASE} PRIVATE "-fno-var-tracking") endif() diff --git a/bench/targets/min_mysql_close_dup_0_0.h b/bench/targets/mysql/min_mysql_close_dup_0_0.h similarity index 100% rename from bench/targets/min_mysql_close_dup_0_0.h rename to bench/targets/mysql/min_mysql_close_dup_0_0.h diff --git a/bench/targets/min_mysql_getdents64_close_0_0.h b/bench/targets/mysql/min_mysql_getdents64_close_0_0.h similarity index 100% rename from bench/targets/min_mysql_getdents64_close_0_0.h rename to bench/targets/mysql/min_mysql_getdents64_close_0_0.h diff --git a/bench/targets/min_mysql_lseek_read_1_0.h b/bench/targets/mysql/min_mysql_lseek_read_1_0.h similarity index 100% rename from bench/targets/min_mysql_lseek_read_1_0.h rename to bench/targets/mysql/min_mysql_lseek_read_1_0.h diff --git a/bench/targets/min_mysql_newfstatat_0_1.h b/bench/targets/mysql/min_mysql_newfstatat_0_1.h similarity index 100% rename from bench/targets/min_mysql_newfstatat_0_1.h rename to bench/targets/mysql/min_mysql_newfstatat_0_1.h diff --git a/bench/targets/min_mysql_newfstatat_openat_0_1.h b/bench/targets/mysql/min_mysql_newfstatat_openat_0_1.h similarity index 100% rename from bench/targets/min_mysql_newfstatat_openat_0_1.h rename to bench/targets/mysql/min_mysql_newfstatat_openat_0_1.h diff --git a/bench/targets/min_mysql_openat_fsync_0_2.h b/bench/targets/mysql/min_mysql_openat_fsync_0_2.h similarity index 100% rename from bench/targets/min_mysql_openat_fsync_0_2.h rename to bench/targets/mysql/min_mysql_openat_fsync_0_2.h diff --git a/bench/targets/min_mysql_pread64_faccessat2_0_5.h b/bench/targets/mysql/min_mysql_pread64_faccessat2_0_5.h similarity index 100% rename from bench/targets/min_mysql_pread64_faccessat2_0_5.h rename to bench/targets/mysql/min_mysql_pread64_faccessat2_0_5.h diff --git a/bench/targets/min_mysql_read_close_0_0.h b/bench/targets/mysql/min_mysql_read_close_0_0.h similarity index 100% rename from bench/targets/min_mysql_read_close_0_0.h rename to bench/targets/mysql/min_mysql_read_close_0_0.h diff --git a/bench/targets/min_mysql_read_write_0_1.h b/bench/targets/mysql/min_mysql_read_write_0_1.h similarity index 100% rename from bench/targets/min_mysql_read_write_0_1.h rename to bench/targets/mysql/min_mysql_read_write_0_1.h diff --git a/bench/targets/syz/min_mysql_close_dup_0_0.h b/bench/targets/mysql/syz/min_mysql_close_dup_0_0.h similarity index 100% rename from bench/targets/syz/min_mysql_close_dup_0_0.h rename to bench/targets/mysql/syz/min_mysql_close_dup_0_0.h diff --git a/bench/targets/syz/min_mysql_getdents64_close_0_0.h b/bench/targets/mysql/syz/min_mysql_getdents64_close_0_0.h similarity index 100% rename from bench/targets/syz/min_mysql_getdents64_close_0_0.h rename to bench/targets/mysql/syz/min_mysql_getdents64_close_0_0.h diff --git a/bench/targets/syz/min_mysql_lseek_read_1_0.h b/bench/targets/mysql/syz/min_mysql_lseek_read_1_0.h similarity index 100% rename from bench/targets/syz/min_mysql_lseek_read_1_0.h rename to bench/targets/mysql/syz/min_mysql_lseek_read_1_0.h diff --git a/bench/targets/syz/min_mysql_newfstatat_0_1.h b/bench/targets/mysql/syz/min_mysql_newfstatat_0_1.h similarity index 100% rename from bench/targets/syz/min_mysql_newfstatat_0_1.h rename to bench/targets/mysql/syz/min_mysql_newfstatat_0_1.h diff --git a/bench/targets/syz/min_mysql_newfstatat_openat_0_1.h b/bench/targets/mysql/syz/min_mysql_newfstatat_openat_0_1.h similarity index 100% rename from bench/targets/syz/min_mysql_newfstatat_openat_0_1.h rename to bench/targets/mysql/syz/min_mysql_newfstatat_openat_0_1.h diff --git a/bench/targets/syz/min_mysql_openat_fsync_0_2.h b/bench/targets/mysql/syz/min_mysql_openat_fsync_0_2.h similarity index 100% rename from bench/targets/syz/min_mysql_openat_fsync_0_2.h rename to bench/targets/mysql/syz/min_mysql_openat_fsync_0_2.h diff --git a/bench/targets/syz/min_mysql_pread64_faccessat2_0_5.h b/bench/targets/mysql/syz/min_mysql_pread64_faccessat2_0_5.h similarity index 100% rename from bench/targets/syz/min_mysql_pread64_faccessat2_0_5.h rename to bench/targets/mysql/syz/min_mysql_pread64_faccessat2_0_5.h diff --git a/bench/targets/syz/min_mysql_read_close_0_0.h b/bench/targets/mysql/syz/min_mysql_read_close_0_0.h similarity index 100% rename from bench/targets/syz/min_mysql_read_close_0_0.h rename to bench/targets/mysql/syz/min_mysql_read_close_0_0.h diff --git a/bench/targets/syz/min_mysql_read_write_0_1.h b/bench/targets/mysql/syz/min_mysql_read_write_0_1.h similarity index 100% rename from bench/targets/syz/min_mysql_read_write_0_1.h rename to bench/targets/mysql/syz/min_mysql_read_write_0_1.h diff --git a/bm-generator/04_prepare.sh b/bm-generator/04_prepare.sh index 8978600c..83c80e37 100755 --- a/bm-generator/04_prepare.sh +++ b/bm-generator/04_prepare.sh @@ -13,7 +13,7 @@ if [ ! -d "${DIR_PROG}" ]; then exit 1 fi -DIR_TARGETS="../bench/targets/syz" +DIR_TARGETS="../bench/targets/gen-ws/syz" if [ -d "${DIR_TARGETS}" ]; then echo "`readlink -e ${DIR_TARGETS}` exist!" diff --git a/bm-generator/helper/prog2bm.sh b/bm-generator/helper/prog2bm.sh index 0f3eb75a..8b135f2e 100755 --- a/bm-generator/helper/prog2bm.sh +++ b/bm-generator/helper/prog2bm.sh @@ -29,7 +29,8 @@ fi PROG="`basename ${FILEPROG} .prog`" -DIR_TARGETS="../bench/targets/syz" +# TODO: sync. with the definition in cmake `set(SUBDIR "gen-ws")` +DIR_TARGETS="../bench/targets/gen-ws/syz" DIR_TARGETS_ABS="`readlink -e ${DIR_TARGETS}`" FILEPROG_ABS="`readlink -e ${FILEPROG}`" diff --git a/bm-generator/templates/CMakeLists.txt b/bm-generator/templates/CMakeLists.txt index 781bdcfe..bcd043bd 100644 --- a/bm-generator/templates/CMakeLists.txt +++ b/bm-generator/templates/CMakeLists.txt @@ -19,13 +19,17 @@ add_custom_command( # Find all single template files file(GLOB TEMPLATES *single*.in) +# Output subfolder for auto-generated workspace +set(SUBDIR "gen-ws") # Collect all input headers -file(GLOB HEADERS CONFIGURE_DEPENDS "${CMAKE_SOURCE_DIR}/bench/targets/syz/*.h") +file(GLOB HEADERS CONFIGURE_DEPENDS + "${CMAKE_SOURCE_DIR}/bench/targets/${SUBDIR}/syz/*.h") # Output dir for config files set(CONFIG_DIR "${CMAKE_SOURCE_DIR}/config") +file(MAKE_DIRECTORY "${CONFIG_DIR}/${SUBDIR}") # Output dir for header files set(HEADER_DIR "${CMAKE_SOURCE_DIR}/bench/targets") - +file(MAKE_DIRECTORY "${HEADER_DIR}/${SUBDIR}") # For each header input we want to generate a JSON config files and a matching # header foreach(HEADER ${HEADERS}) @@ -43,11 +47,11 @@ foreach(HEADER ${HEADERS}) set(TARGET ${HEADER_NAME}_json) set(TMPLR_PARAMS -DPROBAVG="" -DPROBEND="1024" -DBINNAME="${HEADER_NAME}") - set(OUTPUT_FILE "${CONFIG_DIR}/${HEADER_NAME}.json") + set(OUTPUT_FILE "${CONFIG_DIR}/${SUBDIR}/${HEADER_NAME}.json") elseif(EXTENSION STREQUAL ".h") set(TARGET ${HEADER_NAME}_h) set(TMPLR_PARAMS -DNCALLS="1" -DNNOPS="1" -DNN="${HEADER_NAME}") - set(OUTPUT_FILE "${HEADER_DIR}/${HEADER_NAME}.h") + set(OUTPUT_FILE "${HEADER_DIR}/${SUBDIR}/${HEADER_NAME}.h") else() message(FATAL_ERROR "Unsupported extension ${EXTENSION}") endif() @@ -66,7 +70,7 @@ endforeach(HEADER) # ############################################################################## set(AGGREGATE_TARGET csb-gen-agg) set(INPUT_TEMPLATE ${CMAKE_CURRENT_SOURCE_DIR}/syz_bm.json.in) -set(OUTPUT_FILE ${CONFIG_DIR}/aggregated.json) +set(OUTPUT_FILE ${CONFIG_DIR}/${SUBDIR}/aggregated.json) # Find number of available files list(LENGTH HEADERS FILES_NUM) diff --git a/bm-generator/test.sh b/bm-generator/test.sh index c39875e2..b7551a74 100755 --- a/bm-generator/test.sh +++ b/bm-generator/test.sh @@ -22,6 +22,6 @@ echo "STEP#5: Generating ..." echo "STEP#6: Build and test ..." cd ../build # We only want to build related targets not everything. -find ../bench/targets/ -name "min_ls_*.h" | grep -v syz | sed 's/.*\/\(min_ls_.*\)\.h/\1/' | xargs make +find ../bench/targets/gen-ws -name "min_ls_*.h" | grep -v syz | sed 's/.*\/\(min_ls_.*\)\.h/gen-ws_\1/' | xargs make # We run only related tests ctest -R min_ls_* --output-on-failure diff --git a/config/min_mysql_close_dup_0_0.json b/config/mysql/min_mysql_close_dup_0_0.json similarity index 95% rename from config/min_mysql_close_dup_0_0.json rename to config/mysql/min_mysql_close_dup_0_0.json index a42a8afa..df34ce66 100644 --- a/config/min_mysql_close_dup_0_0.json +++ b/config/mysql/min_mysql_close_dup_0_0.json @@ -54,7 +54,7 @@ }, "applications": [ { - "name": "min_mysql_close_dup_0_0", + "name": "mysql_min_mysql_close_dup_0_0", "operations": [ 1024 ] diff --git a/config/min_mysql_getdents64_close_0_0.json b/config/mysql/min_mysql_getdents64_close_0_0.json similarity index 95% rename from config/min_mysql_getdents64_close_0_0.json rename to config/mysql/min_mysql_getdents64_close_0_0.json index 5635d0b4..edbd4161 100644 --- a/config/min_mysql_getdents64_close_0_0.json +++ b/config/mysql/min_mysql_getdents64_close_0_0.json @@ -54,7 +54,7 @@ }, "applications": [ { - "name": "min_mysql_getdents64_close_0_0", + "name": "mysql_min_mysql_getdents64_close_0_0", "operations": [ 1024 ] diff --git a/config/min_mysql_lseek_read_1_0.json b/config/mysql/min_mysql_lseek_read_1_0.json similarity index 95% rename from config/min_mysql_lseek_read_1_0.json rename to config/mysql/min_mysql_lseek_read_1_0.json index 0bc40410..b41c4b21 100644 --- a/config/min_mysql_lseek_read_1_0.json +++ b/config/mysql/min_mysql_lseek_read_1_0.json @@ -54,7 +54,7 @@ }, "applications": [ { - "name": "min_mysql_lseek_read_1_0", + "name": "mysql_min_mysql_lseek_read_1_0", "operations": [ 1024 ] diff --git a/config/min_mysql_newfstatat_0_1.json b/config/mysql/min_mysql_newfstatat_0_1.json similarity index 95% rename from config/min_mysql_newfstatat_0_1.json rename to config/mysql/min_mysql_newfstatat_0_1.json index ce0e683d..e9ea6a5e 100644 --- a/config/min_mysql_newfstatat_0_1.json +++ b/config/mysql/min_mysql_newfstatat_0_1.json @@ -54,7 +54,7 @@ }, "applications": [ { - "name": "min_mysql_newfstatat_0_1", + "name": "mysql_min_mysql_newfstatat_0_1", "operations": [ 1024 ] diff --git a/config/min_mysql_newfstatat_openat_0_1.json b/config/mysql/min_mysql_newfstatat_openat_0_1.json similarity index 95% rename from config/min_mysql_newfstatat_openat_0_1.json rename to config/mysql/min_mysql_newfstatat_openat_0_1.json index 0ea3858e..ee25a8a3 100644 --- a/config/min_mysql_newfstatat_openat_0_1.json +++ b/config/mysql/min_mysql_newfstatat_openat_0_1.json @@ -54,7 +54,7 @@ }, "applications": [ { - "name": "min_mysql_newfstatat_openat_0_1", + "name": "mysql_min_mysql_newfstatat_openat_0_1", "operations": [ 1024 ] diff --git a/config/min_mysql_openat_fsync_0_2.json b/config/mysql/min_mysql_openat_fsync_0_2.json similarity index 95% rename from config/min_mysql_openat_fsync_0_2.json rename to config/mysql/min_mysql_openat_fsync_0_2.json index 6c6f92a3..8086b4ef 100644 --- a/config/min_mysql_openat_fsync_0_2.json +++ b/config/mysql/min_mysql_openat_fsync_0_2.json @@ -54,7 +54,7 @@ }, "applications": [ { - "name": "min_mysql_openat_fsync_0_2", + "name": "mysql_min_mysql_openat_fsync_0_2", "operations": [ 1024 ] diff --git a/config/min_mysql_pread64_faccessat2_0_5.json b/config/mysql/min_mysql_pread64_faccessat2_0_5.json similarity index 95% rename from config/min_mysql_pread64_faccessat2_0_5.json rename to config/mysql/min_mysql_pread64_faccessat2_0_5.json index 9473a365..306d4727 100644 --- a/config/min_mysql_pread64_faccessat2_0_5.json +++ b/config/mysql/min_mysql_pread64_faccessat2_0_5.json @@ -54,7 +54,7 @@ }, "applications": [ { - "name": "min_mysql_pread64_faccessat2_0_5", + "name": "mysql_min_mysql_pread64_faccessat2_0_5", "operations": [ 1024 ] diff --git a/config/min_mysql_read_close_0_0.json b/config/mysql/min_mysql_read_close_0_0.json similarity index 95% rename from config/min_mysql_read_close_0_0.json rename to config/mysql/min_mysql_read_close_0_0.json index aee84d5b..9ade0563 100644 --- a/config/min_mysql_read_close_0_0.json +++ b/config/mysql/min_mysql_read_close_0_0.json @@ -54,7 +54,7 @@ }, "applications": [ { - "name": "min_mysql_read_close_0_0", + "name": "mysql_min_mysql_read_close_0_0", "operations": [ 1024 ] diff --git a/config/min_mysql_read_write_0_1.json b/config/mysql/min_mysql_read_write_0_1.json similarity index 95% rename from config/min_mysql_read_write_0_1.json rename to config/mysql/min_mysql_read_write_0_1.json index 2acd63ec..cf1a63a4 100644 --- a/config/min_mysql_read_write_0_1.json +++ b/config/mysql/min_mysql_read_write_0_1.json @@ -54,7 +54,7 @@ }, "applications": [ { - "name": "min_mysql_read_write_0_1", + "name": "mysql_min_mysql_read_write_0_1", "operations": [ 1024 ] diff --git a/helpers/clang-format.sh b/helpers/clang-format.sh index 074bea8d..5f50b3eb 100755 --- a/helpers/clang-format.sh +++ b/helpers/clang-format.sh @@ -9,7 +9,7 @@ if [ "${STYLE}" != "" ]; then STYLE=":${STYLE}" fi -git ls-files '*.h' '*.c' | grep -v 'deps' | grep -v 'bench/targets/syz/' | xargs -I {} clang-format -style=file${STYLE} -i "$(pwd)/{}" +git ls-files '*.h' '*.c' | grep -v 'deps' | grep -v '/syz/' | xargs -I {} clang-format -style=file${STYLE} -i "$(pwd)/{}" if [ "${SILENT}" != "true" ]; then diff --git a/run.sh b/run.sh index 12d80abd..047e5f90 100755 --- a/run.sh +++ b/run.sh @@ -28,7 +28,8 @@ else fi # detect all available benchmark configurations -BENCHMARKS_CONFIGS=( config/*.json ) +shopt -s globstar +BENCHMARKS_CONFIGS=( config/**/*.json ) echo "The following benchmarks are available, select one to run"