用于软件虚拟交换机的数据平面语义的制作方法

文档序号:20271978发布日期:2020-04-03 19:09阅读:120来源:国知局
本专利文档的公开内容的部分可以包含受版权保护的材料。版权所有者不反对任何人复制专利和商标局专利文件或记录中出现的专利文档或专利公开内容,但在其他方面保留所有版权权利。版权声明应用于如下所述的所有数据,以及附于本文的附图,以及下述任何软件:版权所有英特尔公司,保留所有权利。
背景技术
::软件定义网络(softwaredefinednetworking)(sdn)和虚拟网络功能(vnf)技术使得通信服务提供商能够在通用计算平台上创建用于计算、联网和存储的数据中心资源池。与固定目的网络硬件(例如,网络处理设备)相比,这些技术利用由在通用计算平台上运行的软件提供的可编程性、灵活性和低操作成本。近来,在sdn和vnf环境中已经使用以软件实现的虚拟路由器和/或虚拟交换机(通常称为软件虚拟交换机)以用于处理网络数据分组。软件虚拟交换机面临类似于硬件交换机的问题,这是因为当交付给客户时交换机中定义了固定范围的协议。虽然软件虚拟交换机比硬件交换机更容易配置并且可以更频繁地更新,但软件虚拟交换机仍然需要大量的工程工作来添加新协议。为了解决硬件交换机的可配置性问题,已经定义了称为p4的域特定语言(dsl)。p4是独立于协议的语言,其用于描述交换机的数据平面。p4语言允许用户定义用于交换机的协议和/或处理阶段。p4还可以用于编程在通用计算平台上运行的软件虚拟交换机。p4被定义为对平台不可知的(platformagnostic);然而,p4目前并未被设计为充分利用某些通用计算架构,所述架构允许软件虚拟交换机具有与硬件交换机不同的功能,以获得最佳性能。特别地,p4缺乏在支持英特尔架构(ia)指令集的通用计算平台上最佳地用于软件虚拟交换机的语义。例如,p4缺乏用于由程序员定义要在软件虚拟交换机中使用的不同候选分类算法的手段,或者定义可以改善处理器性能或者知道处理器和高速缓存布局的数据结构的手段。附图说明图1示出了包括虚拟交换机的示例性计算平台。图2示出了编译器将匹配动作表指派给核心的处理的示例性流程图。图3示出了分组处理流水线中的示例性流高速缓存。图4示出了编译器将匹配动作表和流高速缓存指派给核心的处理的示例性流程图。图5示出了编译器选择分组处理算法的处理的示例性流程图。图6示出了编译器设置匹配动作表优先级的处理的示例性流程图。图7示出了示例性计算系统。图8示出了存储介质的示例。图9示出了另一示例性计算平台。具体实施方式网络声明式语言可以降低对交换机进行编程的复杂性。例如,虽然最初被设计用于对网络处理器进行编程,但是称为p4的语言可以相对无缝地用于定义软件虚拟交换机中的功能。然而,由于硬件交换机和通用计算平台之间的显著差异,因此使用p4作为默认声明式语言而不进行任何扩展不会得到在通用计算平台上运行的软件虚拟交换机的最佳性能。本发明的实施例提供一组声明式语言语义,其被设计为允许程序员在软件虚拟交换机中定义数据平面功能,以便优化通用计算平台上的软件虚拟交换机的性能。p4是特定于域的语言,其表达网络转发元素的流水线应如何使用抽象转发模型来处理分组。在此模型中,每个分组首先穿过可编程解析器,所述解析器提取报头。p4程序指定每个可能的报头的结构以及表达排序和依赖性的解析图。然后,分组穿过一系列(例如,流水线)的匹配动作表(mat)。mat指定要与分组匹配什么数据、可能的动作的列表,并且可选地指定多个表属性,例如大小、默认动作、静态条目、优先级等。每个mat包含一个或多个称为规则或流的条目。条目包含用于匹配的特定键、当分组与条目匹配时被执行的单个动作、以及动作数据(其可以为空)。p4程序指定mat中的每个mat可以匹配的字段以及它们之间的控制流,以及用于每个表的可允许的动作的范围。在运行时(即,当交换机正在转发分组的同时),控制器软件(在控制平面中)可以用符合p4程序规范的特定匹配动作规则来添加、移除和修改表条目。最后,在将分组发出适当的端口之前,逆解析器(deparser)将报头字段写回到分组上。尽管本文引用了p4语言,但是本发明的实施例可以与其他声明式语言一起使用。图1示出了包括虚拟交换机120的示例性计算平台114。计算平台114包括至少一个网络接口116(例如,网络接口控制器(nic))以用于发送和接收分组118。至少一个网络接口116将接收的分组转发到虚拟交换机120以进行处理。在实施例中,虚拟交换机120以在计算平台114的一个或多个处理核心(图1中未示出)上执行的软件实现。虚拟交换机120依赖于来自诸如应用程序(未示出)之类的控制器的指令来确定虚拟交换机的行为。可以就mat的集合而言定义虚拟交换机的行为。当分组118之一到达虚拟交换机120内的特定mat时,虚拟交换机寻求找到匹配规则/流,并且如果找到了,则执行相关动作。如果多于一个流与分组匹配,则具有最高优先级的流优先。计算平台114还包括多个虚拟机(vm),或在云原生基础设施的情况下(其中主要使用容器而不是vm)包括容器。可以使用零个或更多个vm122来处理从虚拟交换机120接收的分组。可以使用相同或不同的零个或更多个vm124来发送和接收去往和来自至少一个网络接口116的分组。程序员编写声明式语言程序102以实现虚拟交换机120的期望的分组处理功能。声明式语言程序被输入到编译器104。编译器104包括前端组件106以解析程序并生成中间代码表示。编译器104包括后端组件112以根据中间代码生成机器代码。在计算平台114的一个或多个核心上执行的机器代码包括虚拟交换机120的实施例。本发明的实施例包括声明式语言语义,以指定将匹配动作表指派给多核心通用计算平台上的核心。编译器后端112可以自动地将mat指派给核心,但是用于虚拟交换机程序员指定映射的声明式语言语义是有用的。例如,有两种方法可以将分组处理阶段指派给核心:1)运行到完成模型(run-to-completionmodel),以及2)流水线模型(pipelinedmodel)。在运行到完成模型中,每个核心执行相同的完整分组处理功能,而在流水线模型中,每个核心执行分组处理流水线的一个阶段,并且将分组传递到流水线的下一阶段,所述下一阶段可以潜在地在与前一阶段不同的核心上运行。如果使用流水线模型,则在虚拟交换机中需要附加的代码(例如,以处理核心到核心的通信环)。两种型号都有优点和缺点。运行到完成模型避免了核心到核心的通信开销,而流水线模型可以避免单个核心上的大量代码占用,并且在每个核心的私有高速缓存中保持更好的指令和数据高速缓存局部性。在没有运行时简档信息的情况下,编译器后端112无法知道应该针对给定工作负载最佳地选择哪个模型。然而,程序员可以具有底层计算平台和数据分组的当前流量模式的先验知识,以使得程序员可以使用本文描述的语义来在虚拟交换机的编程阶段期间选择最佳模型。此外,在包括大小核心架构的通用计算平台(例如,英特尔架构计算平台)中,程序员可以将更重要或更频繁使用的流水线和/或匹配动作表指派给大核心,而将很少访问mat指派给小核心。用这种声明式语言语义,程序员可以如下面的示例所示地描述mat。非统一存储器访问(numa)id和核心id是逻辑标识符。表级核心映射将表指派给多个核心。相反,流水线级核心映射是更粗粒度的,这意味着在分组处理流水线中定义的一组mat将在单个指定的核心上运行。不同的流水线将使用不同的核心。该声明式语言语义使得程序员能够控制对通用计算平台114中的核心资源的分配。在一个实施例中,编译器104将高级声明式语言程序102(即,源代码)编译成多线程c/c++代码。编译器104针对源代码内的信息和属性检查通用计算平台114。编译器104将必要线程亲和性应用程序接口(api)(例如,基于的计算平台上的setthreadaffinitymask()和基于的计算平台上的sched_setaffinity())插入到每个线程中,其对应于由程序员定义的mat或流水线。图2示出了编译器将匹配动作表(mat)指派给核心的处理的示例性流程图。在框202处,编译器104的前端106解析定义mat流水线的声明式语言程序102。在框204处,前端106将匹配动作流水线的一个或多个mat转换成中间代码。在实施例中,中间代码是c或c++语言。在框206处,前端106解析流水线中的每个mat的核心id,如在声明式语言程序102中所写的。在上面的示例中,这被示出为assigntocore(core_id)。在实施例中,前端106构建指定的核心id对和mat的列表。在框208处,如果所有mat被指定为由一个核心处理(例如,列表中的所有mat具有相同的指定的核心id),则处理继续到框210。在框210处,前端106使用函数调用来连接mat的中间代码。生成的中间语言的伪代码如下所示。“for:循环”用于迭代所有匹配动作表并调用每个表的进程函数。pipeline_process():for流水线的表列表中的每个表:missed_packets=process_table(all_packets)all_packets=missed_packets在框212处,后端112将中间代码转换成机器代码,以便稍后由通用计算平台114的一个核心执行。在框208处,如果所有mat未被指定为在相同核心上(例如,列表中的mat中的至少两个mat具有不同的指定的核心id),则处理继续到框214。在框214处,前端106添加中间代码以在多个核心上调度和执行多个线程。在实施例中,将在每个指定的核心上调度一个线程。在另一实施例中,将针对指定的核心上的每个mat调度线程。在实施例中,使用称为“pthread_create”和“pthread_setaffinity_np”的“pthread”库函数来实现框214。可选地,在一个实施例中,在框216处,前端106生成用于在通用计算平台上运行的控制平面应用的api代码,所述控制平面应用控制虚拟交换机120以能够在运行时期间针对每个核心设置线程亲和性。在框218处,前端106将mat插入到由核心上的线程调用的函数中。在框220处,前端106通过添加用于线程之间的表到表通信的队列来连接mat的中间代码和线程。在实施例中,队列被存储在可由核心访问的共享存储器位置中的先进先出(fifo)队列中。软件fifo队列数据结构通常在网络中用于阶段间通信,这是因为在处理阶段之间传递的同时需要保持分组的排序。队列可以被实现为无锁数据结构,以避免由软件锁定机制引起的额外开销。在另一实施例中,可以使用硬件队列。硬件队列可以是协助在两个软件线程之间的数据传输的硬件逻辑单元。多线程、多核心处理在框212处完成,其中,后端112将中间代码转换成机器代码以便稍后由通用计算平台114的多个核心执行。在本发明的实施例中,可以使用声明式语言来定义称为流高速缓存的新的软件高速缓存数据结构。流高速缓存也是匹配动作表,但一个区别是流高速缓存尝试将组合多个匹配动作表的匹配动作进行缓存,并且将流键(flowkey)存储在流高速缓存内部。与匹配动作表中的规则不同,流键是对分组感兴趣的报头字段。不同的分组可以匹配规则表中的相同规则,但是包含非常不同的报头字段(即,流键)。例如,包含ip报头字段1.1.1.1和1.1.1.2的两个分组匹配相同的规则1.1.1.0/24。然而,它们具有不同的报头字段,这使得它们关于流键不同。这两个分组最终将作为流高速缓存中的两个条目。在实施例中,流高速缓存是用于存储相关分组报头字段的数据结构。可以通过在常量时间(与在o(n)时间中检查mat相对,其中,n是表的数量)中简单匹配(无通配)来访问流高速缓存。流高速缓存中的条目可以由新插入的条目逐出。在通用计算平台114上,软件缓存机制是有用的,这是因为与网络处理器不同,诸如英特尔架构系统之类的通用计算平台不具有三元内容可寻址存储器(tcam)或特定专用集成电路(asic)逻辑以用于专门加速通配符匹配。用高速缓冲存储器换取计算时间是对处理核心的优化。可以将流高速缓存插入到分组处理流水线内的任何位置中以改善性能。下面的代码示出了流高速缓存语义的示例:图3示出了分组处理流水线中的示例性流高速缓存。在该示例中,软件流高速缓存302分别在用于互联网协议(ip)和用户数据报协议(udp)字段的两个匹配动作表304、306之前定义。此高速缓存的键是ip字段加上分组报头的udp字段,并且动作从两个表派生,并且还被存储在流高速缓存中。如果分组在流高速缓存中命中,则从以下ip和udp匹配动作表组合的动作将立即应用于分组,并且分组可以绕过两个匹配动作表并去往下一处理阶段。如果分组在流高速缓存中未命中,则将使用常规处理流水线。在没有高速缓存的情况下,分组需要遍历两个匹配动作表。当发生未命中时,将流键以及来自两个表的动作一起插入流高速缓存中。如果高速缓存已满,则高速缓存中的旧条目将被逐出,并且新条目将被插入。经常匹配的流被缓存在流高速缓存302中。流高速缓存302中较远期使用的条目(lessrecentlyusedentry)被自动逐出流高速缓存。在实施例中,最近最少使用(lru)策略(leastrecentlyused(lru)policy)由编译器后端112实现以更换陈旧条目。由于流高速缓存302不被要求存储每个流而仅存储热流,因此流高速缓存在高速缓存/存储器要求的意义上可以是轻量级的,并且在核心上的处理速度快。流高速缓存是快的,这是因为流高速缓存是精确匹配高速缓存,而没有通配功能。流高速缓存不需要复杂,并且不使用用于诸如元组空间搜索和基于字典树(trie)的搜索之类的过程的慢速数据结构。当程序员知道存在偏斜的流量模式或复杂的数据结构时,程序员可以使用本发明的实施例的流高速缓存语言语义来定义匹配动作表前面的流高速缓存,以加速在通用计算平台上的处理。图4示出了由编译器将匹配动作表和流高速缓存指派给核心的处理的示例性流程图。图4类似于图2,但包括特定于流高速缓存的处理。在框402处,编译器104的前端106解析定义匹配动作表流水线的声明式语言程序102,所述匹配动作表流水线在该场景中还可以包括一个或多个流高速缓存。在框404处,前端106将匹配动作流水线的一个或多个mat和一个或多个流高速缓存转换成中间代码。在实施例中,中间代码采用c或c++语言。在框406处,前端106解析流水线中的每个mat和流高速缓存的核心id,如在声明式语言程序102中所写的。在实施例中,前端106构建指定的核心id对和匹配动作表/流高速缓存的列表。在框408处,如果所有mat被指定为由一个核心处理(例如,列表中的所有mat具有相同的指定的核心id),则处理继续到框409。在框409处,前端106解析流高速缓存的属性以找到流高速缓存的流水线位置。例如,程序员可以在分组处理流水线的任何阶段处指定流高速缓存以将mat的动作进行缓存。在框410处,前端106使用函数调用来连接mat和一个或多个流高速缓存的中间代码。在框412处,后端112将中间代码转换成机器代码,以便稍后由通用计算平台114的一个核心执行。在框408处,如果所有mat未被指定在相同核心上(例如,列表中的mat中的至少两个mat具有不同的指定的核心id),则处理继续到框414。在框414处,前端106添加中间代码以在多个核心上调度和执行多个线程。在实施例中,将在每个指定的核心上调度一个线程。在另一实施例中,将针对指定的核心上的每个mat调度线程。在实施例中,使用称为“pthread_create”和“pthread_setaffinity_np”的“pthread”库函数来实现框414。可选地,在一个实施例中,在框416处,前端106针对在通用计算平台上运行的控制平面应用生成api代码,所述控制平面应用控制虚拟交换机120以能够在运行时期间针对每个核心设置线程亲和性。在框418处,前端106将mat和一个或多个流高速缓存插入到函数中,以供由核心上的线程调用。在框419处,前端106解析流高速缓存的属性以找到流高速缓存的流水线位置。在框420处,前端106通过添加用于线程之间的表到表通信的队列来连接匹配动作表/流高速缓存的中间代码和线程。在实施例中,队列被存储在可由核心访问的共享存储器位置中的先进先出(fifo)队列中。多线程、多核心处理在框412处完成,其中,后端112将中间代码转换成机器代码,以便稍后由通用计算平台114的多个核心执行。在硬件交换机中,由于硬件能力(例如,总线宽度、端口数量、流水线宽度、tcam/cam资源等),所以分组处理阶段通常是固定的。然而,在一个或多个核心上运行的软件虚拟交换机120中,分组处理流水线的实施方式是灵活的。例如,不同的分组批处理大小意味着各种性能延时权衡。使用大的批处理大小可以改善分组处理吞吐量,同时还会增加延时。如何处理不同分组流量特性的规范可以基于不同方面(即,延时对吞吐量)。例如,为了处理ip语音(voip)/游戏流量,更短的延时可以是优选的,以使得大的批处理大小可能不是最佳的。有益的是程序员能够在编程语言级别处定义对更高吞吐量或更短延时的偏好而不是依赖于编译器后端112。用于定义该偏好的声明式语言扩展的一个示例是:controll2_pipeline{preference=latency}在该示例中,分组处理流水线是以延时为中心的,这意味着软件虚拟交换机120应该使用分组的较小批处理的来改善延时。在本发明的实施例中,编译器后端解释该偏好选择。除了批处理大小之外,延时敏感的流水线还可以在运行时期间获得更多的硬件/软件资源。例如,从os的进程调度程序(scheduler)角度,运行延时敏感的流水线的线程可以获得更高的优先级。中间代码可以使用某些api(例如,用于linux的sched_priority)来调整线程的优先级以进行调度。微架构级别支持也是可能的。例如,处理器或存储器可以将某些指令优先于来自不同线程或存储器地址的其他指令。这要求来自系统和硬件二者的能力。语言扩展为程序员提供了用于从高级别调整它的方法,并且编译器利用了计算系统中可用的任何东西。在软件虚拟交换机中使用不同的软件算法会影响分组处理性能。在本发明的实施例中,提供声明式语言语义以使得程序员能够针对每个匹配动作表选择特定算法。每个支持的算法由存储的代码片段描述,所述存储的代码片段可以由编译器针对选择的mat和/或流高速缓存进行修改。下面示出了具有用于不同表类型和流水线阶段的两种不同算法的该语义的示例。在实施例中,可以指定许多不同的算法。在该示例中,程序员针对键匹配动作指定软件算法。例如,对于最长前缀匹配(lpm)动作,可以指定具有可变长度比特的多比特字典树算法。使用可变长度的比特的含义是通用处理核心上的得到的可变存储器消耗和字典树深度权衡。程序员知道哪种算法可以更好地用于某些规则集,并且可以用存储器使用换取查找速度。另一示例是三元匹配键(通配符匹配)。程序员可以选择使用基于树的算法或元组空间搜索算法(例如,使用一系列哈希表)。基于树的算法通常具有更快的查找速度,但具有更慢的规则更新速度。元组空间搜索算法通常具有较慢的查找速度,但具有更快的规则更新速度。取决于虚拟交换机120的要求,程序员可以使用选择软件算法语义来选择要在虚拟交换机中用于匹配动作表的不同算法。图5示出了编译器选择分组处理算法的处理的示例性流程图。在实施例中,图5的处理被实现以代替图2的框204或代替图4的框404。对于在声明式语言程序102中定义的指定非空算法属性的每个匹配动作表和流高速缓存,重复图5。在框502处,前端106解析mat或流高速缓存的算法属性。在框504处,前端106针对支持的算法和相关联的代码片段搜索数据库。在实施例中,每个算法由实现该算法的可重用的代码片段表示。如果在框506处所指定的算法由编译器104支持,则处理继续到框508。如果所指定的算法未由编译器104支持,则处理继续到框510。在框508处,前端106使用所指定和支持的算法的代码片段和相关联的数据结构来将mat或流高速缓存转换成中间代码。在实施例中,相关联的数据结构是基于树的或基于散列表的数据结构,这取决于指定了哪个算法。在框510处,前端106使用默认算法的代码片段和相关联的数据结构来将mat或流高速缓存转换成中间代码。在硬件交换机中,mat通常被闪存到现场可编程门阵列(fpga)或可编程逻辑上。mat通常不与其他硬件资源竞争。然而,对于在通用计算平台上运行的虚拟交换机120,如果多个mat正在一个核心上被执行,则一些硬件资源(包括高速缓冲存储器)可能受影响。在本发明的实施例中,提供声明式语言语义以定义当mat被分配给相同核心时他们的优先级。高优先级mat将靠近核心放置,或者具有独占的高速缓冲存储器来使用,以使得这些mat的处理时间将潜在地更快,或者可以保证最差执行时间。如果低级硬件具有用于将一个匹配动作表优先于另一匹配动作表的能力,则编译器后端112将根据它们的高速缓冲存储器使用来对选择的mat进行优先级排序,如下面的示例所示。当定义mat时,程序员可以选择启用优先级。如果启用,则每个mat都要求一个额外的字段来指定表的优先级。通用计算平台将核心配置为使用通用计算平台上可用的任何技术来给予选择的mat优先级。例如,高优先级表可以固定到私有处理器高速缓存(例如,在x8664位平台(“英特尔架构”)中,一个核心可以具有两级私有处理器高速缓存,包括一级(l1)和二级(l2)高速缓存。私有处理器高速缓存中的mat将具有更快的访问时间。)以使得其他mat不能将高速缓存行逐出本地高速缓存。在使用可从英特尔公司商业获得的高速缓存分配技术(cat)的实施例中,处理较高优先级mat的一个线程可以具有被分配的专用三级(l3)高速缓存容量。mat的该数据固定在三级(l3)高速缓存中。在其他实施例中,其他计算平台特征可以实现更灵活的优先级设置。图6示出了编译器设置匹配动作表优先级的处理的示例性流程图。图6类似于图5,但增加了优先检查特征。针对在声明式语言程序102中定义的指定非空算法属性的每个mat和流高速缓存,重复图6的处理。在框602处,前端106解析mat或流高速缓存的算法属性。在框604处,前端106针对支持的算法搜索数据库。在实施例中,每个算法由实现该算法的可重用代码块表示。如果在框606处,所指定的算法由编译器104支持,则处理继续到框608。如果所指定的算法未由编译器104支持,则处理继续到框610。在框608处,前端106使用所指定和支持的算法和相关联的数据结构来将mat或流高速缓存转换成中间代码。在实施例中,相关联的数据结构是基于树的或基于散列表的数据结构,这取决于指定了哪个算法。在框610处,前端106使用默认算法和相关联的数据结构来将mat或流高速缓存转换成中间代码。在框612处,检查mat的优先级。如果程序员在声明式语言程序102中将匹配动作表设置为高优先级,则在框614处,前端106将高速缓存锁定中间代码添加到mat的中间代码,以用于在核心上处理mat时l3使高速缓存被锁定。在实施例中,仅有两个优先级设置可用——高优先级和普通优先级。在其他实施例中,可以使用更多优先级设置。与硬件交换机不同,软件虚拟交换机通常需要支持各种i/o接口。例如,可以选择内核心堆栈或数据平面开发工具包(dpdk)来在nic和软件之间进行接合。对于vm或容器,虚拟交换机必须支持其他类型的接口,例如“veth”或“vhost”。在实施例中,编译器后端112编译用于虚拟交换机120的声明式语言程序102,所述虚拟交换机120支持所有支持的接口,并且然后接口可以在运行时期间被选择。在另一实施例中,如果程序员指定需要哪个接口,则代码库和运行时逻辑被简化。例如:controlmatchactionpipe(inbitinputport[dpdk],inouthparsedheaders,outbitoutputport[virtio]);在以上示例中,用某些端口来定义流水线。输入端口将是dpdk端口,并且输出端口将是“virtio”。编译器后端112可以使用该信息来进一步简化/优化i/o代码以改善虚拟交换机的性能。在本发明的实施例中,公开了一组声明式语言语义,其可以应用于优化通用计算平台上的软件虚拟交换机代码。在实施例中,这些特征可以被包括在全新的声明式语言中,或者作为诸如p4之类的现有语言的扩展而被添加。包括图形处理单元(gpu)或加速器的其他类型的通用计算硬件也可以受益于所公开的用于分组处理的语义。图7示出了示例性计算系统700。如图7所示,计算系统700包括耦合到网络770(例如,其可以是互联网)的计算平台701。在一些示例中,如图7所示,计算平台701经由网络通信信道775并且通过至少一个网络i/o设备710(例如,网络接口控制器(nic))耦合到网络770,所述至少一个网络i/o设备710具有连接或耦合到网络通信信道775的一个或多个端口。在实施例中,网络通信信道775包括phy设备(未示出)。在实施例中,网络i/o设备710是以太网nic。网络i/o设备710在网络770上将数据分组从计算平台701发送到其他目的地,并且从其他目的地接收数据分组以用于转发到计算平台701。根据一些示例,如图7所示,计算平台701包括电路720、主存储器730、网络(nw)i/o设备驱动程序740、操作系统(os)750、至少一个控制平面应用760、以及一个或多个存储设备765。在一个实施例中,os750是linuxtm。在另一实施例中,os750是服务器。网络i/o设备驱动程序740操作以初始化和管理由网络i/o设备710执行的i/o请求。在实施例中,被发送到网络i/o设备710和/或从网络i/o设备710接收的分组和/或分组元数据被存储在主存储器730和/或存储设备765中的一个或多个中。在至少一个实施例中,由编译器104编译的虚拟交换机120是分组处理应用。在至少一个实施例中,存储设备765可以是硬盘驱动器(hdd)和/或固态驱动器(ssd)中的一个或多个。在实施例中,存储设备765可以是非易失性存储器(nvm)。在一些示例中,如图7所示,电路720可以经由通信链路155通信地耦合到网络i/o设备110。在一个实施例中,通信链路755是符合版本3.0的外围组件接口快速(pcie)总线或由pci特别兴趣小组(pci-sig)发布的pcie标准的其他版本。在一些示例中,操作系统750、nwi/o设备驱动程序740、虚拟交换机120和应用760至少部分地经由被包括在主存储器730中的一个或多个存储器设备(例如,易失性或非易失性存储器设备)、存储设备765、以及诸如处理核心722-1至722-m之类的电路720的元件之间的协作来实现,其中,“m”是大于2的任何正整数。在实施例中,os750、nwi/o设备驱动程序740、编译器104、虚拟交换机120以及应用760由一个或多个处理核心722-1至722-m执行。在一些示例中,计算平台701包括但不限于服务器、服务器阵列或服务器机群、web服务器、网络服务器、互联网服务器、工作站、小型计算机、大型计算机、超级计算机、网络设备、web设备、分布式计算系统、多处理器系统、基于处理器的系统、膝上型计算机、平板计算机、智能手机或其组合。在一个示例中,计算平台701是解聚的服务器。解聚的服务器是将组件和资源分解成子系统的服务器。解聚的服务器可以根据需要适于更改存储或计算负载,而在延长的时间段内不更换或中断整个服务器。例如,服务器可以被分解成可以在其他附近服务器当中共享的模块化计算、i/o、电力和存储模块。具有处理核心722-1至722-m的电路720可以包括各种商业可用的处理器,包括但不限于core(2)corei3、corei5、corei7、或处理器、arm处理器以及类似的处理器。电路720可以包括至少一个高速缓存735以用于存储数据。根据一些示例,主存储器730可以由一个或多个存储器设备或管芯组成,其可以包括各种类型的易失性和/或非易失性存储器。易失性类型的存储器可以包括但不限于动态随机存取存储器(dram)、静态随机存取存储器(sram)、晶闸管ram(tram)或零电容器ram(zram)。非易失性类型的存储器可以包括字节或块可寻址类型的非易失性存储器,所述字节或块可寻址类型的非易失性存储器具有三维(3-d)交叉点存储器结构,其包括硫族化物相变材料(例如,硫族化物玻璃),在下文中称为“3-d交叉点存储器”。非易失性类型的存储器还可以包括其他类型的字节或块可寻址非易失性存储器,例如但不限于多门限级别nand闪速存储器、nor闪速存储器、单级或多级相变存储器(pcm)、电阻存储器、纳米线存储器、铁电晶体管随机存取存储器(fetram)、包含忆阻器技术的磁阻随机存取存储器(mram)、自旋转移力矩mram(stt-mram)或上述任何一种的组合。在另一实施例中,主存储器730可以包括计算平台701内的和/或可由计算平台701访问的一个或多个硬盘驱动器。图8示出了存储介质800的示例。存储介质800可以包括制品。在一些示例中,存储介质800可以包括任何非暂时性计算机可读介质或机器可读介质,例如光学、磁性或半导体存储装置。存储介质800可以存储各种类型的计算机可执行指令,例如用于分别实现图2、图4至图6的逻辑流程200、400、500和600的指令802。计算机可读或机器可读存储介质的示例可以包括能够存储电子数据的任何有形介质,包括易失性存储器或非易失性存储器、可移动或不可移动存储器、可擦除或不可擦除存储器、可写入或可重写存储器等等。计算机可执行指令的示例可以包括任何合适类型的代码,例如源代码、编译的代码、解释的代码、可执行代码、静态代码、动态代码、面向对象代码、可视代码等。示例不限于此上下文。图9示出了示例性计算平台900。在一些示例中,如图9所示,计算平台900可以包括处理组件902、其他平台组件904和/或通信接口906。根据一些示例,处理组件902可以针对存储在存储介质800上的指令执行处理操作或逻辑。处理组件902可以包括各种硬件元件、软件元素或二者的组合。硬件元件的示例可以包括设备、逻辑设备、组件、处理器、微处理器、电路、处理器电路、电路元件(例如,晶体管、电阻器、电容器、电感器等)、集成电路、专用集成电路(asic)、可编程逻辑器件(pld)、数字信号处理器(dsp)、现场可编程门阵列(fpga)、存储器单元、逻辑门、寄存器、半导体器件、芯片、微芯片、芯片组等。软件元素的示例可以包括软件组件、程序、应用、计算机程序、应用程序、设备驱动程序、系统程序、软件开发程序、机器程序、操作系统软件、中间件、固件、软件模块、例程、子例程、函数、方法、过程、软件接口、应用程序接口(api)、指令集、计算代码、计算机代码、代码段、计算机代码段、字、值、符号或其任何组合。确定是否使用硬件元件和/或软件元素来实现示例可以根据任何数量的因素而变化,例如期望的计算速率、功率水平、热容差、处理周期预算、输入数据速率、输出数据速率、存储器资源、数据总线速度和其他设计或性能约束,如给定示例所期望的。在一些示例中,其他平台组件904可以包括公共计算元件,例如一个或多个处理器、多核心处理器、协处理器、存储器单元、芯片组、控制器、外围设备、接口、振荡器、定时设备、视频卡、音频卡、多媒体输入/输出(i/o)组件(例如,数字显示器)、电源等。存储器单元的示例可以包括但不限于采用一个或多个更高速存储器单元形式的各种类型的计算机可读和机器可读存储介质,例如只读存储器(rom)、随机存取存储器(ram)、动态ram(dram)、双倍数据速率dram(ddram)、同步dram(sdram)、静态ram(sram)、可编程rom(prom)、可擦除可编程rom(eprom)、电可擦除可编程rom(eeprom)、非易失性类型的存储器,例如可以是字节或块可寻址的3-d交叉点存储器。非易失性类型的存储器还可以包括其他类型的字节或块可寻址非易失性存储器,例如但不限于多门限级别nand闪速存储器、nor闪速存储器、单级或多级pcm、电阻式存储器、纳米线存储器、fetram、包含忆阻器技术的mram、stt-mram或上述任何一种的组合。其他类型的计算机可读和机器可读存储介质还可以包括磁卡或光卡,诸如独立磁盘冗余阵列(raid)驱动器之类的设备阵列、固态存储器设备(例如,usb存储器)、固态驱动器(ssd)以及适用于存储信息的任何其他类型的存储介质。在一些示例中,通信接口906可以包括逻辑和/或特征以支持通信接口。对于这些示例,通信接口906可以包括根据各种通信协议或标准操作以在直接或网络通信链路或信道上进行通信的一个或多个通信接口。直接通信可以经由使用在一个或多个行业标准(包括后代和变体)中描述的通信协议或标准来发生,例如与pcie规范相关联的那些。网络通信可以经由使用通信协议或标准发生,例如在由ieee公布的一个或多个以太网标准中描述的那些。例如,一个这样的以太网标准可以包括ieee802.3。网络通信也可以根据诸如openflow交换机规范之类的一个或多个openflow规范发生。计算平台900的组件和特征(包括由存储在存储介质800上的指令表示的逻辑)可以使用分立电路、asic、逻辑门和/或单芯片架构的任何组合来实现。此外,计算平台900的特征可以使用微控制器、可编程逻辑阵列和/或微处理器或(在适当合适时)前述的任何组合来实现。注意,硬件、固件和/或软件元素可以在本文中统称或个别地称为“逻辑”或“电路”。应当领会,图9的框图中所示的示例性计算平台900可以表示许多潜在实施方式的一个功能描述性示例。因此,附图中描绘的块功能的划分、省略或包含并未推断用于实现这些功能的硬件组件、电路、软件和/或元素必须在实施例中被划分、省略或包括。可以使用硬件元件、软件元素或二者的组合来实现各种示例。在一些示例中,硬件元件可以包括设备、组件、处理器、微处理器、电路、电路元件(例如,晶体管、电阻器、电容器、电感器等)、集成电路、asic、可编程逻辑器件(pld)、数字信号处理器(dsp)、fpga、存储器单元、逻辑门、寄存器、半导体器件、芯片、微芯片、芯片组等。在一些示例中,软件元素可以包括软件组件、程序、应用、计算机程序、应用程序、系统程序、机器程序、操作系统软件、中间件、固件、软件模块、例程、子例程、函数、方法、过程、软件接口、应用程序接口(api)、指令集、计算代码、计算机代码、代码段、计算机代码段、字、值、符号或其任何组合。确定是否使用硬件元件和/或软件元素来实现示例可以根据任何数量的因素而变化,例如期望的计算速率、功率水平、热容差、处理周期预算、输入数据速率、输出数据速率、存储器资源、数据总线速度和其他设计或性能约束,如给定实施方式所期望的。一些示例可以包括制品或至少一种计算机可读介质。计算机可读介质可以包括用于存储逻辑的非暂时性存储介质。在一些示例中,非暂时性存储介质可以包括能够存储电子数据的一种或多种类型的计算机可读存储介质,包括易失性存储器或非易失性存储器、可移动或不可移动存储器、可擦除或不可擦除存储器、可写入或可重写存储器等等。在一些示例中,逻辑可以包括各种软件元素,例如软件组件、程序、应用、计算机程序、应用程序、系统程序、机器程序、操作系统软件、中间件、固件、软件模块、例程、子例程、函数、方法、过程、软件接口、api、指令集、计算代码、计算机代码、代码段、计算机代码段、字、值、符号或其任何组合。可以使用表达“在一个示例中”或“示例”连同其衍生词来描述一些示例。这些术语意味着结合该示例描述的特定特征、结构或特性被包括在至少一个示例中。在说明书中的各处出现的短语“在一个示例中”不一定都指代相同示例。本文包括表示用于执行所公开的架构的新颖方面的示例性方法的逻辑流程或方案。虽然出于简化说明的目的,本文所示的一种或多种方法被示出并描述为一系列动作,但是本领域技术人员将理解并领会,这些方法不受动作顺序的限制。因此,一些动作可以根据其以不同的顺序发生和/或与本文示出和描述的其他动作同时发生。例如,本领域技术人员将理解并领会,方法可以替代地被表示为一系列相互关联的状态或事件,例如在状态图中。此外,并非方法中所示的所有动作都可能是新颖实施方式所要求的。可以用软件、固件和/或硬件来实现逻辑流程或方案。在软件和固件实施例中,逻辑流程或方案可以由存储在至少一个非暂时性计算机可读介质或机器可读介质(例如,光学、磁性或半导体存储装置)上的计算机可执行指令来实现。实施例不限于此上下文。使用表达“耦合”和“连接”连同其衍生词来描述一些示例。这些术语不一定旨在作为彼此的同义词。例如,使用术语“连接”和/或“耦合”的描述可以指示两个或更多个元件彼此直接物理或电接触。然而,术语“耦合”还可以意指两个或更多个元件彼此不直接接触,但仍然彼此协作或交互。需要强调的是,提供了本公开内容的摘要以符合美国联邦法规第37章第1.72(b)条,其要求允许读者快速确定技术公开内容的本质的摘要。提交时理解,摘要将不用于解释或限制权利要求的范围或含义。另外,在前面的具体实施方式中,可以看出,出于简化本公开内容的目的,各种特征在单个示例中被组合在一起。该公开方法不应被解释为反映所要求保护的示例需要比每个权利要求中明确记载的更多特征的意图。而是,如所附权利要求所反映的,发明主题在于少于单个公开示例的所有特征。因此,所附权利要求特此并入具体实施方式中,其中,每个权利要求自身作为单独的示例。在所附权利要求中,术语“包括(including)”和“其中(inwhich)”分别用作相应术语“包括(comprising)”和“其中(wherein)”的简明英语等同物。此外,术语“第一”、“第二”、“第三”等仅用作标记,并不旨在对其对象施加数字要求。虽然已经以特定于结构特征和/或方法动作的语言描述了本主题,但应理解,所附权利要求书中定义的主题不一定限于上述具体特征或动作。而是,公开了上述具体特征和动作作为实现权利要求的示例性形式。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1