jjzjj

快速认识DPU

醉在不眠中 2023-06-24 原文

DPU(Data Processing Unit)是以数据为中心构造的专用处理器。那么为什么需要DPU?DPU主要承担什么功能?它带来什么影响?我们可以通过四个关键字快速认识DPU:数据中心数据卸载重构

数据中心

数据中心由大量的服务器构成。计算、存储、网络数据传输是数据中心的三大核心功能。

CPU之上运行操作系统虚拟机管理器Kubernetes等基础软件。在此之上业务应用部分通过虚拟机容器进行部署,实现资源共享、弹性伸缩、多租户、微服务、SaaS等。底层由GPUFPGA提供硬件加速,所有的加速资源网络资源存储资源由CPU统一协调调用。此时CPU不仅仅是控制的中心,也是数据流动的中心。

数据


以CPU为中心的数据中心面临多方面的挑战:

  • 构建于虚拟化和容器基础上的业务系统一方面带来了极大的便利,另一方面由于虚拟化的开销越来越大。
  • 基础设施和业务处于同一个计算平台,基础设施的性能突发会干扰业务的性能稳定度;
  • 还有一个问题就是安全访问,宿主机侧管理具有业务虚机等的所有权限,运维管理的一些误操作,以及宿主机OS的一些漏洞被攻破后,黑客不但可以破坏宿主机,还可能导致用户的数据安全。

这些挑战在数据量剧增的情况下更是严峻:随着我们信息社会从互联网时代向物联网时代发展,万物互连,万物智能,数据中心需要负责海量的数据的收发和处理需求。来自终端的南北向数据流,比如直播、视频游戏、视频会议、电子商务、智慧城市、城市大脑等业务不仅仅是数据量大,高并发,对算力要求高,而且有些业务对时延也很敏感。另外一个方面,数据中心内部位于不同服务器内的服务组成服务网格,也使得东西向数据流也剧增。

面对数据中心流量和业务带来的挑战,以CPU为中心的架构已经不堪负重。比如加速部分数据在CPU和加速器之间来回搬运的影响,加速比率打了折扣,有些场景综合加速效果不明显,以CPU为中心,整个IO路径很长,IO成为性能的瓶颈。如图所示,12个Core的CPU,提供能够提供给租户的就4个Core,其他8个Core都要用于处理网络传输存储安全相关的基础业务。数据中心的算力需求一直在增长,考虑到CPU的性能瓶颈,我们需要有个平台来帮助CPU承担绝大部分算力的压力,而让CPU专注于应用层算力需求虽然不大但非常高净值的工作。

卸载


DPU可以有效卸载数据中心的基础设施方面的功能:

  • 虚拟化方面,可以在Host CPU侧存在一个轻量的Hypervisor Agent,然后在DPU支持Hypervisor、呈现给Host的设备管理(vDPA,SRIOV,SIOV)、设备迁移等。
  • 网络方面,网络类的任务处理非常消耗CPU资源,可以通过DPU卸载OVS,也可以引入DPU智能网卡将虚拟化网络的控制平面完全卸载到智能网卡上,与主机操作系统相隔离。
  • 存储方面,DPU可以虚拟多个存储设备给主机,这些存储设备可以是NVMe也可以是VirtIO-BLK,从主机来看,这些存储设备相当于是本地磁盘设备。但实际上这些存储盘都是通过网络存储协议连接到远端的存储设备,这些网络存储协议以及相关的控制都是下沉到DPU上来完成的。这些网络存储协议可以是标准的协议,比如NVMe Over Fabric, NVMe Over TCP和iSCSI, 也可以是用户自己定义的网络存储协议。除此此外,DPU还可以支持其他类型的存储卸载,比如存储数据的压缩解压缩,加密解密,也支持存储数据的签名和校验,比如T10-DIF.
  • 安全方面,DPU也提供众多的卸载功能,比如支持网络数据的在线(inline)加密和解密, 包括SSL/TLS和IPSec, 也支持对网络第7层数据的正则表达式匹配(RegEx)以及基于它的DPI支持。DPU 也支持PKI,从而实现TLS握手协议的硬件卸载。另外DPU本身是一个安全设备,可以确保自身的Firmware, Bootloader以及BMC code不受到串改。
  • IO加速,通过运行于CPU的控制面和慢路径,定义好之后,绝大部分数据流量的处理都在DPU就可以完成,不需要进CPU。

当然不同的DPU实现的卸载的程度有差别,或者是分阶段的:

  • 第1阶段,卸载1个任务。网络卸载,成为智能网卡。分布式远程存储遇到问题,卸载存储,成为智能存储卡。
  • 第2阶段,卸载2-4个任务(非严格定义)。CPU的功能任务不但卸载,还需要卸载的功能集成到一个平台。比如把最底层的网络、存储、虚拟化和安全四大类功能从CPU侧卸载到DPU中。
  • 第3阶段,卸载5项以上。把整个系统栈里能够卸载的任务都尽可能的卸载到DPU中。这里可以给出卸载的一个更加通用的标准:①性能敏感,占据较多CPU资源;②广泛部署,运行于众多服务器。当整个系统栈都尽可能进行卸载加速之后,IPU的名称要更准确一些(IPU,基础设施处理器)。
  • 第4阶段,不但全量卸载,还需要均衡和弹性。卸载下来的任务需要更多的灵活性,形成弹性的基础设施支撑平台。或者说,需要把IaaS的服务融入到DPU中,并且这些服务的业务逻辑需要仍由云服务提供商CSP的软件工程负责定义,并且能够很好的支持多租户、微服务、一致性等云的高级特征。

重构


由于数据量大于计算量之后,整个计算的模式就从计算驱动变成了数据驱动。这样促进了数据中心服务器架构的重构,DPU成为整个服务器架构的核心器件。

DPU承担的事情越多,其功能也就需要越强大,其定位也就越来越不一样。对应上面的DPU实现的四个不同的阶段可以把DPU的定位分为四个层次:
层次一,DPU是CPU的任务卸载/加速。克服CPU性能瓶颈,把网络、存储、虚拟化及安全等任务从CPU卸载到DPU加速,减轻CPU的压力。
层次二,DPU是基础设施,支撑上层应用。DPU成为集成加速平台,既完成基础设施层工作任务处理,也完成部分业务应用的加速,支撑CPU和GPU的应用层工作。
层次三,DPU/IPU是计算的核心。IaaS甚至PaaS、SaaS等云计算核心服务,融入到DPU软硬件。DPU图灵完备,并且是数据的入口。这使得DPU成为核心,而CPU和GPU成为扩展。
层次四,DPU/IPU的本质是超异构计算。算力持续提升,数据中心的超异构计算,DPU是核心承载。基于超异构的复杂计算,需要在极致灵活性的基础上,提供极致的性能。

总结

概括地说,DPU就是在数据中心面对海量数据导致CPU不堪负重情形下,负责卸载基础设施功能的一种新形态的处理器,其也将引发数据中心架构从以计算为中心到以数据为中心的重构

参考链接

有关快速认识DPU的更多相关文章

  1. ruby - 如何以表格格式快速打印 Ruby 哈希值? - 2

    有没有办法快速将表格格式的ruby​​哈希打印到文件中?如:keyAkeyBkeyC...1232343451253474456...其中散列的值是不同大小的数组。还是使用双循环是唯一的方法?谢谢 最佳答案 试试我写的这个gem(在表中打印散列、ruby对象、ActiveRecord对象):http://github.com/arches/table_print 关于ruby-如何以表格格式快速打印Ruby哈希值?,我们在StackOverflow上找到一个类似的问题:

  2. 电脑启动后显示器黑屏怎么办?排查下面4个问题,快速解决 - 2

    电脑启动出现显示器黑屏是一个相当常见的问题。如果您遇到了这个问题,不要惊慌,因为它有很多可能的原因,可以采取一些简单的措施来解决它。在本文中,小编将介绍下面4种常见的电脑启动后显示器黑屏的原因,排查这些原因,快速解决! 演示机型:联想Ideapad700-15ISK-ISE系统版本:Windows10一、显示器问题如果出现电脑启动后显示器黑屏的情况。那么首先您需要检查一下显示器是否正常工作。您可以通过更换另一个显示器或将当前显示器连接到另一台计算机来检查显示器是否存在问题。如果问题仍然存在,那么您可以排除显示器故障的可能性。 二、显卡问题如果您的电脑配备了独立显卡,那么显卡故障也可能是导致电脑

  3. ruby - 使单元测试快速失败以进行突变测试 - 2

    mutationtesting遇到一个问题是它很慢,因为默认情况下您会为每个生成的突变执行完整的测试运行(测试文件或一组测试文件)。加快突变测试的一种方法是,一旦遇到单一故障(但仅在突变测试期间),就停止对给定突变体的测试运行。更好的做法是让变异测试者记住杀死最后一个变异体的第一个测试是什么,并将其首先交给下一个变异体。ruby中是否有任何东西可以做这些事情,或者我最好的选择是开始猴子修补?(是的,我知道单元测试应该很快。显示所有失败的测试在突变测试之外很有用,因为它不仅可以帮助您识别出问题,还可以查明哪里出了问题)编辑:我目前正在对测试/单元使用heckle。如果测试/单元不可能记住

  4. ruby - 使用和不使用 Rails 的快速 (Rspec) 测试 - 2

    我有两个类:1.Sale是ActiveRecord的子类;它的工作是将销售数据持久保存到数据库中。classSale2.SalesReport是一个标准的Ruby类;它的工作是生成和绘制有关销售的信息。classSalesReportdefinitialize(start_date,end_date)@start_date=start_date@end_date=end_dateenddefsales_in_durationSale.total_for_duration(@start_date,@end_date)end#...end因为我想使用TDD并且我希望我的测试运行得非常快,所

  5. ruby - 快速FTP服务器 - 2

    我正在寻找一个快速、无需配置的FTP服务器。完全像Serve的东西或Rack_dav,但对于FTP,它可以通过运行命令来发布文件夹。是否有gem或其他东西可以做这样的事情?解决方案基于Wayne的ftpdgem,我创建了一个快速且易于使用的gem,名为Purvey. 最佳答案 ftpdgem支持TLS,并带有文件系统驱动程序。与em-ftpd一样,您提供一个驱动程序,但该驱动程序不需要做太多事情。这是一个最低限度的FTP服务器,它接受任何用户名/密码,并提供临时目录中的文件:require'ftpd'require'tmpdir'c

  6. ruby - 快速解决字谜 - 2

    给定两个字符串,我想确定它们是否是彼此的变位词。这是我想出的解决方案:#outputmessagesdefanagramputs"Anagram!"exitenddefnot_anagramputs"Notananagram!"exitend#mainmethodif__FILE__==$0#readtwostringsfromthecommandlinefirst,second=gets.chomp,gets.chomp#specialcase1not_anagramiffirst.length!=second.length#specialcase2anagramiffirst==s

  7. 线性代数让我想想:快速求三阶矩阵的逆矩阵 - 2

    快速求三阶矩阵的逆矩阵前言一般情况下,我们求解伴随矩阵是要注意符号问题和位置问题的(如下所示)A−1=1[  ][−[  ]−[  ]−[  ]  −[  ]]=A−1=1[  ][   M11−[M12]   M13−[M21]   M22−[M23]     M31−[M32]   M33]⊤\begin{aligned}&A^{-1}=\frac{1}{[\\]}\left[\begin{array}{cccccc}&-[\\]&\\-[\\]&&-[\\]\\\\&-[\\]&\\\end{array}\right]=\\\\&A^{-1}=\frac{1}{[\\]}\left[\b

  8. 火爆的ChatGPT快速学成,要看哪些书? - 2

    以前我们经常打趣说:***,你out了!当然了,玩笑成分居多。但是如果作为一名技术人员,现在还没有听说过ChatGPT,那么你可能真的“out”了。比尔·盖茨说,ChatGPT的重要性堪比互联网的发明,甚至它“将改变我们的世界”。ChatGPT得到科技界大佬的如此推崇,那么,ChatGPT到底是什么?ChatGPT是2022年11月底,美国OpenAI公司推出的一款人工智能聊天机器人。两个月后,ChatGPT的月活用户已经突破1亿,成为有史以来增长速度最快的消费者应用程序。ChatGPT功能极其强大,它能够通过学习和理解人类的语言进行对话,还能根据上下文进行互动,实现像人类一样的聊天交流。除了

  9. ruby - Ruby 语言中的快速排序 - 2

    我正在尝试在ruby​​中实现快速排序,但卡在如何在pivot的第一个分区之后递归调用。请帮助我了解如何进行,并让我知道到目前为止我的编码风格是否良好。classQuickSort$array=Array.new()$count=0defadd(val)#addingvaluestosorti=0whileval!='000'.to_i$array[i]=val.to_ii=i+1val=gets.to_iendenddeffirstsort_aka_divide(val1,val2,val3)#firstpartition$count=$count+1@pivot=val1@left

  10. ruby - 缓慢的 Ruby 正则表达式通过奇怪的变化变得快速 - 2

    我一直在调试网站以查找页面加载时间过长的根源,并将其缩小为用于从文本中提取URL的正则表达式:/(?:([\w+.-]+):\/\/|(?:www\.))[^\s在一大块文本上运行大约需要3秒。我发现如果我将第一个子句的逆语句添加到正则表达式((?:[^\w+.-]|^))的开头,它几乎会立即运行:/(?:[^\w+.-]|^)(?:([\w+.-]++):\/\/|(?:www\.))[^\s在我看来,添加的子句根本不应该影响正则表达式,因为没有什么可以导致该子句失败(因为这些字符将与“[\w+.-]++”子句匹配)。为什么这会使正则表达式运行得更快?编辑有些人要求提供我正在尝试做的

随机推荐