Usage: fs_mark
-h <print usage and exit>
-k <keep files after each iteration>
-F <run until FS full>
-S Sync Method (0:No Sync, 1:fsyncBeforeClose, 2:sync/1_fsync, 3:PostReverseFsync, 4:syncPostReverseFsync, 5:PostFsync, 6:syncPostFsync)
[-D number (of subdirectories)]
[-N number (of files in each subdirectory in Round Robin mode)]
[-d dir1 ... -d dirN]
[-l log_file_name]
[-l log_file_name]
[-L number (of iterations)]
[-n number (of files per iteration)]
[-p number (of total bytes file names)]
[-r number (of random bytes in file names)]
[-s byte_count (size in bytes of each file)]
[-t number (of total threads)]
[-w number (of bytes per write() syscall)]
设计策略
- 关键参数优先:优先考虑对性能、稳定性等关键特性影响较大的参数。比如,线程数(
-t
)、每个目录文件数量(-N
)、同步方法(-S
)等。 - 边界测试与常见值结合:每个参数选择常见值与极限值的组合,以保证覆盖边界情况。
- 参数互斥和相关性:某些参数组合可能会相互排斥或者互相影响,因此要特别注意组合时的相关性。
- 分层抽样:按照不同的功能层次(如容量、性能、稳定性)选择代表性组合,避免在每个测试用例中都测试所有参数。
- 常见业务场景组合:根据实际应用中的典型场景设计测试,如文件系统的负载、性能瓶颈、并发访问、日志记录等。
- 性能瓶颈模拟:模拟一些可能导致系统性能下降的场景,如高负载、高并发等,测试系统的极限。
典型场景和组合设计
将根据几个典型的业务场景(如基础功能测试、并发压力测试、大文件处理、系统稳定性、日志记录等)来设计合理的测试组合。
1. 基础功能测试(最小配置)
这是基础功能验证的关键场景,确保系统能够在最低的配置下运行。
fs_mark -S X -D 2 -N 10 -n 10 -d /tmp/dir1 -L 1 -s 1024 -t 1 -w 512
解释:
-
只使用最基本的设置,检查系统能否正确创建文件。
-
最少的子目录和文件数量,1线程,最小文件大小(1k),最小的write调用大小(512字节)。
-
验证每一种同步方法,确保每种方法均生效(X为0~6)
2. 容量测试(大规模文件生成)
当系统需要处理大量数据时,这类场景非常常见。此场景关注大规模文件生成和目录创建对性能的影响。
fs_mark -S X -D 1000 -N 5000 -n 5000 -d /tmp/dir2 -L 20 -s 102400 -t 20 -w 1024
fs_mark -S X -D 2000 -N 10000 -n 10000 -d /tmp/dir2 -L 20 -s 1048576 -t 40 -w 4096
fs_mark -S X -D 10000 -N 20000 -n 10000 -d /tmp/dir2 -L 20 -s 4096 -t 40 -w 512
解释:
- 选择较大数量的子目录(
D
)和文件(N
),并增加迭代次数(L
)。 - 文件大小适中(100k和1M),多线程同时进行文件生成,模拟大规模文件系统负载。
- 验证每一种同步方法,确保每种方法均生效(X为0~6)
3. 并发性能测试(多线程并发写入)
模拟多个线程并发执行文件创建和写入的情况,测试系统的并发性能和吞吐量。
fs_mark -S X -D 100 -N 100 -n 500 -d /tmp/dir1 -L 5 -s 8192 -t 64 -w 1024
fs_mark -S X -D 200 -N 1000 -n 5000 -d /tmp/dir1 -L 5 -s 1048576 -t 64 -w 4096
解释:
- 多线程(最大支持64个线程)并发创建文件,文件大小适中。
- 提升子目录和每个目录中的文件数量,测试并发处理大文件的能力。
- 验证每一种同步方法,确保每种方法均生效(X为0~6)
4. 系统稳定性和极限测试(长时间大负载)
模拟长时间高负载运行,确保系统能够在极限情况下保持稳定。
fs_mark -S X -D 50 -N 5000 -n 5000 -d /tmp/dir3 -L 100 -s 1048576 -t 32 -w 4096 -F
fs_mark -S X -D 100 -N 10000 -n 10000 -d /tmp/dir3 -L 100 -s 104857600 -t 64 -w 8192
解释:
- 使用高负载的设置,涉及大量的文件和目录、多个线程(32或64个)。
- 通过增加
-F
选项,测试文件系统的极限,确保系统能够持续高负载运行。 - 验证每一种同步方法,确保每种方法均生效(X为0~6)
5. 文件系统满负荷测试
测试当文件系统被填满时,系统的行为和稳定性。这对于验证文件系统的边界条件和恢复能力非常重要。
fs_mark -S X -D 50 -N 500 -n 500 -d /tmp/dir4 -L 10 -s 102400 -t 20 -w 2048 -F
解释:
- 通过设置
-F
,模拟文件系统被填满的情况。 - 多线程并发写入多个子目录,检查系统在文件系统达到上限时的表现。
- 验证每一种同步方法,确保每种方法均生效(X为0~6)
6. 日志记录和监控(包括日志文件)
确保在大规模文件操作过程中,系统能够正确地记录日志,并且日志文件不会导致性能瓶颈。
fs_mark -S X -D 100 -N 100 -n 1000 -d /tmp/dir1 -l /tmp/fsmark.log -L 10 -s 10240 -t 5 -w 1024
fs_mark -S X -D 500 -N 1000 -n 10000 -d /tmp/dir2 -l /tmp/fsmark.log -L 20 -s 102400 -t 10 -w 2048
解释:
- 启用日志文件记录,确保在大量文件操作时能够正确记录日志。
- 测试多线程写入和不同文件大小对日志记录性能的影响。
- 验证每一种同步方法,确保每种方法均生效(X为0~6)