
地 址:上海市嘉定66号
电 话:15318911309
网址:www.lbwcode.com
邮 箱:84504173@qq.com
随着云计算业务的(de)智汇中快速发展,国内(nei)外云计算企业的技术及其介绍专利之争也愈发激烈。在云计算这样的应(ying)用技术领(ling)域,专利储备往往代(dai)表(biao)着企业最新的智汇中技术实力。华云数(shu)据本期“智汇华云”专栏将解析Kernel bypass技术(shu)及其在Ceph中的技术及其(qi)介绍应用介绍,与大(da)家共同分享云计算领域(yu)的应用最(zui)新技术与解决方案。
背景

Ceph是智汇中当前最流行的(de)开源分布式统一存(cun)储,在一套基础架构中同时支持块存储、技术及其介绍对象存储和文件存储,应用支持PB级别的智汇中扩展能(neng)力,广(guang)泛用(yong)于云环境中;Ceph来源于Sage Weil博士一项关于存储系(xi)统的技术及其介绍PhD研究项目,最初被设计为一个分布式文件(jian)系统,应用整体架构基(ji)于低速设备而构建(jian),智汇中提供毫秒(ms)级别的技术及其介绍IO延迟。

从1956年(nian)第一块机械硬盘(HDD)诞生至今,应用存储介质的(de)容量和性能都取得了长足的发展,特(te)别是2011前后固态硬盘(SSD)产生后,IOPS出现了指数级的增(zeng)长,IO延迟也从毫秒(ms)降到了微妙(us),提升了1000倍以上;与此同时,网络传输速率也从10年前的(de)100Mbps,发展到了目前的(de)100Gbps,实现了1000倍的增长。

随着硬件性能的快速提升,传统的软件实现和架构已成为提(ti)升软件系统的主要瓶颈,有(you)数据(ju)表明,在全NVMe固态介质的配置下,Ceph集群性能只(zhi)有硬件限性性能的40%左右,所(suo)以为了充分利(li)用高性能介质,需要对现有的软件进行重构。
Kernel bypass技术
随着硬件性能的提升,内核中的网络栈和存储栈带来的(de)性能瓶颈越来越(yue)明显,为(wei)缩短io路径、解决NVMe SSD在传(chuan)统IO栈上的性能问题,Linux内核从4.x开始引入了新的NVMe IO栈,如(ru)下图,可以看新的(de)IO子系统完全摈弃了传统的通用块层和SCSI子系统:
而kernel bypass(绕过(guo)内核)是解决系统网络栈和存储栈性能瓶颈的另外一种方式,与传统(tong)的中断机制不同,kernel bypass的核心思想是:内核只用来处理控制流,所有数据流相关操作都(dou)在(zai)用户态进行处理,从而规避内(nei)核的包拷贝、线程调度、系统(tong)调用、中断等性能瓶颈,并辅以各种性(xing)能(neng)调优手段(如:CPU pin、无锁队列),从而达到更高的性能。目前市场上也有多种类(lei)似的技术,如DPDK、NETMAP、SPDK、PF_RING、RDMA等(deng),其中 DPDK 因为更彻底的脱离内核调度以及活跃的社区支持从(cong)而得到了更广泛的使用。下文(wen)简单介绍下(xia)DPDK、SPDK以及(ji)RDMA的技术原理:
DPDK(Data Plane Development Kit)是由(you)Intel发(fa)起,主要基于Linux系统运行,用于快速数据(ju)包处理的函数库与驱动集合,可以极(ji)大提高数据处理性能和(he)吞吐量,提高数据平面应用程序的工作效率。DPDK使用了轮询(polling)而不是(shi)中断来处理数据包。在收到数据包时,经DPDK重载的网卡驱动不会通过中断通知CPU,而是直接将数据包存入内存,交付应用层软件通过DPDK提供的接口来直接处理,这样节省了大量的CPU中断时间和内存拷贝时间。
SPDK(Storage Performance Development Kit)是由Intel发起,用于(yu)加速使用NVMe SSD作为后端存储的应用(yong)软件加速库,该软件库的核心是用户态、异步、轮询方式(shi)的NVMe驱动。与内核态的NVMe驱动相比,它可以(yi)大幅度降低延迟,同时提升单CPU核的IOPS。其架构如下(xia):
RDMA(Remote Direct Memory Access)全称远程直接数据存取,就是为了解决网络传输中服务器端数据处理的延迟而产生(sheng)的(de)。RDMA通过网络把资料直接传入计算机的存储区,将(jiang)数(shu)据从一个系统快速移动(dong)到远程系统存储器中,而不对操作系统造成任何影响,这样(yang)就不需要用(yong)到多少计算机的处理功能。它消除了外部存储器复制和上下文切换的开销,因而能解(jie)放(fang)内存带宽和CPU周期用(yong)于(yu)改进应(ying)用系统性能(neng)。下图直观的展(zhan)示(shi)了(le)传(chuan)统模式和RDMA模式(shi)下的差异:
SPDK技术(shu)在(zai)Ceph BlueStore中的应用
先来看一组来自Intel的性能测试数据:用(yong)户态NVMe 驱动(dong) VS 内核态NVMe驱动
通(tong)过上面的对比数据,我们看到了(le)SPDK的优异性能表(biao)现及潜力,很自然想到可以通过加(jia)速Ceph OSD后端IO来提升Ceph性(xing)能,具体(ti)做法是:使(shi)用SPDK中的用(yong)户态NVMe驱动替代内核驱动,bluestore架构如下:
从上图可(ke)得到如下信息:
1.使用裸设备,数据直接写入块设备,消除文件系统的影响
2.在裸设备上构建轻量级的(de)Bluefs文(wen)件系统,用于承载元数据库RocksDB
3.支持(chi)插件式的(de)块分配器(当前支持StupidAllocator和BitmapAllocator两种(zhong))
4. 支持插件式的块设备驱动(dong)(当前仅支持Kernel Driver)
所以(yi),要支持新的块设备驱动(dong)只(zhi)需添加新的设备类(lei)型(Type)以及(ji)实现相应的驱动(Driver)即可(ke)。
在讲DPDK/RDMA的应用前,我(wo)们先来看看Ceph中两种常用的网络模块(Messenger):
1.SimpleMessenger
SimpleMessenger是(shi)Ceph最早支持的一种网络模块,如其名字所述,实现相对比较简单:它通过一个线程来监听服务端口、接收客户连接(jie);每个新建连(lian)接与一个Pipe关联,实现两个端口间类似管道的功能;Pipe内部分别有一个读写线程用来处理这(zhe)个Pipe有关的消息接(jie)收和请求的发送;SimpleMessenger通过共享队列向各连接分发接收到的消息。由于每个连接都需要关联一对读写线程来负责消息和请求的处理,很显然,随着连接(jie)数量以及并(bing)发的增大,将会(hui)产生大量的(de)线程,随之线程上下文切换、TCP/IP的overhead也将成倍的增加,严重影(ying)响消息和请求的处理性能。
2.AsyncMessenger
为了解决(jue)SimpleMessenger中大量线程上下文切(qie)换带来的overhead,AsyncMessenger采用了IO多路复用技术(shu)(如:epoll、kqueue)以及线(xian)程池,来处理消息接收和请求发送,这样可(ke)以非阻塞的(de)处理多(duo)个网络请求;为了兼容不(bu)同的传输协议栈,AsyncMessenger还通(tong)过插件的方式支持多种传输协议,如:posix、dpdk和(he)rdma,其结构如下:
结合上(shang)述的DPDK技术、RDMA技术和SPDK技术(shu),Ceph将能够提(ti)供一套纯用(yong)户态的存储解决方案,个(ge)人认为也是当前存储系统设计(ji)的(de)其中一个发展方(fang)向。
上文简单介绍了DPDK、SPDK、RDMA技术在(zai)Ceph中的应用,后续将对(dui)上述各部分进行深度的分析,敬请期(qi)待。