[译]Ceph性能优化之CPU核数对性能的影响 - Part 1

news2024/11/29 20:48:33

原文链接

知乎专栏: [译]Ceph性能优化之CPU核数对性能的影响 - Part 1 - 知乎

简介

Ceph在很多方面都做得很好,但从来没有人意识到它有极低的资源消耗。Ceph需要做一些工作来确保数据的一致性,以及如何将数据(PG)放到合适的位置。我们正在努力优化Ceph的IO路径,但事实是,Ceph在一直以来需要相当多的CPU来实现高速存储设备(如NVMe驱动器)的高性能。今年夏天早些时候,一位用户找到我们的团队,对低CPU核心数下的性能表示担忧。他们得到了一个建议,当使用NVMe驱动器时,每个OSD应该分配2个核。该建议没有解释原因。他们决定购买硬件,尽管只有一半的NVMe驱动器槽被填充(即每个OSD有4个内核可用)。在这种配置中,性能是可以接受的,但是用户担心当他们用NVMe驱动器完全填充满服务器时可能会发生什么。遗憾的是,我不得不告诉他们,通过增加更多的驱动器,他们可能只会看到容量的增加,而不会看到性能的提高。最初的建议并非完全没有价值。如果用户不关心小的随机IO的性能,每个OSD 2核可能是一个很好的价值主张。在NVMe驱动器上运行Ceph有很多好处,除了提高小的随机IO性能。然而,对于这个用户来说,小的随机IO是一个问题,这正是CPU资源最重要的情况。

遗憾的是,这不是第一次出现这个问题,关于这个话题有很多困惑。2年前,我们更新了上游Ceph文档,PR文档 中提供更好的指导。当时,我们的粗略指导是(在复制之前!)

  • core per 200-500 MB/s
  • core per 1000-3000 IOPS

这里最重要的方面是IOPS性能。本文将关注Ceph小随机IOPS性能如何随着CPU资源的增加而扩展。

集群设置

所有节点都位于同一台Juniper QFX5200交换机上,并通过一条100GbE QSFP28链路连接。构建集群并使用CBT执行fio测试。除非另有说明,每个节点都配置为最多承载6个osd,并使用librbd引擎配置4个fio进程。Intel系统上一个重要的操作系统级优化是将调优配置文件设置为“延迟-性能”或“网络-延迟”。这主要有助于避免与CPU C/P状态转换相关的延迟峰值。基于AMD Rome的系统在这方面似乎没有那么敏感,但是调优配置文件仍然设置为“网络延迟”,用于这些测试。

测试布局

CBT被配置为部署Ceph时使用了一些修改过的设置。首先,禁用rbd缓存,每个OSD分配8GB的内存目标,使用msgr V1,禁用cepx。在最近的测试中,我们看到带有默认cephx身份验证的Msgr V2的性能似乎类似,尽管在服务器和客户端上启用过线加密时,在CPU使用率类似或更高的情况下,可能会导致高达30-40%的性能损失。Fio被配置为首先用大的写预填充RBD卷,然后是3次4K随机读,然后是iodepth=128的4K随机写,每次5分钟。CBT允许用其他程序或环境变量包装osd,使用numactl控制osd可以在系统上使用多少个内核。初始测试是在单个OSD和1X复制的情况下执行的。在多个osd和3次替换的情况下进行多osd测试。

单个OSD测试

在多osd集群上,ceph以伪随机的方式确定地放置数据。在给定的时间点很可能有热点。一些osd会比其他的做更多的工作,从而导致总体性能下降。最终,整个集群的性能受制于集群中最慢的OSD的性能。针对单个OSD进行测试可以消除这种行为,并进一步消除额外的复制延迟和开销,确保OSD以最高效率工作。测试单个OSD并不代表真正的集群能做什么,但它确实显示了给定的OSD在最佳条件下的表现。


这里要注意的第一件事是,2到4核之间的性能提高了大约100%。这几乎是一个线性的改进。但在4核之后,增益开始放缓。从4核到16核只能产生另一个100%的增益,在10核时几乎完全持平。写性能的比例更高,在14-16个分配的核上最高可达350%左右。但Ceph OSD真的在这些测试中使用了所有这些核吗?

事实证明,为osd分配更多的内核可以持续地提高性能,最多可达到14-16个内核,但在高内核数的情况下,osd不会持续地使用它们所给定的所有核。对于读尤其如此。更多的核意味着更高的性能,但效率下降越高。然而,所使用的每核IOPS却保持相对平稳。为什么会这样,限制是什么?默认情况下,Ceph OSD每个OSD有80多个线程,但从资源消耗的角度来看,最重要的是:

  • 16 OSD worker threads (8 shards with 2 threads each)
  • 3 async messenger threads
  • 1 bluestore key/value thread
  • 1 bluestore "finisher" thread
  • RocksDB flush (high priority) and compaction (low priority) background threads

在这里不深入讨论细节(我们将在后面的博客文章中讨论),一个OSD实际最多可能使用23个核左右。在5分钟的时间内,存量线程计数在实验室中达到的最高使用率是大约18-19核,用于4K随机写入,没有对OSD施加限制,并且禁用了RocksDB的预写日志。为什么我们在这些测试中看不到呢?可能的答案是ceph不能让所有16个工作线程一直忙着。在IE中,工作线程在做更多的工作之前会等待很短的时间。虽然一个OSD平均可能使用6或8个核心,但当它可以在短时间内爆发16个以上核心时,它可能表现最好,而其他时候它可能只需要3-4个核心。在这种情况下,如果施加核的限制,在裸金属上运行Ceph可能比在容器或vm中运行Ceph更有优势。

60 OSD集群测试

在单个OSD测试中观察到的趋势是否也会在整个集群部署时发生?

在查看60个OSD集群测试结果时,一些现象便马上突出出来了。虽然曲线与单个OSD的测试相似,但对于读操作,每个OSD的性能达到巅峰时使用的核数约为8-10,对于写操作,每个OSD的性能达到巅峰时使用的核数约为12个。在单个OSD测试中,读和写收益分别达到了大约200%和350%。在完整的集群配置中,收益最高分别为100%和250%。

通过只是简单看看osd.0,看起来更大的集群中的osd在随机读测试中使用的核更少。同时,分配的每核IOPS和使用的每核IOPS数值也都要低得多。在写端,现在使用的是3副本。为了能够与单个OSD测试进行比较,我们必须看考虑了复制因素的OSD的iops。即使这样做,每核写性能也比单个OSD测试低很多。好消息是,文档中的估计似乎相当有效。在读端,Ceph提供的IOPS大约是7500 /核,根据分配给osd的核数,每个核分配的IOPS在2400到8500之间。在写方面,Ceph每使用一个核提供大约3500个IOPS,每分配一个核提供1600到3900个IOPS。这些数字比我们两年前宣称的要好一些,我们在最近的Quincy发布中做了进一步的改进。

单osd vs 多osd NVMe性能

另一个经常出现的问题是Ceph如何很好地利用NVMe磁盘。通常这是把对本地硬盘的读取数据作为基准测试,用户想知道为什么Ceph在有更多驱动器支持的情况下还是比较慢。简单地说,Ceph确实比直接写入磁盘要慢,原因有很多。最重要的一些:

  1. 为计算crush放置、crc校验、加密、ec、网络开销等引入的时延
  2. 处理数据(编码/解码/等等),以及在线程或者RocksDB之间分配/复制/移动内存中的数据
  3. Ceph不仅会写数据,还会写对应的元数据。这在小写时影响尤其明显。
  4. 允许线程在没有工作时休眠,并在工作到来时唤醒它们。这样做是为了减少静默期的CPU开销,但是当线程在睡眠状态以及唤醒状态之间切换很快时,这可能会对性能产生重大影响。稍后的一篇博文将对此进行更详细的讨论。

如果没有大量的工作,其中一些是很难改善的。Ceph总是在一定程度上受到通过网络进行通信和处理网络堆栈的限制(尽管像dpdk这样的东西可以有所帮助)。为了计算PG的位置,Crush总是会引入一些延迟,而且总是会有crc32、编码/解码等引起的某种级别的额外延迟。话虽如此,单个OSD测试和多OSD测试之间仍存在很大的性能差异。

这些图表有点粗糙。尽管60个OSD的集群提供了大约200万的随机读IOPS,但是一个单独的OSD能够在更好的效率下提供近4倍于每个nvme /osd的性能。在写方面,事情稍微接近,但单个OSD的速度仍然是每个nvme/osd的大约2倍。然而,并不是一切都失去了。在Ceph的 Quincy版本中,我们努力改进写路径的性能。通过Ceph Quincy版本的改进和RocksDB的配置调优,我们可以在60个OSD的集群上实现了超过40%的4K随机写IOPS提升。

要了解我们是如何得到这些结果的,请参阅 RocksDB Tuning Deep Dive

结论

最终,在集群级别和OSD内部仍然有很大的空间来实现更高的性能。在未来的博客文章中,我将深入研究在低和高核心计数时限制性能的一些问题,以及如何进一步改进Ceph的想法。在此之前,在选择分配给由NVMe驱动器支持的osd的核数时,需要进行权衡。每个OSD有2-4个核,Ceph可以在小的读写过程中使用所有的核。增加额外的核(甚至每个osd最多16个以上)可以提高性能,但是随着核数的增加,每核的收益会变少,每个核的使用效率保持相对稳定,但是当分配更高的核数时,osd在充分利用所有可用核方面变得不那么一致。这不仅会影响前期的采购决策,还会影响有关电源和冷却等基础设施的决策,甚至影响有关容器/VM资源利用限制的决策。

最后,这篇文章关注的是Ceph Pacific版本,但从那时起Ceph的效率和性能都有所提高。跟Quincy版本相比,这些曲线看起来可能会有点不同,而几乎可以肯定的是,在Reef版本的情况也会有所不同。这些测试也在新集群上运行,在已经大量老化集群上可能看起来也会不一样。然而,我希望这篇文章至少提供了一个起点,说明在使用nvme时,CPU资源如何影响Ceph的性能。感谢阅读!

参考文章

原文链接

ceph官方硬件配置推荐

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/85071.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

制作一个简单HTML传统端午节日网页(HTML+CSS)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

tensorflow学习笔记一

1、tensorflow中的数据类型 import tensorflow as tf import numpy as np# 张量可以是数字、列表、ndarray# 使用列表创建张量 print(tf.constant([2,3])) print(tf.constant([[2,3],[1,4]]))# tensorflow2 默认使用Eager动态图机制 print(type(tf.constant([[2,3],[1,4]])))# …

springcloud(gateway限流)

目录 1. 限流的使用场景2. gateway限流实现 2.1 前提:2.2 导入依赖包2.3 在项目配置文件中配置redis2.4 开发限流需要的Bean2.5 为服务配置限流参数2.6 压力测试3. 熔断 3.1 熔断的使用场景3.2 熔断配置 1. 限流的使用场景 为什么限流 限流就是限制流量&#xff0c…

SQL学习

一、SQL怎么运行的:1、执行顺序2、MySQL 基本架构概览3、Server 层基本组件介绍4、语句分析二、索引(index)1、索引的使用成本2、语法3、删除索引三、分析函数1、聚合分析函数2、排名分析函数3、数学分析函数4、行比较分析函数四、PLSQL五、c…

SpringCloud - 整合Nacos启动报错Consider defining a bean of type IClientConfig

SpringCloud - 整合Nacos启动报错Consider defining a bean of type IClientConfig前言一. 尝试解决Bug的几种不合适方案1.1 添加ribbon依赖1.2 按照提示增加IClientConfig配置1.3 正确答案前言 我写了一套网关服务,一模一样的代码在自己电脑和公司电脑都写了一份。…

(附源码)Springboot网络空间安全实验教学示范中心网站 毕业设计 111454

Springboot网络空间安全实验教学示范中心网站 摘 要 本课题研究的网络空间安全实验教学示范中心网站,主要功能模块包括:实验课程管理、实验报告结果管理、实验课程信息、实验课程报告、联系老师、回复学生等,采取面对对象的开发模式进行软件的…

[附源码]Python计算机毕业设计儿童闲置物品交易网站Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

SpringBoot:模块探究之spring-boot-actuator

spring-boot-actuator 模块 是 spring-boot 用来查询或监控项目中各种组件、维度的度量指标(如:环境变量信息、日志级别、SpringBean 信息、组件(Redis、Mq、DB)健康状态)时使所用的模块。 此外 spring-boot-actuator …

C++ Http Server 开源库(汇总级整理)

C http server 开源框架 star 统计截止至 2022.12.10 名称说明链接starcpp-httplib(推荐)A C header-only HTTP/HTTPS server and client libraryhttps://github.com/yhirose/cpp-httplib8.2ksougo/workflowC Parallel Computing and Asynchronous Netwo…

【数据结构Note3】- 栈 应用栈求解迷宫路径

文章目录栈求解迷宫路径1. 求解迷宫思想和难点2. 定义迷宫3. 定义方向结构体和数组4. 迷宫路径穷举5. 代码总测试栈求解迷宫路径 本文分为两部分,第一部分让大家整体了解栈求解迷宫路径的整体思路和算法实现,第二部分仔细分析迷宫求解过程。小白门看不懂…

【机器视觉】电脑连接相机配置的二三事

最近手上有个机器视觉项目,现场总是反馈相机拍照取图是取的上一次的图,折腾很久,发现是配置的锅,这里记录下,防止下次再犯。 1.设置网卡固定IP: 举例:第一个网口:100.100.100.100 …

数据可视化 数据分析 常用图 seaborn

本文主要介绍几种数据分析阶段常用的统计图,可以用来验证数据分布,发现数据之间的关系,或进行异常值检测等。 import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from scipy import stats im…

机器学习 集成学习

集成学习 参考机器学习——集成算法。 集成算法是指构建多个学习器,然后通过一定策略结合它们来完成学习任务,常常可以表现得比单一学习更显著优越。 集成算法一般分为三类: bagging。并行训练多个模型,预测结果取所有模型的投票…

list模拟实现

文章目录list的介绍list和vector的对比**list和vector对于排序算法速度的比较****list和vector对于迭代器的比较****list的模拟实现****框架****节点****迭代器****普通迭代器-普通写法****const 迭代器-普通写法****迭代器-高级写法****链表结构****关于节点的析构****关于迭代…

模型交易平台|金融大数据项目案例模型分享

股市评论数据情感分析 涉及关键技术: TF-IDF; 词嵌入; LSTM 主要工具:Python 技术大类:自然语言处理 主要业务问题: 随着互联网的日益发展,越来越多的人依赖网络搜索信息和分享交流。同时,股市投资者…

Java整合RabbitMQ实现生产消费(7种通讯方式)

文章目录环境说明工程搭建连接RabbitMQ通讯模式1.简单通讯2.工作队列通讯3.发布/订阅通讯4.路由通讯5.主题通讯6.RPC通讯7.Publisher确认通讯代码仓库环境说明 RabbitMQ环境,参考RabbitMQ环境搭建Java版本:JDK1.8Maven版本:apache-maven-3.6…

软件测试基础理论体系学习7-【一文看懂】什么是等价类划分法?边界值分析法?因果图法?错误推测法?功能图分析法?

7-【一文看懂】什么是等价类划分法?边界值分析法?因果图法?错误推测法?功能图分析法?1 等价类划分法1.1 理论知识1.1.1 划分等价类1.1.2 划分等价类的方法1.1.3 设计测试用例1.1.4 设计测试用例原则:1.2 等…

产品解读丨鸿翼ISO质量体系文件管理系统 合规 安全 高效

接轨国际,顺应全球标准化浪潮是当下国内制造企业发展过程的必经之路。通过建立从上而下的、符合国际各类标准的质量体系,鸿翼ISO质量体系文件管理系统能够严格监管企业质量体系的正常运转,为制造企业降本提效、重塑核心竞争力提供科学高效的解…

【JVM深层系列】「监控调优体系」针对于Alibaba-Arthas的安装入门及基础使用开发实战指南

Arthas特性介绍 Arthas是Alibaba开源的Java诊断工具,深受开发者喜爱。在线排查问题,无需重启;动态跟踪Java代码;实时监控JVM状态。 Arthas支持JDK 6,支持Linux/Mac/Windows,采用命令行交互模式&#xff0c…

网络电话会议摸鱼利器:会议自动退出器 - 网络会议结束后自动退出工具 方便会议挂机

随着远程办公和网络化的发展,我们可能经常需要开更多的在线电话会议。有些网络会议可能并不重要,但是你却不能一走了之。如果你打开了会议程序,然后埋头扎进Excel或笔记工具中,但没多一会一看,你竟然成了网络会议室中的…