在本文的第一部分,主要针对
多内核处理器的应用背景和挑战,控制平面和数据平面的
划分,以及多内核划分和相关的I/O连接等进行了讨论;而在本文的这一部分中,将主要讨论多内核之间的
资源共享问题,包括片上缓存,偏外存储,还有硬件加速资源的共享等。
多内核之间的资源共享
多内核之间的应用划分也意味着所有共享资源的划分,例如片外存储器和片上缓存等。随着单颗裸片上内核数量的增加,片外存储器带宽和片上二彖缓存却没有增加,这是由于引脚数量和裸片尺寸所限。由于控制平面、数据平面和业务代码都具有不同大小的指令占位、进程状态和共享数据,因此多内核处理器必须能够高效地划分存储器资源。芯片上的缓存分配机制和缓存层次越灵活,性能就越好。当多内核共享缓存这些资源(如缓存)时,缓存“垃圾”将越来越多,因为每个内核上的应用程序都会驱逐出其它内核上的应用程序正在使用的数据,从而引起SoC上的性能冲突,并造成一些内核完全耗尽外部的DRAM。
在绝大多数应用中,理想的解决方案是专用缓存和共享缓存相结合,也就是说为一些内核配置中等大小的专用缓存(针对非共享状态),同时配置一些较大的共享缓存(针对共享状态和非共享溢出)。这些共享缓存能以这样的方式灵活分配,即一个内核上的进程和应用程序不会影响其它内核上运行的应用程序使用的缓存数据。其重要性不仅在于性能因素,还因为必须提供用于访问保护的硬件机制。这样做的结果是,在某些内核上运行的某些软件应该与运行在其他内核上的其它软件相互隔离。这将允许在一个集成平台上同时包含信任软件和非信任软件,并且无需担心不良代码影响关键代码的执行,这还有助于定位只对与特定功能相关的那些内核有影响的软件缺陷。
另外一个需要解决的问题是内核对共享资源的使用,比如硬件加速器(它包含了图案匹配和加解密引擎等功能)。这些硬件资源需要支持更高层的功能,像防止入侵、虚拟专网以及当今企业市场需要的更高性能等级的状态防火墙等。如何控制这些资源使得每个内核能够得到分配给它的共享资源呢?可以用专用指令的方式在每颗内核中增加硬件加速功能,或者增加许多内核共享的后备加速器。为了更好地利用硬件加速功能,必须对分组处理代码进行特别设计。如果在内核中增加处理功能,加速可由所有内核均等使用,这样做最容易编程,使用也最容易,但很少能实现最佳性能。因为如果任一内核在运行并不需要特殊加速资源的代码,其他内核便无法使用这些资源,于是便出现这种分布式加速中常见的低效率。不过,为多内核划分软件时,出现所有内核都需要相同的加速资源这种可能性是很小的。
该方案的另一种低效率表现在通过为不提供卸载功能的特殊任务优化指令而出现加速。一个很好的例子就是,一颗内核要么在做正常的分组数据处理,要么在使用执行单元执行加速任务。当该内核在执行这些优化的指令时,将不能转去处理其他的分组数据。使用后备加速的分组处理代码可以用于处理分组,它会将一个分组传给加速器处理并开始处理另一个分组,非常像“管线”的处理方式。加速器在完成它的任务后将分组数据返回给内核做进一步处理。这种类型的加速允许内核充分发挥加速器的性能。尽管向加速器发送指令或接收来自加速器的指令将产生一些开销,但由于加速器在处理分组的同时,内核被释放去做其他的处理任务(换句话说,即加速和卸载),因此总体上增加了内核的每周期指令数。这种方法还需要一个硬件虚拟化服务,以便内核可以发送任务到加速器或者从加速器接受任务,而不依赖软件从中协调。
本文小结
单内核器件已经跟不上网络设备用户的性能需求。随着网络带宽及对高层服务需求的增加,多内核产品将是满足当今分组处理需求的唯一解决方案。目前的多内核处理器包括了许多共享资源,像I/O、缓存和外部存储器等。为了保证高度先进的网络实现所需的性能等级,加速器也越来越重要。对于从事先进的网络设备设计的软件工程师和系统工程师来说,所有这些因素都使得在多内核之间划分控制平面和数据平面代码成为特别重要的问题。
作者: David Kramer
IP开发部门首席架构师
Steve Cole
网络与多媒体部门高级系统架构师
飞思卡尔
半导体公司