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 A89A916C658A; Fri, 26 Dec 2025 12:36:56 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org A89A916C658A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1766741816; bh=wc1WlVmMzGOXNa7QFtwvFOrgH576lAdo7MDURPR4UwM=; 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=rQtRa/SLrglknLdMdsr6aJxud9vb1vGVZOA4OvBAUCY2xDoiNocf6VxjaiazW5vRZ eCfMi/kuB9EeZMghWIOW6e8I/FDaHwbOYRV5bB4GXcb5fFsr61yU+sB4INhd2UOwgH 0SC5MNstKWqCfutxVTo1ojVHu6xCL8HnHKVcgz3o= Received: from send58.i.mail.ru (send58.i.mail.ru [89.221.237.153]) (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 DB33E16C65AD for ; Fri, 26 Dec 2025 12:20:40 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org DB33E16C65AD Received: by exim-smtp-7b4fb89df9-lft7n with esmtpa (envelope-from ) id 1vZ3zz-000000008Cp-3OeU; Fri, 26 Dec 2025 12:20:40 +0300 To: Sergey Bronnikov Date: Fri, 26 Dec 2025 12:18:08 +0300 Message-ID: X-Mailer: git-send-email 2.52.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Mailru-Src: smtp X-4EC0790: 10 X-7564579A: 646B95376F6C166E X-77F55803: 4F1203BC0FB41BD979975AF0D777FEBD651A111AECFA267DF4E9497E9DD4D3AA182A05F5380850408CE33BF3C61EE64D3DE06ABAFEAF6705C543C5148D1EEFCBB4FA2C6BBBE99EF96AE5DE23F762A4BF X-7FA49CB5: FF5795518A3D127A4AD6D5ED66289B5278DA827A17800CE7387B291F9AC4D188EA1F7E6F0F101C67BD4B6F7A4D31EC0BCC500DACC3FED6E28638F802B75D45FF8AA50765F7900637AC83A81C8FD4AD23D82A6BABE6F325AC2E85FA5F3EDFCBAA7353EFBB55337566657B88B02DF8C86930C3BF3F621916768EDCD39A7D089D1A0A54BBD0599F4228389733CBF5DBD5E913377AFFFEAFD269176DF2183F8FC7C078FCF50C7EAF9C588941B15DA834481FCF19DD082D7633A0EF3E4896CB9E6436389733CBF5DBD5E9D5E8D9A59859A8B65FF0BFC5AEE34BE6CC7F00164DA146DA6F5DAA56C3B73B237318B6A418E8EAB86D1867E19FE14079C09775C1D3CA48CF3D321E7403792E342EB15956EA79C166A417C69337E82CC275ECD9A6C639B01B78DA827A17800CE76515C59FC18CEA6D731C566533BA786AA5CC5B56E945C8DA X-C1DE0DAB: 0D63561A33F958A5F172C2D3CEAE45F45002B1117B3ED696F67A8F3B53E9B5EB92212597CCBD6D77823CB91A9FED034534781492E4B8EEAD145EAEB5DAD25052F36E2E0160E5C55395B8A2A0B6518DF68C46860778A80D548E8926FB43031F38 X-C8649E89: 1C3962B70DF3F0AD73CAD6646DEDE191716CD42B3DD1D34CAB70F9BE574AE9C625B6776AC983F447FC0B9F89525902EE6F57B2FD27647F25E66C117BDB76D659698C9CBCD6BF37E351B08E9F0287C9A9A46A4654D9BE973F0161FD622358FA746559217C80E5E54BB8341EE9D5BE9A0A84027FC716AFE3E605D8439B09F6DFF043F0FFE547E574356536EB022892E5344C41F94D744909CECFA6C6B0C050A61A8CAF69B82BA93681CD72808BE417F3B9E0E7457915DAA85F X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu53w8ahmwBjZKM/YPHZyZHvz5uv+WouB9+ObcCpyrx6l7KImUglyhkEat/+ysWwi0gdhEs0JGjl6ggRWTy1haxBpVdbIX1nthFXMZebaIdHP2ghjoIc/363UZI6Kf1ptIMVdtTL5f5BIXbmIef704Sy+0= X-DA7885C5: 4B0BD542F290C5E8F255D290C0D534F9FD1F978F7170B5F838402566FCEA298C8C28EF8C1D7F28A25B1A4C17EAA7BC4BEF2421ABFA55128DAF83EF9164C44C7E X-Mailru-Sender: 689FA8AB762F7393DDD5FD59B456EAD2170475FF47ED55B38700636FE984EBB85F4B21A2BA97CCE5E49D44BB4BD9522A059A1ED8796F048DB274557F927329BE89D5A3BC2B10C37545BD1C3CC395C826B4A721A3011E896F X-Mras: Ok Subject: [Tarantool-patches] [PATCH v2 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..1c2f8e8e --- /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.52.0