# 测试结果

# 测试环境

配置
CPU 2.3 GHz 双核Intel Core i5
内存 8 GB 2133 MHz LPDDR3
磁盘 本地120G SSD盘,PCIe,apfs文件系统
设置 同步写入,16路并发,开启zstd压缩,秒传级别FULL,其余默认

# 测试代码

# 设置

var cfg = Config{
	DataSync: true,
	RefLevel: FULL,
	WiseCmpr: core.DATA_CMPR_ZSTD,
	DontSync: ".*",
	WorkersN: 16,
}
1
2
3
4
5
6
7

# 上传

func TestUpload(t *testing.T) {
	Convey("upload dir", t, func() {
		c := context.TODO()
		sdk := New(core.NewLocalHandler())
		defer sdk.Close()

		sdk.SetConfig(cfg)
		So(sdk.Upload(c, bktID, core.ROOT_OID, path), ShouldBeNil)
	})
}
1
2
3
4
5
6
7
8
9
10

# 下载

func TestDownload(t *testing.T) {
	Convey("download dir", t, func() {
		c := context.TODO()
		sdk := New(core.NewLocalHandler())
		defer sdk.Close()

		sdk.SetConfig(cfg)
		id, _ := sdk.Path2ID(c, bktID, core.ROOT_OID, filepath.Base(path))
		So(sdk.Download(c, bktID, id, mntPath), ShouldBeNil)
	})
}
1
2
3
4
5
6
7
8
9
10
11

# 小文件

# 准备了1W个相同内容的4K小文件

结果
速率 上传3.94秒 ≈2538.07 pcs/s,下载2.78秒 ≈3597.12 pcs/s
空间 原始文件夹39MB,写入数据23B(*磁盘占用要看文件系统分块情况)、元数据996KB
/usr/local/go/bin/go test github.com/orcastor/orcas/sdk -v
=== RUN   TestUpload
--- PASS: TestUpload (3.94s)
=== RUN   TestDownload
--- PASS: TestDownload (2.78s)
=== RUN   TestCheck
--- PASS: TestCheck (1.29s)
PASS
ok  	github.com/orcastor/orcas/sdk	8.102s
1
2
3
4
5
6
7
8
9

读写改成USB3.0外挂移动硬盘,西数 2T HDD,exFAT文件系统

上传9秒 ≈1111 pcs/s,下载3秒 ≈3333 pcs/s

# 大文件

# 准备了16个144.44MB大小的文件(2.32GB)

结果
速率 上传4.77秒 ≈486.37 MB/s,下载2.95秒 ≈786.44 MB/s
空间 原始文件夹2.32GB,写入后2.32GB
/usr/local/go/bin/go test github.com/orcastor/orcas/sdk -v
=== RUN   TestUpload
--- PASS: TestUpload (4.77s)
=== RUN   TestDownload
--- PASS: TestDownload (2.95s)
=== RUN   TestCheck
--- PASS: TestCheck (3.86s)
PASS
ok  	github.com/orcastor/orcas/sdk	12.045s
1
2
3
4
5
6
7
8
9

读写改成USB3.0外挂移动硬盘,西数 2T HDD,exFAT文件系统

上传21秒 ≈110.48 MB/s,下载13秒 ≈178.46 MB/s

# 待改进

后续和同类开源库做对比benchmark。目前第一版涉及的测试场景只有一次性的写入和读取,实际场景会有热点数据的访问等,需要考虑缓存文件句柄优化频繁读写,配合ecache (opens new window)优化起来也会很方便。

为了减少网络请求,秒传部分可以考虑在服务端和客户端引入双hash布隆过滤器。

单个大文件可以优化为双缓冲或者并发上传下载,单个小文件上传可以考虑优化为先写到服务端WAL文件,并由其进行打包。

上次更新: 2024-09-23 09:20:35