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 897FB16C848A; Fri, 26 Dec 2025 12:37:56 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 897FB16C848A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1766741876; bh=iLKWcAdtBTEBaE17liRCgHohscD+scrIzAJH9PLIYHU=; 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=wnUgDsaGnO7gI6G1DFp0dwDpRX+xcp5AeyAAY9XDYp9v361hfk0k7sr5bsF9fiM+1 S3/KTaSIusS2nRNQxTnziH068512SCzRtJg6r22nxEX1F4hPajOtKlEh/RCA2OGtep tq/fn1GRmTn8ojAauNP8V8d7TXdtD6fZmi6BKRzc= Received: from send194.i.mail.ru (send194.i.mail.ru [95.163.59.33]) (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 BE09D16C65B8 for ; Fri, 26 Dec 2025 12:21:07 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org BE09D16C65B8 Received: by exim-smtp-7b4fb89df9-lft7n with esmtpa (envelope-from ) id 1vZ40Q-000000008Cp-2mjQ; Fri, 26 Dec 2025 12:21:07 +0300 To: Sergey Bronnikov Date: Fri, 26 Dec 2025 12:18:10 +0300 Message-ID: <17eca2e353ca35724c022af610f1295328838561.1766738771.git.skaplun@tarantool.org> 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: 4F1203BC0FB41BD979975AF0D777FEBD826642AD4A534357A371A8F1BADBE128182A05F5380850406DE77B97F322540E3DE06ABAFEAF670513842BB1BF5A7928B4FA2C6BBBE99EF9E53309D15BC615AA X-7FA49CB5: FF5795518A3D127A4AD6D5ED66289B5278DA827A17800CE7F65C230EDDCD559EEA1F7E6F0F101C67BD4B6F7A4D31EC0BCC500DACC3FED6E28638F802B75D45FF8AA50765F7900637AC83A81C8FD4AD23D82A6BABE6F325AC2E85FA5F3EDFCBAA7353EFBB55337566657B88B02DF8C869E8C81AF9925E98958EDCD39A7D089D1A481F586ADF161AFE389733CBF5DBD5E913377AFFFEAFD269176DF2183F8FC7C078FCF50C7EAF9C588941B15DA834481FCF19DD082D7633A0EF3E4896CB9E6436389733CBF5DBD5E9D5E8D9A59859A8B65FF0BFC5AEE34BE6CC7F00164DA146DA6F5DAA56C3B73B237318B6A418E8EAB86D1867E19FE14079C09775C1D3CA48CF3D321E7403792E342EB15956EA79C166A417C69337E82CC275ECD9A6C639B01B78DA827A17800CE76515C59FC18CEA6D731C566533BA786AA5CC5B56E945C8DA X-C1DE0DAB: 0D63561A33F958A5C39DEE4D2C7796D25002B1117B3ED6969772AB56689F4B93B74D9144D44E4FCF823CB91A9FED034534781492E4B8EEAD03B4017E30074F69C79554A2A72441328621D336A7BC284946AD531847A6065A535571D14F44ED41 X-C8649E89: 1C3962B70DF3F0AD73CAD6646DEDE191716CD42B3DD1D34CAB70F9BE574AE9C625B6776AC983F447FC0B9F89525902EE6F57B2FD27647F25E66C117BDB76D6599903502D115895D0A4E850B55B204E14B10231B73FEE100CA99A6854336819FA31129F6CBC8665C3B8341EE9D5BE9A0A457A33775F5BB9CE05D8439B09F6DFF0639BEB949A7678E06536EB022892E5344C41F94D744909CECFA6C6B0C050A61A8CAF69B82BA93681CD72808BE417F3B9E0E7457915DAA85F X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu53w8ahmwBjZKM/YPHZyZHvz5uv+WouB9+ObcCpyrx6l7KImUglyhkEat/+ysWwi0gdhEs0JGjl6ggRWTy1haxBpVdbIX1nthFXMZebaIdHP2ghjoIc/363UZI6Kf1ptIMVdtTL5f5BIXb9valZ+x16TM= X-DA7885C5: 2B221AC38D141DD0F255D290C0D534F92323C24EB6C0EBA69518BCF6ED9C22F7A6755C89607DAFC15B1A4C17EAA7BC4BEF2421ABFA55128DAF83EF9164C44C7E X-Mailru-Sender: 689FA8AB762F7393DDD5FD59B456EAD2A9654B26B3488CA08700636FE984EBB8E481B3A0B0CA81A4E49D44BB4BD9522A059A1ED8796F048DB274557F927329BE89D5A3BC2B10C37545BD1C3CC395C826B4A721A3011E896F X-Mras: Ok Subject: [Tarantool-patches] [PATCH v2 luajit 39/41] perf: add a script for the environment setup 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" The patch adds a script for setting the environment before running performance tests. The script originated from the Tarantool's repository [2]. Most of the settings are taken from the Tarantool's wiki page dedicated to the benchmarking [1]. [1]: https://github.com/tarantool/tarantool/blob/dcdb3ee83b3d6324011e704b5a3f4ee3e19bbf47/perf/tools/setup_env.sh [2]: https://github.com/tarantool/tarantool/wiki/Benchmarking --- perf/helpers/setup_env.sh | 135 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100755 perf/helpers/setup_env.sh diff --git a/perf/helpers/setup_env.sh b/perf/helpers/setup_env.sh new file mode 100755 index 00000000..043d3c88 --- /dev/null +++ b/perf/helpers/setup_env.sh @@ -0,0 +1,135 @@ +#!/bin/sh + +# The script sets up a Linux operating system before running +# LuaJIT benchmarks. See more details in [1]. +# +# [1]: https://github.com/tarantool/tarantool/wiki/Benchmarking + +set -eu + +uid=$(id -u) +if [ "$uid" -ne 0 ] + then echo "Please run as root." + exit 1 +fi + +### +# Helpers. +### + +cpu_vendor="unknown" +cpuinfo_vendor=$(awk '/vendor_id/{ print $3; exit }' < /proc/cpuinfo) +if [ "$cpuinfo_vendor" = "GenuineIntel" ]; then + cpu_vendor="intel" +elif [ "$cpuinfo_vendor" = "AuthenticAMD" ]; then + cpu_vendor="amd" +else + echo "Unknown CPU vendor '$cpuinfo_vendor'" + exit 1 +fi + +FAILURE_MSG="WARNING" +SUCCESS_MSG="CHECKED" +SKIPPED_MSG="SKIPPED" + +set_kernel_setting() { + desc_msg="$1" + file_path="$2" + value="$3" + + if [ -f "$file_path" ]; then + sh -c "echo $value > $file_path" && status="$SUCCESS_MSG" || status="$FAILURE_MSG" + else + status="$SKIPPED_MSG" + fi + echo "$desc_msg $status" +} + +kernel_setting_is_nonzero() { + desc_msg="$1" + file_path="$2" + hint_msg="$3" + + if [ -f "$file_path" ]; then + value=$(cat "$file_path") + if [ -n "$value" ]; then + status="$SUCCESS_MSG" + else + status="$FAILURE_MSG (hint: $hint_msg)" + fi + else + status="$SKIPPED_MSG" + fi + echo "$desc_msg $status" +} + +### +# Kernel command line parameters. +### + +desc_msg="Disable AMD SMT or Intel Hyperthreading " +sysfs_path="/sys/devices/system/cpu/smt/active" +if [ -f "$sysfs_path" ]; then + is_set=$(cat $sysfs_path) + err_msg="$FAILURE_MSG (hint: set 'nosmt' kernel parameter)" + [ "$is_set" = 1 ] && status="$SUCCESS_MSG" || status="$err_msg" +else + status="$SKIPPED_MSG" +fi +echo "$desc_msg $status" + +kernel_setting_is_nonzero \ + "Isolate CPUs for benchmarking" \ + "/sys/devices/system/cpu/isolated" \ + "set 'isolcpus' kernel parameter" + +kernel_setting_is_nonzero \ + "Offload interrupts from the isolated CPUs" \ + "/proc/irq/default_smp_affinity" \ + "set 'irqaffinity' kernel parameter" + +kernel_setting_is_nonzero \ + "Disable scheduling on single-task isolated CPUs" \ + "/sys/devices/system/cpu/nohz_full" \ + "set 'nohz_full' kernel parameter" + +set_kernel_setting \ + "Disable transparent huge pages" \ + "/sys/kernel/mm/transparent_hugepage/enabled" \ + "never" + +set_kernel_setting \ + "Disable direct compaction of transparent huge pages" \ + "/sys/kernel/mm/transparent_hugepage/defrag" \ + "never" + +# Disable ASLR for the repeatable LuaJIT behaviour. +set_kernel_setting \ + "Disable ASLR" \ + "/proc/sys/kernel/randomize_va_space" \ + "0" + +### +# System tuning. +### + +if [ "$cpu_vendor" = "amd" ]; then + sysfs_path="/sys/devices/system/cpu/cpufreq/boost" + value=0 +elif [ "$cpu_vendor" = "intel" ]; then + sysfs_path="/sys/devices/system/cpu/intel_pstate/no_turbo" + value=1 +fi +set_kernel_setting \ + "Disable TurboBoost" \ + "$sysfs_path" \ + "$value" + +ncpu=$(getconf _NPROCESSORS_ONLN) +for cpu_id in $(seq 0 1 $((ncpu-1))); do + sysfs_path_cpu="/sys/devices/system/cpu/cpu$cpu_id/cpufreq/scaling_governor" + set_kernel_setting \ + "Stabilize the frequency of CPU $cpu_id" \ + "$sysfs_path_cpu" \ + "performance" +done -- 2.52.0