Skip to content

Commit 339260b

Browse files
authored
Merge pull request #2 from oneclickvirt/copilot/fix-7ffd9cd7-8960-42d6-aaf2-a1832844b932
优先使用STREAM方法进行无root权限内存测试 (Prioritize STREAM method for no-root memory testing)
2 parents 351940f + a523efd commit 339260b

4 files changed

Lines changed: 24 additions & 9 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# Build artifacts
22
memorytest
3+
main
34
/cmd/cmd
45
*.exe
56

README.md

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,24 @@
88

99
# 功能(Features)
1010

11-
- [x] 支持使用```stream```进行高性能内存带宽测试 (最高优先级)
12-
- [x] 支持使用```dd```测试内存的读写IO (可选方式)
13-
- [x] 支持使用```sysbench```测试内存的顺序读写IO (兜底实现)
11+
- [x] 支持使用```stream```进行高性能内存带宽测试 (最高优先级,无需root权限)
12+
- [x] 支持使用```dd```测试内存的读写IO (需要root权限)
13+
- [x] 支持使用```sysbench```测试内存的顺序读写IO (需要root权限)
1414
- [x] 支持使用```winsat```测试内存的读写性能
1515
- [x] 支持Go自身静态依赖注入[dd](https://github.com/oneclickvirt/dd),使用时无额外环境依赖需求
1616
- [x]```-l```指定输出的语言类型,可指定```zh``````en```,默认不指定时使用中文输出
17-
- [x]```-m```指定测试的方法,可指定```stream``````dd``````sysbench``````winsat```,默认不指定时按优先级自动选择测试方法
18-
- [x] 全平台编译支持,支持无权限测试时使用C重构或自编译的mbw程序模拟大内存COPY块测试内存性能
17+
- [x]```-m```指定测试的方法,可指定```stream``````dd``````sysbench``````winsat``````auto```,默认不指定时按优先级自动选择测试方法
18+
- [x] 全平台编译支持,支持无权限测试时优先尝试STREAM,若不可用再使用C重构或自编译的mbw程序模拟大内存COPY块测试内存性能
1919

2020
## 测试方法优先级
2121
当不指定`-m`参数时,程序按以下优先级自动选择测试方法:
22-
1. **STREAM** - 如果检测到stream二进制文件,优先使用
23-
2. **DD** - 如果STREAM不可用,使用DD测试
24-
3. **Sysbench** - 作为最终的兜底实现
22+
1. **STREAM** - 如果检测到stream二进制文件,优先使用(无需root权限)
23+
2. **DD** - 如果STREAM不可用,使用DD测试(需要root权限)
24+
3. **Sysbench** - 作为最终的兜底实现(需要root权限)
25+
26+
**无root权限时的特殊处理:**
27+
- 当检测到系统无root权限时,DD和Sysbench测试会自动优先尝试STREAM方式
28+
- 如果STREAM不可用,则回退使用mbw程序进行内存测试
2529

2630
注意:默认不自动安装```sysbench```组件,如需使用请自行安装后再使用本项目,如```apt update && apt install sysbench -y```
2731

cmd/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ func main() {
2323
memorytestFlag.BoolVar(&help, "h", false, "Show help information")
2424
memorytestFlag.BoolVar(&showVersion, "v", false, "show version")
2525
memorytestFlag.StringVar(&language, "l", "", "Language parameter (en or zh)")
26-
memorytestFlag.StringVar(&testMethod, "m", "", "Specific Test Method (stream or dd or sysbench or winsat)")
26+
memorytestFlag.StringVar(&testMethod, "m", "", "Specific Test Method (stream, dd, sysbench, winsat, or auto)")
2727
memorytestFlag.BoolVar(&memory.EnableLoger, "log", false, "Enable logging")
2828
memorytestFlag.Parse(os.Args[1:])
2929
if help {

memory/macos_linux_mem.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,11 @@ func SysBenchTest(language string) string {
5757
} else {
5858
fmt.Println("当前检测到系统无root权限")
5959
}
60+
// Try STREAM first when no root permission, fallback to mbw if not available
61+
streamResult := StreamTest(language)
62+
if streamResult != "" && strings.TrimSpace(streamResult) != "" {
63+
return streamResult
64+
}
6065
return simpleMemoryTest(language)
6166
}
6267
var result string
@@ -366,6 +371,11 @@ func DDTest(language string) string {
366371
} else {
367372
fmt.Println("当前检测到系统无root权限")
368373
}
374+
// Try STREAM first when no root permission, fallback to mbw if not available
375+
streamResult := StreamTest(language)
376+
if streamResult != "" && strings.TrimSpace(streamResult) != "" {
377+
return streamResult
378+
}
369379
return simpleMemoryTest(language)
370380
}
371381
// 获取内存文件系统目录

0 commit comments

Comments
 (0)