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 694B415FB901; Fri, 24 Oct 2025 14:12:19 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 694B415FB901 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1761304339; bh=O2HrMw/p1cEdP3BY5lEagv7nR3lrfClsP9AmTdn4Vz0=; 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=lMOw2E3/mPwYMLpKKXF6uh9eIgDtF4eDdHcuE3SDgvS7ZClWdXxRmtAsT87CgVcVV vCY45cmI3V1TIM2/tT5ZI/f0WbrRAyCTikN10UKmwopxbCcOM3bEmcg8u0WjvESNLw /DP/KYNfkhcRCqBH2j1xO6+cLSFYDtmRagWZc3W4= Received: from send81.i.mail.ru (send81.i.mail.ru [89.221.237.176]) (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 389D115FB904 for ; Fri, 24 Oct 2025 14:00:25 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 389D115FB904 Received: by exim-smtp-855f5997bb-lwcs4 with esmtpa (envelope-from ) id 1vCFWy-00000000C1f-0Nuw; Fri, 24 Oct 2025 14:00:24 +0300 To: Sergey Bronnikov Date: Fri, 24 Oct 2025 14:00:15 +0300 Message-ID: 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: B8F34718100C35BD X-77F55803: 4F1203BC0FB41BD9DAB542EDD08389FEE6EA46A9DE6717F30BD70469A4330CCB182A05F538085040C40EB8BFB3136F913DE06ABAFEAF670532A7B1776C1B7DB352E7C6720268728E4044E5D25B716509 X-7FA49CB5: FF5795518A3D127A4AD6D5ED66289B5278DA827A17800CE7A3DED2DACB82E709C2099A533E45F2D0395957E7521B51C2CFCAF695D4D8E9FCEA1F7E6F0F101C6759CC434672EE6371C2A783ECEC0211ADC4224003CC836476D5A39DEEDB180909611E41BBFE2FEB2BFC536AB7B6F580DB4CB824977EDF612E2651BACDE34CB9CFAC840F07D28866629FA2833FD35BB23D9E625A9149C048EE33AC447995A7AD1828451B159A507268D2E47CDBA5A96583BD4B6F7A4D31EC0BC014FD901B82EE079FA2833FD35BB23D27C277FBC8AE2E8BF80095D1E57F4578A471835C12D1D977C4224003CC8364762BB6847A3DEAEFB0F43C7A68FF6260569E8FC8737B5C2249EC8D19AE6D49635B68655334FD4449CB9ECD01F8117BC8BEAAAE862A0553A39223F8577A6DFFEA7C565C1E6824D8037B43847C11F186F3C59DAA53EE0834AAEE X-C1DE0DAB: 0D63561A33F958A5B2AA568D4B3CBC505002B1117B3ED696C528DAF4C37AB7DB30E4A65F242F5898823CB91A9FED034534781492E4B8EEAD2E48F5DFA0C1F120C79554A2A72441328621D336A7BC284946AD531847A6065A535571D14F44ED41 X-C8649E89: 1C3962B70DF3F0ADE00A9FD3E00BEEDF3FED46C3ACD6F73ED3581295AF09D3DF87807E0823442EA2ED31085941D9CD0AF7F820E7B07EA4CF74A574846777DB29DB99EEF09832CF1802E46A2259370A1CF8CDE12E19B0F40C35D9E4C97941E9B16EB503EC62A3E87F88C7AF6254073DA9967ABA7627AEC0975E329E5A20CD4C6E5F4332CA8FE04980913E6812662D5F2A5EAB5682573093F7837F15F2B5E4A70B33F2C28C22F508233FCF178C6DD14203 X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu53w8ahmwBjZKM/YPHZyZHvz5uv+WouB9+ObcCpyrx6l7KImUglyhkEat/+ysWwi0gdhEs0JGjl6ggRWTy1haxBpVdbIX1nthFXMZebaIdHP2ghjoIc/363UZI6Kf1ptIMVRN2q9QiacRu8ldU3uY++QQ= X-DA7885C5: 6B6EF705774C29F9F255D290C0D534F90B7ABC8B1E4AA540488E7EBA6EF47EB5CB9C29505DF86E525B1A4C17EAA7BC4BEF2421ABFA55128DAF83EF9164C44C7E X-Mailru-Sender: 689FA8AB762F7393DDD5FD59B456EAD2BD855A4AD8BCD2CCD0C875D4A661AC7791D27858725014D0E49D44BB4BD9522A059A1ED8796F048DB274557F927329BE89D5A3BC2B10C37545BD1C3CC395C826B4A721A3011E896F X-Mras: Ok Subject: [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 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. Most of the settings are taken from the Tarantool's wiki page dedicated to the benchmarking [1]. [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 -- 2.51.0