CN115309406B - P4控制分支语句的性能优化方法和装置 - Google Patents

P4控制分支语句的性能优化方法和装置 Download PDF

Info

Publication number
CN115309406B
CN115309406B CN202211205104.7A CN202211205104A CN115309406B CN 115309406 B CN115309406 B CN 115309406B CN 202211205104 A CN202211205104 A CN 202211205104A CN 115309406 B CN115309406 B CN 115309406B
Authority
CN
China
Prior art keywords
statement
matching
action table
matching action
branch
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202211205104.7A
Other languages
English (en)
Other versions
CN115309406A (zh
Inventor
刘敏
王伟
李爽
王昕溥
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Dayu Zhixin Technology Co ltd
Original Assignee
Beijing Dayu Zhixin Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Dayu Zhixin Technology Co ltd filed Critical Beijing Dayu Zhixin Technology Co ltd
Priority to CN202211205104.7A priority Critical patent/CN115309406B/zh
Publication of CN115309406A publication Critical patent/CN115309406A/zh
Application granted granted Critical
Publication of CN115309406B publication Critical patent/CN115309406B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4434Reducing the memory space required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • G06F8/4452Software pipelining

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明提供一种P4控制分支语句的性能优化方法和装置,其中方法包括:将条件判断语句中的匹配动作表以及执行分支中的匹配动作表对应的apply函数分解为字段匹配操作和网络动作执行操作,并判断条件判断语句中的匹配动作表与执行分支中的匹配动作表是否存在字段读取冲突;若条件判断语句中的匹配动作表与执行分支中的匹配动作表不存在字段读取冲突,则将条件判断语句中的匹配动作表对应的字段匹配操作与执行分支中的匹配动作表对应的字段匹配操作前移至条件判断语句之前,并对条件判断语句和执行分支进行更新;对改变执行顺序后的P4控制分支语句进行后续编译。本发明提升了P4控制分支语句的性能,且可适用于各类网络应用场景。

Description

P4控制分支语句的性能优化方法和装置
技术领域
本发明涉及网络数据处理技术领域,尤其涉及一种P4控制分支语句的性能优化方法和装置。
背景技术
P4(Programming Protocol-Independent Packet Processors)网络编程语言,主要用在网卡、交换机、路由器等网络设备上,允许用户编程来控制报文在数据平面转发行为。P4作为针对于网络行为级别的专用编程语言,其处理效率对于网络应用业务的效率有着重要影响,因此需要尽可能地提升P4语言的执行性能、加快执行效率,以满足当前对于网络应用业务效率日趋严格的需求。其中,P4语言在控制报文在数据平面转发行为时,其控制分支语句的性能是提升P4处理效率的关键所在。
当前存在的提升分支执行效率的方法主要包括两种:分支预测和使用条件移动指令进行优化。其中,分支预测方式包括静态分支预测和动态分支预测。静态分支预测实现起来简单、成本低,但是在生产中该预测正确率的波动范围很大;动态分支预测会根据指令的不同及历史信息(存储在一张分支历史表中——Branch History Table)作出相应的预测,常见的有1-bit/n-bit动态预测。然而,若分支预测结果是正确的,处理器可以通过将预测执行指令的结果存储在寄存器或内存中来提交,而若预测结果不正确,则处理器必须丢弃所有预测执行的结果,并在正确的位置重新获取指令,反而降低了分支执行的效率。
另一种基于条件移动指令的优化方式中,GCC可以在编译条件语句和表达式时沿着条件表达式或语句的两个分支计算值,然后使用条件移动指令来选择所需的值。条件移动指令可以作为普通指令流水线处理的一部分实现,不需要猜测条件是否成立,因此猜测错误也不会受到惩罚。但是,该方式的重要缺陷在于目前只有x86处理器支持条件移动指令,因此其适用范围较窄,难以满足当前多元化的应用场景需求。
发明内容
本发明提供一种P4控制分支语句的性能优化方法和装置,用以解决现有技术中效率提升效果不稳定或者适用范围过窄的缺陷。
本发明提供一种P4控制分支语句的性能优化方法,包括:
在P4控制分支语句的编译过程中,获取所述P4控制分支语句的条件判断语句和执行分支;
将所述条件判断语句中的匹配动作表以及所述执行分支中的匹配动作表对应的apply函数分解为字段匹配操作和网络动作执行操作,并判断所述条件判断语句中的匹配动作表与所述执行分支中的匹配动作表之间是否存在字段读取冲突;
若所述条件判断语句中的匹配动作表与所述执行分支中的匹配动作表之间不存在字段读取冲突,则将所述条件判断语句中的匹配动作表对应的字段匹配操作与所述执行分支中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前,并对所述条件判断语句和所述执行分支进行更新;
对改变执行顺序后的P4控制分支语句进行后续编译,得到所述P4控制分支语句对应的已优化目标代码。
根据本发明提供的一种P4控制分支语句的性能优化方法,若所述执行分支中存在嵌套的内嵌控制分支,所述判断所述条件判断语句中的匹配动作表与所述执行分支中的匹配动作表之间是否存在字段读取冲突,具体包括:
获取所述内嵌控制分支中的内嵌条件判断语句和内嵌执行分支;
判断所述条件判断语句中的匹配动作表、所述内嵌条件判断语句中的匹配动作表以及所述内嵌执行分支中的匹配动作表两两之间是否存在字段读取冲突。
根据本发明提供的一种P4控制分支语句的性能优化方法,若所述执行分支中存在嵌套的内嵌控制分支,所述将所述条件判断语句中的匹配动作表对应的字段匹配操作与所述执行分支中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前,具体包括:
当所述条件判断语句中的匹配动作表与所述内嵌条件判断语句中的匹配动作表存在字段读取冲突,并且所述条件判断语句中的匹配动作表与所述内嵌执行分支中的匹配动作表不存在字段读取冲突时,确定所述内嵌条件判断语句中的匹配动作表与所述内嵌执行分支中的匹配动作表之间是否存在字段读取冲突;
当所述内嵌条件判断语句中的匹配动作表与所述内嵌执行分支中的匹配动作表之间不存在字段读取冲突时,将所述内嵌执行分支中的匹配动作表对应的字段匹配操作与所述条件判断语句中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前。
根据本发明提供的一种P4控制分支语句的性能优化方法,若所述执行分支中存在嵌套的内嵌控制分支,所述将所述条件判断语句中的匹配动作表对应的字段匹配操作与所述执行分支中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前,具体包括:
当所述条件判断语句中的匹配动作表与所述内嵌条件判断语句中的匹配动作表不存在字段读取冲突,并且所述条件判断语句中的匹配动作表与所述内嵌执行分支中的匹配动作表存在字段读取冲突时,将所述条件判断语句中的匹配动作表对应的字段匹配操作与所述内嵌条件判断语句中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前。
根据本发明提供的一种P4控制分支语句的性能优化方法,若所述执行分支中存在嵌套的内嵌控制分支,所述将所述条件判断语句中的匹配动作表对应的字段匹配操作与所述执行分支中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前,具体包括:
当所述条件判断语句中的匹配动作表、所述内嵌条件判断语句中的匹配动作表以及所述内嵌执行分支中的匹配动作表两两之间均不存在字段读取冲突时,将所述条件判断语句中的匹配动作表对应的字段匹配操作、所述内嵌条件判断语句中的匹配动作表对应的字段匹配操作以及所述内嵌执行分支中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前。
根据本发明提供的一种P4控制分支语句的性能优化方法,所述将所述条件判断语句中的匹配动作表对应的字段匹配操作与所述执行分支中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前,具体包括:
将所述条件判断语句中的匹配动作表对应的字段匹配操作转换为相应的匹配结果获取语句;
将所述执行分支中的匹配动作表对应的字段匹配操作转换为相应的匹配动作获取语句,并将所述执行分支中的匹配动作表对应的匹配动作获取语句与所述条件判断语句中的匹配动作表对应的匹配结果获取语句一同前移至所述条件判断语句之前;
其中,所述执行分支中的匹配动作表对应的匹配动作获取语句用于执行所述执行分支中的匹配动作表对应的字段匹配操作,并在字段匹配成功的时候返回所述执行分支中的匹配动作表对应的网络动作执行操作,在字段匹配不成功的时候返回默认网络动作执行操作。
根据本发明提供的一种P4控制分支语句的性能优化方法,所述对所述条件判断语句和所述执行分支进行更新,具体包括:
将所述条件判断语句中的匹配动作表的apply函数替换为所述条件判断语句对应的匹配结果获取语句的返回结果;
将所述执行分支中的匹配动作表的apply函数替换为所述执行分支中的匹配动作表对应的匹配动作获取语句的返回结果。
本发明还提供一种P4控制分支语句的性能优化装置,包括:
语句分析单元,用于在P4控制分支语句的编译过程中,获取所述P4控制分支语句的条件判断语句和执行分支;
冲突判定及分解单元,用于将所述条件判断语句中的匹配动作表以及所述执行分支中的匹配动作表对应的apply函数分解为字段匹配操作和网络动作执行操作,并判断所述条件判断语句中的匹配动作表与所述执行分支中的匹配动作表之间是否存在字段读取冲突;
语句优化单元,用于若所述条件判断语句中的匹配动作表与所述执行分支中的匹配动作表之间不存在字段读取冲突,则将所述条件判断语句中的匹配动作表对应的字段匹配操作与所述执行分支中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前,并对所述条件判断语句和所述执行分支进行更新;
目标代码生成单元,用于对改变执行顺序后的P4控制分支语句进行后续编译,得到所述P4控制分支语句对应的已优化目标代码。
本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述P4控制分支语句的性能优化方法。
本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述P4控制分支语句的性能优化方法。
本发明还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述P4控制分支语句的性能优化方法。
本发明提供的P4控制分支语句的性能优化方法和装置,通过在编译期间对P4控制分支语句的执行顺序进行了优化调整,将部分字段匹配操作提前,从而提升了多个字段匹配操作之间的并行程度,缩短了整个控制分支语句的执行时间,提升了P4控制分支语句的性能。同时,该优化方法是在编译期间执行,其执行顺序的变化仅体现在已优化目标代码的执行过程中,而并未修改原始P4控制分支语句或是P4控制分支语句中涉及的匹配动作表本身。因此,该优化方法不会影响当前的数据平面,也无需对控制平面中的应用接口进行任何改动,其对于当前执行环境的影响相较于其他修改P4语句或是修改数据平面的匹配动作表的方式更小,优化成本更低。另外,在P4控制分支语句的编译过程中,可以将字段匹配操作和网络动作执行操作完整分割开,在不存在字段读取冲突的情形下改变部分字段匹配操作的执行顺序,可以保证即使在多线程并行执行的情况下,该改变执行顺序的操作也不会造成内存读写出错的情况,因此该方法具备足够的安全性,可以应用于各网络应用业务中。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的P4控制分支语句的性能优化方法的流程示意图;
图2是本发明提供的字段读取冲突判断的示意图;
图3是本发明提供的P4控制分支语句的优化对比示意图;
图4是本发明提供的P4控制分支语句的性能优化装置的结构示意图;
图5是本发明提供的电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1是本发明提供的P4控制分支语句的性能优化方法的流程示意图,如图1所示,该方法包括:
步骤110,在P4控制分支语句的编译过程中,获取所述P4控制分支语句的条件判断语句和执行分支;
步骤120,将所述条件判断语句中的匹配动作表以及所述执行分支中的匹配动作表对应的apply函数分解为字段匹配操作和网络动作执行操作,并判断所述条件判断语句中的匹配动作表与所述执行分支中的匹配动作表之间是否存在字段读取冲突;
步骤130,若所述条件判断语句中的匹配动作表与所述执行分支中的匹配动作表之间不存在字段读取冲突,则将所述条件判断语句中的匹配动作表对应的字段匹配操作与所述执行分支中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前,并对所述条件判断语句和所述执行分支进行更新;
步骤140,对改变执行顺序后的P4控制分支语句进行后续编译,得到所述P4控制分支语句对应的已优化目标代码。
具体地,本发明实施例提供的优化方法将在P4程序的编译过程中执行,当编译器接收到包含P4控制分支语句的程序时,会依次对其进行词法分析、语法分析、语义分析以及目标代码生成等编译操作,而针对控制分支语句的优化操作将发生在语法分析之后、目标代码生成之前。其中,当编译器完成词法分析和语法分析后,可以识别出P4控制分支语句并能够分析得到该P4控制分支语句的结构,从而获取该P4控制分支语句中的条件判断语句和执行分支。此处,以以下控制分支语句为例:
if (a.apply().hit) {
b.apply();
} else {
c.apply();
}
其中,if (a.apply().hit)为条件判断语句,b.apply()和c.apply()均为执行分支。需要说明的是,本发明实施例提供的优化方法不仅可以应用于if或if else控制分支语句,还可用于switch case等其他控制分支语句,本发明实施例对此不作具体限定。
为了提升P4控制分支语句的执行性能,本发明实施例将通过提升P4控制分支语句中匹配操作和网络动作执行操作的性能、减少匹配操作和网络动作执行操作在控制流中的耗时的方式来实现这一目的。
具体而言,可以首先判断上述条件判断语句中的匹配动作表与上述执行分支中的匹配动作表之间是否存在字段读取冲突。其中,如图2所示,字段读取冲突是指在前的条件判断语句中的匹配动作表在执行对应的网络动作执行操作时进行写入的内存字段与在后的执行分支中的匹配动作表在进行字段匹配操作时读入的内存字段相同。在判断上述匹配动作表之间是否存在字段读取冲突之前,还可以将条件判断语句中的匹配动作表以及执行分支中的匹配动作表对应的apply函数分解为字段匹配操作和网络动作执行操作。其中,在P4语言中的apply函数负责执行相应匹配动作表的字段匹配操作和网络动作执行操作,且字段匹配操作和网络动作执行操作在apply函数中是相对独立的,因此可以准确地将匹配动作表对应的apply函数分解为字段匹配操作和网络动作执行操作。
若条件判断语句中的匹配动作表与执行分支中的匹配动作表之间不存在字段读取冲突,即条件判断语句中的匹配动作表在执行网络动作执行操作时写入的内存字段与执行分支中的匹配动作表在执行字段匹配操作时读取的内存字段不同,因此执行分支中匹配动作表的字段匹配操作并不依赖于条件判断语句中匹配动作表的字段匹配操作结果或是网络动作执行操作结果,而仅仅是执行分支中匹配动作表的网络动作执行操作的执行需要依赖条件判断语句中匹配动作表的字段匹配操作结果。
为了提升控制分支语句中字段匹配操作和网络动作执行操作的执行效率,可以充分利用CPU在执行程序指令时的流水线机制,将部分指令的执行顺序提前,提高多条指令执行的并行程度。其中,在条件判断语句中的匹配动作表与执行分支中的匹配动作表之间不存在字段读取冲突时,可以将条件判断语句中的匹配动作表对应的字段匹配操作与执行分支中的匹配动作表对应的字段匹配操作一同前移至条件判断语句之前,并对条件判断语句和执行分支进行更新,仅保留其中的网络动作执行操作。通过将条件判断语句中的匹配动作表对应的字段匹配操作与执行分支中的匹配动作表对应的字段匹配操作一同前移至条件判断语句之前,可以提前执行执行分支中的匹配动作表对应的字段匹配操作,而无需等待条件判断语句的字段匹配操作和网络动作执行操作全部执行完毕,提升了多个字段匹配操作之间的并行程度,可以有效缩短整个控制分支语句的执行时间。
需要说明的是,当存在多个执行分支时,若部分执行分支中的匹配动作表与条件判断语句中的匹配动作表之间不存在字段读取冲突,但部分执行分支中的匹配动作表与条件判断语句中的匹配动作表之间存在字段读取冲突,则仅将不存在字段读取冲突的部分执行分支对应的字段匹配操作与条件判断语句中的匹配动作表对应的字段匹配操作一同前移至条件判断语句之前。
此处,在改变字段匹配操作的执行顺序时,可以利用语法树进行调整,通过将语法树中的所有节点划分为匹配子节点和动作子节点,然后自下而上地对各个节点的匹配子节点的执行顺序进行优化。其中,针对当前节点,可以将当前节点中的匹配子节点插入至与当前节点不存在字段读取冲突的父节点的匹配子节点之后,以提前执行当前节点的字段匹配操作。
执行顺序优化完毕后,可以对改变执行顺序后的P4控制分支语句进行后续编译,直至得到P4控制分支语句对应的已优化目标代码,并可以执行该已优化目标代码,其中已优化目标代码的优化对比结果如图3所示。
综上所述,本发明实施例提供的优化方法,通过在编译期间对P4控制分支语句的执行顺序进行了优化调整,将部分字段匹配操作提前,从而提升了多个字段匹配操作之间的并行程度,缩短了整个控制分支语句的执行时间,提升了P4控制分支语句的性能。同时,该优化方法是在编译期间执行,其执行顺序的变化仅体现在已优化目标代码的执行过程中,而并未修改原始P4控制分支语句或是P4控制分支语句中涉及的匹配动作表本身。因此,该优化方法不会影响当前的数据平面,也无需对控制平面中的应用接口进行任何改动,其对于当前执行环境的影响相较于其他修改P4语句或是修改数据平面的匹配动作表的方式(修改数据平面的匹配动作表后,还需在控制平面对相应的应用接口进行改动,其改动范围较广)更小,优化成本更低。
另外,在P4控制分支语句的编译过程中,可以将字段匹配操作和网络动作执行操作完整分割开,在不存在字段读取冲突的情形下改变部分字段匹配操作的执行顺序,可以保证即使在多线程并行执行的情况下,该改变执行顺序的操作也不会造成内存读写出错的情况,因此该方法具备足够的安全性,可以应用于各网络应用业务中。
基于上述实施例,若所述执行分支中存在嵌套的内嵌控制分支,所述判断所述条件判断语句中的匹配动作表与所述执行分支中的匹配动作表之间是否存在字段读取冲突,具体包括:
获取所述内嵌控制分支中的内嵌条件判断语句和内嵌执行分支;
判断所述条件判断语句中的匹配动作表、所述内嵌条件判断语句中的匹配动作表以及所述内嵌执行分支中的匹配动作表两两之间是否存在字段读取冲突。
具体地,当遇到执行分支中还存在嵌套的内嵌控制分支这一复杂场景时,需要对此进行特殊处理,以在保证执行逻辑正确的前提下提升P4控制分支语句的执行效率。其中,若执行分支中存在嵌套的内嵌控制分支,在判断条件判断语句中的匹配动作表与执行分支中的匹配动作表之间是否存在字段读取冲突时,需要对执行分支进行细化处理。
此处,可以获取内嵌控制分支中的内嵌条件判断语句和内嵌执行分支,随后分别判断条件判断语句中的匹配动作表、内嵌条件判断语句中的匹配动作表以及内嵌执行分支中的匹配动作表两两之间是否存在字段读取冲突,从而根据上述判断结果进行后续的优化操作。以如下较简单的单层嵌套情形为例:
if (a.apply().hit) {
if (b.apply().hit) {
d.apply();
}
} else {
c.apply();
}
其中,if (a.apply().hit)为条件判断语句,if (b.apply().hit)为内嵌条件判断语句,d.apply()为内嵌执行分支,c.apply()为普通的执行分支。在判断字段读取冲突,可以分别判断匹配动作表a与匹配动作表b、匹配动作表d和匹配动作表c之间是否存在字段读取冲突,以及判断匹配动作表b与匹配动作表d之间是否存在字段读取冲突。
需要说明的是,倘若存在更复杂的多层嵌套情形,即内嵌控制分支中还嵌套有更深层的内嵌控制分支,例如:
if (a.apply().hit) {
if (b.apply().hit) {
if (d.apply().hit) {
e.apply();
}
}
} else {
c.apply();
}
此种情形下,在判断字段读取冲突和进行后续优化操作时,可以由内而外进行处理,从最深层的内嵌控制分支开始,判断当前控制分支中条件判断语句中的匹配动作表(如d)与执行分支中的匹配动作表(如e)之间是否存在字段读取冲突;随后,将当前控制分支的上一层控制分支作为当前控制分支,发现当前控制分支中存在嵌套的内嵌控制分支,则可以继续判断当前控制分支中条件判断语句中的匹配动作表分别与所有内嵌条件判断语句中的匹配动作表以及所有内嵌执行分支中的匹配动作表之间是否存在字段读取冲突,即判断b与d、b与e之间是否存在字段读取冲突;重复执行上述步骤,直至到达最顶层的控制分支。在上例中,到达最顶层的控制分支后,继续判断当前控制分支中条件判断语句中的匹配动作表分别与所有内嵌条件判断语句中的匹配动作表以及所有内嵌执行分支中的匹配动作表之间是否存在字段读取冲突,即判断a与b、a与d、a与e之间是否存在字段读取冲突。
基于上述任一实施例,若所述执行分支中存在嵌套的内嵌控制分支,所述将所述条件判断语句中的匹配动作表对应的字段匹配操作与所述执行分支中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前,具体包括:
当所述条件判断语句中的匹配动作表与所述内嵌条件判断语句中的匹配动作表存在字段读取冲突,并且所述条件判断语句中的匹配动作表与所述内嵌执行分支中的匹配动作表不存在字段读取冲突时,确定所述内嵌条件判断语句中的匹配动作表与所述内嵌执行分支中的匹配动作表之间是否存在字段读取冲突;
当所述内嵌条件判断语句中的匹配动作表与所述内嵌执行分支中的匹配动作表之间不存在字段读取冲突时,将所述内嵌执行分支中的匹配动作表对应的字段匹配操作与所述条件判断语句中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前。
具体地,在嵌套情形下,当条件判断语句中的匹配动作表与内嵌条件判断语句中的匹配动作表存在字段读取冲突,但是条件判断语句中的匹配动作表与内嵌执行分支中的匹配动作表不存在字段读取冲突时,需要进一步确定内嵌条件判断语句中的匹配动作表与内嵌执行分支中的匹配动作表之间是否存在字段读取冲突。
若内嵌条件判断语句中的匹配动作表与内嵌执行分支中的匹配动作表之间不存在字段读取冲突时,则可以将内嵌执行分支中的匹配动作表对应的字段匹配操作与条件判断语句中的匹配动作表对应的字段匹配操作一同前移至条件判断语句之前,但内嵌条件判断语句中的匹配动作表对应的字段匹配操作的执行顺序仍不变,提前执行内嵌执行分支中的匹配动作表对应的字段匹配操作,以提升嵌套情形下控制分支语句的执行效率。
基于上述任一实施例,若所述执行分支中存在嵌套的内嵌控制分支,所述将所述条件判断语句中的匹配动作表对应的字段匹配操作与所述执行分支中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前,具体包括:
当所述条件判断语句中的匹配动作表与所述内嵌条件判断语句中的匹配动作表不存在字段读取冲突,并且所述条件判断语句中的匹配动作表与所述内嵌执行分支中的匹配动作表存在字段读取冲突时,将所述条件判断语句中的匹配动作表对应的字段匹配操作与所述内嵌条件判断语句中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前。
具体地,嵌套情形下,当条件判断语句中的匹配动作表与内嵌条件判断语句中的匹配动作表不存在字段读取冲突,但是条件判断语句中的匹配动作表与内嵌执行分支中的匹配动作表存在字段读取冲突时,则可以仅将内嵌条件判断语句中的匹配动作表对应的字段匹配操作与条件判断语句中的匹配动作表对应的字段匹配操作一同前移至条件判断语句之前,但维持内嵌执行分支中的匹配动作表对应的字段匹配操作的执行顺序不变,提前执行内嵌条件判断语句中的匹配动作表对应的字段匹配操作,以提升嵌套情形下控制分支语句的执行效率。
基于上述任一实施例,若所述执行分支中存在嵌套的内嵌控制分支,所述将所述条件判断语句中的匹配动作表对应的字段匹配操作与所述执行分支中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前,具体包括:
当所述条件判断语句中的匹配动作表、所述内嵌条件判断语句中的匹配动作表以及所述内嵌执行分支中的匹配动作表两两之间均不存在字段读取冲突时,将所述条件判断语句中的匹配动作表对应的字段匹配操作、所述内嵌条件判断语句中的匹配动作表对应的字段匹配操作以及所述内嵌执行分支中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前。
具体地,若条件判断语句中的匹配动作表、内嵌条件判断语句中的匹配动作表以及内嵌执行分支中的匹配动作表两两之间均不存在字段读取冲突,则可以将条件判断语句中的匹配动作表对应的字段匹配操作、内嵌条件判断语句中的匹配动作表对应的字段匹配操作以及内嵌执行分支中的匹配动作表对应的字段匹配操作一同前移至条件判断语句之前,提前执行内嵌条件判断语句中的匹配动作表对应的字段匹配操作和内嵌执行分支中的匹配动作表对应的字段匹配操作,以最大限度地提升该控制分支语句的执行效率。
基于上述任一实施例,在嵌套情形下,可以基于语法树进行字段匹配操作执行顺序的调整。例如,可以从语法树的叶子节点出发,自下而上地对各个节点的匹配子节点的执行顺序进行优化。其中,针对当前节点,若根据上述实施例中给出的方式确认可以将当前节点的字段匹配操作提前,则将当前节点中的匹配子节点插入至当前节点的父节点或祖先节点的匹配子节点之后。具体将当前节点的匹配子节点插入至父节点还是某一祖先节点的匹配子节点之后,可以根据上述实施例中给出的方式,结合当前节点与父节点以及祖先节点之间是否存在字段读取冲突的判断结果进行确定。例如在嵌套情形下,甚至是多层嵌套的复杂情形下,可以将当前节点的匹配子节点插入至与当前节点不存在字段读取冲突的最高一级祖先节点的匹配子节点之后。随后,更新当前节点与目标节点之间的连接关系,以提前执行当前节点的字段匹配操作。
基于上述任一实施例,所述将所述条件判断语句中的匹配动作表对应的字段匹配操作与所述执行分支中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前,具体包括:
将所述条件判断语句中的匹配动作表对应的字段匹配操作转换为相应的匹配结果获取语句;
将所述执行分支中的匹配动作表对应的字段匹配操作转换为相应的匹配动作获取语句,并将所述执行分支中的匹配动作表对应的匹配动作获取语句与所述条件判断语句中的匹配动作表对应的匹配结果获取语句一同前移至所述条件判断语句之前;
其中,所述执行分支中的匹配动作表对应的匹配动作获取语句用于执行所述执行分支中的匹配动作表对应的字段匹配操作,并在字段匹配成功的时候返回所述执行分支中的匹配动作表对应的网络动作执行操作,在字段匹配不成功的时候返回默认网络动作执行操作。
具体地,在前移条件判断语句中的匹配动作表对应的字段匹配操作和执行分支中的匹配动作表对应的字段匹配操作时,可以将上述条件判断语句中的匹配动作表对应的字段匹配操作转换为相应的匹配结果获取语句。其中,匹配结果获取语句用于获取相应匹配动作表对应的字段匹配操作的执行结果。例如,原始条件判断语句中匹配动作表对应的字段匹配操作为a.apply().hit,可以将其转换为匹配结果获取语句bool a_hit = a.apply().hit。此外,将执行分支中的匹配动作表对应的字段匹配操作转换为相应的匹配动作获取语句。其中,匹配动作获取语句用于执行相应匹配动作表对应的字段匹配操作,并在字段匹配成功的时候返回相应匹配动作表对应的网络动作执行操作,在字段匹配不成功的时候返回默认网络动作执行操作。例如,原始执行分支中匹配动作表对应的字段匹配操作包含在b.apply()之内,此时可以利用匹配动作获取语句action_list b_action = b.apply().action_run来替代相应的字段匹配操作。
随后,将执行分支中的匹配动作表对应的匹配动作获取语句与条件判断语句中的匹配动作表对应的匹配结果获取语句一同前移至条件判断语句之前,以提前执行相应的字段匹配操作。需要说明的是,还可以获取条件判断语句中的匹配动作表对应的匹配动作获取语句以及该匹配动作获取语句的返回结果,并将条件判断语句中的匹配动作表对应的匹配动作获取语句与执行分支中的匹配动作表对应的匹配动作获取语句一同提前,并将条件判断语句中的匹配动作表对应的匹配动作获取语句的返回结果提前至执行分支中的匹配动作表对应的匹配动作获取语句之后、条件判断语句之前。
基于上述任一实施例,所述对所述条件判断语句和所述执行分支进行更新,具体包括:
将所述条件判断语句中的匹配动作表的apply函数替换为所述条件判断语句对应的匹配结果获取语句的返回结果;
将所述执行分支中的匹配动作表的apply函数替换为所述执行分支中的匹配动作表对应的匹配动作获取语句的返回结果。
具体地,在将执行分支中的匹配动作表对应的匹配动作获取语句与条件判断语句中的匹配动作表对应的匹配结果获取语句一同前移至条件判断语句之前完毕后,需要对条件判断语句和所述执行分支进行更新,刨除其中的字段匹配操作。具体而言,可以将条件判断语句中的匹配动作表的apply函数替换为条件判断语句对应的匹配结果获取语句的返回结果。例如,将原始的条件判断语句if (a.apply().hit)中的apply函数替换为对应的匹配结果获取语句的返回结果,即替换为if(a_hit)。此外,将执行分支中的匹配动作表的apply函数替换为执行分支中的匹配动作表对应的匹配动作获取语句的返回结果。例如,将原始的执行分支中的匹配动作表的apply函数b.apply()替换为对应的对应的匹配动作获取语句的返回结果b_action()。
仍以下述控制分支语句为例:
if (a.apply().hit) {
b.apply();
} else {
c.apply();
}
经过上述方式优化后的控制分支语句的执行顺序可以如下所示:
bool a_hit = a.apply().hit;
action_list a_action = a.apply().action_run ;
action_list b_action = b.apply().action_run ;
action_list c_action = c.apply().action_run;
a_action();
if(a_hit) {
b_action();
} else {
c_action();
}
下面对本发明提供的P4控制分支语句的性能优化装置进行描述,下文描述的P4控制分支语句的性能优化装置与上文描述的P4控制分支语句的性能优化方法可相互对应参照。
基于上述任一实施例,图4为本发明提供的P4控制分支语句的性能优化装置的结构示意图,如图4所示,该装置包括:语句分析单元410、冲突判定及分解单元420、语句优化单元430和目标代码生成单元440。
其中,语句分析单元410用于在P4控制分支语句的编译过程中,获取所述P4控制分支语句的条件判断语句和执行分支;
冲突判定及分解单元420用于将所述条件判断语句中的匹配动作表以及所述执行分支中的匹配动作表对应的apply函数分解为字段匹配操作和网络动作执行操作,并判断所述条件判断语句中的匹配动作表与所述执行分支中的匹配动作表之间是否存在字段读取冲突;
语句优化单元430用于若所述条件判断语句中的匹配动作表与所述执行分支中的匹配动作表之间不存在字段读取冲突,则将所述条件判断语句中的匹配动作表对应的字段匹配操作与所述执行分支中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前,并对所述条件判断语句和所述执行分支进行更新;
目标代码生成单元440用于对改变执行顺序后的P4控制分支语句进行后续编译,得到所述P4控制分支语句对应的已优化目标代码。
本发明实施例提供的优化装置,通过在编译期间对P4控制分支语句的执行顺序进行了优化调整,将部分字段匹配操作提前,从而提升了多个字段匹配操作之间的并行程度,缩短了整个控制分支语句的执行时间,提升了P4控制分支语句的性能;其中,该优化方法不会影响当前的数据平面,也无需对控制平面中的应用接口进行任何改动,优化成本更低。另外,在P4控制分支语句的编译过程中,可以将字段匹配操作和网络动作执行操作完整分割开,在不存在字段读取冲突的情形下改变部分字段匹配操作的执行顺序,可以保证即使在多线程并行执行的情况下,该改变执行顺序的操作也不会造成内存读写出错的情况,因此该方法具备足够的安全性,可以应用于各网络应用业务中。
基于上述任一实施例,若所述执行分支中存在嵌套的内嵌控制分支,所述判断所述条件判断语句中的匹配动作表与所述执行分支中的匹配动作表之间是否存在字段读取冲突,具体包括:
获取所述内嵌控制分支中的内嵌条件判断语句和内嵌执行分支;
判断所述条件判断语句中的匹配动作表、所述内嵌条件判断语句中的匹配动作表以及所述内嵌执行分支中的匹配动作表两两之间是否存在字段读取冲突。
基于上述任一实施例,若所述执行分支中存在嵌套的内嵌控制分支,所述将所述条件判断语句中的匹配动作表对应的字段匹配操作与所述执行分支中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前,具体包括:
当所述条件判断语句中的匹配动作表与所述内嵌条件判断语句中的匹配动作表存在字段读取冲突,并且所述条件判断语句中的匹配动作表与所述内嵌执行分支中的匹配动作表不存在字段读取冲突时,确定所述内嵌条件判断语句中的匹配动作表与所述内嵌执行分支中的匹配动作表之间是否存在字段读取冲突;
当所述内嵌条件判断语句中的匹配动作表与所述内嵌执行分支中的匹配动作表之间不存在字段读取冲突时,将所述内嵌执行分支中的匹配动作表对应的字段匹配操作与所述条件判断语句中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前。
基于上述任一实施例,若所述执行分支中存在嵌套的内嵌控制分支,所述将所述条件判断语句中的匹配动作表对应的字段匹配操作与所述执行分支中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前,具体包括:
当所述条件判断语句中的匹配动作表与所述内嵌条件判断语句中的匹配动作表不存在字段读取冲突,并且所述条件判断语句中的匹配动作表与所述内嵌执行分支中的匹配动作表存在字段读取冲突时,将所述条件判断语句中的匹配动作表对应的字段匹配操作与所述内嵌条件判断语句中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前。
基于上述任一实施例,若所述执行分支中存在嵌套的内嵌控制分支,所述将所述条件判断语句中的匹配动作表对应的字段匹配操作与所述执行分支中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前,具体包括:
当所述条件判断语句中的匹配动作表、所述内嵌条件判断语句中的匹配动作表以及所述内嵌执行分支中的匹配动作表两两之间均不存在字段读取冲突时,将所述条件判断语句中的匹配动作表对应的字段匹配操作、所述内嵌条件判断语句中的匹配动作表对应的字段匹配操作以及所述内嵌执行分支中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前。
基于上述任一实施例,所述将所述条件判断语句中的匹配动作表对应的字段匹配操作与所述执行分支中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前,具体包括:
将所述条件判断语句中的匹配动作表对应的字段匹配操作转换为相应的匹配结果获取语句;
将所述执行分支中的匹配动作表对应的字段匹配操作转换为相应的匹配动作获取语句,并将所述执行分支中的匹配动作表对应的匹配动作获取语句与所述条件判断语句中的匹配动作表对应的匹配结果获取语句一同前移至所述条件判断语句之前;
其中,所述执行分支中的匹配动作表对应的匹配动作获取语句用于执行所述执行分支中的匹配动作表对应的字段匹配操作,并在字段匹配成功的时候返回所述执行分支中的匹配动作表对应的网络动作执行操作,在字段匹配不成功的时候返回默认网络动作执行操作。
基于上述任一实施例,所述对所述条件判断语句和所述执行分支进行更新,具体包括:
将所述条件判断语句中的匹配动作表的apply函数替换为所述条件判断语句对应的匹配结果获取语句的返回结果;
将所述执行分支中的匹配动作表的apply函数替换为所述执行分支中的匹配动作表对应的匹配动作获取语句的返回结果。
图5是本发明提供的电子设备的结构示意图,如图5所示,该电子设备可以包括:处理器(processor)510、存储器(memory)520、通信接口(Communications Interface)530和通信总线540,其中,处理器510,存储器520,通信接口530通过通信总线540完成相互间的通信。处理器510可以调用存储器520中的逻辑指令,以执行P4控制分支语句的性能优化方法,该方法包括:在P4控制分支语句的编译过程中,获取所述P4控制分支语句的条件判断语句和执行分支;将所述条件判断语句中的匹配动作表以及所述执行分支中的匹配动作表对应的apply函数分解为字段匹配操作和网络动作执行操作,并判断所述条件判断语句中的匹配动作表与所述执行分支中的匹配动作表之间是否存在字段读取冲突;若所述条件判断语句中的匹配动作表与所述执行分支中的匹配动作表之间不存在字段读取冲突,则将所述条件判断语句中的匹配动作表对应的字段匹配操作与所述执行分支中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前,并对所述条件判断语句和所述执行分支进行更新;对改变执行顺序后的P4控制分支语句进行后续编译,得到所述P4控制分支语句对应的已优化目标代码。
此外,上述的存储器520中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法所提供的P4控制分支语句的性能优化方法,该方法包括:在P4控制分支语句的编译过程中,获取所述P4控制分支语句的条件判断语句和执行分支;将所述条件判断语句中的匹配动作表以及所述执行分支中的匹配动作表对应的apply函数分解为字段匹配操作和网络动作执行操作,并判断所述条件判断语句中的匹配动作表与所述执行分支中的匹配动作表之间是否存在字段读取冲突;若所述条件判断语句中的匹配动作表与所述执行分支中的匹配动作表之间不存在字段读取冲突,则将所述条件判断语句中的匹配动作表对应的字段匹配操作与所述执行分支中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前,并对所述条件判断语句和所述执行分支进行更新;对改变执行顺序后的P4控制分支语句进行后续编译,得到所述P4控制分支语句对应的已优化目标代码。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各提供的P4控制分支语句的性能优化方法,该方法包括:在P4控制分支语句的编译过程中,获取所述P4控制分支语句的条件判断语句和执行分支;将所述条件判断语句中的匹配动作表以及所述执行分支中的匹配动作表对应的apply函数分解为字段匹配操作和网络动作执行操作,并判断所述条件判断语句中的匹配动作表与所述执行分支中的匹配动作表之间是否存在字段读取冲突;若所述条件判断语句中的匹配动作表与所述执行分支中的匹配动作表之间不存在字段读取冲突,则将所述条件判断语句中的匹配动作表对应的字段匹配操作与所述执行分支中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前,并对所述条件判断语句和所述执行分支进行更新;对改变执行顺序后的P4控制分支语句进行后续编译,得到所述P4控制分支语句对应的已优化目标代码。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (10)

1.一种P4控制分支语句的性能优化方法,其特征在于,包括:
在P4控制分支语句的编译过程中,获取所述P4控制分支语句的条件判断语句和执行分支;
将所述条件判断语句中的匹配动作表以及所述执行分支中的匹配动作表对应的apply函数分解为字段匹配操作和网络动作执行操作,并判断所述条件判断语句中的匹配动作表与所述执行分支中的匹配动作表之间是否存在字段读取冲突;
若所述条件判断语句中的匹配动作表与所述执行分支中的匹配动作表之间不存在字段读取冲突,则将所述条件判断语句中的匹配动作表对应的字段匹配操作与所述执行分支中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前,并对所述条件判断语句和所述执行分支进行更新;
对改变执行顺序后的P4控制分支语句进行后续编译,得到所述P4控制分支语句对应的已优化目标代码。
2.根据权利要求1所述的P4控制分支语句的性能优化方法,其特征在于,若所述执行分支中存在嵌套的内嵌控制分支,所述判断所述条件判断语句中的匹配动作表与所述执行分支中的匹配动作表之间是否存在字段读取冲突,具体包括:
获取所述内嵌控制分支中的内嵌条件判断语句和内嵌执行分支;
判断所述条件判断语句中的匹配动作表、所述内嵌条件判断语句中的匹配动作表以及所述内嵌执行分支中的匹配动作表两两之间是否存在字段读取冲突。
3.根据权利要求2所述的P4控制分支语句的性能优化方法,其特征在于,若所述执行分支中存在嵌套的内嵌控制分支,所述将所述条件判断语句中的匹配动作表对应的字段匹配操作与所述执行分支中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前,具体包括:
当所述条件判断语句中的匹配动作表与所述内嵌条件判断语句中的匹配动作表存在字段读取冲突,并且所述条件判断语句中的匹配动作表与所述内嵌执行分支中的匹配动作表不存在字段读取冲突时,确定所述内嵌条件判断语句中的匹配动作表与所述内嵌执行分支中的匹配动作表之间是否存在字段读取冲突;
当所述内嵌条件判断语句中的匹配动作表与所述内嵌执行分支中的匹配动作表之间不存在字段读取冲突时,将所述内嵌执行分支中的匹配动作表对应的字段匹配操作与所述条件判断语句中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前。
4.根据权利要求2所述的P4控制分支语句的性能优化方法,其特征在于,若所述执行分支中存在嵌套的内嵌控制分支,所述将所述条件判断语句中的匹配动作表对应的字段匹配操作与所述执行分支中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前,具体包括:
当所述条件判断语句中的匹配动作表与所述内嵌条件判断语句中的匹配动作表不存在字段读取冲突,并且所述条件判断语句中的匹配动作表与所述内嵌执行分支中的匹配动作表存在字段读取冲突时,将所述条件判断语句中的匹配动作表对应的字段匹配操作与所述内嵌条件判断语句中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前。
5.根据权利要求2所述的P4控制分支语句的性能优化方法,其特征在于,若所述执行分支中存在嵌套的内嵌控制分支,所述将所述条件判断语句中的匹配动作表对应的字段匹配操作与所述执行分支中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前,具体包括:
当所述条件判断语句中的匹配动作表、所述内嵌条件判断语句中的匹配动作表以及所述内嵌执行分支中的匹配动作表两两之间均不存在字段读取冲突时,将所述条件判断语句中的匹配动作表对应的字段匹配操作、所述内嵌条件判断语句中的匹配动作表对应的字段匹配操作以及所述内嵌执行分支中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前。
6.根据权利要求1至5任一项所述的P4控制分支语句的性能优化方法,其特征在于,所述将所述条件判断语句中的匹配动作表对应的字段匹配操作与所述执行分支中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前,具体包括:
将所述条件判断语句中的匹配动作表对应的字段匹配操作转换为相应的匹配结果获取语句;
将所述执行分支中的匹配动作表对应的字段匹配操作转换为相应的匹配动作获取语句,并将所述执行分支中的匹配动作表对应的匹配动作获取语句与所述条件判断语句中的匹配动作表对应的匹配结果获取语句一同前移至所述条件判断语句之前;
其中,所述执行分支中的匹配动作表对应的匹配动作获取语句用于执行所述执行分支中的匹配动作表对应的字段匹配操作,并在字段匹配成功的时候返回所述执行分支中的匹配动作表对应的网络动作执行操作,在字段匹配不成功的时候返回默认网络动作执行操作。
7.根据权利要求6所述的P4控制分支语句的性能优化方法,其特征在于,所述对所述条件判断语句和所述执行分支进行更新,具体包括:
将所述条件判断语句中的匹配动作表的apply函数替换为所述条件判断语句对应的匹配结果获取语句的返回结果;
将所述执行分支中的匹配动作表的apply函数替换为所述执行分支中的匹配动作表对应的匹配动作获取语句的返回结果。
8.一种P4控制分支语句的性能优化装置,其特征在于,包括:
语句分析单元,用于在P4控制分支语句的编译过程中,获取所述P4控制分支语句的条件判断语句和执行分支;
冲突判定及分解单元,用于将所述条件判断语句中的匹配动作表以及所述执行分支中的匹配动作表对应的apply函数分解为字段匹配操作和网络动作执行操作,并判断所述条件判断语句中的匹配动作表与所述执行分支中的匹配动作表之间是否存在字段读取冲突;
语句优化单元,用于若所述条件判断语句中的匹配动作表与所述执行分支中的匹配动作表之间不存在字段读取冲突,则将所述条件判断语句中的匹配动作表对应的字段匹配操作与所述执行分支中的匹配动作表对应的字段匹配操作一同前移至所述条件判断语句之前,并对所述条件判断语句和所述执行分支进行更新;
目标代码生成单元,用于对改变执行顺序后的P4控制分支语句进行后续编译,得到所述P4控制分支语句对应的已优化目标代码。
9.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至7任一项所述P4控制分支语句的性能优化方法。
10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述P4控制分支语句的性能优化方法。
CN202211205104.7A 2022-09-30 2022-09-30 P4控制分支语句的性能优化方法和装置 Active CN115309406B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211205104.7A CN115309406B (zh) 2022-09-30 2022-09-30 P4控制分支语句的性能优化方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211205104.7A CN115309406B (zh) 2022-09-30 2022-09-30 P4控制分支语句的性能优化方法和装置

Publications (2)

Publication Number Publication Date
CN115309406A CN115309406A (zh) 2022-11-08
CN115309406B true CN115309406B (zh) 2022-12-20

Family

ID=83866022

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211205104.7A Active CN115309406B (zh) 2022-09-30 2022-09-30 P4控制分支语句的性能优化方法和装置

Country Status (1)

Country Link
CN (1) CN115309406B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108881032A (zh) * 2018-06-19 2018-11-23 福州大学 一种基于匹配优化的p4流水线性能提升方法
CN110673854A (zh) * 2019-09-24 2020-01-10 深圳前海微众银行股份有限公司 Sas语言编译方法、装置、设备及可读存储介质
CN110958193A (zh) * 2018-09-26 2020-04-03 英特尔公司 用于软件虚拟交换机的数据平面语义
CN112579635A (zh) * 2019-09-30 2021-03-30 北京国双科技有限公司 一种sql语句的优化方法、装置、电子设备及存储介质
JP2022512879A (ja) * 2018-11-05 2022-02-07 ザイリンクス インコーポレイテッド ネットワークインターフェースデバイス

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7606929B2 (en) * 2003-06-30 2009-10-20 Microsoft Corporation Network load balancing with connection manipulation

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108881032A (zh) * 2018-06-19 2018-11-23 福州大学 一种基于匹配优化的p4流水线性能提升方法
CN110958193A (zh) * 2018-09-26 2020-04-03 英特尔公司 用于软件虚拟交换机的数据平面语义
JP2022512879A (ja) * 2018-11-05 2022-02-07 ザイリンクス インコーポレイテッド ネットワークインターフェースデバイス
CN110673854A (zh) * 2019-09-24 2020-01-10 深圳前海微众银行股份有限公司 Sas语言编译方法、装置、设备及可读存储介质
CN112579635A (zh) * 2019-09-30 2021-03-30 北京国双科技有限公司 一种sql语句的优化方法、装置、电子设备及存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于NPU的P4语言编译器的设计与实现;朱丽佳;《东南大学工程硕士学位论文》;20220615(第06期);全文 *

Also Published As

Publication number Publication date
CN115309406A (zh) 2022-11-08

Similar Documents

Publication Publication Date Title
CN106796522B (zh) 用于更新源代码文件的系统和方法
US9158538B2 (en) User-extensible rule-based source code modification
US8762969B2 (en) Immutable parsing
US8527971B2 (en) Parallel program generation method
CN106547520B (zh) 一种代码路径分析方法及装置
US20050144602A1 (en) Methods and apparatus to compile programs to use speculative parallel threads
US20090083265A1 (en) Complex regular expression construction
US9619215B2 (en) Pre-compiler
CN113283613B (zh) 深度学习模型的生成方法、优化方法、装置、设备及介质
US8589901B2 (en) Speculative region-level loop optimizations
US20100185669A1 (en) Efficient incremental parsing of context sensitive programming languages
US20090119652A1 (en) Computer Program Functional Partitioning System for Heterogeneous Multi-processing Systems
US8117604B2 (en) Architecture cloning for power PC processors
CN115309406B (zh) P4控制分支语句的性能优化方法和装置
CN116560730A (zh) 一种指令调度方法及相关设备
US10416971B2 (en) Method of creating the balanced parse tree having optimized height
US9921857B1 (en) Compiler extension for correcting error messages
US10545741B2 (en) Information processing apparatus, method of compiling, and storage medium
CN112631644A (zh) Flutter构造函数初始化式的修改方法及装置
CN110069347B (zh) 一种基于过程重要度的线程划分方法
CN112527304A (zh) 基于异构平台的自适应节点融合编译优化方法
US8516463B2 (en) Mechanism for allocating statement frontier annotations to source code statements
CN114691151A (zh) 一种基于深度学习的优化代码反编译方法和系统
CN113031952A (zh) 深度学习模型的执行代码的确定方法、装置及存储介质
CN114995832B (zh) 一种动静结合的二进制程序翻译方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant