Cosbench 性能基准测试
COSBench 概览
COSBench 是一款由 Intel 开源,用于对象存储的压测工具。
Alluxio 支持与 Amazon[S3 API (http://docs.aws.amazon.com/AmazonS3/latest/API/Welcome.html)] 基本操作兼容的 RESTful API,可使用该工具进行读写性能压测。
本文档介绍如何通过COSBench来对Alluxio进行端到端测试。
测试结果摘要
文件大小 | 文件数量 | 每个driver的并发数 | 吞吐量 |
---|---|---|---|
1GB | 10000 | 1 |
driver1: 604.03 MB/S driver2: 592.85 MB/S driver3: 597.94 MB/S driver4: 612.99 MB/S total: 2407.81 MB/S |
1GB | 10000 | 16 |
driver1: 5.45 GB/S driver2: 5.1 GB/S driver3: 4.69 GB/S driver4: 5.2 GB/S total: 20.44 GB/s |
1GB | 10000 | 128 |
driver1: 9.24 GB/S driver2: 8.59 GB/S driver3: 10.06 GB/S driver4: 9.05 GB/S total: 36.94 GB/s |
100KB | 10000 | 1 |
driver1: 14.61 MB/S - 146.08 op/s driver2: 11.96 MB/S - 119.55 op/s driver3: 11.75 MB/S - 117.46 op/s driver4: 11.94 MB/S - 119.42 op/s total: 50.26 MB/S - 502.51 op/s |
100KB | 10000 | 16 |
driver1: 311.69 MB/S - 3116.87 op/s driver2: 244.72 MB/S - 2447.15 op/s driver3: 286.34 MB/S - 2863.35 op/s driver4: 287.53 MB/S - 2875.26 op/s total: 1130.28 MB/S - 11302.63 op/s |
100KB | 10000 | 128 |
driver1: 1.19 GB/S - 11877.99 op/s driver2: 1.17 GB/S - 11660.19 op/s driver3: 1.16 GB/S - 11569.5 op/s driver4: 1.17 GB/S - 11650.17 op/s total: 4.69 GB/S - 46757.85 op/s |
测试结果基于如下配置的 Alluxio 集群,所有服务器实例均在 AWS 上可用:
-
COSBench 集群: 1个 COSBench Controller 节点和 4个 COSBench Driver 节点
-
COSBench 实例: c5n.metal: 72内核 + 192GB 内存 + 100Gb网络
-
Alluxio 集群: 1个 Alluxio Coordinator 节点和4个 Alluxio Worker 节点。
-
Alluxio Worker 实例: i3en.metal: 96内核 + 768GB 内存 + 100Gb网络 + 8 nvme固态硬盘
-
AWS ELB 负载均衡器: Elastic Load Balancing
准备测试环境
工具推荐运行在 CentOS 7.0 及其以上版本,ubuntu 环境可能存在预期外的问题。
配置Alluxio
有关其他 Alluxio 相关配置,请参阅 Fio Tests 部分。
- 可将一个或多个 Alluxio Worker 配置为缓存集群。
- 需要配置一个负载均衡器将请求均匀发往所有的 Alluxio Worker 节点
- 确保数据集已从 UFS 完全加载到 Alluxio 缓存中。
准备 COSBench工具
- 从 COSBench GitHub 网站 下载 COSBench 0.4.2.c4.zip 压缩包,并在服务器上进行解压。
- 安装 COSBench 的依赖库,执行如下命令。
- 对于 centos 系统,执行如下命令安装依赖:
sudo yum install nmap-ncat curl java-1.8.0-openjdk-devel -y
- 对于 centos 系统,执行如下命令安装依赖:
-
编辑
cosbench-start.sh
文件,在 Java 启动行添加如下参数,关闭 s3 的 md5 校验功能:-Dcom.amazonaws.services.s3.disableGetObjectMD5Validation=true
- 启动COSBench controller 和 driver:
- 对于 centos 系统,执行以下命令:
sudo bash start-all.sh
- 对于 centos 系统,执行以下命令:
运行测试
- 编辑 s3-config-sample.xml 文件并添加任务配置信息,任务配置主要包含如下五个阶段:
- init 阶段:根据参数配置的桶名的前缀、后缀和Container数目,创建存储桶。
- prepare 阶段:为桶写入后续读取的数据,根据配置指定线程数,上传对应大小和数目的对象。
- main 阶段:进行测试的主要阶段,可以指定运行的时长,指定线程数执行对应的读写操作。
- cleanup 阶段:这个阶段是进行环境的清理,主要是删除桶中的数据,保证测试后的数据不会保留在集群中
- dispose 阶段:删除存储桶。
在测试过程中,可以根据实际需要,执行所有的阶段或者只执行其中部分阶段。
注意: 使用使用 挂载表操作时, 无法创建新桶,你应该跳过 init 阶段和 dispose 阶段,并手动创建满足桶名前缀和container命名规则的挂载点进行后续测试。
参数说明:
参数 描述 accesskey、secretkey 目前 Alluxio S3 API 不支持access key和secret key。
当向 S3 client 提供access key时,请输入要使用的 Alluxio ACL 用户名。 secret key未使用,因此您可以使用任何虚拟值。cprefix 存储桶名称前缀,例如 examplebucket containers 为存储桶名称数值区间,最后的存储桶名称由 cprefix 和 containers 和 csuffix(如果设置了该参数) 组成, 例如:examplebucket1test,examplebucket2test csuffix 可选,存储桶名称后缀,例如 test oprefix 对象名称前缀,例如 "testobject", "dir/testobject" objects 当前任务的对象数目和命名范围,例如 "r(1,10000)", "r(200,500)" osuffix 对象名称后缀,例如 ".jpg", ".csv" radio 当前任务的读写比例 runtime 压测运行时间 workers 当前任务的线程数 示例配置如下:
<?xml version="1.0" encoding="UTF-8" ?> <workload name="s3-sample" description="sample benchmark for s3"> <storage type="s3" config="accesskey=root;secretkey=dump;endpoint=http://localhost:29998;path_style_access=true" /> <workflow> <workstage name="init"> <work type="init" workers="1" config="cprefix=s3testqwer;containers=r(1,2)" /> </workstage> <workstage name="prepare"> <work type="prepare" workers="1" config="cprefix=s3testqwer;containers=r(1,2);objects=r(1,10);sizes=c(64)KB" /> </workstage> <workstage name="main"> <work name="main" workers="8" runtime="30"> <operation type="read" ratio="80" config="cprefix=s3testqwer;containers=u(1,2);objects=u(1,10)" /> <operation type="write" ratio="20" config="cprefix=s3testqwer;containers=u(1,2);objects=u(11,20);sizes=c(64)KB" /> </work> </workstage> <workstage name="cleanup"> <work type="cleanup" workers="1" config="cprefix=s3testqwer;containers=r(1,2);objects=r(1,20)" /> </workstage> <workstage name="dispose"> <work type="dispose" workers="1" config="cprefix=s3testqwer;containers=r(1,2)" /> </workstage> </workflow> </workload>
- 运行任务:
bash cli.sh submit conf/s3-config-sample.xml
-
检查任务结果
通过网址 http://ip:19088/controller/index.html(ip 替换为使用的压测机器 IP)查看执行状态:
- 下面展示的是10万个100KB文件高并发读取的读性能测试,包括以下2个阶段:
- prepare 阶段:100个 worker 线程,上传 10000 个 100KB 对象。
- main 阶段:4个 Driver,每个Driver 128个 worker 线程并发读对象,运行300秒。
<?xml version="1.0" encoding="UTF-8" ?> <workload name="s3-sample" description="sample benchmark for s3"> <storage type="s3" config="accesskey=root;secretkey=dump;endpoint=http://<ip>:29998;path_style_access=true" /> <workflow> <workstage name="prepare"> <work type="prepare" workers="100" config="cprefix=ufs;containers=r(2,2);oprefix=myobjects;osuffix=.jpg;objects=r(1,10000);sizes=c(100)KB" /> </workstage> <workstage name="128"> <work name="read" workers="128" driver="driver1" runtime="300"> <operation type="read" ratio="100" config="cprefix=ufs;containers=r(2,2);oprefix=myobjects;osuffix=.jpg;objects=u(1,10000)" /> </work> <work name="read" workers="128" driver="driver2" runtime="300"> <operation type="read" ratio="100" config="cprefix=ufs;containers=r(2,2);oprefix=myobjects;osuffix=.jpg;objects=u(1,10000)" /> </work> <work name="read" workers="128" driver="driver3" runtime="300"> <operation type="read" ratio="100" config="cprefix=ufs;containers=r(2,2);oprefix=myobjects;osuffix=.jpg;objects=u(1,10000)" /> </work> <work name="read" workers="128" driver="driver4" runtime="300"> <operation type="read" ratio="100" config="cprefix=ufs;containers=r(2,2);oprefix=myobjects;osuffix=.jpg;objects=u(1,10000)" /> </work> </workstage> </workflow> </workload>
经过以上阶段1和阶段2的性能压测,结果如下:
- 执行以下命令,停止测试服务
sudo bash stop-all.sh