当前位置: 首页 > 科技观察

PCIeSwitch的进阶特性及其在DellPowerEdgeFX2平台上的应用

时间:2023-03-14 11:28:51 科技观察

《存储极客》专栏又和大家见面了!在这里,只有一个大佬叫“存储”,它的粉丝我们称之为“存储极客”“客”!StorageGeeks这是一群为存储而生的存储偏执狂。他们有自己的独家秘诀和见解,有收纳的碰撞,有干货。2015年8月18日起,他们将客串存储极客,与您共享存储。01PCI-ESwitch芯片估计很多人都听说过。但估计大多数人对其基本功能知之甚少。PCI-ESwitch作为最先进的生产力,已经广泛应用于少数品牌/型号的传统存储系统和服务器平台。作为拥有全球领先的PCI-ESwitch产品的PMC-Sierra的系统架构师,笔者在此为大家普及一下PCI-ESwitch的基础知识。背景介绍PCI-E大家都知道主板上有一个PCI-E插槽,里面的金手指就是一串信号线,直接和CPU内部的PCI-E控制器相连。不过,目前Intel平台的CPU最多支持40个通道(Lane)。一般来说,10G网卡可以使用8通道。高端显卡需要x16lane,因为3D运算需要的吞吐量巨大(笔者的PC我用的是旧主板搭配GTX980显卡,只能在x8模式下运行,但3D性能基本保持不变,这证明x8基本上足够了)。一般存储卡也采用x8,但后端12Gb/sSAS存储卡(HBA卡、Raid卡)一般过渡到x16。然而,对于一些高端产品,尤其是那些传统的存储系统,提供每个CPUx40通道是不够的。传统存储系统的一个特殊要求是后端和前端的HBA数量比较多,CPU内置的通道数不能满足要求。此外,传统存储控制器之间需要进行各种数据交换和同步,普遍采用PCI-E,增加了通道数的消耗。对于一般的高端服务器,一般配置两个或四个通道。x80通道在双通道下提供。理论上可以连接10个x8的PCI-E设备,一些内部嵌入式PCI-E设备用于管理和通道占用后,很容易连接8个设备,可以覆盖几乎所有的应用场景。然而,随着用户对集成、统一、效率、空间和能耗的要求不断提高,近年来出现了许多高密度模块化服务器平台,或称开放式刀片服务器。这类服务器平台对PCI-E有一些特殊的要求,比如Partition、MR-IOV等。下面,笔者对这些知识进行详细介绍。基本功能1、FanoutFanout(意为扩展、扩展、分散)是PCI-E转接器的基本功能。也就是说,PCI-E标准体系是为PCI-ESwitch在通道数不够的情况下发挥作用而设计的。.PCI-E之前的一代标准是PCI-X。那时候还没有Switch的概念。Fanout采用了桥接的形式,形成了树形结构,如上图中间所示。Switch的概念是在PCI-E时代引入的。与bridge相比,最大的本质区别就是在同一个Bus的多个角色之间使用Switch代替Bus。PCI-X时代,真正使用共享总线传输数据,意味着仲裁,效率低下。不过PCI-E保留了PCI-X系统的基本概念,比如仍然使用“Bus”和“Bridge/Bridge”两个词,只不过这两个角色变成了虚拟角色。一个Switch相当于虚拟网桥+虚拟Bus的集合。每个虚拟网桥(VB)只能连接一个端点设备(即终端设备/卡,端点/EP)或级联另一个交换机。无法连接到总线,因为物理总线已不存在。这种fanout的形式肯定还是遵循树形结构,因为树形结构最简单,没有环路,不需要考虑复杂的走线。2.分区功能相当于EthernetSwitch中的Vlan,相当于SASSwitch/Expander中的Zone。如上图所示,可以将两台或多台机器连接到同一台PCI-ESwitch,在Switch上进行分区配置,将部分EP设备分配给某台服务器。这样可以实现统一管理和灵活分配。每个服务器的BIOS或OS在枚举PCI-E总线时只会找到分配给它的虚拟桥、虚拟BUS和EP。多个分区互不干扰。如果多个独立的服务器连接到同一个Switch,没有Partition就会出现问题,因为两个OS会分别枚举同一个PCI-E总线栈中的角色,并为他们分配访问地址。有冲突。3、NTB的一些特殊场景,比如传统存储系统中的多个控制器,它们之间需要同步大量的数据和控制信息,希望使用PCI-E链路直接通信。问题是图中的两台服务器无法直接通信,因为它们必须在两个不同的分区中。为了满足这种需求,NTB技术应运而生。基本原理是地址转换,因为两个不同的系统(术语SystemImage,SI)各自有自己的地址空间,这些地址空间是重叠的。那么只要在PCI-ESwitch内部进行对应数据包的地址映射翻译,就可以实现双方的通信。这种带有地址转换的桥接技术称为NoneTransparentBridge,非透明网桥。基本功能1.动态分区上面提到的分区配置必须是静态配置。在BIOS启动前,即CPU上电前,可以使用BMC配置PCI-ESwitch的分区配置。分区配置后,在系统运行过程中不能动??态更改。这意味着如果某块PCI-E卡分配给了服务器A,在不影响服务器A和B的运行的情况下,它不能动态地重新分配给服务器B。PMC-Sierra公司Switchtec子公司的PCI-ESwitch产品支持动态分配.作者不能透露具体的实现方式。然而,对于有经验的开发人员来说,这些都不是问题。问题在于对应芯片的内部架构是否足够灵活和可配置,这是制约??高级功能设计的关键。2、上面Fabric中提到,无论是PCI-X还是PCI-E系统标准,都只支持树形拓扑结构。树形拓扑的问题是路径太长,整个网络的直径太大。此外,无法实现冗余。一旦一条链路失效,则该链路后面的所有分支都无法访问。因此,支持Fabric就成了一个非常复杂的高级功能。这种场景目前很少有人使用。对于天蝎这样的全机架服务器,他们更看重这个功能。但是目前这项技术的实现还很初级和不完善,还没有形成标准。3.IOVSR-IOV,很多人都听说过,但是不知道里面具体的门道。SingleRootIOVirtualization中的Root是什么意思?单根是什么意思?还有MultiRootIOV,这是什么?鬼?SR-IOV是指将插在一台服务器上的一块PCI-E卡虚拟成多张虚拟卡,供本服务器上运行的多台虚拟机使用。每个虚拟机识别一个PCI-E卡,但是VM并不知道这个卡是虚拟的。如果不虚拟成多张卡,多台VM怎么共享这个设备呢?答,设备必须通过Hypervisor提供的服务来使用。管理程序将在VM中安装驱动程序。这个驱动会虚拟出一个不存在的设备,比如“XXX牌以太网卡”。这个驱动实际上会连接到OS协议栈,接收上层发送的数据包。.但是驱动接收到数据包后,由于根本没有实际的网卡,驱动实际将数据包发送给了Hypervisor,或者一些虚拟机实现使用了一个domain0特权的VM来处理真实的硬件,那么这个驱动会将数据发送给特权VM,GuestVM和特权VM通过进程间通信传递数据。Hypervisor或特权VM收到数据后,会通过真正的驱动发送数据包,比如“IntelxxxEthernetcard”。发送到真正的网卡。这种方式转发会比较慢,因为内存复制的成本比较高,如果吞吐量要求大,这种方式就不行了。于是,为了解决这个问题,SR-IOV应运而生。SR-IOV需要直接在PCI-E卡的硬件中虚拟出多个子设备。怎么做?首先,支持SR-IOV的PCI-E卡需要向系统申请双倍的地址空间。地址空间。这个地址空间会在内核或BIOS枚举PCI-E设备时得到,系统会把为该设备申请的地址空间段的基地址写入设备寄存器。比如一个网卡虚拟出8个虚拟网卡,然后内核PCI-E管理模块向系统声明8个PCI-E设备。然后Hypervisor将相应的设备映射到相应的VM,并在VM中加载相应的HostDriver。管理程序还需要执行地址转换,或硬件辅助地址转换。只要PCI-E设备本身支持SR-IOV,PCI-ESwitch就可以原生支持,无需任何额外处理。但是,MR-IOV必须由PCI-E开关上的额外处理来支持。原因是多个独立的系统之间没有通信,如果都尝试配置PCI-E总线,就会发生冲突。PCI-ESwitch支持MR-IOV的基本手段是通过增加一层地址映射管理来实现的。DellPowerEdgeFX2平台在PCI-ESwitch上的应用DellPowerEdgeFX2是一款2U多节点服务器平台架构,采用2UChassis机箱,可容纳:2个1UServerSled或1个1UServerSled+2个1U半宽存储托架或1个1U半宽服务器托架+3个1U半宽存储托架或4个1U半宽服务器托架或2个1U半宽服务器托架+2个1U半宽存储托架或3个1U半宽存储托架宽服务器托架+1个1U半宽存储托架或8个1U四分之一宽服务器托架可灵活组合。如下所示。机箱背面有8个PCI-E插槽。这8个PCI-E插槽可以灵活分配到机箱正面的各种服务器底座组合。这是由于使用了PCI-ESwitch和Partition功能。笔者画了一个示意图给大家介绍一下内部的引导路径。如下图所示,连接1/2插槽的端口和连接服务器Sled1的端口在红色区域,3/4插槽和服务器Sled2在黄色区域。Slots5/6/7/8、storageSled、serverSeld3都在蓝色分区中。这意味着服务器Sled3将识别插槽5/6/7/8上的PCI-E卡(如果有),并同时识别存储Sled上的RAID卡。基于Web的配置界面,通过连接BMC,可以对整个FX2平台包含的所有Sled进行全局配置,包括分配相应的PCI-E插槽,即对PCI-ESwitches进行底层分区操作。通过灵活使用PCI-ESwitch分区功能,戴尔PowerEdgeFX2平台可以实现以下8个PCI-E设备的灵活分配,更好地适应日益灵活的应用场景和业务需求。