diff --git a/test b/test new file mode 120000 index 0000000000..0c272b6153 --- /dev/null +++ b/test @@ -0,0 +1 @@ +user/apps/tests \ No newline at end of file diff --git a/user/apps/default.nix b/user/apps/default.nix index 209ac841bd..eff2392490 100644 --- a/user/apps/default.nix +++ b/user/apps/default.nix @@ -5,50 +5,71 @@ system, target, fenix, - testOpt + testOpt, }: # Return a list of app derivations to be copied into the rootfs. let - cross = if system == "x86_64-linux" && target == "x86_64" then pkgs - else if target == "riscv64" then pkgs.pkgsCross.riscv64 - else import nixpkgs { - localSystem = system; - crossSystem = if target == "x86_64" then "x86_64-unknown-linux-gnu" - else abort "Unsupported target: ${target}}"; - }; + cross = + if system == "x86_64-linux" && target == "x86_64" then + pkgs + else if target == "riscv64" then + pkgs.pkgsCross.riscv64 + else + import nixpkgs { + localSystem = system; + crossSystem = + if target == "x86_64" then "x86_64-unknown-linux-gnu" else abort "Unsupported target: ${target}}"; + }; - cross-musl = if system == "x86_64-linux" && target == "x86_64" then pkgs.pkgsMusl - else if target == "riscv64" then pkgs.pkgsCross.riscv64-musl - else import nixpkgs { - localSystem = system; - crossSystem = if target == "x86_64" then "x86_64-unknown-linux-musl" - else abort "Unsupported target: ${target}-musl}"; - }; + cross-musl = + if system == "x86_64-linux" && target == "x86_64" then + pkgs.pkgsMusl + else if target == "riscv64" then + pkgs.pkgsCross.riscv64-musl + else + import nixpkgs { + localSystem = system; + crossSystem = + if target == "x86_64" then + "x86_64-unknown-linux-musl" + else + abort "Unsupported target: ${target}-musl}"; + }; - static = if system == "x86_64-linux" && target == "x86_64" then pkgs.pkgsStatic - else if target == "riscv64" then import nixpkgs { - crossSystem = lib.systems.examples.riscv64-musl; - isStatic = true; - } else abort "Unsupported static target: ${target}"; + static = + if system == "x86_64-linux" && target == "x86_64" then + pkgs.pkgsStatic + else if target == "riscv64" then + import nixpkgs { + crossSystem = lib.systems.examples.riscv64-musl; + isStatic = true; + } + else + abort "Unsupported static target: ${target}"; - gvisor-syscall-tests = (pkgs.callPackage ./tests/syscall/gvisor { - inherit fenix system; - installDir = testOpt.syscall.testDir; - version = testOpt.syscall.version; - }); -in [ + gvisor-syscall-tests = ( + pkgs.callPackage ./tests/syscall/gvisor { + inherit fenix system; + installDir = testOpt.syscall.testDir; + version = testOpt.syscall.version; + } + ); + + lmbench-benchmark-tests = (pkgs.callPackage ./tests/benchmark/lmbench { }); +in +[ static.busybox static.curl static.dropbear cross.glibc # Simple C utility - (static.callPackage ./about {}) - + (static.callPackage ./about { }) ] ++ lib.optionals (target == "x86_64" && testOpt.syscall.enable) [ # gvisor test case only included on x86_64 gvisor-syscall-tests + lmbench-benchmark-tests # TODO: Add debian libcxx deps or FHS ] diff --git a/user/apps/tests/README.md b/user/apps/tests/README.md new file mode 100644 index 0000000000..59b7d25359 --- /dev/null +++ b/user/apps/tests/README.md @@ -0,0 +1,5 @@ +Test Tookit Overview +========================= + +## Brief Introduction +This Directory contains all using test toolkit and source for DragonOS, including **compatible test** and **performance benchmarks**. \ No newline at end of file diff --git a/user/apps/tests/benchmark/README.md b/user/apps/tests/benchmark/README.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/user/apps/tests/benchmark/lmbench/.gitignore b/user/apps/tests/benchmark/lmbench/.gitignore new file mode 100644 index 0000000000..b2be92b7db --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/.gitignore @@ -0,0 +1 @@ +result diff --git a/user/apps/tests/benchmark/lmbench/clean_up.sh b/user/apps/tests/benchmark/lmbench/clean_up.sh new file mode 100755 index 0000000000..9c5ecc034d --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/clean_up.sh @@ -0,0 +1,51 @@ +#! /bin/bash +# 测试环境清理脚本 +# 清理 lmbench 测试环境 +# Usage: ./clean_up.sh + +# 获取脚本所在目录 +SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) + + + +# 清理测试文件 +remove_test_files(){ + if [[ -f "/tmp/zero_file" ]]; then + rm -f /tmp/zero_file + fi + if [[ -f "/tmp/test_file" ]]; then + rm -f /tmp/test_file + fi +} + +# 清理 ext4 文件系统和镜像文件 +clean_ext4_fs(){ + # 清理挂载的 ext4 文件系统和镜像文件 + if [[ -d "/ext4" ]]; then + umount /ext4 + rm -rf /ext4 + fi + if [[ -f "${SCRIPT_DIR}/ext4.img" ]]; then + rm -f ${SCRIPT_DIR}/ext4.img + fi +} + +# main execution function +main(){ + # 自动请求 root 权限 + if [[ $EUID -ne 0 ]]; then + echo "需要root权限正在自动请求" + exec sudo bash "$0" "$@" + exit 1 + fi + + remove_test_files + clean_ext4_fs +} + + + +# 执行清理 +main "$@" + +echo "Lmbench 测试环境已清理完成" diff --git a/user/apps/tests/benchmark/lmbench/default.nix b/user/apps/tests/benchmark/lmbench/default.nix new file mode 100644 index 0000000000..3aadec13b2 --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/default.nix @@ -0,0 +1,75 @@ +{ + lib, + pkgs, + installDir ? "/opt/lmbench", +}: + +let + lmbenchBin = pkgs.fetchurl { + url = "https://mirrors.dragonos.org.cn/pub/third_party/lmbench/lmbench-ubuntu2404-202511301014-36c2fb2d084343e098b5e343576d4fc0.tar.xz"; + sha256 = "sha256-/iP7oKc2n0CXpA0OgVQX86quNfbtjXBZ83RBl1MEBhE="; + }; + + testScript = pkgs.stdenv.mkDerivation { + pname = "lmbench-test-script"; + version = "3.0-a9"; + + src = lib.sourceByRegex ./. [ + "^test_cases" + "^.*\.sh$" + ]; + + installPhase = '' + mkdir -p $out/${installDir} + + install -m755 *.sh $out/${installDir}/ + cp -r test_cases $out/${installDir}/ + chmod +x $out/${installDir}/test_cases/*.sh + ''; + }; + + lmbench = pkgs.stdenv.mkDerivation { + pname = "lmbench"; + version = "3.0-a9"; + + src = lmbenchBin; + + nativeBuildInputs = [ pkgs.autoPatchelfHook ]; + + buildInputs = [ + pkgs.stdenv.cc.cc.lib + pkgs.glibc + pkgs.bzip2 + ]; + + sourceRoot = "."; + + installPhase = '' + # Keep Ubuntu package's original directory structure, but flatten sysroot + mkdir -p $out + + # If there's a sysroot directory, flatten it + if [ -d sysroot ]; then + cp -r sysroot/* $out/ + else + cp -r * $out/ + fi + + # Make all binaries executable + find $out -type f -executable -exec chmod +x {} \; + + # Remove broken symlinks (mainly documentation files from sysroot) + find $out -xtype l -delete + ''; + + # autoPatchelfHook will automatically run after installPhase + # to patch all ELF binaries with correct library paths + }; +in +pkgs.symlinkJoin { + name = "lmbench-with-tests"; + paths = [ + lmbench + testScript + ]; +} diff --git a/user/apps/tests/benchmark/lmbench/env.sh b/user/apps/tests/benchmark/lmbench/env.sh new file mode 100755 index 0000000000..8a71a2e0a1 --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/env.sh @@ -0,0 +1,9 @@ +# lmbench 二进制文件路径前缀 +export LMBENCH_BIN_DIR="/lib/lmbench/bin/x86_64-linux-gnu" +# 挂载的 ext4 文件系统路径 +export LMBENCH_EXT4_DIR="/ext4" +# 临时文件存放路径 +export LMBENCH_TMP_DIR="/tmp" +# 测试文件名 +export LMBENCH_TEST_FILE="test_file" +export LMBENCH_ZERO_FILE="zero_file" diff --git a/user/apps/tests/benchmark/lmbench/flake.lock b/user/apps/tests/benchmark/lmbench/flake.lock new file mode 100644 index 0000000000..00eeb0412d --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/flake.lock @@ -0,0 +1,27 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1767767207, + "narHash": "sha256-Mj3d3PfwltLmukFal5i3fFt27L6NiKXdBezC1EBuZs4=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "5912c1772a44e31bf1c63c0390b90501e5026886", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/user/apps/tests/benchmark/lmbench/flake.nix b/user/apps/tests/benchmark/lmbench/flake.nix new file mode 100644 index 0000000000..082d37042d --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/flake.nix @@ -0,0 +1,44 @@ +{ + description = "LMbench benchmark suite packaged for nix (x86_64-linux only)"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + }; + + outputs = + { self, nixpkgs }: + let + system = "x86_64-linux"; + pkgs = nixpkgs.legacyPackages.${system}; + + # Default installation directory + defaultInstallDir = "tests/benchmark/lmbench"; + + # Import the package definition + lmbench = import ./default.nix { + inherit (pkgs) lib pkgs; + installDir = defaultInstallDir; + }; + in + { + packages.${system} = { + default = lmbench; + lmbench = lmbench; + }; + + # Allow overriding installDir + lib.${system}.mkLmbench = + { + installDir ? defaultInstallDir, + }: + import ./default.nix { + inherit (pkgs) lib pkgs; + inherit installDir; + }; + + apps.${system}.default = { + type = "app"; + program = "${lmbench}/${defaultInstallDir}/run_tests.sh"; + }; + }; +} diff --git a/user/apps/tests/benchmark/lmbench/init.sh b/user/apps/tests/benchmark/lmbench/init.sh new file mode 100755 index 0000000000..bac3d36e44 --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/init.sh @@ -0,0 +1,79 @@ +#!/bin/bash +# lmbench 测试环境配置 +# 运行任何具体的测试脚本之前需要先运行此脚本初始化测试环境 +# Usage: bash init.sh + +# 获取脚本所在目录 +SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd) + + +# 创建并挂载 ext4 文件系统到 /ext4 目录(用于 ext4_xxx 测试) +create_ext4_fs(){ + if [[ ! -d "/ext4" ]]; then + mkdir -p /ext4 + if [[ -f "${SCRIPT_DIR}/ext4.img" ]]; then + rm -f ${SCRIPT_DIR}/ext4.img + fi + dd if=/dev/zero of=${SCRIPT_DIR}/ext4.img bs=1M count=1024 + mkfs.ext4 ${SCRIPT_DIR}/ext4.img + mount -o loop ${SCRIPT_DIR}/ext4.img /ext4 + fi +} + + +# 创建测试所需的文件 +create_test_file() { + local ext4_zero_file_path=${LMBENCH_EXT4_DIR}/zero_file + local ext4_test_file_path=${LMBENCH_EXT4_DIR}/test_file + local tmp_zero_file_path=/tmp/zero_file + local tmp_test_file_path=/tmp/test_file + + if [[ ! -f "${ext4_zero_file_path}" ]]; then + touch ${ext4_zero_file_path} + dd if=/dev/zero of=${ext4_zero_file_path} bs=1M count=512 + echo "创建零文件 ${ext4_zero_file_path} 完成" + fi + + if [[ ! -f "${ext4_test_file_path}" ]]; then + touch ${ext4_test_file_path} + dd if=/dev/zero of=${ext4_test_file_path} bs=1M count=512 + echo "创建测试文件 ${ext4_test_file_path} 完成" + fi + + if [[ ! -f "${tmp_zero_file_path}" ]]; then + touch ${tmp_zero_file_path} + dd if=/dev/zero of=${tmp_zero_file_path} bs=1M count=512 + echo "创建临时零文件 ${tmp_zero_file_path} 完成" + fi + + if [[ ! -f "${tmp_test_file_path}" ]]; then + touch ${tmp_test_file_path} + dd if=/dev/zero of=${tmp_test_file_path} bs=1M count=512 + echo "创建临时测试文件 ${tmp_test_file_path} 完成" + fi +} + +# main execution function +main(){ + # 自动请求 root 权限 + if [[ $EUID -ne 0 ]]; then + echo "需要root权限正在自动请求" + exec sudo bash "$0" "$@" + exit 1 + fi + # 加载环境变量配置 + source ${SCRIPT_DIR}/env.sh + # 创建 ext4 文件系统和测试文件 + create_ext4_fs + create_test_file +} + + +# ================== Start the initialization process ================= +main "$@" +if [[ $? -eq 0 ]]; then + echo "lmbench 测试环境初始化完成" +else + echo "lmbench 测试环境初始化失败" +fi + diff --git a/user/apps/tests/benchmark/lmbench/run_test_case.sh b/user/apps/tests/benchmark/lmbench/run_test_case.sh new file mode 100755 index 0000000000..55fd4e0100 --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/run_test_case.sh @@ -0,0 +1,9 @@ +#! /bin/bash + +main(){ + bash ./init.sh + bash "$1" + bash ./clean_up.sh +} + +main "$@" diff --git a/user/apps/tests/benchmark/lmbench/test_cases/ext4_copy_files_bw.sh b/user/apps/tests/benchmark/lmbench/test_cases/ext4_copy_files_bw.sh new file mode 100755 index 0000000000..aea5330a83 --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/ext4_copy_files_bw.sh @@ -0,0 +1,23 @@ +#!/bin/bash +# Test: ext4_copy_files_bw +# Binary: lmdd +# Description: Copy files on ext4 filesystem bandwidth test + + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + + +echo "=== Running ext4_copy_files_bw test ===" +sudo ${LMBENCH_BIN_DIR}/lmdd if=${LMBENCH_EXT4_DIR}/${LMBENCH_ZERO_FILE} of=${LMBENCH_EXT4_DIR}/${LMBENCH_TEST_FILE} + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/ext4_create_delete_files_0k_ops.sh b/user/apps/tests/benchmark/lmbench/test_cases/ext4_create_delete_files_0k_ops.sh new file mode 100755 index 0000000000..d55c0af0a6 --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/ext4_create_delete_files_0k_ops.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Test: ext4_create_delete_files_0k_ops +# Binary: lat_fs +# Description: Create and delete 0k files on ext4 filesystem + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running ext4_create_delete_files_0k_ops test ===" +${LMBENCH_BIN_DIR}/lat_fs -s 0k -P 1 ${LMBENCH_EXT4_DIR} + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/ext4_create_delete_files_10k_ops.sh b/user/apps/tests/benchmark/lmbench/test_cases/ext4_create_delete_files_10k_ops.sh new file mode 100755 index 0000000000..a33c7e3dab --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/ext4_create_delete_files_10k_ops.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Test: ext4_create_delete_files_10k_ops +# Binary: lat_fs +# Description: Create and delete 10k files on ext4 filesystem + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running ext4_create_delete_files_10k_ops test ===" +${LMBENCH_BIN_DIR}/lat_fs -s 10k -P 1 ${LMBENCH_EXT4_DIR} + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/fifo_lat.sh b/user/apps/tests/benchmark/lmbench/test_cases/fifo_lat.sh new file mode 100755 index 0000000000..6ba399070e --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/fifo_lat.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Test: fifo_lat +# Binary: lat_fifo +# Description: FIFO latency test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running fifo_lat test ===" +${LMBENCH_BIN_DIR}/lat_fifo -P 1 + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/mem_copy_bw.sh b/user/apps/tests/benchmark/lmbench/test_cases/mem_copy_bw.sh new file mode 100755 index 0000000000..84e6ea822b --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/mem_copy_bw.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Test: mem_copy_bw +# Binary: bw_mem +# Description: Memory copy bandwidth test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running mem_copy_bw test ===" +${LMBENCH_BIN_DIR}/bw_mem -P 1 -N 50 512m fcp + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/mem_mmap_bw.sh b/user/apps/tests/benchmark/lmbench/test_cases/mem_mmap_bw.sh new file mode 100755 index 0000000000..771e0d44d9 --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/mem_mmap_bw.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Test: mem_mmap_bw +# Binary: bw_mmap_rd +# Description: Memory mmap bandwidth test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running mem_mmap_bw test ===" +${LMBENCH_BIN_DIR}/bw_mmap_rd -W 30 -N 300 256m mmap_only ${LMBENCH_EXT4_DIR}/${LMBENCH_TEST_FILE} + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/mem_mmap_lat.sh b/user/apps/tests/benchmark/lmbench/test_cases/mem_mmap_lat.sh new file mode 100755 index 0000000000..c5df660ed9 --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/mem_mmap_lat.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Test: mem_mmap_lat +# Binary: lat_mmap +# Description: Memory mmap latency test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running mem_mmap_lat test ===" +sudo ${LMBENCH_BIN_DIR}/lat_mmap 4m ${LMBENCH_EXT4_DIR}/${LMBENCH_TEST_FILE} + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/mem_pagefault_lat.sh b/user/apps/tests/benchmark/lmbench/test_cases/mem_pagefault_lat.sh new file mode 100755 index 0000000000..1b74eea299 --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/mem_pagefault_lat.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Test: mem_pagefault_lat +# Binary: lat_pagefault +# Description: Memory page fault latency test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running mem_pagefault_lat test ===" +${LMBENCH_BIN_DIR}/lat_pagefault -P 1 ${LMBENCH_EXT4_DIR}/${LMBENCH_TEST_FILE} + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/mem_read_bw.sh b/user/apps/tests/benchmark/lmbench/test_cases/mem_read_bw.sh new file mode 100755 index 0000000000..fe2379ea9d --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/mem_read_bw.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Test: mem_read_bw +# Binary: bw_mem +# Description: Memory read bandwidth test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running mem_read_bw test ===" +${LMBENCH_BIN_DIR}/bw_mem -P 1 -N 50 512m frd + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/mem_write_bw.sh b/user/apps/tests/benchmark/lmbench/test_cases/mem_write_bw.sh new file mode 100755 index 0000000000..f555c1996f --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/mem_write_bw.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Test: mem_write_bw +# Binary: bw_mem +# Description: Memory write bandwidth test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running mem_write_bw test ===" +${LMBENCH_BIN_DIR}/bw_mem -P 1 -N 50 512m fwr + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/pipe_bw.sh b/user/apps/tests/benchmark/lmbench/test_cases/pipe_bw.sh new file mode 100755 index 0000000000..02fd8e9e50 --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/pipe_bw.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Test: pipe_bw +# Binary: bw_pipe +# Description: Pipe bandwidth test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running pipe_bw test ===" +${LMBENCH_BIN_DIR}/bw_pipe -P 1 + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/pipe_lat.sh b/user/apps/tests/benchmark/lmbench/test_cases/pipe_lat.sh new file mode 100755 index 0000000000..52200feddd --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/pipe_lat.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Test: pipe_lat +# Binary: lat_pipe +# Description: Pipe latency test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running pipe_lat test ===" +${LMBENCH_BIN_DIR}/lat_pipe -P 1 + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/process_ctx_lat.sh b/user/apps/tests/benchmark/lmbench/test_cases/process_ctx_lat.sh new file mode 100755 index 0000000000..604257ee7c --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/process_ctx_lat.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Test: process_ctx_lat +# Binary: lat_ctx +# Description: Process context switch latency test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running process_ctx_lat test ===" +${LMBENCH_BIN_DIR}/lat_ctx -P 1 18 + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/process_exec_lat.sh b/user/apps/tests/benchmark/lmbench/test_cases/process_exec_lat.sh new file mode 100755 index 0000000000..860947233b --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/process_exec_lat.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Test: process_exec_lat +# Binary: lat_proc +# Description: Process exec latency test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running process_exec_lat test ===" +${LMBENCH_BIN_DIR}/lat_proc -P 1 exec + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/process_fork_lat.sh b/user/apps/tests/benchmark/lmbench/test_cases/process_fork_lat.sh new file mode 100755 index 0000000000..9bf6a97fe6 --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/process_fork_lat.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Test: process_fork_lat +# Binary: lat_proc +# Description: Process fork latency test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running process_fork_lat test ===" +${LMBENCH_BIN_DIR}/lat_proc -P 1 fork + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/process_getppid_lat.sh b/user/apps/tests/benchmark/lmbench/test_cases/process_getppid_lat.sh new file mode 100755 index 0000000000..3dec0ef34c --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/process_getppid_lat.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Test: process_getppid_lat +# Binary: lat_syscall +# Description: Process getppid syscall latency test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running process_getppid_lat test ===" +${LMBENCH_BIN_DIR}/lat_syscall -P 1 null + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/process_shell_lat.sh b/user/apps/tests/benchmark/lmbench/test_cases/process_shell_lat.sh new file mode 100755 index 0000000000..4e74bd9dd1 --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/process_shell_lat.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Test: process_shell_lat +# Binary: lat_proc +# Description: Process shell latency test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running process_shell_lat test ===" +${LMBENCH_BIN_DIR}/lat_proc -P 1 shell + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/ramfs_copy_files_bw.sh b/user/apps/tests/benchmark/lmbench/test_cases/ramfs_copy_files_bw.sh new file mode 100755 index 0000000000..9891138ea7 --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/ramfs_copy_files_bw.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Test: ramfs_copy_files_bw +# Binary: lmdd +# Description: Copy files on ramfs bandwidth test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running ramfs_copy_files_bw test ===" +sudo ${LMBENCH_BIN_DIR}/lmdd if=${LMBENCH_TMP_DIR}/${LMBENCH_ZERO_FILE} of=${LMBENCH_TMP_DIR}/${LMBENCH_TEST_FILE} + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/ramfs_create_delete_files_0k_ops.sh b/user/apps/tests/benchmark/lmbench/test_cases/ramfs_create_delete_files_0k_ops.sh new file mode 100755 index 0000000000..fe19e7dde9 --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/ramfs_create_delete_files_0k_ops.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Test: ramfs_create_delete_files_0k_ops +# Binary: lat_fs +# Description: Create and delete 0k files on ramfs + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running ramfs_create_delete_files_0k_ops test ===" +${LMBENCH_BIN_DIR}/lat_fs -s 0k -P 1 -W 30 -N 200 + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/ramfs_create_delete_files_10k_ops.sh b/user/apps/tests/benchmark/lmbench/test_cases/ramfs_create_delete_files_10k_ops.sh new file mode 100755 index 0000000000..f62b667e82 --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/ramfs_create_delete_files_10k_ops.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Test: ramfs_create_delete_files_10k_ops +# Binary: lat_fs +# Description: Create and delete 10k files on ramfs + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running ramfs_create_delete_files_10k_ops test ===" +${LMBENCH_BIN_DIR}/lat_fs -s 10k -P 1 -W 30 -N 300 + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/semaphore_lat.sh b/user/apps/tests/benchmark/lmbench/test_cases/semaphore_lat.sh new file mode 100755 index 0000000000..b91b4291d2 --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/semaphore_lat.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Test: semaphore_lat +# Binary: lat_sem +# Description: Semaphore latency test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running semaphore_lat test ===" +${LMBENCH_BIN_DIR}/lat_sem -P 1 -N 21 + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/signal_catch_lat.sh b/user/apps/tests/benchmark/lmbench/test_cases/signal_catch_lat.sh new file mode 100755 index 0000000000..20905c2b8a --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/signal_catch_lat.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Test: signal_catch_lat +# Binary: lat_sig +# Description: Signal catch latency test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running signal_catch_lat test ===" +${LMBENCH_BIN_DIR}/lat_sig -P 1 catch + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/signal_install_lat.sh b/user/apps/tests/benchmark/lmbench/test_cases/signal_install_lat.sh new file mode 100755 index 0000000000..47f6468cae --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/signal_install_lat.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Test: signal_install_lat +# Binary: lat_sig +# Description: Signal install latency test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running signal_install_lat test ===" +${LMBENCH_BIN_DIR}/lat_sig -P 1 install + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/signal_prot_lat.sh b/user/apps/tests/benchmark/lmbench/test_cases/signal_prot_lat.sh new file mode 100755 index 0000000000..7bd3c3fcd1 --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/signal_prot_lat.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Test: signal_prot_lat +# Binary: lat_sig +# Description: Signal protection latency test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running signal_prot_lat test ===" +${LMBENCH_BIN_DIR}/lat_sig -W 30 -N 300 prot ${LMBENCH_EXT4_DIR}/${LMBENCH_TEST_FILE} + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/tcp_loopback_bw_128.sh b/user/apps/tests/benchmark/lmbench/test_cases/tcp_loopback_bw_128.sh new file mode 100755 index 0000000000..253095ad19 --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/tcp_loopback_bw_128.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# Test: tcp_loopback_bw_128 +# Binary: bw_tcp +# Description: TCP loopback bandwidth test with 128 byte messages + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +SERVER_PID="" + +cleanup() { + if [ ! -z "$SERVER_PID" ]; then + kill $SERVER_PID 2>/dev/null || true + wait $SERVER_PID 2>/dev/null || true + fi +} + +trap cleanup EXIT INT TERM + +echo "=== Starting TCP server ===" +${LMBENCH_BIN_DIR}/bw_tcp -s 127.0.0.1 -b 1 & +SERVER_PID=$! +sleep 2 + +echo "=== Running TCP bandwidth test (128 bytes) ===" +${LMBENCH_BIN_DIR}/bw_tcp -m 128 -P 1 127.0.0.1 + +echo "=== Shutting down server ===" +${LMBENCH_BIN_DIR}/bw_tcp -S 127.0.0.1 + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/tcp_loopback_bw_4k.sh b/user/apps/tests/benchmark/lmbench/test_cases/tcp_loopback_bw_4k.sh new file mode 100755 index 0000000000..d1ee865af7 --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/tcp_loopback_bw_4k.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# Test: tcp_loopback_bw_4k +# Binary: bw_tcp +# Description: TCP loopback bandwidth test with 4k messages + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +SERVER_PID="" + +cleanup() { + if [ ! -z "$SERVER_PID" ]; then + kill $SERVER_PID 2>/dev/null || true + wait $SERVER_PID 2>/dev/null || true + fi +} + +trap cleanup EXIT INT TERM + +echo "=== Starting TCP server ===" +${LMBENCH_BIN_DIR}/bw_tcp -s 127.0.0.1 -b 1 & +SERVER_PID=$! +sleep 2 + +echo "=== Running TCP bandwidth test (4k) ===" +${LMBENCH_BIN_DIR}/bw_tcp -m 4096 -P 1 127.0.0.1 + +echo "=== Shutting down server ===" +${LMBENCH_BIN_DIR}/bw_tcp -S 127.0.0.1 + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/tcp_loopback_bw_64k.sh b/user/apps/tests/benchmark/lmbench/test_cases/tcp_loopback_bw_64k.sh new file mode 100755 index 0000000000..a3f167c1d7 --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/tcp_loopback_bw_64k.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# Test: tcp_loopback_bw_64k +# Binary: bw_tcp +# Description: TCP loopback bandwidth test with 64k messages + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +SERVER_PID="" + +cleanup() { + if [ ! -z "$SERVER_PID" ]; then + kill $SERVER_PID 2>/dev/null || true + wait $SERVER_PID 2>/dev/null || true + fi +} + +trap cleanup EXIT INT TERM + +echo "=== Starting TCP server ===" +${LMBENCH_BIN_DIR}/bw_tcp -s 127.0.0.1 -b 1 & +SERVER_PID=$! +sleep 2 + +echo "=== Running TCP bandwidth test (64k) ===" +${LMBENCH_BIN_DIR}/bw_tcp -m 65536 -P 1 127.0.0.1 + +echo "=== Shutting down server ===" +${LMBENCH_BIN_DIR}/bw_tcp -S 127.0.0.1 + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/tcp_loopback_connect_lat.sh b/user/apps/tests/benchmark/lmbench/test_cases/tcp_loopback_connect_lat.sh new file mode 100755 index 0000000000..f632eea7ce --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/tcp_loopback_connect_lat.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# Test: tcp_loopback_connect_lat +# Binary: lat_connect +# Description: TCP loopback connection latency test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +SERVER_PID="" + +cleanup() { + if [ ! -z "$SERVER_PID" ]; then + kill $SERVER_PID 2>/dev/null || true + wait $SERVER_PID 2>/dev/null || true + fi +} + +trap cleanup EXIT INT TERM + +echo "=== Starting TCP server ===" +${LMBENCH_BIN_DIR}/lat_connect -s 127.0.0.1 & +SERVER_PID=$! +sleep 2 + +echo "=== Running TCP connection latency test ===" +${LMBENCH_BIN_DIR}/lat_connect 127.0.0.1 + +echo "=== Shutting down server ===" +${LMBENCH_BIN_DIR}/lat_connect -S 127.0.0.1 + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/tcp_loopback_http_bw.sh b/user/apps/tests/benchmark/lmbench/test_cases/tcp_loopback_http_bw.sh new file mode 100755 index 0000000000..6c5e5cb547 --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/tcp_loopback_http_bw.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# Test: tcp_loopback_http_bw +# Binary: lmhttp, lat_http +# Description: TCP loopback HTTP bandwidth test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +SERVER_PID="" + +cleanup() { + if [ ! -z "$SERVER_PID" ]; then + kill $SERVER_PID 2>/dev/null || true + wait $SERVER_PID 2>/dev/null || true + fi +} + +trap cleanup EXIT INT TERM + +echo "=== Starting HTTP server ===" +${LMBENCH_BIN_DIR}/lmhttp & +SERVER_PID=$! +sleep 2 + +echo "=== Running HTTP bandwidth test ===" +${LMBENCH_BIN_DIR}/lat_http 127.0.0.1 < file_list + +echo "=== Shutting down server ===" +${LMBENCH_BIN_DIR}/lat_http -S 127.0.0.1 + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/tcp_loopback_lat.sh b/user/apps/tests/benchmark/lmbench/test_cases/tcp_loopback_lat.sh new file mode 100755 index 0000000000..50552cf85a --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/tcp_loopback_lat.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# Test: tcp_loopback_lat +# Binary: lat_tcp +# Description: TCP loopback latency test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +SERVER_PID="" + +cleanup() { + if [ ! -z "$SERVER_PID" ]; then + kill $SERVER_PID 2>/dev/null || true + wait $SERVER_PID 2>/dev/null || true + fi +} + +trap cleanup EXIT INT TERM + +echo "=== Starting TCP server ===" +${LMBENCH_BIN_DIR}/lat_tcp -s 127.0.0.1 -b 1 & +SERVER_PID=$! +sleep 2 + +echo "=== Running TCP latency test ===" +${LMBENCH_BIN_DIR}/lat_tcp -P 1 127.0.0.1 + +echo "=== Shutting down server ===" +${LMBENCH_BIN_DIR}/lat_tcp -S 127.0.0.1 + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/tcp_loopback_select_lat.sh b/user/apps/tests/benchmark/lmbench/test_cases/tcp_loopback_select_lat.sh new file mode 100755 index 0000000000..b38860a356 --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/tcp_loopback_select_lat.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Test: tcp_loopback_select_lat +# Binary: lat_select +# Description: TCP loopback select latency test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running TCP select latency test ===" +${LMBENCH_BIN_DIR}/lat_select -P 1 tcp + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/tcp_virtio_bw_128.sh b/user/apps/tests/benchmark/lmbench/test_cases/tcp_virtio_bw_128.sh new file mode 100755 index 0000000000..59913facd9 --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/tcp_virtio_bw_128.sh @@ -0,0 +1,22 @@ +#!/bin/bash +# Test: tcp_virtio_bw_128 +# Binary: bw_tcp +# Description: TCP virtio bandwidth test with 128 byte messages + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running TCP virtio bandwidth test (128 bytes) ===" +echo "Note: This test requires a server running at 10.0.2.15" +${LMBENCH_BIN_DIR}/bw_tcp -s 10.0.2.15 -b 1 + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/tcp_virtio_bw_64k.sh b/user/apps/tests/benchmark/lmbench/test_cases/tcp_virtio_bw_64k.sh new file mode 100755 index 0000000000..45da49c6eb --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/tcp_virtio_bw_64k.sh @@ -0,0 +1,22 @@ +#!/bin/bash +# Test: tcp_virtio_bw_64k +# Binary: bw_tcp +# Description: TCP virtio bandwidth test with 64k messages + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running TCP virtio bandwidth test (64k) ===" +echo "Note: This test requires a server running at 10.0.2.15" +${LMBENCH_BIN_DIR}/bw_tcp -s 10.0.2.15 -b 1 + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/tcp_virtio_connect_lat.sh b/user/apps/tests/benchmark/lmbench/test_cases/tcp_virtio_connect_lat.sh new file mode 100755 index 0000000000..471fff3da9 --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/tcp_virtio_connect_lat.sh @@ -0,0 +1,22 @@ +#!/bin/bash +# Test: tcp_virtio_connect_lat +# Binary: lat_connect +# Description: TCP virtio connection latency test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running TCP virtio connection latency test ===" +echo "Note: This test requires a server running at 10.0.2.15" +${LMBENCH_BIN_DIR}/lat_connect -s 10.0.2.15 -b 1000 + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/tcp_virtio_lat.sh b/user/apps/tests/benchmark/lmbench/test_cases/tcp_virtio_lat.sh new file mode 100755 index 0000000000..d33c2c7b53 --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/tcp_virtio_lat.sh @@ -0,0 +1,22 @@ +#!/bin/bash +# Test: tcp_virtio_lat +# Binary: lat_tcp +# Description: TCP virtio latency test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running TCP virtio latency test ===" +echo "Note: This test requires a server running at 10.0.2.15" +${LMBENCH_BIN_DIR}/lat_tcp -s 10.0.2.15 -b 1 + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/udp_loopback_lat.sh b/user/apps/tests/benchmark/lmbench/test_cases/udp_loopback_lat.sh new file mode 100755 index 0000000000..b803b1b7ca --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/udp_loopback_lat.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# Test: udp_loopback_lat +# Binary: lat_udp +# Description: UDP loopback latency test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +SERVER_PID="" + +cleanup() { + if [ ! -z "$SERVER_PID" ]; then + kill $SERVER_PID 2>/dev/null || true + wait $SERVER_PID 2>/dev/null || true + fi +} + +trap cleanup EXIT INT TERM + +echo "=== Starting UDP server ===" +${LMBENCH_BIN_DIR}/lat_udp -s 127.0.0.1 & +SERVER_PID=$! +sleep 2 + +echo "=== Running UDP latency test ===" +${LMBENCH_BIN_DIR}/lat_udp -P 1 127.0.0.1 + +echo "=== Shutting down server ===" +${LMBENCH_BIN_DIR}/lat_udp -S 127.0.0.1 + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/udp_virtio_lat.sh b/user/apps/tests/benchmark/lmbench/test_cases/udp_virtio_lat.sh new file mode 100755 index 0000000000..a5f3e48a07 --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/udp_virtio_lat.sh @@ -0,0 +1,22 @@ +#!/bin/bash +# Test: udp_virtio_lat +# Binary: lat_udp +# Description: UDP virtio latency test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running UDP virtio latency test ===" +echo "Note: This test requires a server running at 10.0.2.15" +${LMBENCH_BIN_DIR}/lat_udp -s 10.0.2.15 + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/unix_bw.sh b/user/apps/tests/benchmark/lmbench/test_cases/unix_bw.sh new file mode 100755 index 0000000000..1f25b55305 --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/unix_bw.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Test: unix_bw +# Binary: bw_unix +# Description: Unix domain socket bandwidth test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running Unix domain socket bandwidth test ===" +${LMBENCH_BIN_DIR}/bw_unix -P 1 + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/unix_connect_lat.sh b/user/apps/tests/benchmark/lmbench/test_cases/unix_connect_lat.sh new file mode 100755 index 0000000000..e4cb5b320f --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/unix_connect_lat.sh @@ -0,0 +1,37 @@ +#!/bin/bash +# Test: unix_connect_lat +# Binary: lat_unix_connect +# Description: Unix domain socket connection latency test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +SERVER_PID="" + +cleanup() { + if [ ! -z "$SERVER_PID" ]; then + kill $SERVER_PID 2>/dev/null || true + wait $SERVER_PID 2>/dev/null || true + fi +} + +trap cleanup EXIT INT TERM + +echo "=== Starting Unix socket server ===" +${LMBENCH_BIN_DIR}/lat_unix_connect -s & +SERVER_PID=$! +sleep 2 + +echo "=== Running Unix socket connection latency test ===" +${LMBENCH_BIN_DIR}/lat_unix_connect -P 1 + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/unix_lat.sh b/user/apps/tests/benchmark/lmbench/test_cases/unix_lat.sh new file mode 100755 index 0000000000..383477ddc1 --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/unix_lat.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Test: unix_lat +# Binary: lat_unix +# Description: Unix domain socket latency test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running Unix domain socket latency test ===" +${LMBENCH_BIN_DIR}/lat_unix -P 1 + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/vfs_fcntl_lat.sh b/user/apps/tests/benchmark/lmbench/test_cases/vfs_fcntl_lat.sh new file mode 100755 index 0000000000..de22cd1327 --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/vfs_fcntl_lat.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Test: vfs_fcntl_lat +# Binary: lat_fcntl +# Description: VFS fcntl latency test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running VFS fcntl latency test ===" +${LMBENCH_BIN_DIR}/lat_fcntl -P 1 -W 30 -N 200 + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/vfs_fstat_lat.sh b/user/apps/tests/benchmark/lmbench/test_cases/vfs_fstat_lat.sh new file mode 100755 index 0000000000..70cbf519ba --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/vfs_fstat_lat.sh @@ -0,0 +1,23 @@ +#!/bin/bash +# Test: vfs_fstat_lat +# Binary: lat_syscall +# Description: VFS fstat syscall latency test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running VFS fstat latency test ===" +touch test_file +${LMBENCH_BIN_DIR}/lat_syscall -P 1 fstat test_file +rm test_file + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/vfs_open_lat.sh b/user/apps/tests/benchmark/lmbench/test_cases/vfs_open_lat.sh new file mode 100755 index 0000000000..4ab5efe312 --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/vfs_open_lat.sh @@ -0,0 +1,23 @@ +#!/bin/bash +# Test: vfs_open_lat +# Binary: lat_syscall +# Description: VFS open syscall latency test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running VFS open latency test ===" +touch testfile +${LMBENCH_BIN_DIR}/lat_syscall -P 1 -W 1000 -N 1000 open testfile +rm testfile + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/vfs_read_lat.sh b/user/apps/tests/benchmark/lmbench/test_cases/vfs_read_lat.sh new file mode 100755 index 0000000000..a13789d616 --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/vfs_read_lat.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Test: vfs_read_lat +# Binary: lat_syscall +# Description: VFS read syscall latency test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running VFS read latency test ===" +${LMBENCH_BIN_DIR}/lat_syscall -P 1 read + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/vfs_read_pagecache_bw.sh b/user/apps/tests/benchmark/lmbench/test_cases/vfs_read_pagecache_bw.sh new file mode 100755 index 0000000000..65aef76581 --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/vfs_read_pagecache_bw.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Test: vfs_read_pagecache_bw +# Binary: bw_file_rd +# Description: VFS read page cache bandwidth test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running VFS read page cache bandwidth test ===" +${LMBENCH_BIN_DIR}/bw_file_rd -P 1 -W 30 -N 300 512m io_only ${LMBENCH_EXT4_DIR}/${LMBENCH_TEST_FILE} + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/vfs_select_lat.sh b/user/apps/tests/benchmark/lmbench/test_cases/vfs_select_lat.sh new file mode 100755 index 0000000000..a025811f2a --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/vfs_select_lat.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Test: vfs_select_lat +# Binary: lat_select +# Description: VFS select latency test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running VFS select latency test ===" +${LMBENCH_BIN_DIR}/lat_select -P 1 file + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/vfs_stat_lat.sh b/user/apps/tests/benchmark/lmbench/test_cases/vfs_stat_lat.sh new file mode 100755 index 0000000000..c84cada883 --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/vfs_stat_lat.sh @@ -0,0 +1,23 @@ +#!/bin/bash +# Test: vfs_stat_lat +# Binary: lat_syscall +# Description: VFS stat syscall latency test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running VFS stat latency test ===" +touch testfile +${LMBENCH_BIN_DIR}/lat_syscall -P 1 -W 1000 -N 1000 stat testfile +rm testfile + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/benchmark/lmbench/test_cases/vfs_write_lat.sh b/user/apps/tests/benchmark/lmbench/test_cases/vfs_write_lat.sh new file mode 100755 index 0000000000..b7da3dc657 --- /dev/null +++ b/user/apps/tests/benchmark/lmbench/test_cases/vfs_write_lat.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Test: vfs_write_lat +# Binary: lat_syscall +# Description: VFS write syscall latency test + +set -e + +# 加载环境变量 +SCTIPDIR=$(cd $(dirname ${BASH_SOURCE[0]}) > /dev/null && pwd) +ENV_PATH="${SCTIPDIR}/../env.sh" +source ${ENV_PATH} + +echo "=== Running VFS write latency test ===" +${LMBENCH_BIN_DIR}/lat_syscall -P 1 write + +if [ $? -eq 0 ]; then + echo "Test completed successfully" +else + echo "Test failed" + exit 1 +fi diff --git a/user/apps/tests/syscall/gvisor/default.nix b/user/apps/tests/syscall/gvisor/default.nix index 3adee8777b..cbc0481ec8 100644 --- a/user/apps/tests/syscall/gvisor/default.nix +++ b/user/apps/tests/syscall/gvisor/default.nix @@ -38,14 +38,38 @@ let ''; }; - # 2. Prepare the test data, scripts, and patched binaries - # This derivation handles downloading, extracting, and patching the tests. - tests = pkgs.stdenv.mkDerivation { - pname = "gvisor-tests-data"; + # 2. Extract and patch test binaries + # This derivation handles downloading, extracting, and patching the test binaries. + # Separated from scripts so that whitelist/blocklist changes don't trigger repatching. + testBinaries = pkgs.stdenv.mkDerivation { + pname = "gvisor-tests-binaries"; + version = "0.1.0"; + + src = testsArchive; + + nativeBuildInputs = [ pkgs.autoPatchelfHook ]; + + buildInputs = [ pkgs.stdenv.cc.cc.lib ]; + + sourceRoot = "."; + + installPhase = '' + mkdir -p $out/${installDir}/tests + cp -r * $out/${installDir}/tests/ + + runHook preInstall + find $out/${installDir}/tests -type f -name '*_test' -exec chmod 755 {} \; || true + runHook postInstall + ''; + }; + + # 3. Prepare test scripts and configuration files + # This derivation contains frequently modified files (whitelist, blocklists, scripts). + # Changes here won't trigger binary repatching. + testScripts = pkgs.stdenv.mkDerivation { + pname = "gvisor-tests-scripts"; version = "0.1.0"; - # Use sourceByRegex to only depend on relevant files. - # This prevents rebuilds when files in ./runner change. src = lib.sourceByRegex ./. [ "^whitelist\.txt$" "^blocklists" @@ -53,30 +77,18 @@ let "^run_tests\.sh$" ]; - nativeBuildInputs = [ pkgs.autoPatchelfHook ]; - - buildInputs = [ pkgs.stdenv.cc.cc.lib ]; - installPhase = '' mkdir -p $out/${installDir} install -m644 whitelist.txt $out/${installDir}/ cp -r blocklists $out/${installDir}/ install -m755 run_tests.sh $out/${installDir}/ - - # Bundle tests archive for offline systems - mkdir -p $out/${installDir}/tests - tar -xf ${testsArchive} -C $out/${installDir}/tests --strip-components=1 - - runHook preInstall - find $out/${installDir}/tests -type f -name '*_test' -exec install -m755 {} $out/${installDir}/tests \; || true - runHook postInstall ''; }; in pkgs.symlinkJoin { name = "gvisor-tests"; - paths = [ runner tests ]; + paths = [ runner testBinaries testScripts ]; meta = with lib; { description = "gVisor syscall test runner and scripts"; platforms = platforms.linux; diff --git a/user/dadk/config/lmbench_bin_ubuntu2404.toml b/user/dadk/config/lmbench_bin_ubuntu2404.toml new file mode 100644 index 0000000000..024084f7db --- /dev/null +++ b/user/dadk/config/lmbench_bin_ubuntu2404.toml @@ -0,0 +1,43 @@ +# 用户程序名称 +name = "lmbench_bin_ubuntu2404" +# 版本号 +version = "3.0" +# 用户程序描述信息 +description = "LMbench - Tools for Performance Analysis from Ubuntu 24.04" +# (可选)默认: false 是否只构建一次,如果为true,DADK会在构建成功后,将构建结果缓存起来,下次构建时,直接使用缓存的构建结果 +build-once = false +# (可选) 默认: false 是否只安装一次,如果为true,DADK会在安装成功后,不再重复安装 +install-once = false +# 目标架构 +# 可选值:"x86_64", "aarch64", "riscv64", "loongarch64" +target-arch = ["x86_64"] +# 任务源 +[task-source] +# 构建类型 +# 可选值:"build-from-source", "install-from-prebuilt" +type = "install-from-prebuilt" +# 构建来源 +# "build_from_source" 可选值:"git", "local", "archive" +# "install_from_prebuilt" 可选值:"local", "archive" +source = "archive" +# 本地目录路径 - 指向已解压的 sysroot 目录 +source-path = "https://mirrors.dragonos.org.cn/pub/third_party/lmbench/lmbench-ubuntu2404-202511301014-36c2fb2d084343e098b5e343576d4fc0.tar.xz" +archive-rootdir = "sysroot/" + +[build] + +# 安装相关信息 +[install] +# (可选)安装到DragonOS的路径 +in-dragonos-path = "/" +# 清除相关信息 +[clean] +# (可选)清除命令 +clean-command = "" +# 依赖项 +[[depends]] +name = "glibc_bin_ubuntu2404" +version = "2.39" + +# (可选)环境变量 +# 注意:如果没有环境变量,忽略此项,不允许只留一个[[envs]]