背景
系统环境
CentOS 7.9 Linux 5.4.247-1.el7.elrepo.x86_64 x86_64 Mellanox CX4/CX5 网卡,交换机需要支持设置 ECN NVMe 盘(每个盘至少占用 2 个 CPU)
CentOS 7.9 Linux 5.4.247-1.el7.elrepo.x86_64 x86_64 Mellanox CX4/CX5 网卡,交换机需要支持设置 ECN anox CX4/CX5 网卡,交换机需要支持设置 ECN
TIPS:
Debian 11 环境同样支持,MLNX-OFED 驱动安装参考 Installation 如果没有单独的客户端节点,可以复用存储节点,但对性能测试可能略有影响
配置
intel_iommu=on,然后执行
grub2-mkconfig -o boot/grub2/grub.cfg并重启机器。
调整 memlock 限制
* hard memlock unlimited* soft memlock unlimited
$ yum install centos-release-scl -y$ yum install devtoolset-10 -y$ scl enable devtoolset-10 bash
$ yum install libibverbs-utils perftest createrepo tcl gcc-gfortran fuse-libs tk$ yum --enablerepo=elrepo-kernel install -y kernel-lt-devel.x86_64 # kernel-devel的版本要跟实际的内核版本保持一致,如果已经安装可以省略(该命令跟内核版本有关,实际命令可能有所不同)
./mlnxofedinstall --add-kernel-support$ dract -f$ etc/init.d/openibd restart$ reboot # 重启机器
ib_write_bw -F -d mlx5_bond_0 -q 1 --report_gbits -D 60 --cpu_utilib_write_bw -F -d mlx5_bond_0 -q 1 --report_gbits -D 60 --cpu_util <Server IP Address>ibv_devinfo命令输出中的
hca_id

ucx_info -d | grep "Trans",输出中需要包含 rc_mlx5/ud_mlx5 或者 rc_verbs/uc_verbs
[global]UCX_TLS=ibUCX_USE_MT_MUTEX=yUCX_RNDV_THRESH=32KUCX_TCP_CM_REUSEADDR=yUCX_RDMA_CM_REUSEADDR=yUCX_ASYNC_MAX_EVENTS=10000UCX_RC_VERBS_MAX_NUM_EPS=10000UCX_RC_MLX5_MAX_NUM_EPS=10000UCX_RCACHE_STAT_MAX=10MUCX_NET_DEVICES=mlx5_bond_0:1#UCX_IB_GID_INDEX=3UCX_RC_MLX5_TRAFFIC_CLASS=96UCX_RC_VERBS_TRAFFIC_CLASS=96UCX_RC_VERBS_TX_QUEUE_LEN=512UCX_RC_MLX5_TX_QUEUE_LEN=512UCX_TCP_MAX_IOV=128UCX_LOG_LEVEL=WARN#UCX_MAX_RNDV_RAILS=2#UCX_MAX_EAGER_RAILS=2
ibv_devinfo的输出替换,分别为
hca_id和
portucx_perftest -c 0ucx_perftest <Server IP Address> -t ucp_am_bw -c 0 -s 65536

部署Curve
CurveAdm 版本
CURVEADM_VERSION=vrdma-rc2 curveadm -uTIPS: 由于镜像较大,需提前在存储节点和客户端节点上把镜像拉下来 docker pull opencurvedocker/curvebs_rdma_spdk:1.2-netease
curveadm format --spdk -f format.yaml,注意其中的
—-spdk参数。
TIPS:
SPDK 格式化的过程会绑定 NVMe 到 VFIO 驱动,导致 lsblk 无法看到 NVMe 盘 SPDK 格式化暂时不支持查看进度,需要到存储节点上查看格式化进程是否退出 ps aux | grep format(或格式化的容器是否退出)
集群拓扑文件
chunkserver_services:config:listen.ucp_port: 92${format_replicas_sequence} # 9200,9201,9202use_ucp: trueuse_spdk: true
部署集群
curveadm deploy -k,如果不需要快照克隆服务可以加上
--skip snapshotclone查看集群状态
curveadm enter ${Id},然后执行
curve_ops_tool copysets-statusCopysets are healthy!total copysets: 400, unhealthy copysets: 0, unhealthy_ratio: 0%
TIPS: 如果没有部署快照克隆服务,命令有可能会报错,需要修改容器内的 etc/curve/tools.conf 配置文件 修改如下两个配置项: snapshotCloneAddr=127.0.0.1:5555 snapshotCloneDummyPort=5556
挂载 NBD 盘
fio -name=/dev/nbd0 -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=4k -size=10G -numjobs=1 -time_based -runtime=120
其他
至少需要 100G 的卷才能测试出比较真实的性能 大 IO 顺序读写测试需要创建条带卷,curveadm map 不支持创建条带卷,需要到其中一个 MDS 容器中执行命令创建 参考命令 curve_ops_tool create -fileName=/test -userName=curve -fileLength=200 -stripeUnit=32768 -stripeCount=32curveadm map 命令去掉自动创建卷的参数 在大 IO 读的测试中,可能会出现性能很低或抖动明显的情况,这种情况需要在物理机和交换机上进行 RDMA 拥塞控制调整(具体步骤略微繁琐,这里不展开)
使用 fio cbd 引擎测试
进入容器
curve@hostname:~$ curveadm client statusGet Client Status: [OK]Id Kind Host Container Id Status Aux Info-- ---- ---- ------------ ------ --------5f1c10fd4d71 curvebs curve1 dcbb6b69028e Up 9 days {"user":"test","volume":"/curve"}curve@hostname:~$ curveadm client enter 5f1c10fd4d71 # 替换为上面输出的实际Id
在容器内编译并执行 fio 测试
$ git clone https://github.com/opencurve/fio.git -b curve$ cd fio$ ./configure # 输出中,cbd engine 需要是 yes$ make -j`nproc`# 保存如下文件到 cbd.fio[global]ioengine=cbddirect=1bs=4kiodepth=128rw=randwritenumjobs=1size=100Gruntime=120time_based[filename1]cbd=/test_curve_ # test 为卷名,curve 为用户名$ mkdir -p curvebs/client/logs$ ./fio cbd.fio # 执行测试
重新部署或格式化步骤
curveadm clean命令不能回收 chunk 到 chunkfilepool 中,重新部署需要重新格式化
$ curveadm format -f format.test.yaml --spdk --reset
$ curveadm format -f format.yaml --spdk --only-binding$ curveadm start --role=chunkserver
参考
赢大奖有实习 Summer Code Camp | Curve &openEuler 联合举办
Curve 混闪之性能优化记录
Curve 社区上半年 Roadmap 进展及下半年规划
使用 Curve 云上部署 Hadoop,轻松节约 50% 存储成本


关于 Curve
Curve 亦可作为云存储中间件使用 S3 兼容的对象存储作为数据存储引擎,为公有云用户提供高性价比的共享文件存储。
GitHub:https://github.com/opencurve/curve 官网:https://opencurve.io/ 用户论坛:https://ask.opencurve.io/ 微信群:搜索群助手微信号 OpenCurve_bot
文章转载自OpenCurve,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




