注意
本文档适用于 Ceph 开发版本。
Ceph信使DPDKStack
编译 DPDKStack
Ceph dpdkstack 默认不编译。因此,您需要重新编译并启用 DPDKstack 组件。dpdk-devel
或dpdk-dev
在预编译 DPDK 软包的发行版上,并编译
do_cmake.sh -DWITH_DPDK=ON
设置 DPDK 网络适配器
大多数主流网卡支持 SR-IOV,并且可以被虚拟化为多个 VF 网卡。每个 OSD 通过 DPDK 使用一些专用网卡。mon、mgr 和客户端通过 POSIX 协议栈使用 PF 网卡。
加载 DPDK 依赖的驱动程序:
modprobe vfio
modprobe vfio_pci
通过编辑配置 Hugepage:/etc/sysctl.conf
vm.nr_hugepages = xxx
根据 OSD 的数量配置 VFs 数量:
echo $numvfs > /sys/class/net/$port/device/sriov_numvfs
将网卡绑定到 DPDK 应用程序:
dpdk-devbind.py -b vfio-pci 0000:xx:yy.z
配置 OSD DPDKStack
默认情况下,DPDK RTE 初始化过程需要 root 权限来访问系统中的各种资源。为了授予用户 root 访问权限:ceph
用户:
usermod -G root ceph
OSD 使用ms_dpdk_devs_allowlist
:
配置单个网卡。
ms_dpdk_devs_allowlist=-a 0000:7d:010
或
ms_dpdk_devs_allowlist=--allow=0000:7d:010
配置 Bond 网络适配器
ms_dpdk_devs_allowlist=--allow=0000:7d:01.0 --allow=0000:7d:02.6 --vdev=net_bonding0,mode=2,slave=0000:7d:01.0,slave=0000:7d:02.6
DPDK 相关的配置项如下:
[osd]
ms_type=async+dpdk
ms_async_op_threads=1
ms_dpdk_port_id=0
ms_dpdk_gateway_ipv4_addr=172.19.36.1
ms_dpdk_netmask_ipv4_addr=255.255.255.0
ms_dpdk_hugepages=/dev/hugepages
ms_dpdk_hw_flow_control=false
ms_dpdk_lro=false
ms_dpdk_enable_tso=false
ms_dpdk_hw_queue_weight=1
ms_dpdk_memory_channel=2
ms_dpdk_debug_allow_loopback = true
[osd.x]
ms_dpdk_coremask=0xf0
ms_dpdk_host_ipv4_addr=172.19.36.51
public_addr=172.19.36.51
cluster_addr=172.19.36.51
ms_dpdk_devs_allowlist=--allow=0000:7d:01.1
调试和优化
根据日志定位错误并调整日志到适当的级别:
debug_dpdk=xx
debug_ms=xx
如果日志中包含大量重传消息,减少 ms_dpdk_tcp_wmem 的值。
运行 perf dump 命令查看 DPDKStack 统计信息:
ceph daemon osd.$i perf dump | grep dpdk
如果dpdk_device_receive_nombuf_errors
持续增加,检查是否
ceph daemon osd.$i perf dump | grep throttle-osd_client -A 7 | grep "get_or_fail_fail"
ceph daemon osd.$i perf dump | grep throttle-msgr_dispatch_throttler -A 7 | grep "get_or_fail_fail"
如果 throttling 超过阈值,增加 throttling 阈值或禁用 throttling。
检查网络适配器是否故障或异常。运行以下命令获取网络适配器状态和统计信息:
ceph daemon osd.$i show_pmd_stats
ceph daemon osd.$i show_pmd_xstats
一些 DPDK 版本(例如 dpdk-20.11-3.e18.aarch64)或网卡 TSO 异常,尝试禁用 tso:
ms_dpdk_enable_tso=false
如果 VF 网卡支持多个队列,可以为单个核心分配更多网卡队列以提高性能:
ms_dpdk_hw_queues_per_qp=4
状态和未来工作
与 POSIX 协议栈相比,在多并发测试中,DPDKStack 具有相同的 4K 随机写入性能,8K 随机写入性能提高了 28%,1 MB 数据包不稳定。在单延迟测试中,4K 和 8K 随机写入延迟降低了 15%(延迟越低越好)。
从高层次来看,我们的未来工作计划是:
OSD 多网络支持(公共网络和集群网络)
由 Ceph 基金会带给您
Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.