Fio 测试

Slack Docker Pulls

Fio 测试概览

Fio(Flexible I/O Tester)是一款功能强大的开源工具,用于对存储系统的性能进行基准测试。 它支持各种 I/O 操作,包括顺序和随机读/写,同时支持高度自定义的工作负载。 Fio 可跨平台,在 Linux、Windows 和 macOS 系统上运行,并提供诸如IOPS、带宽和延迟等详细的性能指标。

本页文档展示Alluxio 的 fio 测试结果。测试案例可应用于其他存储系统。

测试详情

测试环境

所有实例均位于 AWS 的同一可用区域。

Alluxio Worker

  • 1个i3en.metal实例
  • 由8个nvme固态硬盘组成的 Raid 0(通过 mdadm 命令创建)
  • 100Gbps 网络带宽
  • Ubuntu 24.04
  • 一个 Alluxio worker进程
  • 一个 ETCD 节点

Alluxio Client

  • 1 个c5n.metal 实例
  • 100Gbps 网络带宽
  • Ubuntu 24.04
  • Fuse 3.16.2
  • 一个 Alluxio FUSE 进程

单个worker 和Client测试

此场景测试的是单个 100GB 大文件的读取性能。 测试中仅涉及 1 个client和 1 个worker。

测试准备

将一个100GB文件放入UFS。 在此基准测试中,我们使用与 Worker 和client位于同一区域的 S3 桶。

顺序读

在 Alluxio client 上运行以下命令:

fio -iodepth=1 -rw=read -ioengine=libaio -bs=<block_size> -numjobs=<numjobs> -group_reporting -size=100G -filename=/mnt/alluxio/100gb -name=read_test --readonly -direct=1 --runtime=60

numjobs参数指定执行读取并发数。在此基准测试中,numjobs设置为132128bs 参数指定测试中使用的数据块大小。我们使用 256k 测试吞吐量,使用 4k 测试 IOPS。

随机读

与热顺序读相同,但参数 rw 改为 randread

fio -iodepth=1 -rw=randread -ioengine=libaio -bs=<block_size> -numjobs=<numjobs> -group_reporting -size=100G -filename=/mnt/alluxio/100gb -name=read_test --readonly -direct=1 --runtime=60

测试结果摘要

单个Worker 和Client 吞吐量(256k大小的数据块)

带宽/线程 单线程 32线程
顺序读 2081MiB/s 8183MiB/s
随机读 141MiB/s 7504MiB/s

单个Worker 和Client IOPS(4k大小的数据块)

IOPS/线程 单线程 32线程 128线程
顺序读 55.9k 244k 179k
随机读 1.6k 70.1k 162k
  • 缓存数据的性能

附录 - Alluxio 配置

集群配置(”alluxio-site.properties)

alluxio.master.hostname=localhost
alluxio.master.journal.type=NOOP
alluxio.security.authorization.permission.enabled=false
alluxio.worker.membership.manager.type=ETCD
alluxio.mount.table.source=ETCD
alluxio.etcd.endpoints=<endpoints>
alluxio.client.list.status.from.ufs.enabled=false
alluxio.worker.page.store.sizes=2TB
alluxio.worker.page.store.page.size=4M
alluxio.worker.page.store.dirs=/data1/worker
alluxio.user.metadata.cache.max.size=2000000
alluxio.dora.client.ufs.fallback.enabled=false
alluxio.user.position.reader.streaming.async.prefetch.thread=256

JVM 选项(alluxio-env.sh)

ALLUXIO_WORKER_JAVA_OPTS="$ALLUXIO_WORKER_JAVA_OPTS -Xmx24G -Xmx24G -XX:+UseG1GC"
ALLUXIO_FUSE_JAVA_OPTS="$ALLUXIO_FUSE_JAVA_OPTS -Xms48G -Xmx48G -XX:MaxDirectMemorySize=24g  -XX:+UseG1GC"

Fuse 挂载选项

-max_background=256 -max_idle_threads=256 -entry_timeout=60 -attr_timeout=60