2019-06-18-服务器与外部链接的网络虚拟化

服务器与外部连接的网络虚拟化主要有基于TOR交换机的虚拟交换技术高性能的计算网络融合技术。基于接入交换机TOR实现的虚拟交换是指某些物理交换机可通过特殊协议,感知虚拟机的存在,在物理交换机层实现虚拟交换,其代表技术就是VEPAVN-tag。同时,高性能计算网络及其融合技术中Infiniband、FCOE、RoCE等技术旨在用一种连接线将数据中心存储网络和计算网络(互联网络)聚合起来,使服务器可以灵活的配置网络端口,简化网络部署。

基于物理交换机的分布式虚拟交换机

如下图所示,基于物理交换机实现虚拟交换的思想是将虚拟机的网络流量全部导入接入交换机TOR处理,即使是同一VLAN内的流量也要绕出来,二层的广播和组播都由接入交换机TOR来模拟。

在TOR上实现虚拟交换功能的代表技术就是VEPA(Virtual Ethernet Port Aggregator)。VEPA将虚拟机之间的交换行为从服务器内部移出到上联交换机上,当两个处于同一服务器内的虚拟机要交换数据时,从虚拟机A出来的数据帧首先会经过服务器网卡送往上联交换机,上联交换机通过查看帧头中带的MAC地址(虚拟机MAC地址)发现目的主机在同一台物理服务器中,因此又将这个帧送回原服务器,完成寻址转发。该技术依赖物理交换机支持VEPA,需要虚拟交换机软件、服务器物理网口驱动作联动修改节省了虚拟交换机查表对物理主机CPU资源消耗。物理交换机转发功能依赖芯片,功能扩展性差,目前只有H3C、HP等少数厂家宣传支持。

VEPA方案的目标是要将虚拟机之间的交换从服务器内部移出到接入硬件交换机TOR上,实现虚拟机之间的“硬交换”。采用这种方法,通常只需要对网卡驱动、VMM桥模块和外部交换机的软件做很小的改动,从而实现低成本,且对当前网卡、交换机、现有以太网报文格式和标准影响最小。

采用VEPA方案,虚拟机的流量都是通过物理接入层TOR交换机完成,它的访问控制和报文下发策略也是基于物理接入层TOR交换机,因此很好地避免了网络和服务器设备管理边界模糊的难题。VEPA标准协议VDP还能准确的感知虚拟机的工作状态,当虚拟机发生迁移时,VEPA协议会将与此相关的访问控制和报文下发等策略重新部署到新的接入交换机。

如上图所示:采用了VEPA方案之后,位于一台物理机上不同虚拟机之间的网络流量不再只是由虚拟交换机来完成,而是都要通过物理接入层TOR交换机(即使是从同一个网络端口)。有人可能会提出这样的疑问:直接在虚拟机内存中交换数据不是更快,而且节省物理网络资源吗?答案是肯定的,数据转发确实受影响。但是,H3C的解释是:虚拟交换机有助于实现虚拟网卡与服务器上物理网卡之间的转换,但也增加了原有网络结构的复杂性,产生新的“边界”给管理带来了麻烦。而且虚拟交换机在服务器宕机的情况下也同时不可用了。(个人觉得这个解释很牵强,但是VEPA对虚拟机热迁移确实很有利)

VN-tag是由Cisco和VMWare共同提出的一项标准,如下图所示,其核心思想是在标准以太网帧中增加一段专用的标记—VN-Tag,用以区分不同的VIF,从而识别特定虚拟机的流量。

如上图,每个虚机对应唯一的VIF。VN-Tag中最重要的内容是一对新地址:dvif_id和svif_id,这个地址空间对应的不是交换机的端口或者IP网段,而是虚机的VIF。VN-Tag通过这一对地址说明了数据帧从何而来,到哪里去。

当数据帧从虚机流出来后,就被加上一个VN-Tag标签。基于VN-Tag的源地址dvif_id就能区分出产生于不同虚机的流量。一台具备VN-Tag协议栈的接入交换机TOR可以将VN-Tag与虚机的VIF对应起来,这样就形成了一个映射关系。物理机的出口网卡称为NIC,而上联交换机被称为TOR。

级联是VN-Tag的另一大特点,NIC对应的TOR不必是直接连接服务器的接入交换机,可以是网络内的任意IP可达的设备。这种设计的好处是,接入层设备往往比较简单,通过级联可以将虚拟机的流量拉高到高端的汇聚甚至核心交换机上,利用汇聚、核心交换机丰富的功能特性对流量进行精细化的管理。IEEE最初将VN-Tag标准称为802.1Qbh,后来改为802.1Br。

VN-Tag本质上是一种端口扩展技术,需要为以太网报文增加TAG,而对应的端口扩展设备TOR借助报文TAG中的信息,将端口扩展设备上的物理端口映射成上行物理交换机上的一个虚拟端口,并且使用TAG中的信息来实现报文转发和策略控制。

基于接入交换机TOR实现的虚拟交换,优点是:节省了虚拟交换机查表对物理主机CPU资源消耗缺点,对于对流量监管能力、安全策略部署能力要求较高的场景(如数据中心)而言,是一种优选的技术方案。缺点是:是由于流量从虚拟机上被引入到外部网络,带来了更多网络带宽开销的问题。虚拟机之间报文转发性能低于虚拟交换机,兼容性较差,需要特殊物理交换机,并且需要虚拟交换机软件、服务器物理网口驱动作联动修改,物理交换机转发功能依赖芯片,功能扩展性差。

InfiniBand技术和协议架构分析

InfiniBand其实并不是什么新技术。1999年左右,当时IT界的七个大佬Compaq、HP、IBM,Dell、Intel、Microsoft、Sun联合起来成立了IBTA(InfiniBand Trade Association),将InfiniBand定位于高速的I/O互联网络,旨在通过机外的长连接提供机内总线的I/O性能,同时保证机外互联的可扩展性。不过出于各种原因,各家巨头在IBTA成立后都纷纷离开,InfiniBand没能得到良好的市场推广,只是在超算和高性能数据库领域有所应用。Cisco在2005年收购Topspin后也拥有了InfiniBand的产品线,但是Cisco后面就没怎么继续研发了。Intel在收购QLogic之后,也没有继续研发InfiniBand,而是推出了自己的OmniPath。目前,InfiniBand的厂商主要就是Mellonax一家,基本上可以算是小圈子里面绝对的霸主了。

Infiniband大量用于FC/IP SAN、NAS和服务器之间的连接,作为iSCSI RDMA的存储协议iSER已被IETF标准化。相比FC的优势主要体现在性能是FC的3.5倍,Infiniband交换机的延迟是FC交换机的1/10,支持SAN和NAS。

InfiniBand也是一种分层协议(类似TCP/IP协议),每层负责不同的功能,下层为上层服务,不同层次相互独立。 IB采用IPv6的报头格式。其数据包报头包括本地路由标识符LRH,全局路由标示符GRH,基本传输标识符BTH等。

InfiniBand的协议栈如上图所示。InfiniBand的传输层首部叫做BTH(Base Transport Header),通过Queue Pair(QP)来定位远端的目标内存,通过Partition Key实现内存的访问控制,通过Sequence Number实现可靠传输。InfiniBand提供了对多种(包括可靠/不可靠、基于连接/基于报文)传输类型的支持,不同的传输类型使用不同的ETH(Extended Transport Header),ETH紧跟在BTH的后面。传输层和传输层以下都能够卸载到InfiniBand网卡中进行硬件加速。传输层之上是InfiniBand传输层和用户应用间的映射层ULP(Upper Level Protocol),允许用户应用在不改变程序原有语义的情况下使用底层的InfiniBand网络进行传输。比如:不同类型的应用需要不同的ULP,如TCP/IP应用可通过IPoIB这一ULP来进行适配。而InfiniBand的原生应用则可以调用InfiniBand所提供的Verbs API直接对InfiniBand网卡进行操作。

InfiniBand的超低时延得益于以下几点:

1)InfiniBand交换机都会采用直通式的转发,减小了串行化延迟;

2)使用了先进的、基于Credit的链路层流控机制,能够有效地防止丢包与死锁;

3)提供了对于RDMA的原生支持,从而大幅地提高了端点的性能。

传统服务器网卡的工作依赖于中断或者轮询,数据包从网卡到达应用程序需要经过内核协议栈的处理以及内核态与用户态间的切换,在上述过程中还要对数据包进行反复的拷贝,这些操作不仅对CPU资源造成了巨大的消耗,而且严重地制约了应用的I/O性能(详见DPDK相关介绍文章)。相比之下,RDMA首先作为一种DMA机制,能够直接在网卡的缓冲区和应用内存间进行数据交互,降低了中断或者轮询的频率,旁路掉了内核协议栈,并实现了数据的零拷贝,因此应用的I/O性能得以大幅提升,而被解放出来的CPU则可以用于处理应用本身。另外,RDMA提供了一组标准的数据操作接口,使得本端应用能够直接操作远端应用在内存中的数据,即字面所述的“远程DMA”。InfiniBand在设计之初即提供了对于RDMA的支持,是InfiniBand实现超低延时的重要基础。

InfiniBand的网卡称为CA(Channel Adaptor),CA又可分为服务器端的HCA(Host Channel Adaptor)交换机/存储端的TCA(Target Channel Adaptor)CA不仅实现了InfiniBand的物理层与链路层,而且能够对InfiniBand的网络层和传输层进行硬件加速,CA的Driver工作在内核中,为ULP或者InfiniBand原生应用提供操作接口。无论是HCA还是TCA,其实质都是一个主机适配器,它是一个具备一定保护功能的可编程DMA引擎。

QP(Queue Pair)是CA提供RDMA能力的基础,它可完成应用层的虚拟地址到CA上的物理地址的自动映射,如果两端的应用需要通信,那么双方都要申请CA上的物理资源,并通过相应的QP来完成对CA的操作。如下图所示,每个QP中都包括Receive和Send两个Work Queue分别用于数据的收和发。应用在进行网络通信前,首先需要向CA请求建立一个QP,需要发送数据时通过Work Request将数据作为WQE(Work Queue Entry)投入QP的Send Queue,应用需要为WQE指定AV(Address Vector),AV中携带着通信目标的地址信息,以及在通信路径上进行传输所需要的参数。CA根据AV开始进行L4~L2层的处理,封装好包头并从相应的物理端口送出。远端的目标CA收到数据包后,会根据传输层的QP字段将数据放入相应QP的Receive Queue中,然后将数据直接移动到相应的应用内存。每当一个WQE处理完毕之后,CA会通过Completion Queue发送CQE(Completion Queue Entry)给应用,通知其可以继续进行后面的处理。

CA将数据包从物理端口送出后,就进入到了InfiniBand Fabric。子网是InfiniBand Fabric中最重要的概念,子网内部是二层通信,InfiniBand Switch根据链路层LRH中的DLID完成转发,子网间通信需要进行三层的路由,InfiniBand Router通过网络层GRH中的DGID完成。GRH中的SGID和DGID是端到端不变的,而每经过一次路由,链路层LRH中的SLID和DLID都会逐跳发生变化。InfiniBand对子网采用了集中式的管理与控制方式,每个子网中至少有一个SM(Subnet Manager),多个SM间可以互为备份。SM既可以硬件实现也可以软件实现,可以实现在子网的任何一个节点上,包括CA、Switch和Router。子网中每个节点上都有一个SMA(SM Agent),SM和SMA间通过接口SMI(Subnet Management Interface)来实现子网的管理与控制,SMI主要提供Get、Set、Trap3种类型的操作。SMI信道上的控制信令称为SMP(Subnet Management Packet),SMP的传输需要使用专用的QP0(QP0不可用于传输用户应用的数据),并且要求放在逻辑链路VL 15上(QoS优先级最高),保证子网的管理和控制流量能够得到优先传输,而不会被数据流量所阻塞。其子网、交换机与路由器的连接如图下图所示:

最后,对SM的主要功能及相关做一简要说明,如下:

1)获取节点信息发现并维护拓扑。SM和SMA间以带内的方式交互SMP,在拓扑发现过程中,交换机上还没有任何转发信息,SMP是没有办法进行传输的。为了解决这个问题,InfiniBand设计了一种专用的控制信令Directed Routed SMP,Directed Routed SMP携带了自身的一次性转发信息,因此可以在交换机上尚未形成LID转发表时在InfiniBand Fabric中进行传输。

2)为节点分配LID、GID。对每个CA来说,在出厂时会分配一个64位全球唯一的GUID(Global Unique Identifier),不过这个GUID只是用来标识CA的,并不用于二层和三层的转发。LID和GID是由SM为CA集中分配的,分别用于二层和三层的转发。LID的长度为16位,只在子网本地有效,每个CA可以分配一个或者一段连续的LID(通过LMC实现),发送数据包时CA可以采用不同的LID,以实现Fabric上的多路径转发。GID的长度为128位,由64位的子网前缀+GUID组成,实际上SM为CA分配的是子网前缀,然后CA自己在本地组合出GID。SM还会维护GUID和LID/GID间的映射关系,用于地址解析。

3)根据拓扑计算路由。InfiniBand在计算路由时通常都是以Up/Down算法为基础的,Up/Down算法会为链路指定Up或者Down两种方向,路径只允许链路方向从Up转为Down,而不允许从Down转为Up,从而可以避免形成路由环路。

4)形成LID转发表,并将转发表配置给相应的Switch。Switch会根据数据包的DLID查找LID转发表,然后找到对应的端口进行转发。由于对转发表采用集中式控制方式,为了防止子网内部产生路由环路,InfiniBand通常的做法是等到所有Switch上的转发表都形成之后,再来激活子网中流量的转发。

除了SM以外,每个子网还都需要有一个SA(Subnet Administration),SA在逻辑上是SM的一部分(物理上两者没有必然的联系),可以看作是子网的数据库,CA间通信所需的信息(如DLID/DGID、Path MTU等)都由SA完成解析。InfiniBand中还有一些其他的子网管理组件,比如负责维护端到端QP连接的CM(Connection Management),负责性能检测的PM(Performance Manager),负责板上器件检测的BM(Baseboard Manager)等等。除了SM以外,InfiniBand中其余的管理组件统称为GSM(General Services Manager),子网中每个节点上都有相应的GSA(General Services Agent),GSM和GSA间的接口称为GSI(General Services Interface),GSI信道上的控制信令称为GMP(General Services Management Packet),GMP的传输也需要使用专用的QP1(QP1不可用于传输用户应用的数据),不过和SMP不同的是,GMP不可以放在逻辑链路VL 15上,也就是说GMP需要和数据流量一起接受流控。

FCOE技术原理解析

FCoE采用增强型以太网作为物理网络传输架构,能够提供标准的光纤通道有效内容载荷,避免了 TCP/IP协议开销,而且FCoE能够像标准的光纤通道那样为上层软件层(包括操作系统、应用程序和管理工具)服务。

FCoE可以提供多种光纤通道服务,比如发现、全局名称命名、分区等,而且这些服务都可以像标准的光纤通道那样运作。不过,由于FCoE不使用TCP/IP协议,因此FCoE数据传输不能使用IP网络。FCoE是专门为低延迟、高性能、二层数据中心网络所设计的网络协议。

  

和标准的光纤通道FC一样,FCoE协议也要求底层的物理传输是无损失的。因此,国际标准化组织已经开发了针对以太网标准的扩展协议族,尤其是针对无损10Gb以太网的速度和数据中心架构。这些扩展协议族可以进行所有类型的传输。这些针对以太网标准的扩展协议族有个高大上的名字,被国际标准组织称为“融合型增强以太网(CEE)”。

FCoE的做法是使用以太网的帧头代替FC-2P和FC-2M,上层的FC-2V、FC-3和FC-4仍然保留,FCoE协议栈如下图所示。FCoE将服务器的FC节点称为ENode,FCoE交换机称为FCF。

在FCoE网络中,服务器通过一块CNA网卡同时支撑IP和FC两套协议,相当于HBA和以太网NIC的合体。FCoE的以太网类型是0x8906,其外层MAC地址的写法比较讲究,后续通过具体的通信流程会进行介绍。外层的VLAN对于FCoE来说同样非常关键,其原因主要有两个:首先,FCoE流量必须在无损无丢包的以太网链路上进行传输,这完全依赖于PFC和ETS机制,而这两种机制都需要根据VLAN标签来对流量进行分类,因此FCoE流量必须承载在特定的VLAN中。其次,FCF要想实现存储网络内部的虚拟化,需要使用不同的VLAN来承载不同VSAN(Virtual Storage Area Network)的流量。

那么封装外层以太网时具体该使用哪个VLAN呢?这由是FCoE的控制平面决定。FCoE使用FIP(FCoE Initialization Protocol)作为控制平面协议,其以太网类型为0x8914。FIP主要负责以下3个工作:

1)VLAN发现。FIP在原先VLAN中通过VLAN发现报文,并与邻居协商后续FIP信令和FCoE流量所使用的VLAN,其缺省值为1002

2)FCF发现。FCF在所有FCoE VLAN内定期组播发现通告报文,使得当前VLAN内的所有的ENode发现自己。

3)FLOGI/PLOGI。与FC中相应过程一样,FCF作为Login Server为ENode分配FCID,同时作为Name Server记录ENode的登录信息。

经过上述3个阶段后,FCoE网络的初始化工作就完成了,FCoE流量得以无损地在以太网中传输。下面来看一个在多跳FCoE网络中典型的报文转发流程,如下图所示:

由于FCID是端到端的,因此FCoE报文在经过FCF转发时FCID不会发生变化,而外层的MAC地址会逐跳改写。我们知道IP和MAC是通过ARP协议联系在一起的,那么FCID和MAC该如何映射呢?FCoE为ENode规定了如下的映射方法:使用FC-MAP填充MAC地址的高24位,低24位填充为FCID,得到FPMA作为自己的以太网地址,而弃用CAN网卡出厂时的MAC地址。其中,FC-MAP为在FIP的FCF发现阶段中,FCF告诉ENode的信息,每个VSAN内部的ENode都使用相同的FC-MAP,不同的VSAN使用不同的FC-MAP。而对于FCF来说,不进行这种转换,直接使用本机MAC地址FCF-MAC进行外层以太网封装。同一个VSAN内的报文都在同一个VLAN内传输,FCF进行VLAN的MAC地址学习,保证了VSAN间的隔离,不同VLAN的优先级不同,通过PFC和ETS进行差异化的传输控制。

单跳FCoE的转发更为简单,负责接入的FCF收到FCoE流量后,根据FCID进行寻址,然后直接转换成FC-2的帧格式在FC网络中进行传输。

当在服务器中部署虚拟机的时候,FCF不再是FCoE接入网络的第一跳,很多FIP的交互过程就实现不了了,而FC网络也面临着这个问题。FC网络给出的解决办法是NPIV/NPV,NPIV部署在服务器中作为ENode和FCF之间的代理,为下挂多个虚拟机的ENode完成FLOGI/PLOGI过程,而NPV则将NPIV的功能放到了以太网交换机上。NPIV/NPV的示意如下图所示。同样,FCoE也可以配合NPIV的工作实现虚拟机的FCoE接入。

RoCE与RoCEv2

相比于以太网,InfiniBand的优势主要在于以下几点:带宽总是能够领先一步,链路层具有流控能力,RDMA可以通过旁路内核来加速。不过,InfiniBand太贵,对运维人员要求也较高。因此,随着10GE的普及,40GE/100GE的推广,以太网的带宽资源不再是瓶颈,而DCB协议族的发展也使得以太网具备了不丢包的传输能力,如果再能够提供对RDMA的支持,那么以太网就会有能力和InfiniBand在HPC领域一较高下了。

2010年,IBTA制定了RoCE(RDMA over Converged Ethernet),使用以太网代替了IB的链路层,保留了网络层以及传输层对于RDMA的支持,结合DCB(要求至少10G的端口速率)即可以获得微秒级的传输延迟。不过,RoCE由于在网络层仍保留着IB的GRH,因此是不能进行IP路由的。为此,IBTA在2014年又制订了RoCEv2,在RoCE的基础上将IB的网络层替换为IP,RoCEv2的流量获得了跨越广域网进行传输的能力,因此RoCEv2又称为RRoCE(Routable RoCE)。下图展示了RoCE技术的演进策略。

相比于FCoE使用FIP协议作为专有的控制平面,RoCE和RoCEv2并没有专门设计自己的控制协议。在InfiniBand中管理和控制的组件多是围绕InfiniBand子网来进行的,由于RoCE、RoCEv2中使用了以太网来替换InfiniBand的链路层,因此自然就没有了InfiniBand子网的概念,SM、SA、PM、BM等组件也就失去了存在的意义,只有传输层上用于端到端协商QP的CM保留了下来。在InfiniBand中,地址分配和解析工作是由SM和SA完成的,去掉了SM和SA后,需要由以太网/IP中相应的机制来进行地址分配和解析。三者地址分配和解析机制如下所示。

L2的生成/分配 L3的生成/分配 L2和L3的解析
IB SM分配LID和LMAC 默认为0xFE::80+GUID,SM分配GID Prefix,覆盖为GID Prefix+GUID Query HCA Verb SA
RoCE 以太网MAC 默认为0xFE::80+GUID ARP
RoCEV2 以太网MAC DHCP或者为静态配置 ARP

除了RoCE和RoCEv2以外,还有一种融合的方案是iWARP(RDMA over TCP/IP),通过将TCP/IP卸载到网卡中也可以实现良好的转发性能。不过,iWARP是一种纯应用层的实现,不属于服务器与外部网络连接虚拟化范畴。

至此,服务器与外部连接的网络虚拟化典型技术介绍完毕。这一块大部分内容对于传统CT运维人员,甚至是不负责存储运维的IT人员都较有难度,涉及许多存储领域的概念和数据包转发流程等知识点。因此,大家在看博客时,需要借助搜索工具让自己对存储领域的一些知识点有个感性认识后,再来看本篇博文就显得轻松许多。

-------------本文结束感谢您的阅读-------------
坚持原创技术分享,您的支持将鼓励我继续创作!