From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from [87.239.111.99] (localhost [127.0.0.1]) by dev.tarantool.org (Postfix) with ESMTP id 6E777164973C; Fri, 24 Oct 2025 14:11:18 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 6E777164973C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1761304278; bh=CeoDzDaD0qdrosZLVlA8RPpi6cJP33tQHB0ZYHDfG0M=; h=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=XDaS8PXVeJkvBPloFlkqDLYv2fj6/ib+Br1UM7D/gAFejWEdRgNJx0WMSelp6dbwL edkX4T3/BrtpWG6U9U3E8mA5c8UvDPIdtNTycY8ZdDrqNr9eaq4Yv9MDlilhozlJkX MwDP8tc2SIIsvMaDOojLpPvftduNGDRysXKMWFeg= Received: from send126.i.mail.ru (send126.i.mail.ru [89.221.237.221]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 448CF15FB902 for ; Fri, 24 Oct 2025 14:00:22 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 448CF15FB902 Received: by exim-smtp-855f5997bb-lwcs4 with esmtpa (envelope-from ) id 1vCFWv-00000000C1f-1NGu; Fri, 24 Oct 2025 14:00:21 +0300 To: Sergey Bronnikov Date: Fri, 24 Oct 2025 14:00:13 +0300 Message-ID: <70e9131c5cfc5c44822dd73ecb010d13dbd370c4.1761301736.git.skaplun@tarantool.org> X-Mailer: git-send-email 2.51.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Mailru-Src: smtp X-4EC0790: 10 X-7564579A: EEAE043A70213CC8 X-77F55803: 4F1203BC0FB41BD9CBA19EB9A1D5188A9E1CDDC1A7D45D512B774C25EC09AC45182A05F5380850404C228DA9ACA6FE27D7824C06BA3BC4C23DE06ABAFEAF6705F7974C1DB49FAA0F52E7C6720268728EDC6E8ACFF20E225F X-7FA49CB5: FF5795518A3D127A4AD6D5ED66289B5278DA827A17800CE7196003627DEC9496EA1F7E6F0F101C67BD4B6F7A4D31EC0BCC500DACC3FED6E28638F802B75D45FF8AA50765F7900637AC83A81C8FD4AD23D82A6BABE6F325AC2E85FA5F3EDFCBAA7353EFBB55337566D857902A848E84F8F837EE87961AFA2D66C95910BB108DEE7FEB40DAF27E428C389733CBF5DBD5E913377AFFFEAFD269176DF2183F8FC7C091DAD9F922AA71188941B15DA834481FCF19DD082D7633A0EF3E4896CB9E6436389733CBF5DBD5E9D5E8D9A59859A8B6E5E764EB5D94DBD4CC7F00164DA146DA6F5DAA56C3B73B237318B6A418E8EAB86D1867E19FE14079C09775C1D3CA48CF3D321E7403792E342EB15956EA79C166A417C69337E82CC275ECD9A6C639B01B78DA827A17800CE75A9E79F66F1C28F3731C566533BA786AA5CC5B56E945C8DA X-C1DE0DAB: 0D63561A33F958A5BA34C6EDAD0E19AE5002B1117B3ED69694DA8C5FF70AF3FDC81EEE05487B0209823CB91A9FED034534781492E4B8EEADB157340A885E1247C79554A2A72441328621D336A7BC284946AD531847A6065A535571D14F44ED41 X-C8649E89: 1C3962B70DF3F0ADE00A9FD3E00BEEDF3FED46C3ACD6F73ED3581295AF09D3DF87807E0823442EA2ED31085941D9CD0AF7F820E7B07EA4CF314D7EDEF38DBD7D10B411164D4F6AF339ABC40F6C8C74F03032116C00880793CC55679CEC9B022B6EB503EC62A3E87F82F48CCC0B0E2AD9967ABA7627AEC09723C65411131137615F4332CA8FE04980913E6812662D5F2A5EAB5682573093F7837F15F2B5E4A70B33F2C28C22F508233FCF178C6DD14203 X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu53w8ahmwBjZKM/YPHZyZHvz5uv+WouB9+ObcCpyrx6l7KImUglyhkEat/+ysWwi0gdhEs0JGjl6ggRWTy1haxBpVdbIX1nthFXMZebaIdHP2ghjoIc/363UZI6Kf1ptIMVRN2q9QiacRulXmHXuklapI= X-DA7885C5: 3BF77ACF17F4A92EF255D290C0D534F9E12DCEE9148A9F0CAEB695DD7633AD3A2CDDFFBC536777E25B1A4C17EAA7BC4BEF2421ABFA55128DAF83EF9164C44C7E X-Mailru-Sender: 689FA8AB762F7393DDD5FD59B456EAD20E58CE9C5AB4BD0ED0C875D4A661AC771688EF4A0B22C7B5E49D44BB4BD9522A059A1ED8796F048DB274557F927329BE89D5A3BC2B10C37545BD1C3CC395C826B4A721A3011E896F X-Mras: Ok Subject: [Tarantool-patches] [PATCH v1 luajit 37/41] perf: add CMake infrastructure X-BeenThere: tarantool-patches@dev.tarantool.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Sergey Kaplun via Tarantool-patches Reply-To: Sergey Kaplun Cc: tarantool-patches@dev.tarantool.org Errors-To: tarantool-patches-bounces@dev.tarantool.org Sender: "Tarantool-patches" This commit introduces CMake building scripts for the benches introduced before. The benchmarks are enabled only if `LUAJIT_ENABLE_PERF` option is set. For each suite (LuaJIT-benches in this patch set) `AddBenchTarget()` macro generates 2 targets: * Target to run all benches and store results in the perf/output/ directory. * Target to run all benches via CTest and inspect results in the console. For the LuaJIT-benches there are 2 generated files: * FASTA_5000000 -- is used as an input for and . * SUMCOLL_5000.txt -- is used as an input for . These files and directory are added to the .gitignore files. --- .gitignore | 5 ++ CMakeLists.txt | 11 ++++ perf/CMakeLists.txt | 99 ++++++++++++++++++++++++++++++ perf/LuaJIT-benches/CMakeLists.txt | 52 ++++++++++++++++ 4 files changed, 167 insertions(+) create mode 100644 perf/CMakeLists.txt create mode 100644 perf/LuaJIT-benches/CMakeLists.txt diff --git a/.gitignore b/.gitignore index c26a7eb8..bfc7d401 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,8 @@ luajit-parse-memprof luajit-parse-sysprof luajit.pc *.c_test + +# Generated by the performance tests. +FASTA_5000000 +SUMCOL_5000.txt +perf/output/ diff --git a/CMakeLists.txt b/CMakeLists.txt index c0da4362..73f46835 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -464,6 +464,17 @@ if(LUAJIT_USE_TEST) endif() add_subdirectory(test) +# --- Benchmarks source tree --------------------------------------------------- + +# The option to enable performance tests for the LuaJIT. +# Disabled by default, since commonly it is used only by LuaJIT +# developers and run in the CI with the specially set-up machine. +option(LUAJIT_ENABLE_PERF "Generate target" OFF) + +if(LUAJIT_ENABLE_PERF) + add_subdirectory(perf) +endif() + # --- Misc rules --------------------------------------------------------------- # XXX: Implement target using the following recipe: diff --git a/perf/CMakeLists.txt b/perf/CMakeLists.txt new file mode 100644 index 00000000..cc3c312f --- /dev/null +++ b/perf/CMakeLists.txt @@ -0,0 +1,99 @@ +# Running various bench suites against LuaJIT. + +include(MakeLuaPath) + +if(CMAKE_BUILD_TYPE STREQUAL "Debug") + message(WARNING "LuaJIT and perf tests are built in the Debug mode." + "Timings may be affected.") +endif() + +set(PERF_OUTPUT_DIR ${PROJECT_BINARY_DIR}/perf/output) +file(MAKE_DIRECTORY ${PERF_OUTPUT_DIR}) + +# List of paths that will be used for each suite. +make_lua_path(LUA_PATH_BENCH_BASE + PATHS + # Use of the bench module. + ${CMAKE_CURRENT_SOURCE_DIR}/utils/?.lua + # Simple usage with `jit.dump()`, etc. + ${LUAJIT_SOURCE_DIR}/?.lua + ${LUAJIT_BINARY_DIR}/?.lua +) + +make_lua_path(LUA_CPATH + PATHS + # XXX: Some arches may have installed the cjson module here. + /usr/lib64/lua/5.1/?.so +) + +# Produce the pair: +# Target to run for reporting and target to inspect from the +# console, runnable by the CTest. +macro(AddBenchTarget perf_suite) + file(MAKE_DIRECTORY "${PERF_OUTPUT_DIR}/${perf_suite}/") + message(STATUS "Add perf suite ${perf_suite}") + add_custom_target(${perf_suite}) + add_custom_target(${perf_suite}-console + COMMAND ${CMAKE_CTEST_COMMAND} + -L ${perf_suite} + --parallel 1 + --verbose + --output-on-failure + --no-tests=error + ) + add_dependencies(${perf_suite}-console luajit-main) +endmacro() + +# Add the bench to the pair of targets created by the call above. +macro(AddBench bench_name bench_path perf_suite LUA_PATH) + set(bench_title "perf/${perf_suite}/${bench_name}") + get_filename_component(bench_name_stripped ${bench_name} NAME_WE) + set(bench_out_file + ${PERF_OUTPUT_DIR}/${perf_suite}/${bench_name_stripped}.json + ) + set(bench_command "${LUAJIT_BINARY} ${bench_path}") + if(${ARGC} GREATER 4) + set(input_file ${ARGV4}) + set(bench_command "${bench_command} < ${input_file}") + endif() + set(BENCH_FLAGS + "--benchmark_out_format=json --benchmark_out=${bench_out_file}" + ) + set(bench_command_flags ${bench_command} ${BENCH_FLAGS}) + separate_arguments(bench_command_separated UNIX_COMMAND ${bench_command}) + add_custom_command( + COMMAND ${CMAKE_COMMAND} -E env + LUA_PATH="${LUA_PATH}" + LUA_CPATH="${LUA_CPATH}" + ${bench_command_separated} + --benchmark_out_format=json + --benchmark_out="${bench_out_file}" + OUTPUT ${bench_out_file} + DEPENDS luajit-main + COMMENT + "Running benchmark ${bench_title} saving results in ${bench_out_file}." + ) + add_custom_target(${bench_name} DEPENDS ${bench_out_file}) + add_dependencies(${perf_suite} ${bench_name}) + + # Report in the console. + add_test(NAME ${bench_title} + COMMAND sh -c "${bench_command}" + ) + set_tests_properties(${bench_title} PROPERTIES + ENVIRONMENT "LUA_PATH=${LUA_PATH}" + LABELS ${perf_suite} + DEPENDS luajit-main + ) + unset(input_file) +endmacro() + +add_subdirectory(LuaJIT-benches) + +add_custom_target(${PROJECT_NAME}-perf + DEPENDS LuaJIT-benches +) + +add_custom_target(${PROJECT_NAME}-perf-console + DEPENDS LuaJIT-benches-console +) diff --git a/perf/LuaJIT-benches/CMakeLists.txt b/perf/LuaJIT-benches/CMakeLists.txt new file mode 100644 index 00000000..d9909f36 --- /dev/null +++ b/perf/LuaJIT-benches/CMakeLists.txt @@ -0,0 +1,52 @@ +set(PERF_SUITE_NAME LuaJIT-benches) +set(LUA_BENCH_SUFFIX .lua) + +AddBenchTarget(${PERF_SUITE_NAME}) + +# Input for the k-nucleotide and revcomp benchmarks. +set(FASTA_NAME ${CMAKE_CURRENT_BINARY_DIR}/FASTA_5000000) +add_custom_target(FASTA_5000000 + COMMAND ${LUAJIT_BINARY} + ${CMAKE_CURRENT_SOURCE_DIR}/libs/fasta.lua 5000000 > ${FASTA_NAME} + OUTPUT ${FASTA_NAME} + DEPENDS luajit-main + COMMENT "Generate ${FASTA_NAME}." +) + +make_lua_path(LUA_PATH + PATHS + ${LUA_PATH_BENCH_BASE} + ${CMAKE_CURRENT_SOURCE_DIR}/libs/?.lua +) + +# Input for the benchmark. +set(SUM_NAME ${CMAKE_CURRENT_BINARY_DIR}/SUMCOL_5000.txt) +# Remove possibly existing file. +file(REMOVE ${SUM_NAME}) + +set(SUMCOL_FILE ${CMAKE_CURRENT_SOURCE_DIR}/SUMCOL_1.txt) +file(READ ${SUMCOL_FILE} SUMCOL_CONTENT) +foreach(_unused RANGE 4999) + file(APPEND ${SUM_NAME} "${SUMCOL_CONTENT}") +endforeach() + +file(GLOB benches "${CMAKE_CURRENT_SOURCE_DIR}/*${LUA_BENCH_SUFFIX}") +foreach(bench_path ${benches}) + file(RELATIVE_PATH bench_name ${CMAKE_CURRENT_SOURCE_DIR} ${bench_path}) + set(bench_title "perf/${PERF_SUITE_NAME}/${bench_name}") + if(bench_name MATCHES "k-nucleotide" OR bench_name MATCHES "revcomp") + AddBench(${bench_name} + ${bench_path} ${PERF_SUITE_NAME} "${LUA_PATH}" ${FASTA_NAME} + ) + add_dependencies(${bench_name} FASTA_5000000) + elseif(bench_name MATCHES "sum-file") + AddBench(${bench_name} + ${bench_path} ${PERF_SUITE_NAME} "${LUA_PATH}" ${SUM_NAME} + ) + else() + AddBench(${bench_name} ${bench_path} ${PERF_SUITE_NAME} "${LUA_PATH}") + endif() +endforeach() + +# We need to generate the file before we run tests. +add_dependencies(${PERF_SUITE_NAME}-console FASTA_5000000) -- 2.51.0