# sm4_test **Repository Path**: shilei-wang/sm4_test ## Basic Information - **Project Name**: sm4_test - **Description**: 指定文件自动化加解密性能测试脚本 - **Primary Language**: Shell - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-21 - **Last Updated**: 2025-10-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SM4 文件系统并发性能测试脚本 ## 概述 `benchmark.sh` 是一个用于测试 SM4 加密算法在文件系统并发场景下性能的脚本。该脚本支持两种测试模式,能够自动将测试进程均分到所有 NUMA 节点,并提供详细的性能报告。 ## 功能特性 - **两种测试模式**:内存模式(预先创建测试文件)和目录模式(使用现有文件) - **NUMA 绑定**:自动将测试进程均分到所有 NUMA 节点 - **并发控制**:支持最大并发数限制 - **命令类型选择**:支持 `auto`、`ccp`、`sw_avx` 三种加密命令类型 - **性能报告**:生成详细的性能数据报告,包括加密/解密时间和聚合性能 ## 系统要求 - Linux 操作系统 - `numactl` 工具(用于 NUMA 绑定) - `hct_speed` 测试工具(SM4 加密测试程序) ## 安装依赖 ```bash # 安装 numactl(如果未安装) yum install numactl -y # 或 apt-get install numactl -y ``` ## 使用方法 ### 基本语法 ```bash bash benchmark.sh <模式> <参数> <最大并发数> [选项] ``` ### 模式 A:内存中创建测试文件 在内存中创建指定大小和数量的测试文件进行性能测试。 **语法:** ```bash bash benchmark.sh -m <文件大小> <文件数量> <最大并发数> [-cmd auto|ccp|sw_avx] [-n] ``` **参数说明:** - `文件大小`:支持 KB、MB、GB 格式(如 1MB、10KB、2GB) - `文件数量`:要创建的测试文件数量(整数) - `最大并发数`:同时运行的最大进程数(整数) - `-cmd`:可选,指定命令类型(默认:sw_avx) - `-n`:可选,不输出加密文件,显示加密和解密性能数据 **示例:** ```bash # 基本用法:创建 100 个 1MB 文件,最大并发 64 bash benchmark.sh -m 1MB 100 64 # 指定命令类型为 ccp bash benchmark.sh -m 1MB 100 64 -cmd ccp # 不输出加密文件,显示解密性能 bash benchmark.sh -m 1MB 100 64 -n # 组合使用 bash benchmark.sh -m 1MB 100 64 -cmd auto -n ``` ### 模式 B:指定目录或文件列表 使用现有目录中的文件进行性能测试。 **语法:** ```bash bash benchmark.sh -d <输入目录> <最大并发数> [-cmd auto|ccp|sw_avx] [-n] ``` **参数说明:** - `输入目录`:包含测试文件的目录路径 - `最大并发数`:同时运行的最大进程数(整数) - `-cmd`:可选,指定命令类型(默认:sw_avx) - `-n`:可选,不输出加密文件,显示加密和解密性能数据 **示例:** ```bash # 基本用法:测试指定目录中的文件 bash benchmark.sh -d /path/to/data 64 # 指定命令类型为 auto bash benchmark.sh -d /path/to/data 64 -cmd auto # 不输出加密文件 bash benchmark.sh -d /path/to/data 64 -n # 组合使用 bash benchmark.sh -d /path/to/data 64 -cmd sw_avx -n ``` ## 命令类型说明 - `auto`:自动选择最优的加密实现 - `ccp`:使用 CCP(加密协处理器)硬件加速 - `sw_avx`:使用 AVX 指令集的软件实现 ## 输出说明 ### 配置信息 脚本运行时会显示当前的测试配置: - 测试模式(内存模式/文件系统并发测试) - 文件大小和数量(模式 A) - 输入/输出目录 - 最大并发数限制 - 命令类型 - NUMA 节点和 CPU 核心信息 ### 性能报告 测试完成后会生成详细的性能报告,包含: - 并发数(n):同时运行的进程数 - 完成文件:成功处理的文件数量 - 平均加密时间(s):每个文件的平均加密时间 - 平均解密时间(s):每个文件的平均解密时间(仅当使用 -n 选项时) - 聚合加密性能(Gbps):总的加密性能 - 聚合解密性能(Gbps):总的解密性能(仅当使用 -n 选项时) ## 输出文件 - **加密文件**:默认情况下,加密后的文件会输出到指定目录 - 模式 A:`/tmp/sm4_memory_test_out` - 模式 B:`<输入目录>_sm4_out` - **临时文件**:测试过程中创建的临时文件会自动清理 ## 错误处理 脚本包含完善的错误处理机制: - 参数验证:检查参数格式和有效性 - 文件检查:确保输入目录和文件存在 - 依赖检查:验证必要的工具是否可用 - 进程监控:检测失败的测试进程并提供详细错误信息 ## 性能优化建议 1. **NUMA 绑定**:脚本自动将进程均分到所有 NUMA 节点,充分利用系统资源 2. **并发数设置**:根据系统 CPU 核心数合理设置最大并发数 3. **文件大小**:根据测试需求选择合适的文件大小 4. **命令类型**:根据硬件配置选择合适的命令类型 ## 故障排除 ### 常见问题 1. **"找不到测试程序 hct_speed"** - 确保 `hct_speed` 工具存在于当前目录且具有执行权限 2. **"numactl 命令未安装"** - 安装 numactl 包:`yum install numactl` 或 `apt-get install numactl` 3. **"输入目录不存在"** - 检查指定的目录路径是否正确 4. **"文件数量必须是一个大于等于 1 的整数"** - 确保文件数量参数是有效的正整数 5. **"无效的命令类型"** - 确保 -cmd 参数使用正确的值:auto、ccp 或 sw_avx ### 调试模式 如需更详细的调试信息,可以修改脚本中的注释行来启用调试输出。 ## 许可证 此脚本为开源工具,遵循相关开源协议。 ## 技术支持 如有问题或建议,请联系相关技术支持团队。