cavium 处理器怎么样

cavium 处理器怎么样,第1张

Cavium Inc 公司是全球领先的多核 MIPS 和 ARM 处理器提供商,处理器广泛应用于网络/通讯、无线、存储和控制应用等领域的安全产品。
Cavium 是美国纳斯达克上市公司,股票代码为:CAVM,公司运营状况良好,现金流充足。Cavium 公司总部在加州硅谷核心地带圣何塞(San Jose) ,并在麻省的波士顿、印度海德拉巴、中国北京和台湾新竹设有研发中心。国际上主要的网络/通讯/无线等厂商都有使用 Cavium 的解决方案,包括但不限于 Cavium、Juniper、Alcatel-Lucent、Nokia-Siemens Networks、华为、中兴、三星、华三、F5 Networks、Palo Alta Networks、Hillstone Networks。

RDMA实际上是一种智能网卡与软件架构充分优化的远端内存直接高速访问技术,通过将RDMA协议固化于硬件(即网卡)上,以及支持Zero-copy和Kernel bypass这两种途径来达到其高性能的远程直接数据存取的目标。

目前支持RDMA的网卡并不普及,购买网卡时需要跟供应商咨询清楚是否支持此项功能

另外,目前RDMA的硬件实现有3种(如下),也要跟供应商咨询清楚

目前支持RDMA的网络协议有:

InfiniBand(IB): 从一开始就支持RDMA的新一代网络协议。由于这是一种新的网络技术,因此需要支持该技术的网卡和交换机。

RDMA过融合以太网(RoCE): 即RDMA over Ethernet, 允许通过以太网执行RDMA的网络协议。这允许在标准以太网基础架构(交换机)上使用RDMA,只不过网卡必须是支持RoCE的特殊的NIC。

互联网广域RDMA协议(iWARP): 即RDMA over TCP, 允许通过TCP执行RDMA的网络协议。这允许在标准以太网基础架构(交换机)上使用RDMA,只不过网卡要求是支持iWARP(如果使用CPU offload的话)的NIC。否则,所有iWARP栈都可以在软件中实现,但是失去了大部分的RDMA性能优势。

这个功能比较新,我也只是了解了个大概,具体的还是要实践,只能帮你到这里了。

至强(Xeon)是英特尔针对服务器和工作站市场的处理器品牌,但也有某些超级计算机采用此处理器。Xeon采用x86架构和/或x86-64架构,和采用IA-64架构的Itanium不同。

至强处理器与常规桌面级CPU相采用同一套微结构(微内核),但更关注于核心数量而非时钟频率,并增加了针对服务器和工作站的高级功能,例如ECC内存,更多的内核数量,更大的RAM和高速缓存,提供企业级的可靠性,可用性和可维护性的Machine Check Architecture (MCA)异常处理机制等。此外,某些型号还支持QPI(快速通道互联)和UPI(超级通道互联)总线,从而将多个CPU连接在一起,从而提供2路、4路、8路等多路处理能力。。

至强(Xeon)处理器目前主要有6个系列:

此外,至强还包含至强融核系列处理器,目前最新的Xeon PHI处理器基于英特尔®集成众核架构(MIC 架构),能为要求最苛刻的高性能计算应用程序提供大规模并行处理和矢量化服务,最高支持72核,36M L2 Cache。

多路互联技术用于在单块主板上安装多块互相连接的处理器,主要包括:

众核(Manycore)处理器是专为高度并行处理而设计的专用多核处理器,不追求流水线深度、超线程等计数来提高单核性能,而是包含大量简单独立的处理器内核,因此具有更高的吞吐量或更低的功耗,但是具有更高的延迟和较低的单线程性能。

Cache一致性是限制多核处理器扩展的难点。众核处理器通过消息传递,暂存式内存,DMA,分区化的全局地址空间(Partitioned global address space,PGAS),只读/非一致性高速缓存等技巧绕过这个难点。GPU实际上可以认为是具有多个着色器处理单元的众核处理器。

多通道内存技术是一种可以提升内存数据发送性能的技术,通过在DRAM和内存控制器/芯片组之间,增加更多的并行通信通道以增加数据发送的带宽。理论上每增加一条通道,数据发送性能相较于单通道而言会增加一倍。通常情况下,多通道对内存的规格和插槽都有要求,只要满足要求才能使能多通道模式。

目前常见的多通道技术多为双通道的设置,例如两组64-bit DDR提供128位的DDR通道。支持四通道技术的处理器包括Intel/AMD的高端处理器、包含ARM CoreLink CCI-500技术的Cortex-A72等处理器,以及高通和三星的高端处理器等。支持八通道技术的有AMD EPYC、Cavium ThunderX2等服务器处理器。此外,英特尔2012年展示的Haswell-EX架构也支持八通道DDR4。

多线程技术包括同时多线程(SMT)和时间多线程:

时间多线程(Temporal multithreading)也称交叉多线程,即在一个时钟周期中发出一个指令,交错发出不同线程的多个指令。时间多线程目前仅在CDC 6000(1960s)、Tera MTA (1988) 、XMOS XCore XS1(2007)等Barrel(桶)处理器上出现。

Intel服务器处理器提供的硬件错误检测和报告机制,包括系统总线错误,ECC错误,奇偶校验错误,Cache错误、TLB错误等,包括一组用于设置MCA的MSR寄存器和记录硬件错误的附加MSR寄存器。

在ECC技术出现之前,内存中应用最多的另外一种错误检查技术,是奇偶校验位(Parity)技术,仅能发现错误而不能纠正错误。

ECC内存够实现错误检查和自动纠正技术的内存,可以自动检测和纠正最常见的内部数据损坏,使系统得以正常的 *** 作,不致因错误而中断。通常情况下,ECC内存保持一个内存系统不受单一位错误的影响,即使用5位ECC码纠正8位数据中的1位错误。数据位每增加一倍,ECC只增加1位检验位,即数据位为16位时ECC位为6位,32位时ECC位为7位,数据位为64位时ECC位为8位,依此类推。

向量处理技术能够直接 *** 作一维数组(向量),与一次只能处理一个数据的标量处理正好相反。向量处理技术可以在特定工作环境中极大地提升性能,尤其是在数值模拟或者相似领域。向量处理技术最早出现于20世纪70年代早期,并在70年代到90年代期间成为超级计算机设计的主导方向。由于常规处理器设计性价比的快速下降,基于向量处理的超级计算机在90年代末逐渐让出了主导地位。现在,绝大多数商业化CPU实现都能够提供某种形式的向量处理指令,用来处理多个向量化的数据集,也就是所谓的SIMD(单一指令多重数据)。此外,还有多重指令处理多重向量化数据集的MIMD(多重指令多重数据)技术。

一个报文的产生和发送,都需要硬件和软件的完美配合。
硬件层面接收到报文之后,做一系列的初始化 *** 作,之后驱动才开始把一个封包封装为skb。
当然这是在x86架构下,如果是在cavium架构下,封包是wqe形式存在。
不管是skb还是wqe,都仅仅是一种手段,一种达到完成报文传输所采用的一种解决方案,一种方法而已。
或许处理方案的具体实现细节差别万千,但是基本的原理,都是殊途同归,万变不离其宗。
skb的产生,让Linux协议栈旅程的开启,具备了最基本的条件,接下来的协议栈之旅,才会更加精彩。

写作本文的原因是现在本机网络 IO 应用非常广。
在 php 中 一般 nginx 和 php-fpm 是通过 127001 来进行通信的;
在微服务中,由于 side car 模式的应用,本机网络请求更是越来越多。
所以,如果能深度理解这个问题在各种网络通信应用的技术实践中将非常的有意义。

今天咱们就把 127001 本机网络通信相关问题搞搞清楚!

为了方便讨论,我把这个问题拆分成3问:

1)127001 本机网络 IO 需要经过网卡吗?
2)和外网网络通信相比,在内核收发流程上有啥差别?
3)使用 127001 能比 192168xx 更快吗?

在上面这幅图中,我们看到用户数据被拷贝到内核态,然后经过协议栈处理后进入到了 RingBuffer 中。随后网卡驱动真正将数据发送了出去。当发送完成的时候,是通过硬中断来通知 CPU,然后清理 RingBuffer。

当数据包到达另外一台机器的时候,Linux 数据包的接收过程开始了。
当网卡收到数据以后,CPU发起一个中断,以通知 CPU 有数据到达。
当CPU收到中断请求后,会去调用网络驱动注册的中断处理函数,触发软中断。
ksoftirqd 检测到有软中断请求到达,开始轮询收包,收到后交由各级协议栈处理。
当协议栈处理完并把数据放到接收队列的之后,唤醒用户进程(假设是阻塞方式)。

关于跨机网络通信的理解,可以通俗地用下面这张图来总结一下:

前面,我们看到了跨机时整个网络数据的发送过程 。

在本机网络 IO 的过程中,流程会有一些差别。
为了突出重点,本节将不再介绍整体流程,而是只介绍和跨机逻辑不同的地方。
有差异的地方总共有两个,分别是路由和驱动程序。

对于本机网络 IO 来说,特殊之处在于在 local 路由表中就能找到路由项,对应的设备都将使用 loopback 网卡,也就是我们常见的 lO。

从上述结果可以看出,对于目的是 127001 的路由在 local 路由表中就能够找到了。

对于是本机的网络请求,设备将全部都使用 lo 虚拟网卡,接下来的网络层仍然和跨机网络 IO 一样。

本机网络 IO 需要进行 IP 分片吗?

因为和正常的网络层处理过程一样,如果 skb 大于 MTU 的话,仍然会进行分片。
只不过 lo 的 MTU 比 Ethernet 要大很多。
通过 ifconfig 命令就可以查到,普通网卡一般为 1500,而 lO 虚拟接口能有 65535。

为什么我把“驱动”加个引号呢,因为 loopback 是一个纯软件性质的虚拟接口,并没有真正意义上的驱动。
在邻居子系统函数中经过处理,进入到网络设备子系统,只有触发完软中断,发送过程就算是完成了。

在跨机的网络包的接收过程中,需要经过硬中断,然后才能触发软中断。

而在本机的网络 IO 过程中,由于并不真的过网卡,所以网卡实际传输,硬中断就都省去了。直接从软中断开始,送进协议栈。

网络再往后依次是传输层,最后唤醒用户进程,这里就不多展开了。

我们来总结一下本机网络通信的内核执行流程:

回想下跨机网络 IO 的流程:

通过本文的叙述,我们确定地得出结论,不需要经过网卡。即使了把网卡拔了本机网络是否还可以正常使用的。

总的来说,本机网络 IO 和跨机 IO 比较起来,确实是节约了一些开销。发送数据不需要进 RingBuffer 的驱动队列,直接把 skb 传给接收协议栈(经过软中断)。

但是在内核其它组件上可是一点都没少:系统调用、协议栈(传输层、网络层等)、网络设备子系统、邻居子系统整个走了一个遍。连“驱动”程序都走了(虽然对于回环设备来说只是一个纯软件的虚拟出来的东东)。所以即使是本机网络 IO,也别误以为没啥开销。

先说结论:我认为这两种使用方法在性能上没有啥差别。

我觉得有相当大一部分人都会认为访问本机server 的话,用 127001 更快。原因是直觉上认为访问 IP 就会经过网卡。

其实内核知道本机上所有的 IP,只要发现目的地址是本机 IP 就可以全走 loopback 回环设备了。
本机其它 IP 和 127001 一样,也是不用过物理网卡的,所以访问它们性能开销基本一样!

How SKBs work - Linux kernel
>

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/10350146.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-07
下一篇 2023-05-07

发表评论

登录后才能评论

评论列表(0条)

保存