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 4319B1652621; Tue, 18 Nov 2025 15:36:15 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 4319B1652621 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1763469375; bh=EVVUw699vmMOIhfz7sObNhfK44gE7X/p/59gfcWy59s=; h=Date:To:Cc:References:In-Reply-To:Subject:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=CYFw4N+hdf1Xs4JunpxrWfman+WL4dqBDQNKcU69Hx98ASy2IFf+U3n7LPcBV2mEW CBcAimUOhzqcjubnVYMKvQr96AzqiBMjHVqOqTRZQTbr5afU+m38242fml118l5BZf SjaMdTwoESb0ZvLwUJDLNH8zc9V/+XikHQlVFV+g= Received: from send106.i.mail.ru (send106.i.mail.ru [89.221.237.201]) (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 7E417165261F for ; Tue, 18 Nov 2025 15:36:14 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 7E417165261F Received: by exim-smtp-88cf54d45-tpk6r with esmtpa (envelope-from ) id 1vLKwP-000000000OP-2B62; Tue, 18 Nov 2025 15:36:13 +0300 Content-Type: multipart/alternative; boundary="------------0ET3Xj01Jn3wtGVicNplnyc1" Message-ID: <3a4e3c46-12d2-41bc-b1ee-12c83aa15cec@tarantool.org> Date: Tue, 18 Nov 2025 15:36:11 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: Sergey Kaplun Cc: tarantool-patches@dev.tarantool.org References: In-Reply-To: X-Mailru-Src: smtp X-4EC0790: 10 X-7564579A: 646B95376F6C166E X-77F55803: 4F1203BC0FB41BD9231027FDF5B453B633231130F8136BF87EDF8928FCC2CA96182A05F538085040CA63E7B817DDD5783DE06ABAFEAF6705E5FC141A857093AA1FEE2C31F7B931FF718F752AB0E2B2A6 X-7FA49CB5: FF5795518A3D127A4AD6D5ED66289B5278DA827A17800CE72F22E6DC541F75D9EA1F7E6F0F101C67BD4B6F7A4D31EC0BCC500DACC3FED6E28638F802B75D45FF8AA50765F7900637AC83A81C8FD4AD23D82A6BABE6F325AC2E85FA5F3EDFCBAA7353EFBB55337566E92807B878994EECF7B49E246A9C615A2366A7171139087EEF1BEDA1E7840A20389733CBF5DBD5E913377AFFFEAFD269176DF2183F8FC7C0A29E2F051442AF778941B15DA834481FCF19DD082D7633A0EF3E4896CB9E6436389733CBF5DBD5E9D5E8D9A59859A8B6D52CD31C43BF465FCC7F00164DA146DA6F5DAA56C3B73B237318B6A418E8EAB8D32BA5DBAC0009BE9E8FC8737B5C22496040CC107394EA4476E601842F6C81A12EF20D2F80756B5FB606B96278B59C4276E601842F6C81A127C277FBC8AE2E8B485CA73C03513DAC3AA81AA40904B5D99C9F4D5AE37F343AD1F44FA8B9022EA23BBE47FD9DD3FB595F5C1EE8F4F765FC72CEEB2601E22B093A03B725D353964B0B7D0EA88DDEDAC722CA9DD8327EE4930A3850AC1BE2E735BA6625F88748EAEFC4224003CC83647689D4C264860C145E X-C1DE0DAB: 0D63561A33F958A5F2119B12EB8936645002B1117B3ED69613643E9DF3D949F6E99897350C7C491E823CB91A9FED034534781492E4B8EEAD5B606B10FC07407CBDAD6C7F3747799A X-C8649E89: 1C3962B70DF3F0ADE00A9FD3E00BEEDF3FED46C3ACD6F73ED3581295AF09D3DF87807E0823442EA2ED31085941D9CD0AF7F820E7B07EA4CF8157682FEA44ECA17E0BAD193DF1CF9D715D1339DD4D309183093D89254E2CBC14755E582FAB3B35DD6EA89E5C47541B294EF03D7985740375163CAF76ED874603000C6CFEBCC62E111DC66A97D0BFE2913E6812662D5F2AB9AF64DB4688768036DF5FE9C0001AF333F2C28C22F508233FCF178C6DD14203 X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu53w8ahmwBjZKM/YPHZyZHvz5uv+WouB9+ObcCpyrx6l7KImUglyhkEat/+ysWwi0gdhEs0JGjl6ggRWTy1haxBpVdbIX1nthFXMZebaIdHP2ghjoIc/363UZI6Kf1ptIMVfFX+FmbwDW1OnR2erL9VGI= X-Mailru-Sender: C4F68CFF4024C8867DFDF7C7F2588458670CF1EA388B2E07E9E07FF329DA7D475C638457FDA5D6A993AC9912533B2342645D15D82EE4B272BD6E4642A116CA93524AA66B5ACBE6721EF430B9A63E2A504198E0F3ECE9B5443453F38A29522196 X-Mras: Ok Subject: Re: [Tarantool-patches] [PATCH v1 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 Bronnikov via Tarantool-patches Reply-To: Sergey Bronnikov Errors-To: tarantool-patches-bounces@dev.tarantool.org Sender: "Tarantool-patches" This is a multi-part message in MIME format. --------------0ET3Xj01Jn3wtGVicNplnyc1 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, Sergey, thanks for the patch! See my comments. Sergey On 10/24/25 14:00, Sergey Kaplun wrote: > The patch adds a script for setting the environment before running > performance tests. Most of the settings are taken from the Tarantool's > wiki page dedicated to the benchmarking [1]. Honestly, I don't like that we have similar files in two repositories (aggregate, setup-env.sh). This makes maintenance more complicated. I would put these files to a shared repository and reuse it for tarantool and luajit repos. Original files are even not specified in commit messages for setup-env.sh and aggregate.lua, I think it is worth it. No sense to review these files if it was already done previously. > > [1]: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 --------------0ET3Xj01Jn3wtGVicNplnyc1 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit

Hi, Sergey,

thanks for the patch! See my comments.

Sergey

On 10/24/25 14:00, Sergey Kaplun wrote:
The patch adds a script for setting the environment before running
performance tests. Most of the settings are taken from the Tarantool's
wiki page dedicated to the benchmarking [1].

Honestly, I don't like that we have similar files in two repositories (aggregate, setup-env.sh).

This makes maintenance more complicated. I would put these files to a shared repository

and reuse it for tarantool and luajit repos.

Original files are even not specified in commit messages for setup-env.sh and aggregate.lua,

I think it is worth it. No sense to review these files if it was already done previously.


[1]: 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
--------------0ET3Xj01Jn3wtGVicNplnyc1--