|
| 1 | +# Lmbench 测试脚本 |
| 2 | + |
| 3 | +本目录包含 lmbench 基准测试的所有测试用例脚本。 |
| 4 | + |
| 5 | +## 目录结构 |
| 6 | + |
| 7 | +``` |
| 8 | +scripts/ |
| 9 | +├── env.sh # 环境变量配置脚本 |
| 10 | +├── README.md # 本说明文件 |
| 11 | +├── ext2_*.sh # ext2 文件系统测试 |
| 12 | +├── ramfs_*.sh # ramfs 文件系统测试 |
| 13 | +├── mem_*.sh # 内存相关测试 |
| 14 | +├── pipe_*.sh # 管道测试 |
| 15 | +├── process_*.sh # 进程相关测试 |
| 16 | +├── semaphore_lat.sh # 信号量测试 |
| 17 | +├── signal_*.sh # 信号相关测试 |
| 18 | +├── tcp_loopback_*.sh # TCP loopback 测试 |
| 19 | +├── tcp_virtio_*.sh # TCP virtio 测试 |
| 20 | +├── udp_*.sh # UDP 测试 |
| 21 | +├── unix_*.sh # Unix domain socket 测试 |
| 22 | +├── vfs_*.sh # VFS 相关测试 |
| 23 | +└── fifo_lat.sh # FIFO 测试 |
| 24 | +``` |
| 25 | + |
| 26 | +## 使用方法 |
| 27 | + |
| 28 | +### 1. 配置环境 |
| 29 | + |
| 30 | +在运行任何测试前,必须先 source 环境配置脚本: |
| 31 | + |
| 32 | +```bash |
| 33 | +cd user/apps/tests/benchmark/lmbench/scripts |
| 34 | +source env.sh |
| 35 | +``` |
| 36 | + |
| 37 | +这会配置以下环境变量: |
| 38 | +- `LMBENCH_BIN`: lmbench 二进制文件路径 (`/lib/lmbench/bin/x86_64-linux-gnu`) |
| 39 | +- `LMBENCH_EXT2_DIR`: ext2 文件系统测试目录 (`/ext2`) |
| 40 | +- `LMBENCH_TMP_DIR`: 临时文件目录 (`/tmp`) |
| 41 | +- `LMBENCH_LOG_DIR`: 日志目录 (`/tmp/lmbench_logs`) |
| 42 | +- `LMBENCH_TEST_FILE`: 测试文件名 (`test_file`) |
| 43 | +- `LMBENCH_ZERO_FILE`: zero 文件名 (`zero_file`) |
| 44 | + |
| 45 | +### 2. 运行单个测试 |
| 46 | + |
| 47 | +```bash |
| 48 | +# 例如:运行内存拷贝带宽测试 |
| 49 | +./mem_copy_bw.sh |
| 50 | + |
| 51 | +# 例如:运行管道延迟测试 |
| 52 | +./pipe_lat.sh |
| 53 | +``` |
| 54 | + |
| 55 | +### 3. 运行所有测试 |
| 56 | + |
| 57 | +```bash |
| 58 | +# 遍历所有测试脚本 |
| 59 | +for script in *.sh; do |
| 60 | + if [ "$script" != "env.sh" ]; then |
| 61 | + echo "Running $script..." |
| 62 | + ./"$script" |
| 63 | + fi |
| 64 | +done |
| 65 | +``` |
| 66 | + |
| 67 | +## 测试分类 |
| 68 | + |
| 69 | +### 文件系统测试 |
| 70 | +- **ext2_copy_files_bw.sh**: ext2 文件拷贝带宽 |
| 71 | +- **ext2_create_delete_files_0k_ops.sh**: ext2 创建/删除 0k 文件 |
| 72 | +- **ext2_create_delete_files_10k_ops.sh**: ext2 创建/删除 10k 文件 |
| 73 | +- **ramfs_copy_files_bw.sh**: ramfs 文件拷贝带宽 |
| 74 | +- **ramfs_create_delete_files_0k_ops.sh**: ramfs 创建/删除 0k 文件 |
| 75 | +- **ramfs_create_delete_files_10k_ops.sh**: ramfs 创建/删除 10k 文件 |
| 76 | + |
| 77 | +### 内存测试 |
| 78 | +- **mem_copy_bw.sh**: 内存拷贝带宽 |
| 79 | +- **mem_read_bw.sh**: 内存读带宽 |
| 80 | +- **mem_write_bw.sh**: 内存写带宽 |
| 81 | +- **mem_mmap_bw.sh**: 内存 mmap 带宽 |
| 82 | +- **mem_mmap_lat.sh**: 内存 mmap 延迟 |
| 83 | +- **mem_pagefault_lat.sh**: 页错误延迟 |
| 84 | + |
| 85 | +### IPC 测试 |
| 86 | +- **pipe_bw.sh**: 管道带宽 |
| 87 | +- **pipe_lat.sh**: 管道延迟 |
| 88 | +- **fifo_lat.sh**: FIFO 延迟 |
| 89 | +- **semaphore_lat.sh**: 信号量延迟 |
| 90 | + |
| 91 | +### 进程测试 |
| 92 | +- **process_fork_lat.sh**: fork 延迟 |
| 93 | +- **process_exec_lat.sh**: exec 延迟 |
| 94 | +- **process_shell_lat.sh**: shell 调用延迟 |
| 95 | +- **process_ctx_lat.sh**: 进程上下文切换延迟 |
| 96 | +- **process_getppid_lat.sh**: getppid 系统调用延迟 |
| 97 | + |
| 98 | +### 信号测试 |
| 99 | +- **signal_install_lat.sh**: 信号安装延迟 |
| 100 | +- **signal_catch_lat.sh**: 信号捕获延迟 |
| 101 | +- **signal_prot_lat.sh**: 信号保护延迟 |
| 102 | + |
| 103 | +### 网络测试 (TCP) |
| 104 | +- **tcp_loopback_bw_128.sh**: TCP loopback 带宽 (128 字节) |
| 105 | +- **tcp_loopback_bw_4k.sh**: TCP loopback 带宽 (4k) |
| 106 | +- **tcp_loopback_bw_64k.sh**: TCP loopback 带宽 (64k) |
| 107 | +- **tcp_loopback_lat.sh**: TCP loopback 延迟 |
| 108 | +- **tcp_loopback_connect_lat.sh**: TCP loopback 连接延迟 |
| 109 | +- **tcp_loopback_http_bw.sh**: TCP loopback HTTP 带宽 |
| 110 | +- **tcp_loopback_select_lat.sh**: TCP select 延迟 |
| 111 | +- **tcp_virtio_bw_128.sh**: TCP virtio 带宽 (128 字节) |
| 112 | +- **tcp_virtio_bw_64k.sh**: TCP virtio 带宽 (64k) |
| 113 | +- **tcp_virtio_lat.sh**: TCP virtio 延迟 |
| 114 | +- **tcp_virtio_connect_lat.sh**: TCP virtio 连接延迟 |
| 115 | + |
| 116 | +### 网络测试 (UDP) |
| 117 | +- **udp_loopback_lat.sh**: UDP loopback 延迟 |
| 118 | +- **udp_virtio_lat.sh**: UDP virtio 延迟 |
| 119 | + |
| 120 | +### Unix Domain Socket 测试 |
| 121 | +- **unix_bw.sh**: Unix socket 带宽 |
| 122 | +- **unix_lat.sh**: Unix socket 延迟 |
| 123 | +- **unix_connect_lat.sh**: Unix socket 连接延迟 |
| 124 | + |
| 125 | +### VFS 测试 |
| 126 | +- **vfs_open_lat.sh**: open 系统调用延迟 |
| 127 | +- **vfs_read_lat.sh**: read 系统调用延迟 |
| 128 | +- **vfs_write_lat.sh**: write 系统调用延迟 |
| 129 | +- **vfs_stat_lat.sh**: stat 系统调用延迟 |
| 130 | +- **vfs_fstat_lat.sh**: fstat 系统调用延迟 |
| 131 | +- **vfs_fcntl_lat.sh**: fcntl 系统调用延迟 |
| 132 | +- **vfs_select_lat.sh**: select 系统调用延迟 |
| 133 | +- **vfs_read_pagecache_bw.sh**: 页缓存读带宽 |
| 134 | + |
| 135 | +## 注意事项 |
| 136 | + |
| 137 | +### 1. 依赖文件准备 |
| 138 | +某些测试需要预先准备测试文件: |
| 139 | +- ext2/ramfs 拷贝测试需要 `zero_file` |
| 140 | +- mmap/pagefault 测试需要 `test_file` |
| 141 | + |
| 142 | +### 2. 服务端进程 |
| 143 | +以下测试会自动启动服务端进程并在测试结束后清理: |
| 144 | +- 所有 TCP loopback 测试 |
| 145 | +- UDP loopback 测试 |
| 146 | +- Unix socket 连接测试 |
| 147 | + |
| 148 | +### 3. Virtio 网络测试 |
| 149 | +`tcp_virtio_*` 和 `udp_virtio_*` 测试需要在 10.0.2.15 有对应的服务端运行。 |
| 150 | + |
| 151 | +### 4. HTTP 测试 |
| 152 | +`tcp_loopback_http_bw.sh` 需要当前目录存在 `file_list` 文件。 |
| 153 | + |
| 154 | +## 在宿主机 vs DragonOS 中运行 |
| 155 | + |
| 156 | +这些脚本设计为同时支持在宿主机和 DragonOS 中运行: |
| 157 | + |
| 158 | +**宿主机 (Ubuntu)**: |
| 159 | +```bash |
| 160 | +cd user/apps/tests/benchmark/lmbench/scripts |
| 161 | +source env.sh |
| 162 | +./mem_copy_bw.sh |
| 163 | +``` |
| 164 | + |
| 165 | +**DragonOS**: |
| 166 | +```bash |
| 167 | +cd /test/benchmark/lmbench/scripts # 通过 /test 符号链接访问 |
| 168 | +source env.sh |
| 169 | +./mem_copy_bw.sh |
| 170 | +``` |
| 171 | + |
| 172 | +两个环境使用相同的路径前缀 `/lib/lmbench/bin/x86_64-linux-gnu/`。 |
| 173 | + |
| 174 | +## 下一步计划 |
| 175 | + |
| 176 | +1. 创建配置文件来控制每个测试是否执行 |
| 177 | +2. 编写 Makefile 统一运行接口 |
| 178 | +3. 添加日志重定向和结果收集 |
| 179 | +4. 实现测试结果对比工具 |
0 commit comments