CN116775522A - 一种基于网络设备的数据处理方法及网络设备 - Google Patents
一种基于网络设备的数据处理方法及网络设备 Download PDFInfo
- Publication number
- CN116775522A CN116775522A CN202210227663.1A CN202210227663A CN116775522A CN 116775522 A CN116775522 A CN 116775522A CN 202210227663 A CN202210227663 A CN 202210227663A CN 116775522 A CN116775522 A CN 116775522A
- Authority
- CN
- China
- Prior art keywords
- command
- orchestration
- operator
- network device
- memory access
- 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.)
- Pending
Links
- 238000003672 processing method Methods 0.000 title abstract description 21
- 230000015654 memory Effects 0.000 claims abstract description 633
- 230000004044 response Effects 0.000 claims abstract description 142
- 238000004364 calculation method Methods 0.000 claims abstract description 133
- 238000000034 method Methods 0.000 claims description 151
- 230000008569 process Effects 0.000 claims description 71
- 238000006243 chemical reaction Methods 0.000 claims description 27
- 238000012545 processing Methods 0.000 claims description 22
- 230000002146 bilateral effect Effects 0.000 claims description 17
- 230000009191 jumping Effects 0.000 claims description 11
- 238000004590 computer program Methods 0.000 claims description 7
- 230000006854 communication Effects 0.000 abstract description 22
- 238000004891 communication Methods 0.000 abstract description 19
- 230000003993 interaction Effects 0.000 abstract description 17
- 238000010586 diagram Methods 0.000 description 35
- 230000006870 function Effects 0.000 description 35
- 238000013461 design Methods 0.000 description 24
- 239000000872 buffer Substances 0.000 description 21
- 230000005540 biological transmission Effects 0.000 description 11
- 239000003999 initiator Substances 0.000 description 10
- 101150098958 CMD1 gene Proteins 0.000 description 9
- 101100382321 Caenorhabditis elegans cal-1 gene Proteins 0.000 description 9
- 230000001360 synchronised effect Effects 0.000 description 9
- 238000004422 calculation algorithm Methods 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 6
- 230000000977 initiatory effect Effects 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 5
- 230000003068 static effect Effects 0.000 description 5
- 238000011161 development Methods 0.000 description 4
- 238000002955 isolation Methods 0.000 description 4
- 238000012549 training Methods 0.000 description 4
- 238000012546 transfer Methods 0.000 description 4
- 238000004804 winding Methods 0.000 description 4
- 238000013459 approach Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 230000014509 gene expression Effects 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000009365 direct transmission Effects 0.000 description 2
- 238000007667 floating Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000012856 packing Methods 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000005856 abnormality Effects 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000000052 comparative effect Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000005764 inhibitory process Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000000873 masking effect Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
- 230000002618 waking effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/40—Bus structure
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computer And Data Communications (AREA)
Abstract
本申请公开了一种基于网络设备的数据处理方法及网络设备,可应用于内存访问领域,包括:第一计算机设备的控制单元(如CPU)基于应用产生的请求的运行逻辑创建编排算子,第一计算机设备只需通过控制单元向第一网络设备发送一次编排算子即可,第一网络设备会基于编排算子解析成对应的内存访问操作(如远端内存访问或本地内存访问),等所有的内存访问操作都完成后,第一网络设备再上报一个完成指令给控制单元。本申请通过构建的编排算子执行用户可编程的逻辑,可减少第一计算机设备与第一网络设备之间的交互次数,若内存访问操作是远端内存访问操作,还可减少分布式请求的网络往返次数,避免控制单元被响应结果反复打断,实现了计算和通信的并行。
Description
技术领域
本申请涉及内存访问领域,尤其涉及一种基于网络设备的数据处理方法及网络设备。
背景技术
在内存访问技术领域中,存在双边操作(two-sided)以及单边操作(one-sided)。例如, 传统的传输控制协议(transmission control protocol,TCP)套接字(socket)、远程直接数 据存取(remote direct memory access,RDMA)中的send/receive操作属于双边操作,即必 须要远端的应用感知参与才能完成双边操作,本质上属于两个进程之间的通信,需要本地 设备的中央处理器(central processing unit,CPU)以及远端设备的CPU的参与,会消耗本 远端设备的CPU资源。而RDMA中的read/write操作则属于单边操作,单边操作传输方 式是RDMA与传统网络传输的最大不同,其只需要提供远程访问的虚拟地址,无须远端 的应用参与其中,相当于本地内存和远端内存之间的内存拷贝函数(memcpy)。
内存访问包括远端内存访问和本地内存访问,不管是本地内存访问还是远端内存访问, 本地计算机设备都是以“内存访问操作”为粒度执行,例如,本地计算机设备需要将一份 数据发送给100个其他远端计算机设备,则本地计算机设备的CPU需要与本地的网络设备 (如网卡)交互100次,即本地CPU需要构建每个操作对应的网络报文并发送到本地网络 设备,浪费本地CPU资源且本地CPU会频繁被返回的响应结果(也可称为处理结果)打断。
此外,在远端内存访问的情况下,还涉及分布式请求(也可称为分布式事务)的处理 问题。例如,访问远端内存中的数据结构,传统的分布式事务处理方式为基于CPU的双边访问,即上述所述的双边操作,也就是事务发起端的CPU把事务发送给接收端的CPU, 接收端的CPU处理后,再将处理结果发送回发送端。基于CPU的双边访问需要消耗CPU 资源,并且在CPU负载高时尾延迟也很高。
发明内容
本申请实施例提供了一种基于网络设备的数据处理方法及网络设备,用于基于应用产 生的请求的运行逻辑创建对应的编排算子,本地的第一计算机设备只需要通过控制单元 (如,CPU)向本地的第一网络设备发送一次编排算子即可,本地的第一网络设备会基于 该编排算子解析成对应的内存访问操作(可以是远端内存访问,也可以是本地内存访问), 等所有的内存访问操作都完成后,本地的第一网络设备再上报一个完成指令给本地第一计 算机设备的控制单元即可。本申请通过构建的编排算子执行用户可编程的逻辑,可减少第 一计算机设备的控制单元与第一网络设备之间的交互次数,若内存访问操作是远端内存访 问操作的话,还可以减少分布式请求所需的网络往返次数,避免第一计算机设备的控制单 元被响应结果反复打断,控制单元在通信过程中可以执行其他计算任务,实现了计算和通 信的并行。
基于此,本申请实施例提供以下技术方案:
第一方面,本申请实施例首先提供一种基于网络设备的数据处理方法及网络设备,可 用于内存访问领域中,例如,远端内存访问技术领域,该方法包括:首先,第一网络设备 (即本地网络设备,也可称为发起端网络设备)获取第一编排算子,例如,可以从与该第一网络设备对应的计算机设备(可称为第一计算机设备)获取第一编排算子,该第一编排算子为该第一计算机设备的控制单元(如,CPU)基于第一请求生成的编排命令的有序集合,用于表征该第一请求的运行逻辑,其中,该第一请求为第一计算机设备上正在运行的目标软件(可称为第一软件或第一应用)产生的请求,该第一编排算子至少包括内存访问命令,该内存访问命令用于表征进行内存访问的操作类型。第一网络设备在获取到第一编排算子之后,进一步根据该第一编排算子执行多个内存访问操作,每个内存访问操作执行完成后,第一网络设备会获取到对应的每个内存访问操作的响应结果(也可称为执行结果、返回结果等,本申请对此不做限定),例如,假设第一网络设备基于第一编排算子得到的 内存访问操作为k个,那么相应的就会获取到k个响应结果,一个内存访问操作对应一个 响应结果,k≥1。第一网络设备在获取到每个内存访问操作各自对应的响应结果之后,就 会触发生成一个完成指令(也可称为完成事件),第一编排算子对应的完成指令即为第一 完成指令,该第一完成指令就用于表征该第一编排算子执行完成了。在本申请的一些实施 方式中,第一网络设备可以将该第一完成指令向第一计算机设备的控制单元发送,以使得 该第一计算机设备的控制单元知道该第一编排算子已经执行完成;第一计算机设备也可以 周期性访问该第一网络设备,以便及时得知该第一网络设备是否生成第一完成指令,据此 判断第一编排算子是否执行完成。本申请对第一计算机设备如何得知第一编排算子执行完成的具体实现方式不做限定。
在本申请上述实施方式中,基于应用产生的请求的运行逻辑创建对应的编排算子,本 地的第一计算机设备只需要通过控制单元向本地的第一网络设备发送一次编排算子即可, 本地的第一网络设备会基于该编排算子解析成对应的内存访问操作(可以是远端内存访问, 也可以是本地内存访问),等所有的内存访问操作都完成后,本地的第一网络设备再上报 一个完成指令给本地第一计算机设备的控制单元即可。本申请通过构建的编排算子执行用 户可编程的逻辑,可减少第一计算机设备的控制单元与第一网络设备之间的交互次数,若 内存访问操作是远端内存访问操作的话,还可以减少分布式请求所需的网络往返次数,避 免第一计算机设备的控制单元被响应结果反复打断,控制单元在通信过程中可以执行其他 计算任务,实现了计算和通信的并行。
在第一方面的一种可能的实现方式中,第一网络设备还会生成与该第一编排算子对应 的一个编排上下文(可称为第一编排上下文),该第一编排上下文用于存储编排任务(即 内存访问操作)在执行过程中的中间状态。
在本申请上述实施方式中,第一网络设备是采用编排上下文来存储各个内存访问操作 在执行过程中的中间状态的,可以使多个编排算子并发执行,或者一个编排算子以不同的 参数并发执行多个请求。
在第一方面的一种可能的实现方式中,第一编排上下文可以至少包括如下任意一种: 第一编排算子的调用者(即第一计算机设备)、当前执行的编排命令的指针、异步执行的 编排命令计数器、编排算子中最后一个编排命令的位置、循环计数器、循环跳转位置、编排任务执行过程中的中间变量等。
在本申请上述实施方式中,具体阐述了第一编排上下文所包括的内容,具备可实现性。
在第一方面的一种可能的实现方式中,由于内存访问操作可以是本地内存访问操作, 也可以是远端内存访问操作,内存访问操作的类型不同,第一网络设备得到对应的响应结 果的方式也不同。当内存访问操作为远端内存访问操作时,则第一网络设备根据第一编排 算子执行多个内存访问操作,并获取每个所述内存访问操作的响应结果的过程具体可以是: 第一网络设备首先会解析该第一编排算子中的编排命令,从而得到P个远端内存访问操作, P≥1,例如,可以是解析该第一编排算子中编排命令的可变参数(如,上一条编排命令的 返回值、第一编排上下文中的中间变量等),其中,该可变参数为编排命令在运行时才能 确定具体取值的参数。之后,第一网络设备会将各个远端内存访问操作生成各自对应的网 络报文,一个远端内存访问操作可以访问一段内存,如果内存的长度超过了单个网络报文 的最大大小,就会被拆分成多个网络报文,也就是说,一个远端内存访问操作可以对应一 个或多个网络报文,具体本申请对此不做限定。在生成各个远端内存访问操作各自对应的 网络报文之后,该第一网络设备就可以将各个网络报文向各自对应的远端网络设备(可称 为第二网络设备)进行发送,远端网络设备可以是一个,也可以是多个,根据应用过程中 的具体情况决定,本申请对此不做限定。每个第二网络设备在收到各自的网络报文后,就 会基于各自的网络报文所携带的信息访问第二网络设备各自对应的内存(也就是第一网络 设备的远端内存),并在访问完成后,生成对应的响应结果,一个远端内存访问操作就对 应有一个响应结果。最后,每个响应结果都会返回给第一网络设备。
在本申请上述实施方式中,具体阐述了当内存访问操作为远端内存访问操作时,编排 算子的具体执行流程是怎样的,该过程无需远端计算机设备的控制单元参与,从而可节约 远端计算机设备的控制单元资源,如CPU资源。
在第一方面的一种可能的实现方式中,当内存访问操作为本地内存访问操作时,则第 一网络设备根据第一编排算子得到多个内存访问操作,并获取每个所述内存访问操作的响 应结果的过程具体可以是:第一网络设备首先会解析该第一编排算子中的编排命令,从而 得到Q个本地内存访问操作,Q≥1。例如,可以是解析该第一编排算子中编排命令的可变 参数(如,上一条编排命令的返回值、第一编排上下文中的中间变量等)。之后,第一网 络设备直接根据每个本地内存访问操作去访问本地内存,从而得到每个本地内存访问操作 的响应结果。
在本申请上述实施方式中,编排算子不仅可以用于进行远端内存访问操作,还可以进 行本地内存访问操作,具备广泛适用性。
在第一方面的一种可能的实现方式中,第一网络设备从第一计算机设备获取第一编排 算子的方式可以是:第一网络设备从第一计算机设备接收一个执行指令,可称为第一执行 指令,该第一执行指令就用于指示第一网络设备从第一存储区域读取第一编排算子。在本 申请的一些实施方式中,该第一编排算子可以由第一计算机设备的CPU存储在第一存储区 域,第一存储区域为事先设定的一个存储区域(如,DDR内存),用于作为编排算子的存储区,第一计算机设备的控制单元生成的编排算子都可存储在该第一存储区域,该第一存储区域可以是位于第一计算机设备上,也可以是位于第一网络设备上,还可以位于其他第三方设备上,具体本申请对此不做限定。
在本申请上述实施方式中,第一网络设备在需要哪个编排算子时,可基于执行指令随 时从第一存储区域调取,节约了第一网络设备的存储空间。
在第一方面的一种可能的实现方式中,第一网络设备从第一计算机设备获取第一编排 算子的方式还可以是:第一计算机设备的控制单元在生成第一编排算子后,直接将该第一 编排算子向第一网络设备发送,即第一网络设备接收由第一计算机设备直接发送的第一编 排算子。一般来说,对于简单的编排算子可以采取这种直接发送的方式。
在本申请上述实施方式中,第一网络设备也可以直接从第一计算机设备的控制单元接 收直接发送的第一编排算子,简化了操作步骤,节省了编排算子整体执行过程中的时间。
在第一方面的一种可能的实现方式中,第一编排算子至少还可以包括如下任意一种类 型的编排命令:控制命令以及计算命令,其中,控制命令用于控制第一网络设备,计算命 令用于对至少一个操作数进行算术和/或逻辑运算。
在本申请上述实施方式中,编排算子包括的编排命令的类型除了包括内存访问命令之 外,为了能更加灵活的表达应用生成的请求的内部运行逻辑,使得编排算子可以即能表达 静态工作流图又能表达动态工作流图,具备广泛适用性。
在第一方面的一种可能的实现方式中,控制命令的类型至少包括如下任意一种:条件 跳转命令、循环命令、等待命令、本地编排算子调用命令、远端编排算子调用命令、结束 编排命令。其中,条件跳转命令,用于根据至少一个可变参数,跳转到至少一个第一目标编排命令,例如,可以用于根据一个可变参数的值,或两个可变参数的比较结果,或一个 可变参数与常数的比较结果,跳转到至少一个第一目标编排命令,可变参数为编排命令在 运行时才能确定具体取值的参数;循环命令,用于循环执行至少一个第二目标编排命令m 次,m≥1;等待命令,用于等待至少一个第三目标编排命令执行完成;本地编排算子调用 命令,用于异步调用本地的编排算子;远端编排算子调用命令,用于异步调用远端的编排 算子;结束编排命令,用于结束编排上下文的执行。
在本申请上述实施方式中,具体阐述了控制命令包括的几种典型的命令类型,从而可 实现对编排命令执行顺序和执行过程的控制,具备可控性。
在第一方面的一种可能的实现方式中,计算命令的类型至少包括如下任意一种:双目 算术逻辑计算命令、位宽转换计算命令。其中,双目算术逻辑计算命令,用于根据两个操 作数获得第一计算结果;位宽转换计算命令,用于转换一个操作数的位宽,获得第二计算 结果。
在本申请上述实施方式中,具体阐述了计算命令包括的几种典型的命令类型,用于表 达可变参数的计算过程。
在第一方面的一种可能的实现方式中,内存访问命令的类型至少包括如下任意一种: 加载命令(也可称为load命令)、存储命令(也可称为store命令)、内存拷贝命令(也可称为memcpy命令)、比较命令(也可称为memcmp命令)、收发命令(send/recv命令)、 原子比较并交换命令(也可称为atomic compare and write命令)、原子加命令(也可称为 atomiccompare and add命令)、独占命令(也可称为exclusive atomic命令)。其中,加载命 令,用于从本地内存地址中取出预设数量字节的第一数据,或,用于从远端内存地址中取 出预设数量字节的第二数据;存储命令,用于向所述本地内存地址中写入预设数量字节的 第三数据,或,用于向所述远端内存地址中写入预设数量字节的第四数据;内存拷贝命令, 用于执行本地或远端的数据拷贝;比较命令,用于执行本地或远端的数据比较;收发命令, 用于执行双边消息的收发;原子比较并交换命令,用于执行预设数量字节的第五数据带比 较条件和掩码的原子交换;原子加命令,用于执行预设数量字节的第六数据带比较条件的 原子加操作;独占命令,用于通过缓存一致性协议获取一个本地或远端内存地址的独占访 问权限。
在本申请上述实施方式中,具体阐述了内存访问命令包括的几种典型的命令类型,从 而可达到可以同步或异步地执行内存数据读写、消息发送或原子操作,具备灵活性。
本申请实施例第二方面还提供一种基于网络设备的数据处理方法,该方法可以包括: 第一网络设备(即本地网络设备,也可称为发起端网络设备)从第一计算机设备获取目标 执行指令,该目标执行指令用于指示第二网络设备从第二存储区域读取第二编排算子,第 二编排算子可以由第二计算机设备的控制单元存储在第二存储区域,第二编排算子为第二 计算机设备的控制单元基于第二请求生成的编排命令的有序集合,用于表征第二请求的运 行逻辑,第二请求为第二计算机设备上运行的第二应用产生的请求,第二编排算子包括内 存访问命令,该内存访问命令用于表征进行内存访问的操作类型。第一网络设备在接收到 第一计算机设备发送的目标执行指令后,就会基于该目标执行指令生成对应的网络报文, 可称为目标网络报文,之后,第一网络设备会进一步将该目标网络报文向第二网络设备发 送,以使得第二网络设备基于目标网络报文从第二存储区域读取第二编排算子,并使得第 二网络设备根据第二编排算子执行多个内存访问操作,并使得第二网络设备获取每个所述 内存访问操作的响应结果并生成目标网络报文的目标响应。第一网络设备在接收到由第二 网络设备发送的目标响应之后,就会触发生成一个完成指令(也可称为完成事件),第二 编排算子对应的完成指令即为第二完成指令,该第二完成指令就用于表征该第二编排算子 执行完成了。类似地,在本申请的一些实施方式中,第一网络设备可以将该第二完成指令 向第一计算机设备的控制单元发送,以使得该第一计算机设备的控制单元知道该第二编排 算子已经执行完成;第一计算机设备也可以周期性访问该第一网络设备,以便及时得知该 第一网络设备是否生成第一完成指令,据此判断第二编排算子是否执行完成。本申请对第 一计算机设备如何得知第二编排算子执行完成的具体实现方式不做限定。
在本申请上述实施方式中,具体阐述了发起端网络设备可以对远端网络设备上的编排 算子进行调用,本申请提出的编排算子是一种统一的编程抽象,因此解决了不同架构网络 设备间互相不兼容的问题,具备高效性。
在第二方面的一种可能的实现方式中,第二编排算子至少还可以包括如下任意一种类 型的编排命令:控制命令以及计算命令,其中,控制命令用于控制第二网络设备,计算命 令用于对至少一个操作数进行算术和/或逻辑运算。
在本申请上述实施方式中,编排算子包括的编排命令的类型除了包括内存访问命令之 外,为了能更加灵活的表达应用产生的请求的内部运行逻辑,使得编排算子可以即能表达 静态工作流图又能表达动态工作流图,具备广泛适用性。
在第二方面的一种可能的实现方式中,控制命令的类型至少包括如下任意一种:条件 跳转命令、循环命令、等待命令、本地编排算子调用命令、远端编排算子调用命令、结束 编排命令。其中,条件跳转命令,用于根据至少一个可变参数,跳转到至少一个第一目标编排命令,例如,可以用于根据一个可变参数的值,或两个可变参数的比较结果,或一个 可变参数与常数的比较结果,跳转到至少一个第一目标编排命令,可变参数为编排命令在 运行时才能确定具体取值的参数;循环命令,用于循环执行至少一个第二目标编排命令m 次,m≥1;等待命令,用于等待至少一个第三目标编排命令执行完成;本地编排算子调用 命令,用于异步调用本地的编排算子;远端编排算子调用命令,用于异步调用远端的编排 算子;结束编排命令,用于结束编排上下文的执行。
在本申请上述实施方式中,具体阐述了控制命令包括的几种典型的命令类型,从而可 实现对编排命令执行顺序和执行过程的控制,具备可控性。
在第二方面的一种可能的实现方式中,计算命令的类型至少包括如下任意一种:双目 算术逻辑计算命令、位宽转换计算命令。其中,双目算术逻辑计算命令,用于根据两个操 作数获得第一计算结果;位宽转换计算命令,用于转换一个操作数的位宽,获得第二计算 结果。
在本申请上述实施方式中,具体阐述了计算命令包括的几种典型的命令类型,用于表 达可变参数的计算过程。
在第二方面的一种可能的实现方式中,内存访问命令的类型至少包括如下任意一种: 加载命令(也可称为load命令)、存储命令(也可称为store命令)、内存拷贝命令(也可称为memcpy命令)、比较命令(也可称为memcmp命令)、收发命令(send/recv命令)、 原子比较并交换命令(也可称为atomic compare and write命令)、原子加命令(也可称为 atomiccompare and add命令)、独占命令(也可称为exclusive atomic命令)。其中,加载命 令,用于从本地内存地址中取出预设数量字节的第一数据,或,用于从远端内存地址中取 出预设数量字节的第二数据;存储命令,用于向所述本地内存地址中写入预设数量字节的 第三数据,或,用于向所述远端内存地址中写入预设数量字节的第四数据;内存拷贝命令, 用于执行本地或远端的数据拷贝;比较命令,用于执行本地或远端的数据比较;收发命令, 用于执行双边消息的收发;原子比较并交换命令,用于执行预设数量字节的第五数据带比 较条件和掩码的原子交换;原子加命令,用于执行预设数量字节的第六数据带比较条件的 原子加操作;独占命令,用于通过缓存一致性协议获取一个本地或远端内存地址的独占访 问权限。
在本申请上述实施方式中,具体阐述了内存访问命令包括的几种典型的命令类型,从 而可达到可以同步或异步地执行内存数据读写、消息发送或原子操作,具备灵活性。
本申请实施例第三方面还提供一种基于网络设备的数据处理方法,该方法可以包括:
第二网络设备接收由第一网络设备发送的目标网络报文,该目标网络报文由第一网络 设备基于目标执行指令生成,目标执行指令用于指示第二网络设备从第二存储区域读取第 二编排算子,第二编排算子可以由第二计算机设备的控制单元存储在第二存储区域,第二 编排算子为第二计算机设备的控制单元基于第二请求生成的编排命令的有序集合,用于表 征第二请求的运行逻辑,第二请求为第二计算机设备上运行的第二应用产生的请求,第二 编排算子包括内存访问命令,内存访问命令用于表征进行内存访问的操作类型。第二网络 设备接收到第一网络设备发送的与目标执行指令对应的目标网络报文之后,会基于该目标 网络报文所携带的信息,从第二存储区域读取第二编排算子。第二网络设备在获取到第二 编排算子之后,进一步根据该第二编排算子执行多个内存访问操作,每个内存访问操作执 行完成后,第二网络设备会获取到对应的每个内存访问操作的响应结果(也可称为执行结 果、返回结果等,本申请对此不做限定),例如,假设第二网络设备基于第二编排算子得 到的内存访问操作为k'个,那么相应的就会获取到k'个响应结果,一个内存访问操作 对应一个响应结果,k'≥1。当第二网络设备收到了每个内存访问操作各自对应的响应结 果之后,就会生成目标网络报文的目标响应,并将该目标响应向第一网络设备发送,以使 得第一网络设备基于目标响应生成第二完成指令,第二完成指令用于表征第二编排算子执 行完毕。
在本申请上述实施方式中,具体阐述了发起端网络设备可以对远端网络设备上的编排 算子进行调用,本申请提出的编排算子是一种统一的编程抽象,因此解决了不同架构网络 设备间互相不兼容的问题,具备高效性。
在第三方面的一种可能的实现方式中,第二网络设备还会生成与该第二编排算子对应 的一个编排上下文(可称为第二编排上下文),该第二编排上下文用于存储编排任务(即 内存访问操作)在执行过程中的中间状态。
在本申请上述实施方式中,第二网络设备是采用编排上下文来存储各个内存访问操作 在执行过程中的中间状态的,可以使多个编排算子并发执行,或者一个编排算子以不同的 参数并发执行多个请求。
在第三方面的一种可能的实现方式中,第二编排上下文就可以至少包括如下任意一种: 第二编排算子的调用者(即第二计算机设备)、当前执行的编排命令的指针、异步执行的 编排命令计数器、编排算子中最后一个编排命令的位置、循环计数器、循环跳转位置、编 排任务执行过程中的中间变量等。
在本申请上述实施方式中,具体阐述了第二编排上下文所包括的内容,具备可实现性。
在第三方面的一种可能的实现方式中,由于内存访问操作可以是本地内存访问操作, 也可以是远端内存访问操作,内存访问操作的类型不同,第二网络设备得到对应的响应结 果的方式也不同。当内存访问操作为远端内存访问操作时,则第二网络设备根据第二编排 算子执行多个内存访问操作,并获取每个所述内存访问操作的响应结果的过程具体可以是: 第二网络设备首先会解析该第二编排算子中的编排命令,从而得到P'个远端内存访问操 作,P'≥1,例如,第二网络设备可以解析该第二编排算子中编排命令的可变参数(如, 上一条编排命令的返回值、第二编排上下文中的中间变量等),其中,该可变参数为编排 命令在运行时才能确定具体取值的参数。之后,第二网络设备会将各个远端内存访问操作生成各自对应的网络报文,一个远端内存访问操作可以访问一段内存,如果内存的长度超过了单个网络报文的最大大小,就会被拆分成多个网络报文,也就是说,一个远端内存访问操作可以对应一个或多个网络报文,具体本申请对此不做限定。在生成各个远端内存访问操作各自对应的网络报文之后,该第二网络设备就可以将各个网络报文向各自对应的远端网络设备(可称为第三网络设备)进行发送,远端网络设备可以是一个,也可以是多个,根据应用过程中的具体情况决定,本申请对此不做限定。每个第三网络设备在收到各自的网络报文后,就会基于各自的网络报文所携带的信息访问第三网络设备各自对应的内存(也就是第二网络设备的远端内存),并在访问完成后,生成对应的响应结果,一个远 端内存访问操作就对应有一个响应结果。最后,每个响应结果都会返回给第二网络设备。
在本申请上述实施方式中,具体阐述了当内存访问操作为远端内存访问操作时,编排 算子的具体执行流程是怎样的,该过程无需第三方计算机设备的控制单元参与,从而可节 约第三方计算机设备的控制单元资源,如CPU资源。
在第三方面的一种可能的实现方式中,第三网络设备可以是第一网络设备(是远端调 用的发起者),也可以是与第一网络设备不同的其他网络设备,具体本申请对此不做限定。
在本申请上述实施方式中,对第三网络设备不做限定,具备广泛适用性。
在第三方面的一种可能的实现方式中,当内存访问操作为本地内存访问操作时,则第 二网络设备根据第二编排算子执行多个内存访问操作,并获取每个所述内存访问操作的响 应结果的过程具体可以是:第二网络设备首先会解析该第一编排算子中的编排命令,从而 得到Q个本地内存访问操作,Q≥1,例如,第二网络设备可以解析该第一编排算子中编排 命令的可变参数(如,上一条编排命令的返回值、第一编排上下文中的中间变量等),其 中,该可变参数为编排命令在运行时才能确定具体取值的参数。之后,第二网络设备直接 根据每个本地内存访问操作去访问本地内存,从而得到每个本地内存访问操作的响应结果。
在本申请上述实施方式中,编排算子不仅可以用于进行远端内存访问操作,还可以进 行本地内存访问操作,具备广泛适用性。
在第三方面的一种可能的实现方式中,第二编排算子至少还可以包括如下任意一种类 型的编排命令:控制命令以及计算命令,其中,控制命令用于控制第二网络设备,计算命 令用于对至少一个操作数进行算术和/或逻辑运算。
在本申请上述实施方式中,编排算子包括的编排命令的类型除了包括内存访问命令之 外,为了能更加灵活的表达应用产生的请求的内部运行逻辑,使得编排算子可以即能表达 静态工作流图又能表达动态工作流图,具备广泛适用性。
在第三方面的一种可能的实现方式中,控制命令的类型至少包括如下任意一种:条件 跳转命令、循环命令、等待命令、本地编排算子调用命令、远端编排算子调用命令、结束 编排命令。其中,条件跳转命令,用于根据至少一个可变参数,跳转到至少一个第一目标编排命令,例如,可以用于根据一个可变参数的值,或两个可变参数的比较结果,或一个 可变参数与常数的比较结果,跳转到至少一个第一目标编排命令,可变参数为编排命令在 运行时才能确定具体取值的参数;循环命令,用于循环执行至少一个第二目标编排命令m 次,m≥1;等待命令,用于等待至少一个第三目标编排命令执行完成;本地编排算子调用 命令,用于异步调用本地的编排算子;远端编排算子调用命令,用于异步调用远端的编排 算子;结束编排命令,用于结束编排上下文的执行。
在本申请上述实施方式中,具体阐述了控制命令包括的几种典型的命令类型,从而可 实现对编排命令执行顺序和执行过程的控制,具备可控性。
在第三方面的一种可能的实现方式中,计算命令的类型至少包括如下任意一种:双目 算术逻辑计算命令、位宽转换计算命令。其中,双目算术逻辑计算命令,用于根据两个操 作数获得第一计算结果;位宽转换计算命令,用于转换一个操作数的位宽,获得第二计算 结果。
在本申请上述实施方式中,具体阐述了计算命令包括的几种典型的命令类型,用于表 达可变参数的计算过程。
在第三方面的一种可能的实现方式中,内存访问命令的类型至少包括如下任意一种: 加载命令(也可称为load命令)、存储命令(也可称为store命令)、内存拷贝命令(也可称为memcpy命令)、比较命令(也可称为memcmp命令)、收发命令(send/recv命令)、 原子比较并交换命令(也可称为atomic compare and write命令)、原子加命令(也可称为 atomiccompare and add命令)、独占命令(也可称为exclusive atomic命令)。其中,加载命 令,用于从本地内存地址中取出预设数量字节的第一数据,或,用于从远端内存地址中取 出预设数量字节的第二数据;存储命令,用于向所述本地内存地址中写入预设数量字节的 第三数据,或,用于向所述远端内存地址中写入预设数量字节的第四数据;内存拷贝命令, 用于执行本地或远端的数据拷贝;比较命令,用于执行本地或远端的数据比较;收发命令, 用于执行双边消息的收发;原子比较并交换命令,用于执行预设数量字节的第五数据带比 较条件和掩码的原子交换;原子加命令,用于执行预设数量字节的第六数据带比较条件的 原子加操作;独占命令,用于通过缓存一致性协议获取一个本地或远端内存地址的独占访 问权限。
在本申请上述实施方式中,具体阐述了内存访问命令包括的几种典型的命令类型,从 而可达到可以同步或异步地执行内存数据读写、消息发送或原子操作,具备灵活性。
本申请实施例第四方面提供一种网络设备,该网络设备作为第一网络设备,具有实现 上述第一方面或第一方面任意一种可能实现方式的方法的功能,或,具有实现上述第二方 面或第二方面任意一种可能实现方式的方法的功能。该功能可以通过硬件实现,也可以通 过硬件执行相应的软件实现。该硬件或软件包括一个或多个与上述功能相对应的模块。
本申请实施例第五方面提供一种网络设备,该网络设备作为第二网络设备,具有实现 上述第三方面或第三方面任意一种可能实现方式的方法的功能。该功能可以通过硬件实现, 也可以通过硬件执行相应的软件实现。该硬件或软件包括一个或多个与上述功能相对应的 模块。
本申请实施例第六方面提供一种网络设备,可以包括存储器、处理器以及总线系统, 其中,存储器用于存储程序,处理器用于调用该存储器中存储的程序以执行本申请实施例 第一方面或第一方面任意一种可能实现方式的方法,或,处理器用于调用该存储器中存储 的程序以执行本申请实施例第二方面或第二方面任意一种可能实现方式的方法,或,处理 器用于调用该存储器中存储的程序以执行本申请实施例第三方面或第三方面任意一种可 能实现方式的方法。
本申请实施例第七方面提供一种计算机可读存储介质,该计算机可读存储介质中存储 有指令,当其在计算机上运行时,使得计算机可以执行上述第一方面或第一方面任意一种 可能实现方式的方法,或,使得计算机可以执行上述第二方面或第二方面任意一种可能实 现方式的方法,或,使得计算机可以执行上述第三方面或第三方面任意一种可能实现方式 的方法。
本申请实施例第八方面提供了一种计算机程序,当其在计算机上运行时,使得计算机 执行上述第一方面或第一方面任意一种可能实现方式的方法,或,使得计算机可以执行上 述第二方面或第二方面任意一种可能实现方式的方法,或,使得计算机可以执行上述第三 方面或第三方面任意一种可能实现方式的方法。
本申请实施例第九方面提供了一种芯片,该芯片包括至少一个处理器和至少一个接口 电路,该接口电路和该处理器耦合,至少一个接口电路用于执行收发功能,并将指令发送 给至少一个处理器,至少一个处理器用于运行计算机程序或指令,其具有实现如上述第一 方面或第一方面任意一种可能实现方式的方法的功能,或,其具有实现如上述第二方面或 第二方面任意一种可能实现方式的方法的功能,或,其具有实现如上述第三方面或第三方 面任意一种可能实现方式的方法的功能,该功能可以通过硬件实现,也可以通过软件实现, 还可以通过硬件和软件组合实现,该硬件或软件包括一个或多个与上述功能相对应的模块。 此外,该接口电路用于与该芯片之外的其它模块进行通信。
附图说明
图1为本申请实施例提供的基于网络设备的数据处理方法的一个流程示意图;
图2为本申请实施例提供的编排软件架构的一个结构示意图;
图3为本申请实施例提供的编排软件架构的一个应用示意图;
图4为本申请实施例提供的本地编排的系统架构的一个示意图;
图5为本申请实施例提供的182X上本地编排的一个执行流程示意图;
图6为本申请实施例提供的基于网络设备的数据处理方法的一个流程示意图;
图7为本申请实施例提供的远端编排的系统架构的一个示意图;
图8为本申请实施例提供的182X上远端编排的一个执行流程示意图;
图9为本申请实施例提供的基于网络设备的数据处理方法的一个流程示意图;
图10为本申请方案与现有技术方案之间的一个对比示意图;
图11为本申请方案与现有技术方案之间的另一对比示意图;
图12为本申请实施例方法与现有方案的测试结果对比图;
图13为本申请实施例提供的第一网络设备的一个结构示意图;
图14为本申请实施例提供的第一网络设备的另一结构示意图;
图15为本申请实施例提供的第二网络设备的一个结构示意图;
图16为本申请实施例提供的网络设备一种结构示意图。
具体实施方式
本申请实施例提供了一种基于网络设备的数据处理方法及网络设备,用于基于应用产 生的请求的运行逻辑创建对应的编排算子,本地的第一计算机设备只需要通过控制单元 (如,CPU)向本地的第一网络设备发送一次编排算子即可,本地的第一网络设备会基于 该编排算子解析成对应的内存访问操作(可以是远端内存访问,也可以是本地内存访问), 等所有的内存访问操作都完成后,本地的第一网络设备再上报一个完成指令给本地第一计 算机设备的控制单元即可。本申请通过构建的编排算子执行用户可编程的逻辑,可减少第 一计算机设备的控制单元与第一网络设备之间的交互次数,若内存访问操作是远端内存访 问操作的话,还可以减少分布式请求所需的网络往返次数,避免第一计算机设备的控制单 元被响应结果反复打断,实现了计算和通信的并行。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类 似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的术语在适当情况 下可以互换,这仅仅是描述本申请的实施例中对相同属性的对象在描述时所采用的区分方 式。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,以便包含一系列单元的过程、方法、系统、产品或设备不必限于那些单元,而是可包括没 有清楚地列出的或对于这些过程、方法、产品或设备固有的其它单元。
本申请实施例涉及了许多关于内存访问的相关知识,为了更好地理解本申请实施例的 方案,下面先对本申请实施例可能涉及的相关术语和概念进行介绍。应理解的是,相关的 概念解释可能会因为本申请实施例的具体情况有所限制,但并不代表本申请仅能局限于该 具体情况,在不同实施例的具体情况可能也会存在差异,具体此处不做限定。
(1)远程直接内存访问(remote direct memory access,RDMA)
RDMA是一种直接存储器访问技术,将数据从本地计算机设备的内存传输到远端计算 机设备,无需双方操作系统(operating system,OS)介入,因此不会对双方OS造成任何影响,这样也就不需要用到多少计算机的处理功能。它消除了外部存储器复制和上下文切换的开销,因而能解放内存带宽和CPU周期用于改进应用系统性能。
(2)直接存储器访问(direct memory access,DMA)
DMA是设备(包括但不限于网卡)访问主机内存的技术,它允许不同速度的硬件装置来沟通,而不需要依赖于CPU的大量中断负载。否则,CPU需要从来源把每一片段 的资料复制到暂存器,然后把它们再次写回到新的地方。在这个时间中,CPU对于其他的 工作来说就无法使用。
(3)网络设备
不论是局域网、城域网还是广域网,在物理上通常都是由网卡(networkinterface card, NIC)、集线器、交换机、路由器、网线、RJ45接头等网络连接设备和传输介质组成的。 网络设备又包括中继器、网桥、路由器、网关、防火墙、交换机等设备。
具体地,网络设备及部件是连接到网络中的物理实体。网络设备的种类繁多,且与日 俱增。具体本申请对网络设备的类型不做限定。但需要注意的是,为便于阐述,在本申请实施例中,均以网络设备为网卡为例进行示意。
其中,网卡是一块被设计用来允许计算机在计算机网络上进行通讯的计算机硬件。由 于其拥有媒体控制存取(media access control,MAC)地址,因此属于开放式系统互联通 信(open system interconnection,OSI)模型的第1层和2层之间。它使得用户可以通过电 缆或无线相互连接。
需要注意的是,在本申请实施例中,所述网卡除了普通意义上的网卡之外,还可以包 括数据处理卡(data processing unit,DPU)、智能网卡(smart network interfacecard)、RDMA 网卡或其他形式的具备网卡功能的设备,具体本申请对此不做限定。例如,RDMA网卡就 是用于:从CPU接收远端内存访问请求,并发送到网络上,或,从网络上接收远端内存访 问请求,并通过DMA引擎访问主机内存,最后将访问结果通过网络返回给发起者。
(4)事务层(transaction layer)
网络设备内执行基本的远端内存访问操作的硬件载体。例如,RDMA事务层其包括两 种操作方式:
a、写操作
从本地CPU接收远端内存写请求,通过DMA引擎读取本地内存中的数据,并发送到网络上;或,从网络上接收远端内存写请求及其数据,通过DMA引擎将其写入本地内存, 并向远端发送响应;或,从网络上接收远端内存写请求的响应,生成完成事件通知本地CPU。
b、读操作
从本地CPU接收远端内存读请求,发送到网络上;或,从网络上接收远端内存读请求, 通过DMA引擎读取本地内存中的数据,生成响应报文发送到网络上;或,从网络上接收远端内存读请求的响应,通过DMA引擎将数据写入本地内存,并生成完成事件通知本地CPU。
(5)编排命令(orchestration command)
编排中的基本操作,包括控制命令、访存命令和计算命令。
编排命令的一些域段可以是可变参数,可变参数的典型场景为:编排算子运行时才能 确定的值,例如,当前的这个编排命令的某个参数依赖上一条编排命令的执行结果、内存 中某个具体地址的值等;编排命令中的一些域段可以是立即数、暂存区某个偏移量的值、 循环计数器或某个内存地址的值等,另一些域段只能是立即数,称为不可变参数,立即数 的典型场景为:在编写编排算子时就能确定的值,例如,访问的内存区的位置、数据的长度等。
(6)编排算子(orchestration operator)
编排算子是一段完成特定通信功能(如,分布式通信功能)的代码,是一组有序的、由编排命令组成,用于表征对应应用产生的请求的运行逻辑。
在本申请实施例中,编排算子的执行可以在网络设备的编排单元内执行,编排单元为 执行编排算子的硬件载体,在一些实施方式中,也可以称为编排引擎(orchestrationengine, OE)。编排算子每次被用户的应用调用,在编排单元上执行称为一次编排任务,一个编排 算子可以被反复调用,也可以并行执行。
需要注意的是,在本申请实施例中,一个编排任务对应包括一个或多个内存访问操作, 可以是远端内存访问,也可以是本地内存访问,本申请对此不做限定。
(7)编排上下文(orchestration context)
网络设备(如,通过编排单元)执行编排算子时会生成临时的编排上下文,用于存储 中间状态,其中,可以包括编排命令可以读写的私有存储区域:暂存区。编排任务与编排上下文是一一对应的。编排上下文的内容包括编排算子的调用者、当前执行的编排命令的指针、异步执行的编排命令计数器、编排算子中最后一个编排命令的位置、循环计数器、 循环跳转位置、编排任务执行过程中的中间变量等。
(8)可变参数(variable parameter)
编排命令执行时才能确定具体取值的域段(例如访存命令中的地址、长度等域段), 可以是立即数、变量、循环计数器或者它们的表达式,具体本申请对此不做限定。
可变参数支持参数化的编排命令,是支持编排可编程性的重要机制。可变参数用于编 排命令中的可变域段,例如访存命令中可变的地址和长度、控制命令中的跳转条件等。可 变参数可以是下述几种变量之一:
a、特殊变量result,代表上一条同步编排命令的返回值。
b、特殊变量loop_counter,代表当前的循环计数器(从0开始,到循环次数-1)。
c、outstanding counter。
d、暂存区中特定offset的值,取值时的位宽等于编排命令中域段的位宽。
e、编排命令中的访存操作每个地址、长度域可以使用立即数,也可以使用某个可变参 数。在flags中为每个地址、长度域留有一个bit,表示对应的域是立即数还是可变参数(在 后面的命令说明中,用橙色表示)。如果使用可变参数,-1、-2、-3分别表示上条编排命令 返回值、循环计数器、outstanding计数器,非负整数表示暂存区的offset(以字节计算)。 如果offset设置为越界或非法的值,编排算子将按异常处理。
需要注意的是,可变参数在编排命令执行时计算出其值,但并不修改编排算子中的原 始编排命令。因此,带有可变参数的编排命令可被循环调用,也可在不同的编排算子中被 并发调用。
此外,一些编排命令可将返回值保存到暂存区中指定的offset,此时-1表示不保存到 暂存区,非负整数表示暂存区的offset(以字节计算)。上条编排命令返回值自动更新,循 环计数器、outstanding计数器不可强制写入。如果offset设置为越界或非法的值,编排算 子将按异常处理。
(9)暂存区(scratchpad)
存储编排命令执行结果的变量,用于存储编排算子的中间状态,可以作为可变参数。
(10)本地编排(local orchestration)
在发起者所在主机的网络设备(如,UBEP)上执行编排算子的过程。
(11)远端编排(remote orchestration)
在与发起者不同主机的网络设备(如,UBEP)上执行编排算子的过程。
(12)编排计数(program counter,PC)指针
当前执行的编排命令的位置可称为PC指针。
(13)基于融合以太网的远程直接内存访问(remote direct memory access overconverged ethernet,RoCE)
RoCE是一种网络协议,允许以太网络上使用RDMA。RoCE有RoCE v1和RoCE v2 两个版本。RoCE v1是一个以太网链路层协议,因此允许同一个以太网广播域中的任意两 台主机间进行通信。RoCE v2是一个网络层协议,因而RoCE v2数据包可以被路由。虽然 RoCE协议受益于融合以太网网络的特征,但该协议也可用于传统或非融合的以太网网络。
(14)无线带宽(infiniband,IB)
IB是一个用于高性能计算的计算机网络通信标准,它具有极高的吞吐量和极低的延迟, 用于计算机设备与计算机设备之间的数据互连。
在IB网络下进行RDMA通信的一套原语(即函数抽象)可称为IB verbs,使用这套原语可以建立起IB网络下节点之间的网络通信。
(15)统一总线(unified bus,UB)
UB是华为公司主导的下一代数据中心网络互联技术。
(16)统一远端内存访问语义(unified remote memory access,URMA)
URMA用于表征进行远端内存访问的操作,包括load、store、read、write、atomic等操作。
(17)统一存储开发工具(unified memory development kit,UMDK)
UMDK是以内存为中心的分布式开发工具链,包括URMA基础语义、编排、对象、 分布式事务等。
(18)统一总线端点(unified bus endpoint,UBEP)
UBEP是UB中的通信端点,是一个硬件模块,负责发起和接收URMA请求。
其中,UB中的每个UBEP的唯一地址可称为端点身份标识(endpoint identitydocument, EID),用于在UB网络中寻址;UB中每个进程命名空间的唯一地址可称为用户地址空间 身份标识(user address space identity document,UASID),用于在一台主机中寻址一个进程。
(19)队列对上下文(queue pair context,QPC)
QPC是队列对(queue pair,QP)的上下文。每对QP由发送队列(send queue,SQ) 和接收队列(receive queue,RQ)组成。
(20)工作队列(work queue,WQ)
WQ由SQ(发送端)、RQ(接收端)和控制队列(control queue,CQ)组成。有send、receive、write、read几种类型。它被RDMA网卡内部的异步调度机制解析和处理。
其中,工作队列对象(work queue element,WQE)指向一块用于存储数据的缓存(buffer), 放在发送队列SQ或接收队列RQ中;完成队列对象(complete queue element,CQE)放在 完成队列(completion queue,CQ)中,当WQE处理完成时会产生一个对应的CQE。
在本申请实施例中,编排任务执行完成时可以向本地的计算机设备的CPU通知完成事 件CQE的完成队列CQ。
(21)可靠连接(reliable connected,RC)
RC是基于面向连接的可靠的传输服务,一种QP类型。可靠的意思是能确保消息会被 传递恰好一次,并且保序。这种情况会配合ACK机制完成。RC QP支持send、write、read、atomic操作。
下面结合附图,对本申请的实施例进行描述。本领域普通技术人员可知,随着技术的 发展和新场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。
基于具体的实现方式,本申请实施例所述的基于网络设备的数据处理方法可分为本地 编排和远端编排,下面分别进行阐述。这里需要注意的是,为便于阐述,在本申请下述实 施例中,第一计算机设备或第二计算机设备上的控制单元均以CPU为例进行说明:
一、本地编排
本地编排是指在发起者(如,下述所述的第一计算机设备)所在主机的网络设备(如, 下述所述的第一网络设备)上执行编排算子的过程。具体请参阅图1,图1为本申请实施 例提供的基于网络设备的数据处理方法的一个流程示意图,该方法可以包括如下步骤:
101、第一网络设备获取第一编排算子,第一编排算子为第一计算机设备的控制单元 基于第一请求生成的编排命令的有序集合,用于表征第一请求的运行逻辑,第一请求为第 一计算机设备上运行的第一应用产生的请求,第一编排算子包括内存访问命令。
第一计算机设备上正在运行的目标软件(可称为第一软件或第一应用)会实时生成请 求(可称为第一请求),基于该当前生成的第一请求,第一计算机设备的控制单元(以下 均以控制单元为CPU为例进行说明)会生成一个与该第一请求对应的编排算子(可称为第 一编排算子),第一编排算子是一组有序的、由编排命令组成的代码,其构成编排命令的有序集合,用于表征对应的第一请求的运行逻辑。在第一计算机设备的CPU基于第一请求构建好对应的第一编排算子之后,与该第一计算机设备对应的第一网络设备(如,第一网卡)就会获取该第一编排算子。获取的方式包括但不限于:
方式a、可事先设定一个存储区域(如,DDR内存)作为编排算子的存储区,可称为第一存储区域,该第一存储区域可以是位于第一计算机设备上,也可以是位于第一网络设备上,还可以位于其他第三方设备上,具体本申请对此不做限定。第一计算机设备的CPU 生成的编排算子都可存储在该第一存储区域。因此,第一计算机设备的CPU在生成第一编 排算子后,可以将该第一编排算子存储在第一存储区域,当需要执行该第一编排算子时, 第一计算机设备的CPU再向第一网络设备额外发送一个执行指令,该执行指令就用于指示 第一网络设备从第一存储区域读取目标编排算子,例如,假设第一执行指令是用于指示该 第一网络设备从第一存储区域读取第一编排算子,那么当该第一网络设备接收到第一计算机设备的CPU发送的第一执行指令时,就会从该第一存储区域读取对应的第一编排算子。这种实现方式的好处在于,第一网络设备在需要哪个编排算子时,可基于执行指令随时从第一存储区域调取,节约了第一网络设备的存储空间。
方式b、第一计算机设备的CPU在生成第一编排算子后,直接将该第一编排算子向第 一网络设备发送,即第一网络设备接收由第一计算机设备直接发送的第一编排算子。一般 来说,对于简单的编排算子可以采取这种直接发送的方式,好处在于简化了操作步骤,节 省了整体执行过程中的时间。
具体地,在本申请的一些实时方式中,第一计算机设备的CPU可以基于编排软件架构 生成与请求对应的编排算子,具体请参阅图2,图2为本申请实施例提供的编排软件架构的一个结构示意图,该编排软件架构位于第一计算机设备的CPU,是该CPU基于生成的 请求得到对应的编排算子的一种具体实现方式,该编排软件架构200可以包括编排库201、 编排编译器202、编排驱动程序203,其中,编排库201是编排对用户提供的编程接口, 编排编译器202用于将编排算子所包括的编排命令编译成第一网络设备(如,第一网络设 备上的编排单元)所需的硬件指令,编排驱动程序203,用于将编译后的编排算子下发到 第一网络设备(如,第一网络设备上的编排单元)上执行。
这里需要注意的是,图2是以第一计算机设备以及第一网络设备为例说明生成编排算 子的具体过程,在其他的计算机设备以及对应的网络设备上,生成编排算子的过程是类似 的,此处不予赘述。
为便于理解上述过程,下面以一个具体的实施方式为例进行说明,具体请参阅图3, 图3为本申请实施例提供的编排软件架构的一个应用示意图,该应用场景是在UMDK软件框架中实现内存请求编排子系统和基于CPU的编排模拟器,在UBUS硬件中实现UB MP 子系统,作为原生支持编排的硬件引擎,在182X智能网卡中实现编排子系统,实现基于 微码的编排单元。其中,编排软件架构与外围组件的关系如下:
编排配置管理301与UB管理面连接,负责管理和发现编排单元的能力。
动态编排解释器302是编排的高层应用程序编程接口(application programminginterface,API),用户可以选择所需的编程语言(如,C语言)编写编排程序,并由动态 编排解释器302翻译成编排命令组成的编排算子。
编排函数库(liborach)303是编排的底层API,高级用户可以通过调用底层API来直 接生成每条编排命令,此外,编排函数库303还可以提供执行编排算子的API。
硬件适配层(orch_provider)304用于适配标准RDMA网卡、182X网卡、UB硬件等 不同网络设备的硬件平台。
UB编排模拟器305,用于在基于标准RDMA网卡的环境中,用CPU模拟UB硬件编 排单元的行为,执行编排算子对应的内存访问操作,UB编排模拟器305调用URMA库, 将URMA操作转换成标准RDMA网卡的API,实现远端内存访问、远程编排任务的调用。
182X微码编程框架306连接智能网卡子系统,与182X驱动程序和182X网卡硬件连接。在有182X网卡的场景下,编排任务在182X网卡内的微码执行,执行过程中不需要经 过CPU。
UB编排驱动框架307连接UBUS硬件子系统,用于在基于UB硬件编排单元的环境中,与硬件编排单元进行交互来执行编排任务。
例如,在本申请的一些实施方式中,可以通过调用编排单元的API执行具体的命令, 包括但不限于:
(1)创建编排算子:int orch_init(orch_operator_t*operator);
(2)销毁编排算子:void orch_uninit(orch_operator_t*operator);
(3)向编排算子中添加编排命令:int orch_append(orch_operator_t*operator,const orch_cmd_t*cmd);
(4)将一个编排算子注册到本地网络设备,生成编排算子编号(tid),以供后续本地 或远端网络设备调用:int orch_export(urma_context_t*urma_ctx,orch_operator_t*operator, orch_operator_id_t*tid);
(5)从本地网络设备中删除已注册的编排算子:int orch_unexport(urma_context_t *urma_ctx,const orch_operator_id_t*tid);
(6)在本地网络设备中执行本地网络设备中已注册的编排算子(tid),使用指定的发 送通道(jfs)、完成事件通知通道(jfc)、编排算子的调用参数(param):
int orch_execute_local(urma_context_t*urma_ctx,urma_jfs_t*jfs,urma_jfc_t*jfc,const orch_operator_id_t*tid,orch_local_param_t*param);
(7)在指定的远端网络设备中执行远端网络设备中已注册的编排算子(tid),使用指 定的发送通道(jfs)、完成事件通知通道(jfc)、编排算子的调用参数(param):
int orch_execute_remote(urma_context_t*urma_ctx,urma_jfs_t*jfs,urma_jfc_t*jfc,const orch_operator_id_t*tid,orch_remote_param_t*param);
(8)在本地网络设备与指定的远端网络设备(remote_eid,remote_uasid)之间建立连 接:int orch_import_remote(urma_context_t*urma_ctx,uint32_t remote_eid,uint32_t remote_uasid);
(9)允许本地网络设备访问指定远端网络设备上的内存区域:int orch_advise_seg(urma_context_t*urma_ctx,const urma_target_seg_t*target_seg);
(10)在本地网络设备上注册内存区域:int orch_register_tseg(urma_context_t*urma_ctx, urma_target_seg_t*seg);
(11)在本地网络设备的指定完成事件通知通道上等待编排算子执行完成:intorch_poll_jfc(urma_jfc_t*jfc,uint32_t cr_cnt,urma_cr_t*cr)。
需要说明的是,在本申请的一些实施方式中,第一网络设备还会生成与该第一编排算 子对应的一个编排上下文(可称为第一编排上下文),该第一编排上下文用于存储编排任 务(即内存访问操作)在执行过程中的中间状态。
还需要说明的是,在本申请的一些实施方式中,编排上下文的内容至少可以包括如下 任意一种:编排算子的调用者、当前执行的编排命令的指针、异步执行的编排命令计数器、 编排算子中最后一个编排命令的位置、循环计数器、循环跳转位置、编排任务执行过程中 的中间变量等。例如,第一编排上下文就可以至少包括如下任意一种:第一编排算子的调 用者(即第一计算机设备)、当前执行的编排命令的指针、异步执行的编排命令计数器、 编排算子中最后一个编排命令的位置、循环计数器、循环跳转位置、编排任务执行过程中 的中间变量等。
需要注意的是,在本申请的一些实施方式中,第一网络设备从第一计算机设备获取第 一编排算子的方式不同,会导致第一编排上下文的生成方式不同,例如,假设第一网络设 备从第一计算机设备获取第一编排算子的方式是上述方式a,则第一网络设备在收到第一 计算机设备通过CPU发送的第一执行指令时,触发生成第一编排上下文;假设第一网络设 备从第一计算机设备获取第一编排算子的方式是上述方式b,则第一网络设备在收到第一 计算机设备通过CPU发送的第一编排算子时,触发生成第一编排上下文。
作为一个示例,在本申请的一些实施方式中,第一网络设备生成第一编排上下文的方 式可以是:第一网络设备在开始执行第一编排算子时,从编排上下文池中分配一个空闲的 编排上下文,使用第一软件指定的参数初始化编排上下文中的暂存区,之后该第一编排算 子在编排算子的执行过程中用于存储中间状态。
还需要注意的是,在本申请实施例中,由于编排算子是用于进行内存访问的,因此, 组成该第一编排算子的编排命令中必须要包括内存访问命令,该内存访问命令就用于表征 进行内存访问的操作类型。此外,还需要说明的是,在本申请的一些实施方式中,编排算 子包括的编排命令的类型除了包括内存访问命令之外,为了能更加灵活的表达应用产生的 请求的内部运行逻辑,且使得编排算子可以即能表达静态工作流图又能表达动态工作流图, 编排算子至少还可以包括如下任意一种类型的编排命令:控制命令以及计算命令,其中, 控制命令用于控制第一网络设备,计算命令用于对至少一个操作数进行算术和/或逻辑运算。
需要说明的是,在本申请的一些实施方式中,根据具体的作用,内存访问命令、计算 命令、控制命令又可以有不同的表现形式,作为一种示例,下面分别对不同编排命令的定 义介绍:
A、控制命令
在本申请的一些实施方式中,控制命令的类型至少包括如下任意一种:条件跳转命令、 循环命令、等待命令、本地编排算子调用命令、远端编排算子调用命令、结束编排命令。 其具体含义可如表1所示:
表1、不同控制命令类型表示的含义
a、条件跳转命令
所述条件跳转命令,用于根据至少一个可变参数,向后跳过n个编排命令,n≥1。例如,可以用于根据一个可变参数的值,或两个可变参数的比较结果,或一个可变参数与常数的比较结果,向后跳过n个编排命令。其语义为:当两个参数比较条件成立时,跳转到 指定的编排命令。比较条件不成立时,继续执行下一条编排命令。
需要说明的是,本申请实施例所述的条件跳转命令需要注意以下几点:
1)条件跳转命令只允许向PC指针(当前执行的编排命令地址)增加的方向跳转,以免出现不受控的循环。真实指针(true pointer)相对当前编排命令的偏移量按照编排命令条数(而非字节数)计算,因为每条编排命令的长度固定。
2)“特殊跳转偏移量-1”表示编排任务执行结束。
3)比较条件具体可以包括小于、小于等于、相等、不相等等情形。
4)两个参与比较的操作数可以是立即数或可变参数,其中,可变参数是指编排命令 在运行时才能确定具体取值的参数。
5)条件跳转命令的返回值继承上条编排命令的返回值,即不修改返回值,这使得嵌 套的条件判断可以复用最早的返回值。
例子:如果上条编排命令返回值是0,就跳转到5条命令之后。
orch_cmd cmd;
cmd.opcode=UB_ORCH_COND_JUMP;
cmd.flags=ORCH_OPERAND1_IS_VAR;
cmd.cond_jump.operand1=ORCH_VAR_RETVAL;
cmd.cond_jump.operand2=0;
cmd.cond_jump.opcode=ORCH_ARITH_EQ;
cmd.cond_jump.jump_offset=5;
b、循环命令
所述循环命令,用于循环执行至少一个目标编排命令(可称为第一目标命令,如其后 的N条编排命令)m次,m≥1,N≥1。
同样需要说明的是,本申请实施例所述的循环命令需要注意以下几点:
1)循环次数、循环体长度由参数指定(循环次数可以是可变参数,循环体长度只能是常数)。
2)管理面可以配置循环的最大执行次数,以免出现执行时间不受控的循环或死循环。 当循环次数超出阈值后,编排终止执行并报异常。
3)执行到当前位置+循环体长度位置的编排命令后,自动回跳到循环体开头。
4)循环过程中若要结束(break),可使用条件跳转命令,跳出循环边界后循环即宣告 结束。
5)循环不允许嵌套。如果业务逻辑需要嵌套,用户可以用loop flattening方法把循环 展平。
6)当循环开始时,循环计数器设置为0。循环每进行一次迭代,计数器加1。当循环计数器达到指定的循环次数时,不再执行循环体,而是直接跳转到循环体之后的编排命令。在循环体之外,循环计数器的值保持不变,因此循环之后的编排命令可以根据循环计数器判断循环执行的次数、是否中间跳转出来了。
7)循环命令的返回值继承上条编排命令的返回值,即不修改返回值。
例子1:重复执行后续5条命令10次。
orch_cmd cmd;
cmd.opcode=UB_ORCH_LOOP;
cmd.flags=0;
cmd.loop.num_iters=10;
cmd.loop.num_cmds=5;
例子2:重复执行后续5条命令,重复次数由暂存区中地址为8位置的值决定。
orch_cmd cmd;
cmd.opcode=UB_ORCH_LOOP;
cmd.flags=ORCH_NUM_ITERS_IS_VAR;
cmd.loop.num_iters=8;
cmd.loop.cmd_cmds=5;
c、等待命令
所述等待命令,用于等待至少一个第三目标编排命令执行完成。其语义为:使编排算 子等待指定数量的异步编排命令完成,等待期间不执行等待命令后的编排命令。如果到timeout(等待命令的报文格式中的某域段)所表示的超时仍未完成,视为编排执行异常。
同样需要说明的是,本申请实施例所述的等待命令需要注意以下几点:
1)outstanding threshold(等待命令的报文格式中的某域段)的含义为等待正在执行的 异步编排命令数量不超过阈值。该阈值是可变参数。如果该阈值设置为0,表示等待所有 正在执行的异步编排命令完成。等待命令执行时,若正在执行的异步编排命令数量已经不 超过阈值,则无需等待。
2)等待命令使用outstanding计数器实现,每发出一个异步编排命令加1,每收到一个 异步编排命令的响应减1,减到outstanding threshold则等待结束。
3)等待命令的返回值为:如果没有经过任何等待就返回,则返回值为0;如果等待了 至少一个异步编排命令的返回,则返回值为最后一条异步编排命令的返回值。
4)暂不支持等待特定的编排命令完成。
例子1:等待所有正在执行的编排命令完成,等待超时为100微秒。
orch_cmd cmd;
cmd.opcode=UB_ORCH_WAIT;
cmd.flags=0;
cmd.wait.outstanding_threshold=0;
cmd.wait.timeout=100;
例子2:等待前面异步发出的5个编排命令至少完成3个(例如半数以上返回),即将outstanding_threshold设置为5-3=2,等待超时为100微秒。应用程序知道前面发出的异步 编排命令有多少个,也知道想等待的至少完成数量,因此可以设置该阈值。但是该命令不 能简单的设计为“等待若干个异步编排命令完成”,因为在等待命令发出时,可能已经有前面的异步编排命令结束了,这样就会永远等不到它的完成。
orch_cmd cmd;
cmd.opcode=UB_ORCH_WAIT;
cmd.flags=0;
cmd.wait.outstanding_threshold=2;
cmd.wait.timeout=100;
d、本地编排算子调用命令
所述本地编排算子调用命令,用于异步调用本地的编排算子。其语义为:把指定本地 内存地址中存储的编排算子在本地的网络设备执行。
同样需要说明的是,本申请实施例所述的本地编排算子调用命令需要注意以下几点:
1)为了便于编排算子复用,允许本地编排算子调用命令携带少量数据,指定需要传 递初始值的暂存区地址和长度,被调用的编排上下文将把暂存区的起始部分初始化为调用 者编排上下文在执行本地编排算子调用命令时刻的内容,其余部分初始化为0。
2)本地编排算子调用是异步操作,一个编排上下文可以并行发出多个本地编排算子 调用。每次编排算子调用都会生成新的编排上下文,因此与调用者的编排上下文可以独立 地执行,编排算子调用也可以嵌套。每发出一个编排算子调用就对outstandingcounter加1, 因此可以与普通异步URMA操作一样用等待命令来等待。
3)本地编排算子调用命令的返回值为被调用的编排上下文的结束编排命令所指定的 返回值。如果被调用的编排上下文没有调用结束编排命令,则返回值为0。
例子:异步调用首地址位于0x100000内存地址的编排算子,在本地的网络设备中执 行。编排算子由10条编排命令组成,初始的scratchpad用0x200000内存位置来初始化,编排的执行结果放进0x300000指定的completion record。
orch_cmd cmd;
cmd.opcode=UB_ORCH_CALL_LOCAL;
cmd.flags=0;
cmd.call_local.cmdlist_addr=0x100000;
cmd.call_local.init_scratchpad_addr=0x200000;
cmd.call_local.cplt_record_addr=0x300000;
cmd.call_local.num_cmds=10;
e、远端编排算子调用命令
所述远端编排算子调用命令,用于异步调用远端的编排算子。其语义为:把指定内存 地址(本地或远端)存储的编排算子在指定的远端网络设备执行。
同样需要说明的是,本申请实施例所述的远端编排算子调用命令需要注意以下几点:
1)为了便于编排算子复用,允许编排调用命令携带少量数据,指定需要传递初始值 的暂存区地址和长度,被调用的编排上下文将把暂存区的起始部分初始化为调用者编排上 下文在执行远端编排算子调用命令时刻的内容,其余部分初始化为0。
2)远端编排算子调用是异步操作,一个编排上下文可以并行发出多个远端编排算子 调用。每次编排算子调用都会生成新的编排上下文,因此与调用者的编排上下文可以独立 地执行,编排算子调用也可以嵌套。每发出一个编排算子调用就对outstandingcounter加1, 因此可以与普通异步URMA操作一样用等待命令来等待。
3)如果指定的内存地址所在segment与Remote EID在同一个网络设备,则只需通过 网络发送编排算子调用命令,编排算子无需通过网络传输。
4)如果指定的内存地址为本地地址,则通过网络发送的命令为带编排算子的编排算 子调用命令,即将编排算子通过网络传输到远端网络设备,远端网络设备分配缓存并执行。 如果远端网络设备在执行期间缓存不足,可以丢掉部分编排算子,在执行未缓存的编排命 令时,再用URMA Read命令把一部分编排命令读过来。
5)如果指定的内存地址既不是本地地址,所在segment与Remote EID又不在同一个 网络设备,则通过网络发送编排算子调用命令,Remote EID在执行编排算子过程中按需使 用URMA Read命令读取编排算子。
6)远端编排算子调用命令的返回值为被调用的编排上下文的结束编排命令所指定的 返回值。如果被调用的编排上下文没有调用结束编排命令,返回值为0。
例子:异步调用首地址位于{EID=1234,UASID=1,VA=0x100000}的UBVA的编排算 子,在EID为1234的节点上执行。编排算子由10条编排命令组成,初始的scratchpad用0x200000内存位置来初始化,编排命令的执行结果放进0x300000指定的completionrecord。
orch_cmd cmd;
cmd.opcode=UB_ORCH_CALL_REMOTE;
cmd.flags=0;
cmd.call_remote.cmdlist_addr.eid=1234;
cmd.call_remote.cmdlist_addr.uasid=1;
cmd.call_remote.cmdlist_addr.va=0x100000;
cmd.call_remote.init_scratchpad_addr=0x200000;
cmd.call_remote.cplt_record_addr=0x300000;
cmd.call_remote.num_cmds=10;
cmd.call_remote.remote_eid=1234;
f、结束编排命令
所述结束编排命令,用于结束编排上下文的执行。结束编排命令后不会发出任何新的 编排命令。
同样需要说明的是,本申请实施例所述的结束编排命令需要注意以下几点:
1)如果该编排命令执行时尚有未完成的异步编排命令,编排上下文将等待所有异步 编排命令完成。
2)返回值、写回暂存区bitmap、自增暂存区bitmap三个参数都是为了在本地或远程 编排算子调用中,返回信息给调用者。
3)返回值是可变参数。如果当前编排是CPU发起的,它将体现在CQE中;如果当前编排是被另一个编排算子调用的,它将作为本地或远端编排调用算子命令的返回值。
4)写回暂存区bitmap:将当前暂存区中指定的字节(由bitmap指定,每个bit对应一 个字节)复制到编排调用者暂存区中的对应位置。由于编排调用是异步的,调用者一般需 要把写回暂存区bitmap中的这些字节位置留空,以待被调用者写入。
5)自增暂存区bitmap:将编排调用者暂存区指定的一个域段的值原子地自增当前暂 存区中对应域段的值。域段由bitmap指定,每个bit对应一个字节,为1的bit必须为0 或2个。若为0个,表示不做自增;若为2个,第1个为1的bit表示域段的最高字节, 第2个为1的bit表示域段的最低字节。域段的宽度不得超过8字节,按照有符号整数处 理。通常用于编排调用者汇聚多个被调用者的编排执行结果。
6)写回暂存区bitmap与自增暂存区bitmap所修改的字节不允许有重叠。
7)如果编排是CPU发起的,初始暂存区的内存内容将按照写回暂存区bitmap和自增 暂存区bitmap的语义修改。初始暂存区的内存内容在编排开始执行时被复制到编排上下文 中,并不会与内存实时同步,因此如果需要获取暂存区的最终内容,需要使用写回暂存区 bitmap。
例子:结束编排,返回值为1,并将暂存区内8~15字节的内容写回发起端暂存区,将 完成结果写入0x100000位置的内存区域。
orch_cmd cmd;
cmd.opcode=UB_ORCH_RET;
cmd.flags=0;
cmd.ret.cplt_record_addr=0x100000;
cmd.ret.retval=1;
cmd.ret.wb_bitmap=0xff00;
cmd.ret.inc_bitmap=0;
B、计算命令
在本申请的一些实施方式中,计算命令的类型至少包括如下任意一种:双目算术逻辑 计算命令、位宽转换计算命令。其具体含义可如表2所示:
表2、不同计算命令类型表示的含义
计算命令 | 含义 |
双目算术逻辑计算命令 | 根据两个操作数,获得计算结果,可选地保存在暂存区中 |
位宽转换计算命令 | 转换一个操作数的位宽,获得计算结果,可选地保存在暂存区中 |
a、双目算术逻辑计算命令
所述双目算术逻辑计算命令,用于根据两个操作数获得第一计算结果。其语义为:对 两个操作数(均可以是立即数或可变参数)做计算,可以同时保存到暂存区中指定的offset。
需要说明的是,本申请实施例所述的双目算术逻辑计算命令需要注意以下几点:
1)计算类型(Arith type参数)可以包括加、减、乘、除、取模、左移、右移、按位 与/或/异或中的任意一种,具体本申请对此不做限定。
2)双目算术逻辑计算命令支持8位、16位、32位、64位有符号/无符号整数的计算(operand type参数,包括2bit的位宽和1bit的有无符号)或浮点数计算。
3)双目算术逻辑计算命令的返回值即为计算结果。
4)由于常见单目算术逻辑计算命令(按位取反、取负、自增、自减、强制类型转换)都可以用双目算术逻辑计算命令实现,因此不单独设计单目算术逻辑计算命令。
例子:将循环计数器与上条编排命令的结果做乘法,结果保存在暂存区内偏移量为8 的位置。
orch_cmd cmd;
cmd.opcode=UB_ORCH_ARITH;
cmd.flags=ORCH_OPERAND1_IS_VAR|ORCH_OPERAND2_IS_VAR| ORCH_OPERAND_IS_UINT64;
cmd.arith.opcode=UB_ARITH_MUL;
cmd.arith.operand1=-2;//loop counter
cmd.arith.operand2=-1;//return value of last command
cmd.arith.result_offset=8;//offset in scratchpad
b、位宽转换计算命令
所述位宽转换计算命令,用于转换一个操作数的位宽,获得第二计算结果。
同样需要说明的是,本申请实施例所述的位宽转换计算命令需要注意以下几点:
1)对一个操作数(可以是立即数或可变参数)做计算,可以同时保存到暂存区中指定的offset。
2)位宽转换计算命令的操作数和目的结果均支持8位、16位、32位、64位有符号/无符号整数(Destination type和Source type参数,均包括2bit的位宽和1bit的有无符号) 或浮点数。
例子:将暂存区内8~9字节存储的UINT16类型数据转换成INT64类型数据,存储到暂存区的16~23字节。
orch_cmd cmd;
cmd.opcode=UB_ORCH_CONVERT;
cmd.flags=ORCH_OPERAND_IS_VAR;
cmd.convert.src_type=ORCH_TYPE_UINT16;
cmd.convert.dst_type=ORCH_TYPE_INT64;
cmd.convert.operand=8;
cmd.convert.result_offset=16;
C、内存访问命令
在本申请的一些实施方式中,内存访问命令的类型至少包括如下任意一种:加载命令 (也可称为load命令)、存储命令(也可称为store命令)、内存拷贝命令(也可称为memcpy 命令)、比较命令(也可称为memcmp命令)、收发命令(send/recv命令)、原子比较并交 换命令(也可称为atomic compare and write命令)、原子加命令(也可称为atomiccompare and add命令)、独占命令(也可称为exclusive atomic命令)。其具体含义可如表3所示:
表3、不同内存访问命令类型表示的含义
a、load命令
load命令即加载命令,用于从本地内存地址中取出预设数量字节的第一数据,或,用 于从远端内存地址中取出预设数量字节的第二数据。load命令为同步或异步命令(根据flags 指定),将一个指定的源地址中的数据读到最后一次操作结果中,或者同时存储到暂存区 中的指定位置。
需要说明的是,本申请实施例所述的load命令需要注意以下几点:
1)源地址可以是本地地址或远端地址。源地址可以是立即数或可变参数。
2)根据flags中的参数,load命令的操作数可以是1、2、4、8字节,具体本申请对此不做限定。
3)load命令的返回值为读出来的数据。
例子:将UBVA为{EID=1234,UASID=1,VA=0x10000}的8字节数据读取到暂存区位 置为24的地方。
orch_cmd cmd;
cmd.opcode=UB_LOAD;
cmd.flags=ORCH_LOAD_8B;
cmd.load.src_addr.eid=1234;
cmd.load.src_addr.uasid=1;
cmd.load.src_addr.va=0x10000;
cmd.load.result_offset=24;
b、store命令
store命令即存储命令,用于向本地内存地址中写入预设数量字节的第三数据,或,用 于向远端内存地址中写入预设数量字节的第四数据。store命令为同步或异步命令(根据 flags指定),将一个立即数或可变参数存储到指定的目标地址。
需要说明的是,本申请实施例所述的store命令需要注意以下几点:
1)目标地址可以是本地地址或远端地址。目标地址可以是立即数或可变参数。
2)根据flags中的参数,store命令的操作数可以是1、2、4、8字节,具体本申请对此不做限定。
3)store命令的返回值为上条编排命令返回值,即不修改返回值。
例子:将上条编排命令的执行结果存储到UBVA为{EID=1234,UASID=1,VA=0x10000} 的地方,数据长度为4字节。
orch_cmd cmd;
cmd.opcode=UB_STORE;
cmd.flags=ORCH_VALUE_IS_VAR|ORCH_STORE_4B;
cmd.store.dst_addr.eid=1234;
cmd.store.dst_addr.uasid=1;
cmd.store.dst_addr.va=0x10000;
cmd.store.value=-1;
c、memcpy命令
memcpy命令即内存拷贝命令,用于执行本地或远端的数据拷贝。memcpy命令为异步 编排命令,命令格式可以参见URMA Read WQE格式,本申请对此不予赘述。
需要说明的是,本申请实施例所述的memcpy命令需要注意以下几点:
1)目标地址、源地址、长度都可以是立即数或可变参数。
2)目标地址、源地址都可以是本地地址或远端地址,因此memcpy命令囊括了URMARead和Write的语义。“本地”或“远端”的概念取决于编排命令在哪里执行,编排命令 执行者所在主机上的地址称为本地地址,其他地址称为远端地址。例如,在远端编排中, 编排执行者的地址是本地地址,而编排发起者的地址是远端地址,任意第三台主机的地址 也是远端地址。
3)memcpy命令自动判断目标地址和源地址所在主机,并分类处理:
①如果目标地址和源地址都是本地地址,则使用本地DMA拷贝。
②如果目标地址是本地地址,源地址是远端地址,则使用URMA Read传输层原语将远端数据传输到本地。
③如果目标地址是远端地址,源地址是本地地址,则使用URMA Write传输层原语将 本地数据传输到远端。
④如果目标地址和源地址都是远端地址,则在本地开辟一块缓冲区,使用URMARead 传输层原语将源地址的数据传输到本地缓冲区,再使用URMA Write传输层原语将本地缓 冲区的数据传输到目标地址。如果所需传输的数据量很小,缓冲区在片上,否则在DDR; 如果所需传输的数据量很大,则分片传输,以降低所需缓冲区大小并pipeline传入和传出。
4)对于本地地址,可以是进程虚拟地址,也可以是编排暂存区offset,可以用flags 中的2个bits标明。
5)要求目标地址和源地址所拷贝的区间没有重合;目标地址和源地址所拷贝的区间 都不能跨越segment的边界。
6)memcpy命令的返回值为0。
例子1:从UBVA为{EID=1234,UASID=1,VA=0x10000}的地方拷贝1024字节的数据 到UBVA为{EID=4321,UASID=2,VA=0x20000}的地方。
orch_cmd cmd;
cmd.opcode=UB_MEMCOPY;//使用memcopy作为代码中的名称,而非memcpy, 是因为memcpy字样会被门禁认为是危险函数
cmd.flags=0;
cmd.memcopy.src_addr.eid=1234;
cmd.memcopy.src_addr.uasid=1;
cmd.memcopy.src_addr.va=0x10000;
cmd.memcopy.dst_addr.eid=4321;
cmd.memcopy.dst_addr.uasid=2;
cmd.memcopy.dst_addr.va=0x20000;
cmd.memcopy.len=1024;
例子2:参数化的memcopy命令,从UBVA为{EID=1234,UASID=1,VA=暂存区中地址为8的位置}的地方拷贝数据到UBVA为{EID=4321,UASID=2,VA=暂存区中地址为16 的位置}的地方,拷贝数据的长度位于暂存区地址为24的位置。
orch_cmd cmd;
cmd.opcode=UB_MEMCOPY;
cmd.flags=ORCH_SRC_ADDR_IS_VAR|ORCH_DST_ADDR_IS_VAR|ORCH_LEN_IS_VAR;
cmd.memcopy.src_addr.eid=1234;
cmd.memcopy.src_addr.uasid=1;
cmd.memcopy.src_addr.va=8;
cmd.memcopy.dst_addr.eid=4321;
cmd.memcopy.dst_addr.uasid=2;
cmd.memcopy.dst_addr.va=16;
cmd.memcopy.len=24;
d、memcmp命令
memcmp命令即比较命令,用于执行本地或远端的数据比较。memcmp为同步或异步编排命令,同步或异步由flags指定,编排命令格式参见URMA Read WQE格式,具体本 申请对此不予赘述。
需要说明的是,本申请实施例所述的memcmp命令需要注意以下几点:
1)目标地址、源地址、长度都可以是立即数或可变参数。
2)目标地址、源地址可以是本地地址或远端地址。
3)memcmp命令自动判断目标地址和源地址所在主机,并分类处理:
①如果目标地址和源地址都是本地地址,则使用本地DMA加载到内存中并比较。
②如果目标地址和源地址中恰有一个是远端地址,则使用URMA Read传输层原语将 远端数据传输到本地,并与本地DMA出来的数据比较。
③如果目标地址和源地址都是远端地址,则使用URMA Read传输层原语将两个远端 地址上的数据传输到本地缓冲区,并做比较。如果所需传输的数据量很小,缓冲区在片上, 否则在DDR;如果所需传输的数据量很大,则分片传输,以降低所需缓冲区大小。
4)本地地址可以是进程虚拟地址,也可以是编排暂存区offset,可以用flags中的2bits 标明。
5)memcmp命令的返回值为两段内存是否逐字节完全相同,如果相同,则返回值为0; 如果不同,则返回值取决于出现不同的第一个字节的相对大小:如果目标地址小于源地址, 则返回值为-1;如果目标地址大于源地址,则返回值为-2。设计成两个负数,而非一正一 负,是为了便于并发操作时根据总和判断各段内存是否完全相同。
6)对于异步memcmp操作,可以指定一个暂存区offset,用于自增接收返回值。当异步原子操作返回时,该暂存区offset的值会原子地加上返回值。该功能用于并发比较多个内存区域时,统计有多少个区域完全相同。
例子:将UBVA为{EID=1234,UASID=1,VA=0x10000}的地方与UBVA为{EID=4321, UASID=2,VA=0x20000}的地方比较1024字节的数据,执行结果放在暂存区内地址24的位 置。
orch_cmd cmd;
cmd.opcode=UB_MEMCOMP;//使用memcomp作为代码中的名称,而非memcmp, 是因为memcmp字样会被门禁认为是危险函数
cmd.flags=0;
cmd.memcomp.src_addr.eid=1234;
cmd.memcomp.src_addr.uasid=1;
cmd.memcomp.src_addr.va=0x10000;
cmd.memcomp.dst_addr.eid=4321;
cmd.memcomp.dst_addr.uasid=2;
cmd.memcomp.dst_addr.va=0x20000;
cmd.memcomp.len=1024;
cmd.memcomp.inc_retval_offset=24;
e、send/recv命令
send/recv命令即收发命令,用于执行双边消息的收发。
需要说明的是,本申请实施例所述的send/recv命令需要注意以下几点:
1)应用程序在执行编排命令之前,必须使用URMA API创建好发送和接收的Jetty(即 日志文件系统(journal file system,JFS)和日志文件记录(journal filerecorder,JFR))。
①当JFS和JFR为电子集成驱动器(integrated drive electronics,IDE)接口时,由于 并发访问DDR的问题,不允许普通URMA操作和编排任务共享JFS和JFR,也不允许多 个编排任务并发操作同一JFS和JFR。
②当JFS和JFR为DC接口时,允许普通URMA操作和编排任务共享JFS和JFR,允 许多个编排任务并发操作同一JFS和JFR。
③对于一个JFR对应多个Berth做load balance的场景,由于Berth是用DDR实现的, 每个Berth不允许普通URMA操作和编排任务共享,也不允许不同的编排任务并发访问;但由于Berth之间的load balance是硬件实现,不同的Berth可以分别归属于普通URMA 操作或编排任务,也可以分别归属于并发的编排任务。
④与URMA一样,编排暂不支持tag matching能力。
2)send/recv为异步编排命令,格式参见URMA Send/Recv WQE格式,本申请对此不予赘述。
3)目标地址、源地址、长度都可以是立即数或可变参数。
4)recv命令中的destination address和send命令中的source address为本地地址,可以 是进程虚拟地址,也可以是编排暂存区地址,用flag中1bit标明。
5)send/recv命令的返回值为编排命令成功传输的字节数,大于零表示成功传输,等 于零表示执行失败(例如队列满、没有匹配的send/recv请求、send/recv请求的缓冲区大小 不匹配等)。
6)如果send/recv命令存在access violation等严重错误,不是返回零,而是会导致整 个编排算子异常。
例子1:从0x10000的地方发送1024字节的数据经过JFS 10发送到UBVA为{EID=4321, UASID=2,JFR=0x20000}的Jetty。
orch_cmd cmd;
cmd.opcode=UB_SEND;
cmd.flags=0;
cmd.send.src_addr=0x10000;
cmd.send.jfs=10;
cmd.send.dst.eid=4321;
cmd.send.dst.uasid=2;
cmd.send.dst.jfr=0x20000;
cmd.send.len=1024;
例子2:从JFR 20接收接收最大1024字节的数据,存储到0x10000内存地址,接收的字节数保存在暂存区偏移量为8的地方。
orch_cmd cmd;
cmd.opcode=UB_RECV;
cmd.flags=0;
cmd.recv.addr=0x10000;
cmd.recv.jfr=20;
cmd.recv.len=1024;
cmd.recv.result_offset=8;
f、atomic compare and write命令
atomic compare and write命令即原子比较并交换命令,用于执行预设数量字节的第五 数据带比较条件和掩码的原子交换。atomic compare and write命令有同步、异步两种模式, 由flags指定。其原子地执行下列语义:对目标地址和比较地址的内存内容分别与掩码执行 逻辑与运算后进行比较,如果完全相同,则比较成功,将目标地址中所有对应掩码位为1 的位修改为交换地址的对应位;如果比较不成功则不修改目标地址。
需要说明的是,本申请实施例所述的atomic compare and write命令需要注意以下几点:
1)比较条件包括完全相等、无条件成功(相当于atomic swap)、无条件失败(只原子 比较不修改)。
2)编排命令格式参见URMA Atomic Compare and Write WQE格式,本申请对此不予 赘述。
3)有立即数模式和地址模式两种。立即数模式中,比较、掩码、交换均为立即数,适用于不超过8字节的原子操作。地址模式中,比较、掩码、交换均为地址,适用于任意 长度的原子操作。
4)在立即数模式中,目标地址、比较值、掩码值、交换值、长度均为1、2、4或8 字节的立即数或可变参数。
5)在地址模式中,目标地址、比较地址、掩码地址、交换地址、长度都可以是立即数或可变参数。
6)在地址模式中,比较地址、掩码地址、交换地址均为本地地址,要么都是进程虚拟地址,要么都是编排暂存区地址,用flag中1bit标明。
7)目标地址可以是本地地址或远端地址。
8)返回值:如果比较并交换成功,返回值为1;如果比较失败,返回值为0。
9)对于异步原子操作,可以指定一个暂存区offset,用于自增接收返回值。当异步原 子操作返回时,该暂存区offset的值会原子地加上返回值。该功能用于并发获取多个锁时, 统计有多少把锁成功地获取了。
例子:对UBVA为{EID=1234,UASID=1,VA=0x20000}的地址执行8字节CAS原子操作,结果保存到暂存区内地址为8的地方。
orch_cmd cmd;
cmd.opcode=UB_ATOMIC_CAS;
cmd.flags=UB_ATOMIC_8B;
cmd.atomic_cas.dst_addr.eid=1234;
cmd.atomic_cas.dst_addr.uasid=1;
cmd.atomic_cas.dst_addr.va=0x20000;
cmd.atomic_cas.compare_addr=0x10000;//local addr
cmd.atomic_cas.swap_addr=0x20000;//local addr
cmd.atomic_cas.compare_mask_addr=0x30000;//local addr
cmd.atomic_cas.swap_mask_addr=0x40000;//local addr
cmd.atomic_cas.inc_retval_offset=8;
g、atomic compare and add命令
atomic compare and add命令即原子加命令,用于执行预设数量字节的第六数据带比较 条件的原子加操作。atomic compare and add命令有同步、异步两种模式,由flags指定。 其原子地执行下列语义:比较目标地址的数据与比较值,如果比较条件成立,则将目标地 址加上增量值;如果比较条件不成立则不修改目标地址。
需要说明的是,本申请实施例所述的atomic compare and add命令需要注意以下几点:
1)比较条件可以包括如下任意一种:等于、不等于、大于、大于等于、小于、小于 等于、无条件成功(相当于Fetch and Add)。
2)编排命令格式参见URMA Atomic Compare and Add WQE格式,本申请对此不予赘 述。
3)目标地址、比较数据、相加的增量值都可以是立即数或可变参数。
4)目标地址可以是本地地址或远端地址。
5)根据flags中的参数,atomic compare and add命令的操作数可以是1、2、4、8字节。
6)返回值:如果比较并相加成功,返回值为1;如果比较失败,返回值为0。
7)对于异步原子操作,可以指定一个暂存区offset,用于自增接收返回值。当异步原 子操作返回时,该暂存区offset的值会原子地加上返回值。
例子:对UBVA为{EID=1234,UASID=1,VA=0x20000}的地址执行8字节CAA原子操作(比较是否小于等于10,如果是的话,就原子地加上1),fetch的结果保存在本地0x10000内存地址,命令的执行结果保存到暂存区内地址为8的地方。
orch_cmd cmd;
cmd.opcode=UB_ATOMIC_CAA;
cmd.flags=UB_ATOMIC_8B;
cmd.atomic_caa.dst_addr.eid=1234;
cmd.atomic_caa.dst_addr.uasid=1;
cmd.atomic_caa.dst_addr.va=0x20000;
cmd.atomic_caa.fetch_addr=0x10000;//local addr
cmd.atomic_caa.compare_val=10;
cmd.atomic_caa.update_val=1;
cmd.atomic_caa.inc_retval_offset=8;
cmd.atomic_caa.opcode=ORCH_ARITH_LE;
h、exclusive atomic命令
exclusive atomic命令即独占命令。exclusive atomic命令是原子比较替换命令(atomic compare and swap,CAS)和比较加命令(compare and add,CAA)命令的变体,用于通过 缓存一致性协议获取一个进程虚拟地址(锁地址lock address)所对应的物理内存地址的独 占访问权。该访问权只能被编排上下文主动释放,不能被抢占。权限控制的粒度一般为cache line。
需要说明的是,本申请实施例所述的exclusive atomic命令需要注意以下几点:
1)获取内存访问权的有效期由锁区域指定,该区域是编排算子中连续的若干条编排 命令。锁区域由至少3条编排命令构成,首条编排命令必须是用于加锁的同步CAS或CAA命令,在flags中用2’b01标明。中间的编排命令用2’b10标明,是需要在临界区内执行 的编排命令。最后一条编排命令用2’b11标明,一般是用于解锁的,内存地址的独占访问 权在此释放。
2)首条编排命令获取锁地址的独占访问权,并检查原子操作中的比较条件。如果检 查失败,将直接跳转到2’b11标明的锁区域最后一条命令的下一条命令。如果检查成功,将执行原子操作中的交换(CAS)或自增(CAA),并执行2’b10和2’b11标明的编排 命令,最后释放独占访问权。
3)锁区域不允许嵌套,也不允许同时获取多个地址的独占访问权,以防止死锁。
4)锁区域内如果有异步操作,建议使用等待命令等待其完成后再释放独占访问权, 否则独占访问权被释放时异步操作可能尚未完成。
5)由于循环和条件跳转的可能性,锁区域长度不一定是实际执行的编排命令数量。 如果在锁区域内直接跳转到锁区域以外(而没有执行2’b11标明的最后一条编排命令), 锁地址的独占访问权将自动释放。如果读写访问权的持有时间超过硬件限制,将自动释放, 并视为编排异常。
6)如果硬件支持分布式一致性能力,锁地址可以是本地或远端地址;否则,锁地址只支持本地地址。
7)exclusive atomic命令在网络上使用缓存一致性报文,不引入新的事务层报文类型。
例子:先加锁,再写入1024字节的数据,最后解锁(注意锁地址和写入数据的地址不同,锁是用来保护数据区的)。
orch_cmd cmd1,cmd2,cmd3;
cmd1.opcode=UB_ATOMIC_CAS;
cmd1.flags=UB_EXCLUSIVE_BEGIN|UB_ATOMIC_8B|UB_ATOMIC_IMM;
cmd1.atomic_cas.dst_addr.eid=1234;
cmd1.atomic_cas.dst_addr.uasid=1;
cmd1.atomic_cas.dst_addr.va=0x20000;
cmd1.atomic_cas.compare_val=0;//lock:from 0to 1
cmd1.atomic_cas.swap_val=1;
orch_append_cmd(&orch_cmdlist,&cmd1);
cmd2.opcode=UB_MEMCOPY;
cmd2.flags=UB_EXCLUSIVE_MIDDLE;
cmd2.memcopy.src_addr.eid=1234;
cmd2.memcopy.src_addr.uasid=1;
cmd2.memcopy.src_addr.va=0x10000;
cmd2.memcopy.dst_addr.eid=4321;
cmd2.memcopy.dst_addr.uasid=2;
cmd2.memcopy.dst_addr.va=0x20000;
cmd2.memcopy.len=1024;
orch_append_cmd(&orch_cmdlist,&cmd2);
cmd3.opcode=UB_ATOMIC_CAS;
cmd3.flags=UB_EXCLUSIVE_END|UB_ATOMIC_8B|UB_ATOMIC_IMM;
cmd3.atomic_cas.dst_addr.eid=1234;
cmd3.atomic_cas.dst_addr.uasid=1;
cmd3.atomic_cas.dst_addr.va=0x20000;
cmd3.atomic_cas.compare_val=1;//from 1to 0
cmd3.atomic_cas.swap_val=0;
orch_append_cmd(&orch_cmdlist,&cmd3);
需要说明的是,上述对表1至表3所述的各个编排命令的解释和说明只是编排命令定 义的一种具体实现方式,在本申请的另一些实施方式中,还可以有其他的对各个不同类型 编排命令的定义,具体本申请对此不做限定。
需要注意的是,在本申请的一些实施方式中,在执行步骤101之前,第一计算机设备 上的应用程序(如,第一软件)需事先注册编排命令允许被访问的每块内存区域(即用户数据存储的地方),注册方式可采用现有的相关技术,本申请对此不予赘述。
还需要注意的是,第一计算机设备上的应用程序还可以事先注册需要被本地调用的编 排算子的存储区域,指定一个由若干条编排命令构成的程序,设置编排算子允许访问的内 存区域。在本申请的一些实施方式中,考虑到数据安全,还可以设置调用者需要携带的安 全令牌,获取编排算子的注册ID供后续调用。由于第一计算机设备上可能有多个应用程 序,每个应用程序可以有唯一的命名空间ID,每个应用程序注册的编排算子仅在该应用程 序的命名空间内有效,作为一个示例,假设第一计算机设备上的应用程序A的唯一命名空 间ID为ID1,那么应用程序A注册的编排算子仅在命名空间ID为ID1内有效,从而实现 了应用程序间的隔离。
此外,在第一计算机设备上正在运行的软件不管是一个还是多个,都可以基于实时生 成的请求得到各自对应的编排算子,多个不同请求各自对应的编排算子独立执行,互不干 扰,从而可提高请求的执行性能。
102、第一网络设备根据第一编排算子执行多个内存访问操作,并获取每个内存访问 操作的响应结果。
第一网络设备在获取到第一编排算子之后,进一步根据该第一编排算子执行多个内存 访问操作,每个内存访问操作执行完成后,第一网络设备会获取到对应的每个内存访问操 作的响应结果(也可称为执行结果、返回结果等,本申请对此不做限定),例如,假设第一网络设备基于第一编排算子得的内存访问操作为k个,那么相应的就会获取到k个响应结果,一个内存访问操作对应一个响应结果,k≥1。
需要说明的是,在本申请实施例中,由于内存访问操作可以是本地内存访问操作,也 可以是远端内存访问操作,内存访问操作的类型不同,第一网络设备得到对应的响应结果 的方式也不同,下面分别进行阐述:
A、内存访问操作为远端内存访问操作
在这种情况下,第一网络设备首先会解析该第一编排算子中的编排命令,从而得到Q 个本地内存访问操作,Q≥1。例如,可以是解析该第一编排算子中编排命令的可变参数(如, 上一条编排命令的返回值、第一编排上下文中的中间变量等),从而得到P个远端内存访 问操作,P≥1,其中,该可变参数为编排命令在运行时才能确定具体取值的参数,具体可参阅上述对可变参数的术语解释说明,此处不予赘述。
之后,第一网络设备会将各个远端内存访问操作生成各自对应的网络报文,一个远端 内存访问操作可以访问一段内存,如果内存的长度超过了单个网络报文的最大大小,就会 被拆分成多个网络报文,也就是说,一个远端内存访问操作可以对应一个或多个网络报文, 具体本申请对此不做限定。
在生成各个远端内存访问操作各自对应的网络报文之后,该第一网络设备就可以将各 个网络报文向各自对应的远端网络设备(可称为第二网络设备)进行发送,远端网络设备 可以是一个,也可以是多个,根据应用过程中的具体情况决定,本申请对此不做限定。
每个第二网络设备在收到各自的网络报文后,就会基于各自的网络报文所携带的信息 访问第二网络设备各自对应的内存(也就是第一网络设备的远端内存),并在访问完成后, 生成对应的响应结果,一个远端内存访问操作就对应有一个响应结果。最后,每个响应结 果都会返回给第一网络设备。
B、内存访问操作为本地内存访问操作
在这种情况下,同样地,第一网络设备首先会解析该第一编排算子中的编排命令,从 而得到Q个本地内存访问操作,Q≥1。例如,可以是解析该第一编排算子中编排命令的可变参数(如,上一条编排命令的返回值、第一编排上下文中的中间变量等),从而得到Q 个本地内存访问操作,Q≥1,其中,该可变参数为编排命令在运行时才能确定具体取值的 参数,具体可参阅上述对可变参数的术语解释说明,此处不予赘述。
之后,第一网络设备直接根据每个本地内存访问操作去访问本地内存,从而得到每个 本地内存访问操作的响应结果。
103、第一网络设备在获取到每个内存访问操作的响应结果之后,生成第一完成指令, 第一完成指令用于表征第一编排算子执行完毕。
第一网络设备在获取到每个内存访问操作各自对应的响应结果之后,就会触发生成一 个完成指令(也可称为完成事件),第一编排算子对应的完成指令即为第一完成指令,该 第一完成指令就用于表征该第一编排算子执行完成了。
需要说明的是,在本申请的一些实施方式中,第一网络设备可以将该第一完成指令向 第一计算机设备的控制单元发送,以使得该第一计算机设备的控制单元知道该第一编排算 子已经执行完成,例如,在本申请的一些实施方式中,该第一完成指令可以由第一网络设 备先发送到发送队列,然后再按照与普通的完成队列相同的机制生成中断,并唤醒第一计 算机设备上对应的发起进程(即所述第一应用)。此外,第一计算机设备也可以周期性访 问该第一网络设备,以便及时得知该第一网络设备是否生成第一完成指令,据此判断第一 编排算子是否执行完成。本申请对第一计算机设备如何得知第一编排算子执行完成的具体 实现方式不做限定。
需要说明的是,上述图1对应的实施例所述的执行步骤是以网络设备为执行主体进行 的说明,在实际的应用过程中,可以是通过在网络设备内增加编排单元(也可称为编排引 擎)来实现编排算子的执行操作的。具体地,该编排单元可以从编排算子的存储区域中读 取编排算子来逐个执行编排命令,在本地编排的执行过程中,可以调用事务层访问远端内 存,或调用DMA引擎访问本地内存,或异步执行另一组编排命令;在远端编排的执行过程中,则可以调用远端网络设备上的编排单元执行其他编排算子,或异步执行另一组编排算子等。具体请参阅图4,图4为本申请实施例提供的本地编排的系统架构的一个示意图,其包含的模块可以包括:本地CPU、本地内存(也可称为发起端内存)、本地网络设备(也 可称为发起端网络设备、第一网络设备)、远端网络设备(即第二网络设备)、远端内存(本 申请不涉及远端CPU)。本地网络设备包括编排单元以及远端内存访问操作执行单元(即 事务层),其中,编排单元为新增模块。
基于图4对应的系统架构,下面以本地CPU上运行的目标软件为例,对各个模块的功 能以及各个模块之间的交互过程进行介绍,需要注意的是,运行在本地计算机设备上的任 意一个应用程序都可作为所述的目标软件,不限定是本地CPU上运行的,此处仅为示意。各个模块的功能以及各个模块之间的交互过程如下:
步骤①、本地CPU上运行的目标软件(即所述的第一应用)向编排算子存储区(即所述的第一存储区域)填写一组编排命令组成的代码程序,该组编排命令可以包括一个或多个编排命令,该组编排命令就构成所述的编排算子(即所述的第一编排算子)。这里需要 注意的是,在一些应用场景中(如,编排算子是简单的编排算子),本地CPU也可以直接 将该编排算子向本地网络设备的编排单元发送。
步骤②、本地CPU上运行的目标软件向本地网络设备中的编排单元发送与该编排算子 对应的执行指令(即所述的第一执行指令),用于指示该编排单元读取对应的编排算子。 这里需要注意的是,若本地CPU是直接将该编排算子向本地网络设备的编排单元发送的情 况,则不需执行步骤②。
步骤③、该编排单元基于该执行指令,触发生成一个编排上下文(即所述的第一编排 上下文),之后再从编排算子存储区读取该编排算子。其中,编排上下文的内容包括编排算子的调用者、当前执行的编排命令指针、异步执行的编排命令计数器、该编排算子中最后一条编排命令的位置、循环计数器、循环跳转位置、编排任务执行过程中的中间变量等。之后,如果是远端内存访问操作,则执行步骤④-⑦、⑨;如果是本地内存访问操作,则执 行步骤⑧-⑨。这里需要注意的是,若本地CPU是直接将该编排算子向本地网络设备的编 排单元发送的情况,由于这种情况不执行步骤②,因此该编排单元是基于从本地CPU接收 的编排算子触发生成编排上下文的。
步骤④、如果基于编排算子确定是远端内存访问操作,那么编排单元会进一步解析编 排命令中的可变参数,得到远端内存访问操作,并将该远端内存访问操作发送到本地网络 设备的远端内存访问操作执行单元。
步骤⑤、本地网络设备的远端内存访问操作执行单元基于每个远端内存访问操作生成 各自对应的网络报文,并将生成的网络报文向各自对应的远端网络设备(此处仅以一个远 端网络设备为例进行示意)发送,并接收返回的响应结果(即远端内存的访问结果)。
步骤⑥、远端网络设备基于收到的网络报文,执行访问远端内存的操作,并将响应结 果返回给本地网络设备的远端内存访问操作执行单元。
步骤⑦、本地网络设备的远端内存访问操作执行单元将每次收到的响应结果向本地网 络设备的编排单元发送,编排单元基于响应结果查找对应的编排上下文,将响应结果存储 到编排命令指定的位置(例如,编排上下文中的某个中间变量)。
步骤⑧、如果基于编排算子确定是本地内存访问操作,同样地,编排单元会进一步解 析编排命令中的可变参数,得到本地内存访问操作,然后基于每个本地内存访问操作访问 本地内存,并将本地内存的访问结果(即响应结果)存储到编排命令指定的位置。
步骤⑨、该编排算子执行完毕(即编排单元收到了每个内存访问操作对应的响应结果) 时,编排单元会销毁该编排算子对应的编排上下文,并生成一个完成指令(即第一完成指 令),也可称为完成事件,用于通知编排算子的发起进程。
为便于理解上述系统架构在本地编排过程中的具体实现,下面以图5为例,示意编排 单元的一个参考实现方式,具体请参阅图5,图5为本申请实施例提供的182X上本地编排的一个执行流程示意图,其中,所有编排命令的解释与执行都是在182X处理器上完成。 编排算子对应特殊的编排QP。编排QP作为解释器,解释编排命令,编排QP在内部执行 控制命令和本地访存命令,以及计算可变命令参数。中间状态存储在QPC中。编排QP生 成异步远程访存命令的WQE,然后切换上下文到访存命令所在RoCE QP的上下文(QPC), 按照RoCE QP的处理过程来发出远程访问报文,再切换回编排QP的上下文(QPC)。编 排QP持续执行WQElist中的多个WQE,直到遇到等待命令、同步远程访存命令或或者 编排结束命令。RoCE QP收到网络上的响应报文后,根据WQE找到编排QP,更新相应 编排QP的状态,并按需唤醒等待的编排QP。
基于上述所述,本申请实施例所述的基于网络设备的数据处理方法最创新的地方在于: 在本地执行由参数化的本地或远端内存访存命令、控制命令、计算命令组成的编排算子, 这样可以减少CPU与网络设备之间的交互次数,并将数据结构处理请求卸载到数据所在节 点上执行(如,可直接卸载到网络设备上执行),从而提高了分布式通信请求的性能。此 外,本申请实施例提出的编排算子是一种简洁、统一的编程抽象,在多种网络设备上都可 以高效执行,从而解决了微码编程困难的问题以及不同架构网络设备间微码互相不兼容的 问题。
二、远端编排
远端编排是指在与发起者(如,下述所述的第一计算机设备)不同主机的网络设备(如, 下述所述的第二网络设备)上执行编排算子的过程。具体请参阅图6,图6为本申请实施 例提供的基于网络设备的数据处理方法的一个流程示意图,该方法可以包括如下步骤:
601、第一网络设备从第一计算机设备获取目标执行指令,目标执行指令用于指示第 二网络设备从第二存储区域读取第二编排算子,第二编排算子为第二计算机设备的控制单 元基于第二请求生成的编排命令的有序集合,用于表征第二请求的运行逻辑,第二请求为 第二计算机设备上运行的第二应用产生的请求,第二编排算子包括内存访问命令。
第二计算机设备(即远端)上正在运行的目标软件(可称为第二软件或第二应用)的 进程会实时生成请求(可称为第二请求),基于该当前生成的第二请求,第二计算机设备的控制单元会生成一个与该第二请求对应的编排算子(可称为第二编排算子),同样地, 第二编排算子是一组有序的、由编排命令组成的代码,其构成编排命令的有序集合,用于 表征对应的第二请求的运行逻辑。在第二计算机设备的控制单元基于第二请求构建好对应的第二编排算子之后,可以将该第二编排算子存储在一个预先设定的存储区域(如,DDR 内存),该存储区域作为第二计算机设备的编排算子的存储区,可称为第二存储区域,第 二计算机设备的控制单元生成的编排算子都可以存储在该第二存储区域。
需要注意的是,第二计算机设备上的应用程序可以事先注册需要被远端调用的编排算 子的存储区域,指定一个由若干条编排命令构成的程序,设置编排算子允许访问的内存区 域。在本申请的一些实施方式中,考虑到数据安全,还可以设置调用者需要携带的安全令 牌,获取编排算子的注册ID供后续调用。由于第二计算机设备上可能有多个应用程序, 每个应用程序可以有唯一的命名空间ID,每个应用程序注册的编排算子仅在该应用程序的 命名空间内有效,作为一个示例,假设第二计算机设备上的应用程序B的唯一命名空间ID 为ID2,那么应用程序B注册的编排算子仅在命名空间ID为ID2内有效,从而实现了应用程序间的隔离。此外,在第二计算机设备上正在运行的软件不管是一个还是多个,都可以基于实时生成的请求得到各自对应的编排算子,多个不同请求各自对应的编排算子独立执行,互不干扰,从而可提高请求的执行性能。
还需要注意的是,在远端编排过程中,第二计算机设备的控制单元同样可以基于编排 软件架构生成与请求对应的编排算子,具体可参阅图2或图3对应实施例所述的部分,此 处不予赘述。
此外,在远端编排过程中,依然是第一网络设备主导编排算子的调用,因此,第二网 络设备在将第二编排算子存储在第二存储区域后,可以向第一网络设备的CPU发送一个通 知指令,用于通知对应的编排算子已经注册完成。当第一网络设备需要远端调用该第二编 排算子时,此时第一计算机设备的CPU会生成一个目标执行指令,并发送给第一网络设备 该目标执行指令就用于指示第二网络设备从第二存储区域读取该第二编排算子。
需要注意的是,在本申请实施例中,由于编排算子是用于进行内存访问的,因此,组 成该第二编排算子的编排命令中必须要包括内存访问命令,该内存访问命令就用于表征进 行内存访问的操作类型。此外,还需要说明的是,在本申请的一些实施方式中,编排算子 包括的编排命令的类型除了包括内存访问命令之外,为了能更加灵活的表达应用产生的请 求的内部运行逻辑,且使得编排算子可以即能表达静态工作流图又能表达动态工作流图, 编排算子至少还可以包括如下任意一种类型的编排命令:控制命令以及计算命令,其中, 控制命令用于控制第二网络设备,计算命令用于对至少一个操作数进行算术和/或逻辑运算。
需要说明的是,在本申请的一些实施方式中,根据具体的作用,内存访问命令、计算 命令、控制命令又可以有不同的表现形式,对不同编排命令的定义介绍可参阅上述图1对 应实施例所述对编排命令定义的介绍,本申请对此不予赘述。
602、第一网络设备基于目标执行指令生成目标网络报文,并将目标网络报文向第二 网络设备发送。
第一网络设备在接收到第一计算机设备发送的目标执行指令后,就会基于该目标执行 指令生成对应的网络报文,可称为目标网络报文,之后,第一网络设备会进一步将该目标 网络报文向第二网络设备发送。
603、第二网络设备根据目标网络报文从第二存储区域读取第二编排算子。
第二网络设备接收到第一网络设备发送的与目标执行指令对应的目标网络报文之后, 会基于该目标网络报文所携带的信息,从第二存储区域读取第二编排算子。
需要说明的是,在本申请的一些实施方式中,第二网络设备还会生成与该第二编排算 子对应的一个编排上下文(可称为第二编排上下文),该第二编排上下文用于存储编排任 务(即内存访问操作)在执行过程中的中间状态。
还需要说明的是,在本申请的一些实施方式中,编排上下文的内容至少可以包括如下 任意一种:编排算子的调用者、当前执行的编排命令的指针、异步执行的编排命令计数器、 编排算子中最后一个编排命令的位置、循环计数器、循环跳转位置、编排任务执行过程中 的中间变量等。例如,第二编排上下文就可以至少包括如下任意一种:第二编排算子的调 用者(即第二计算机设备)、当前执行的编排命令的指针、异步执行的编排命令计数器、 编排算子中最后一个编排命令的位置、循环计数器、循环跳转位置、编排任务执行过程中 的中间变量等。
需要注意的是,在本申请的一些实施方式中,第二网络设备生成第二编排上下文的生 成方式可以是:第二网络设备在收到第一网络设备发送的与目标执行指令对应的目标网络 报文后,触发生成第一编排上下文。作为一个示例,具体的生成方式可以是:第二网络设 备在开始执行第二编排算子时,从编排上下文池中分配一个空闲的编排上下文,使用第二 软件指定的参数初始化编排上下文中的暂存区,之后该第二编排算子在编排算子的执行过 程中用于存储中间状态。
604、第二网络设备根据第二编排算子执行多个内存访问操作,并获取每个内存访问 操作的响应结果。
第二网络设备在获取到第二编排算子之后,进一步根据该第二编排算子得到多个内存 访问操作,每个内存访问操作执行完成后,第二网络设备会获取到对应的每个内存访问操 作的响应结果(也可称为执行结果、返回结果等,本申请对此不做限定),例如,假设第二网络设备基于第二编排算子得到的内存访问操作为k'个,那么相应的就会获取到k' 个响应结果,一个内存访问操作对应一个响应结果,k'≥1。
需要说明的是,在本申请实施例中,由于内存访问操作可以是本地内存访问操作,也 可以是远端内存访问操作,内存访问操作的类型不同,第二网络设备得到对应的响应结果 的方式也不同,下面分别进行阐述:
A、内存访问操作为远端内存访问操作
在这种情况下,第二网络设备首先会解析该第二编排算子中的编排命令,从而得到P' 个远端内存访问操作,P'≥1,例如,第二网络设备可以解析该第二编排算子中编排命令 的可变参数(如,上一条编排命令的返回值、第二编排上下文中的中间变量等),从而得到P'个远端内存访问操作,P'≥1,其中,该可变参数为编排命令在运行时才能确定具 体取值的参数,具体可参阅上述对可变参数的术语解释说明,此处不予赘述。
之后,第二网络设备会将各个远端内存访问操作生成各自对应的网络报文,一个远端 内存访问操作可以访问一段内存,如果内存的长度超过了单个网络报文的最大大小,就会 被拆分成多个网络报文,也就是说,一个远端内存访问操作可以对应一个或多个网络报文, 具体本申请对此不做限定。
在生成各个远端内存访问操作各自对应的网络报文之后,该第二网络设备就可以将各 个网络报文向各自对应的远端网络设备(可称为第三网络设备)进行发送,远端网络设备 可以是一个,也可以是多个,根据应用过程中的具体情况决定,本申请对此不做限定。这 里需要注意的是,第三网络设备可以是第一网络设备(是远端调用的发起者),也可以是与第一网络设备不同的其他网络设备,具体本申请对此不做限定。
每个第三网络设备在收到各自的网络报文后,就会基于各自的网络报文所携带的信息 访问第三网络设备各自对应的内存(也就是第二网络设备的远端内存),并在访问完成后, 生成对应的响应结果,一个远端内存访问操作就对应有一个响应结果。最后,每个响应结 果都会返回给第二网络设备。
B、内存访问操作为本地内存访问操作
在这种情况下,同样地,第二网络设备首先会解析该第一编排算子中的编排命令,从 而得到Q个本地内存访问操作,Q≥1,例如,第二网络设备可以解析该第一编排算子中编排命令的可变参数(如,上一条编排命令的返回值、第一编排上下文中的中间变量等), 从而得到Q个本地内存访问操作,Q≥1,其中,该可变参数为编排命令在运行时才能确定 具体取值的参数,具体可参阅上述对可变参数的术语解释说明,此处不予赘述。
之后,第二网络设备直接根据每个本地内存访问操作去访问本地内存,从而得到每个 本地内存访问操作的响应结果。
605、第二网络设备生成目标网络报文的目标响应,并将目标响应向第一网络设备发 送。
当第二网络设备收到了每个内存访问操作各自对应的响应结果之后,就会生成目标网 络报文的目标响应,并将该目标响应向第一网络设备发送。
606、第一网络设备基于目标响应生成第二完成指令,第二完成指令用于表征第二编 排算子执行完毕。
第一网络设备在接收到由第二网络设备发送的目标响应之后,就会触发生成一个完成 指令(也可称为完成事件),第二编排算子对应的完成指令即为第二完成指令,该第二完 成指令就用于表征该第二编排算子执行完成了。类似地,在本申请的一些实施方式中,第 一网络设备可以将该第二完成指令向第一计算机设备的控制单元发送,以使得该第一计算 机设备的控制单元知道该第二编排算子已经执行完成,例如,在本申请的一些实施方式中, 该第二完成指令可以由第一网络设备先发送到发送队列,然后再按照与普通的完成队列相 同的机制生成中断,具体本申请对此不予赘述。此外,第一计算机设备也可以周期性访问 该第一网络设备,以便及时得知该第一网络设备是否生成第一完成指令,据此判断第二编 排算子是否执行完成。本申请对第一计算机设备如何得知第二编排算子执行完成的具体实 现方式不做限定。
同样需要说明的是,上述图6对应的实施例所述的执行步骤是以网络设备为执行主体 进行的说明,在实际的应用过程中,也可以是通过在网络设备内增加编排单元(也可称为 编排引擎)来实现编排算子的执行操作的。具体地,该编排单元可以从编排算子的存储区 域中读取编排算子来逐个执行编排命令,在本地编排的执行过程中,可以调用事务层访问 远端内存,或调用DMA引擎访问本地内存,或异步执行另一组编排命令;在远端编排的执行过程中,则可以调用远端网络设备上的编排单元执行其他编排算子,或异步执行另一组编排算子等。具体请参阅图7,图7为本申请实施例提供的远端编排的系统架构的一个 示意图,其包含的模块可以包括:本地CPU、本地网络设备(也可称为发起端网络设备、 第一网络设备)、远端CPU、远端网络设备(即第二网络设备)、远端内存、第三端网络设 备(也可称为第三网络设备)、第三端内存(若第三网络设备不为第一网络设备,则本申 请不涉及第三端CPU)。本地网络设备包括第一编排单元以及第一远端内存访问操作执行 单元(即第一事务层),远端网络设备包括第二编排单元以及第二远端内存访问操作执行 单元(即第二事务层)。其中,各个编排单元为各自网络设备上的新增模块。
基于图7对应的系统架构,下面以远端CPU(即第二计算机设备的CPU)上运行的目标软件为例,对各个模块的功能以及各个模块之间的交互过程进行介绍,需要注意的是,运行在第二计算机设备上的任意一个应用程序都可作为所述的目标软件,不限定是第二计算机设备的CPU上运行的,此处仅为示意。各个模块的功能以及各个模块之间的交互过程如下:
步骤①、远端CPU(即所述的第二计算机设备的CPU)上运行的目标软件(即所述的第二应用)向远端编排算子存储区(即所述的第二存储区域)填写一组编排命令组成的代码程序,该组编排命令可以包括一个或多个编排命令,该组编排命令就构成所述的编排算子(即所述的第二编排算子)。
步骤②、远端CPU上运行的目标软件通知本地CPU(即所述的第一计算机设备的CPU) 该编排算子已注册完成。
步骤③、本地CPU向本地网络设备(即所述的第一网络设备)中的编排单元(即第一编排单元)发送与该第二编排算子对应的执行指令(即所述的目标执行指令)。
步骤④、第一编排单元收到本地CPU发送的目标执行指令,会生成与该目标执行指令 对应的远端编排调用的网络报文(即所述的目标网络报文),并将该目标网络报文向远端 网络设备(即所述的第二网络设备)中的编排单元(即第二编排单元)发送。该目标执行指令就用于指示第二网络设备从远端编排算子存储区中读取第二编排算子。
步骤⑤、第二编排单元在收到该目标网络报文后,会解析出该目标网络报文所携带的 信息,并触发生成一个编排上下文(即所述的第二编排上下文),之后再基于携带的信息 从远端编排算子存储区读取该第二编排算子。其中,编排上下文的内容包括编排算子的调 用者、当前执行的编排命令指针、异步执行的编排命令计数器、该编排算子中最后一条编 排命令的位置、循环计数器、循环跳转位置、编排任务执行过程中的中间变量等。之后,如果是远端内存访问操作,则执行步骤⑥-⑨、-/>;如果是本地内存访问操作,则执行步骤⑩-/>。
步骤⑥、如果基于编排算子确定是远端内存访问操作,那么第二编排单元会进一步解 析编排命令中的可变参数,得到远端内存访问操作,并将该远端内存访问操作发送到第三 网络设备的内存访问操作执行单元,该第三网络设备可以是本地网络设备,也可以是第三 方网络设备。
步骤⑦、第二网络设备的远端内存访问操作执行单元基于每个远端内存访问操作生成 各自对应的网络报文,并将生成的网络报文向各自对应的第三网络设备发送,并接收返回 的响应结果(即本地内存或第三方远端内存的访问结果)。
步骤⑧、第三网络设备基于收到的网络报文,执行访问第三远端内存的操作,并将响 应结果返回给第二网络设备的远端内存访问操作执行单元。需要注意的是,若第三网络设 备是第一网络设备,则第三远端内存则为第一计算机设备的本地内存;若第三网络设备是 不同于第一网络设备的第三方网络设备,则第三远端内存则为第三计算机设备的第三方内 存。
步骤⑨、第二网络设备的远端内存访问操作执行单元将每次收到的响应结果向第二编 排单元发送,第二编排单元基于响应结果查找对应的编排上下文,将响应结果存储到编排 命令指定的位置(例如,编排上下文中的某个中间变量)。
步骤⑩、如果基于编排算子确定是本地内存访问操作,同样地,第二编排单元会进一 步解析编排命令中的可变参数,得到本地内存访问操作,然后基于每个本地内存访问操作 访问本地内存,并将本地内存的访问结果(即响应结果)存储到编排命令指定的位置。
步骤、该第二编排算子执行完毕(即第二编排单元收到了每个内存访问操作对应的 响应结果)时,第二编排单元会销毁该第二编排算子对应的第二编排上下文,并生成一个 与目标网络报文对应的目标响应,并将该目标响应向第一编排单元发送。
步骤、第一编排单元接收到该目标响应后,会生成一个完成指令(即第二完成指令), 也可称为完成事件,用于通知本地CPU。
为便于理解上述系统架构在本地编排过程中的具体实现,下面以图8为例,示意编排 单元的一个参考实现方式,具体请参阅图8,图8为本申请实施例提供的182X上远端编排的一个执行流程示意图,其中,携带远端编排请求与结果的消息使用新的事务层报文:REMOTE_ORCH;REMOTE_ORCH_RES。远端编排命令通过传输QP发送到相应的远端 编排QP。在远端编排命令的发起端,网卡读取并解析编排算子。如果其中的编排命令为 Write,其源地址为立即数,且长度小于一定的阈值,则数据直接携带在WQE中(例如 KV查找中的key);否则,本地地址必须是允许远端访问的(如果不是则发起端软件拷贝)。 远端编排的安全性,首先通过执行QP的建立保证,其次依赖Remote Command校验。远 端编排QP在SQ中记录下编排命令,并调度执行。执行编排命令时,如果是Write操作且 数据已经携带在WQE中,则直接DMA数据到DDR;如果是其他的Write操作,转义成 Read操作发到RoCE QP;如果是Read操作,转义成Write操作发到RoCE QP。
基于上述所述,本申请实施例所述的基于网络设备的数据处理方法在远端执行由参数 化的本地或远端内存访存命令、控制命令、计算命令组成的编排算子,这样可以减少CPU 与网络设备之间的交互次数,并将数据结构处理请求卸载到数据所在节点上执行(如,可 直接卸载到网络设备上执行),从而提高了分布式通信请求的性能。此外,本申请实施例提出的编排算子是一种简洁、统一的编程抽象,在多种网络设备上都可以高效执行,从而解决了微码编程困难的问题以及不同架构网络设备间微码互相不兼容的问题。
综上所述,编排算子即可以用于本地编排也可以用于远端编排,即计算机设备上的应 用程序(如CPU上的应用程序)可以发起本地编排调用或远端编排调用(如,向本地编排 单元传递编排单元的网络路由地址、编排算子的命名空间ID、编排算子的注册ID、安全令牌、编排算子的参数)。在本申请实施例中,如果编排单元的网络路由地址为本地地址,则为本地调用,否则为远端调用。作为一个示例,具体执行流程可参阅图9,图9为本申 请实施例提供的基于网络设备的数据处理方法的一个流程示意图,其中,计算机设备上的 应用程序(如,第一软件)需事先注册编排命令允许被访问的每块内存区域(即用户数据 存储的地方),注册方式可采用现有的相关技术,本申请对此不予赘述。此外,计算机设 备上的应用程序还需事先注册需要被本地调用的编排算子的存储区域,指定一个由若干条 编排命令构成的程序,设置编排算子允许访问的内存区域。在本申请的一些实施方式中, 考虑到数据安全,还可以设置调用者需要携带的安全令牌,获取编排算子的注册ID供后 续调用。由于计算机设备上可能有多个应用程序,每个应用程序可以有唯一的命名空间ID, 每个应用程序注册的编排算子仅在该应用程序的命名空间内有效,从而实现了应用程序间 的隔离。
在注册好之后,本地编排调用流程为:本地编排单元开始执行编排算子时,从编排上 下文池中分配一个空闲的上下文,使用应用程序指定的参数初始化上下文中的暂存区,然 后逐个执行编排命令,直到编排结束命令、所有命令执行完毕或发生异常。远端编排调用 流程为:调用者编排单元(也可称为发起者编排单元,本申请默认发起者编排单元为本地 编排单元)生成包含调用请求序号、编排单元地址、编排算子的命名空间ID、编排算子的注册ID、安全令牌、编排算子的参数等信息的报文,通过网络将该报文发送到被调用的编排单元;被调用的编排单元收到报文后,从编排上下文池中分配空闲的编排上下文,初始化暂存区,逐个执行编排命令,直到编排算子中的所有编排命令执行完毕或出错。编排算子执行完成后,返回完成报文给调用者。
需要注意的是,在本申请的一些实施方式中,CPU上的应用程序也可以直接向网络设 备的工作队列中发送编排命令组成的编排算子。远端网络设备的事务层收到编排算子后, 如果可以立即处理,则立即处理;如果依赖前序编排命令的执行结果,则将编排命令保存 在网络设备或内存的缓冲区内,待前序编排命令完成后再依次处理。
具体地,编排单元在执行编排算子中的每条编排命令时,解析编排命令中的可变参 数,将可变参数替换为编排上下文状态寄存器、暂存区或内存中的实际值。编排单元执行 编排算子中的内存访问命令时,可以先校验内存地址的访问权限,如果是远端地址,则将 编排命令发送到网络设备的事务层执行;如果是本地地址,则调用本地DMA引擎执行。编排单元执行编排算子中的本地或远端编排调用命令时,可以校验编排命令队列地址的访问令牌,然后执行与CPU发起的本地或远端编排调用相同的流程。当编排单元遇到需要等待的编排命令时,挂起当前的编排命令队列,切换上下文到其他编排命令队列。编排单元在开始执行异步命令(包括内存访问和编排调用)时,递增在途命令计数器;异步命令执 行结束时,递减在途命令计数器,如果满足等待命令所指定的条件,则唤醒被挂起的编排 任务。
下面对本申请实施例所述的基于网络设备的数据处理方法的几个典型应用场景进行 阐述:
A、可编程的工作流程
在该应用场景中,通过本申请实施例所述的基于网络设备的数据处理方法,可以将 CPU的重复工作/数据流/任务依赖图等卸载到网络设备上执行,以实现批处理。具体可参 阅图10,图10为本申请方案与现有技术方案之间的一个对比示意图,在现有技术方案中, CPU是将每个操作单独发送给网络设备,并接收返回的完成事件,而采用本申请方法,CPU 只需与网络设备进行一次交互即可。例如,若有3个worker,那么每个worker都需要进行 一次发送和接收的交互。而通过本申请实施例方法,3个worker可以合并,只进行一次发送和接收的交互,从而可减少CQE数,避免CPU被反复中断,降低CPU I/O开销;并 且,还可以减少CPU重复发送的WQE数,降低I/O开销和通信请求延迟。
作为一个示例,CPU可以将一批操作批量下发给网络设备处理,比如本地设备需要将 一份数据发给1000个远端设备,现有技术方案需要CPU与网络设备进行1000次交互, 且且CPU被完成事件反复打断。而通过使用本申请实施例方法,只需要CPU给网络设备 发送一条“批量发送”的编排算子,网络设备生成多个独立的内存访问操作,全部内存访 问操作完成后再通知CPU完成事件,大大减少了CPU和网络设备之间的交互次数,避免 CPU被完成事件反复打断,CPU在通信过程中可以执行其他计算任务,实现计算和通信的 并行。
B、远端内存请求
在该应用场景(如,遍历远端内存中的链表,计数链表中的节点数量,或远程原子内 存访问等)中,通过本申请实施例所述的基于网络设备的数据处理方法,可以将需要多次 内存访问的请求卸载到远端节点的网络设备上。据此可达到降低网络反复传输的时延和带 宽开销、提高分布式请求吞吐量、缩小故障域等有益效果。
具体请参阅图11,图11为本申请方案与现有技术方案之间的另一对比示意图,现有 技术方案是通过使用单边操作访问远端内存中的数据结构。然而这样的方式有几个缺点: 1)需要多次网络往返。例如对象原子操作需要先加锁,再写入数据,最后解锁,由于这些单边操作逻辑上有依赖关系,不能并行进行,每次单边操作需要一次网络往返,请求的总处理时间就是多个网络往返时间(round trip time,RTT)。2)在对象被远端节点锁定期间,其他请求无法访问该对象,当大量来自不同客户端的请求并发访问同一对象时,这些访问只能串行进行,每次访问需要等待2个RTT,影响请求的吞吐量。3)当客户端故障 时可能丢锁,即客户端获取锁之后发生故障,该对象将无人解锁,一直处于锁定状态。而 本申请实施例方法可以实现单边转双边的功能,具体地,对于一组逻辑上有依赖关系的操 作,例如先加锁,如果加锁成功则读写对象,最后解锁,或者先查询索引,后查询数据。 这些逻辑或者数据的关联使得如果使用单边操作,需要多次网络往返,本申请实施例方法 则通过把这些操作打包到远端网络设备中执行,可以把多次网络往返缩减为一次,降低请 求端到端时延。
此外,本申请实施例方法还可以实现请求的编程性,具体地,一个编排算子就可以指 挥多个节点协作完成复杂任务,例如客户端将日志数据先发给主节点,主节点的网络设备 上的编排任务(可编程宏指令)在本地分配日志空间并写入日志,然后将日志转发给两个 备节点,备节点上的网络设备的编排任务(可编程宏指令)也分配日志空间并写入日志。这样的复杂任务传统上是需要CPU通过RPC来实现的,而本申请实施例方法通过编排 卸载可以节约CPU的开销,同时消除了唤醒CPU的延迟。
需要说明的是,以上仅是本申请实施例方法的几种典型的应用场景说明,在实际应用 中,本申请实施例方法可以应用于其他应用场景,具体此处不再示例。
为了对本申请实施例所带来的有益效果有更为直观的认识,以下对本申请实施例所带 来的技术效果作进一步的对比,具体请参阅图12,图12为本申请实施例方法与现有方案 的测试结果对比图,根据图12可得出如下结论:
现有技术的测试结果:方案一:使用远端RPC调用远端CPU来处理,由于CPU处理TCP/IP协议栈的开销,延迟显著较高;方案二:使用RDMA单边操作来处理,虽然单个 网络往返的延迟降低了,但是通过单边操作将导致需要多次网络往返,增加总体的延迟。 本发明实施例一的结果:通过把这些操作打包到远端执行,可以把多次网络往返缩减为一 次,且整个处理过程中不需要远端CPU参与,降低请求端到端时延。
基于CPU的编排模拟器:1822网卡读30us(2RTT),单核303K IOPS;写19us(1RTT),434K IOPS;
MLX CX-5网卡读8.9us(2RTT),607K IOPS;写6.7us(1RTT),794K IOPS。
相比使用传统RDMA单边操作的写操作,1822网卡延迟降低62%。
在上述所对应的实施例的基础上,为了更好的实施本申请实施例的上述方案,下面还 提供用于实施上述方案的相关设备。具体参阅图13,图13为本申请实施例提供的第一网 络设备的一个结构示意图,第一网络设备1300包括:获取模块1301、编排模块1302以及生成模块1303,其中,获取模块1301,用于获取第一编排算子,该第一编排算子为该第 一计算机设备的控制单元基于第一请求生成的编排命令的有序集合,用于表征该第一请求 的运行逻辑,该第一请求为该第一计算机设备上运行的第一应用产生的请求,该第一编排 算子包括内存访问命令,该内存访问命令用于表征进行内存访问的操作类型;编排模块1302,用于根据该第一编排算子执行多个内存访问操作,并获取每个该内存访问操作的响应结果;生成模块1303,用于在编排模块1302获取到每个内存访问操作的响应结果之后,生成第一完成指令,该第一完成指令用于表征该第一编排算子执行完毕。
在一种可能的设计中,该获取模块1301,还用于:在该编排模块1302根据该第一编排算子执行多个内存访问操作之前,生成与该第一编排算子对应的第一编排上下文,该第一编排上下文用于存储该内存访问操作的执行状态。
在一种可能的设计中,该第一编排上下文至少包括如下任意一种:该第一编排算子的 调用者、当前执行的编排命令的指针、异步执行的编排命令计数器、该第一编排算子中最 后一条编排命令的位置、循环计数器、循环跳转位置、该内存访问操作执行过程中的中间 变量。
在一种可能的设计中,该内存访问操作为远端内存访问操作,该编排模块1302,具体 用于:解析该第一编排算子中的编排命令,得到多个该远端内存访问操作;向至少一个第 二网络设备发送与至少一个该远端内存访问操作对应的网络报文,以使得该第二网络设备 基于该网络报文访问与该第二网络设备对应的内存(也就是第一网络设备的远端内存), 并使得该第二网络设备在访问完成后生成响应结果,一个远端内存访问操作对应一个响应 结果;接收由该第二网络设备发送的该响应结果。
在一种可能的设计中,该内存访问操作为本地内存访问操作,该编排模块1302,具体 用于:解析该第一编排算子中的编排命令,得到多个该本地内存访问操作;基于该第一编 排算子访问本地内存,得到每个该本地内存访问操作的响应结果。
在一种可能的设计中,该获取模块1301,具体用于:从第一计算机设备获取第一执行 指令,该第一执行指令用于指示该第一网络设备从第一存储区域读取第一编排算子。
在一种可能的设计中,该获取模块1301,具体用于:接收由第一计算机设备直接发送 的第一编排算子。
在一种可能的设计中,该第一编排算子至少还包括如下任意一种类型的编排命令:控 制命令、计算命令,其中,该控制命令用于控制第一网络设备,该计算命令用于对至少一 个操作数进行算术和/或逻辑运算。
在一种可能的设计中,该控制命令的类型至少包括如下任意一种:条件跳转命令、循 环命令、等待命令、本地编排算子调用命令、远端编排算子调用命令、结束编排命令;该条件跳转命令,用于根据至少一个可变参数,跳转到至少一个第一目标编排命令;该循环命令,用于循环执行至少一个第二目标编排命令m次,m≥1;该等待命令,用于等待至 少一个第三目标编排命令执行完成,可变参数为编排命令在运行时才能确定具体取值的参 数;该本地编排算子调用命令,用于异步调用本地的编排算子;该远端编排算子调用命令, 用于异步调用远端的编排算子;该结束编排命令,用于结束编排上下文的执行。
在一种可能的设计中,该计算命令的类型至少包括如下任意一种:双目算术逻辑计算 命令、位宽转换计算命令;该双目算术逻辑计算命令,用于根据两个操作数获得第一计算 结果;该位宽转换计算命令,用于转换一个操作数的位宽,获得第二计算结果。
在一种可能的设计中,该内存访问命令的类型至少包括如下任意一种:加载命令,用 于从本地内存地址中取出预设数量字节的第一数据,或,用于从远端内存地址中取出预设 数量字节的第二数据;存储命令,用于向该本地内存地址中写入预设数量字节的第三数据, 或,用于向该远端内存地址中写入预设数量字节的第四数据;内存拷贝命令,用于执行本 地或远端的数据拷贝;比较命令,用于执行本地或远端的数据比较;收发命令,用于执行双边消息的收发;原子比较并交换命令,用于执行预设数量字节的第五数据带比较条件和掩码的原子交换;原子加命令,用于执行预设数量字节的第六数据带比较条件的原子加操作;独占命令,用于通过缓存一致性协议获取一个本地或远端内存地址的独占访问权限。
需要说明的是,图13提供的第一网络设备1300中各模块/单元之间的信息交互、执行 过程等内容,与本申请中图1对应的方法实施例基于同一构思,具体内容可参见本申请前 述所示的方法实施例中的叙述,此处不再赘述。
本申请实施例还提供了一种网络设备,该网络设备作为第一网络设备,具体参阅图14, 图14为本申请实施例提供的第一网络设备的另一结构示意图,第一网络设备1400包括: 获取模块1401、发送模块1402以及生成模块1403,其中,获取模块1401,用于从第一计算机设备获取目标执行指令,该目标执行指令用于指示第二网络设备从第二存储区域读取第二编排算子,该第二编排算子为该第二计算机设备的控制单元基于第二请求生成的编排命令的有序集合,用于表征该第二请求的运行逻辑,该第二请求为该第二计算机设备上运行的第二应用产生的请求,该第二编排算子包括内存访问命令,该内存访问命令用于表征进行内存访问的操作类型;发送模块1402,用于基于该目标执行指令生成目标网络报文,并将该目标网络报文向该第二网络设备发送,以使得该第二网络设备基于该目标网络报文从该第二存储区域读取该第二编排算子,并使得该第二网络设备根据该第二编排算子执行多个内存访问操作,并使得该第二网络设备获取每个该内存访问操作的响应结果并生成该目标网络报文的目标响应;生成模块1403,用于在接收到该第二网络设备发送的该目标响应之后,生成第二完成指令,该第二完成指令用于表征该第二编排算子执行完毕。
在一种可能的设计中,该第一编排算子至少还包括如下任意一种类型的编排命令:控 制命令、计算命令,其中,该控制命令用于所述第二网络设备,该计算命令用于对至少一 个操作数进行算术和/或逻辑运算。
在一种可能的设计中,该控制命令的类型至少包括如下任意一种:条件跳转命令、循 环命令、等待命令、本地编排算子调用命令、远端编排算子调用命令、结束编排命令;该条件跳转命令,用于根据至少一个可变参数,跳转到至少一个第一目标编排命令,可变参数为编排命令在运行时才能确定具体取值的参数;该循环命令,用于循环执行至少一个第二目标编排命令m次,m≥1;该等待命令,用于等待至少一个第三目标编排命令执行完 成;该本地编排算子调用命令,用于异步调用本地的编排算子;该远端编排算子调用命令, 用于异步调用远端的编排算子;该结束编排命令,用于结束编排上下文的执行。
在一种可能的设计中,该计算命令的类型至少包括如下任意一种:双目算术逻辑计算 命令、位宽转换计算命令;该双目算术逻辑计算命令,用于根据两个操作数获得第一计算 结果;该位宽转换计算命令,用于转换一个操作数的位宽,获得第二计算结果。
在一种可能的设计中,该内存访问命令的类型至少包括如下任意一种:加载命令,用 于从本地内存地址中取出预设数量字节的第一数据,或,用于从远端内存地址中取出预设 数量字节的第二数据;存储命令,用于向该本地内存地址中写入预设数量字节的第三数据, 或,用于向该远端内存地址中写入预设数量字节的第四数据;内存拷贝命令,用于执行本 地或远端的数据拷贝;比较命令,用于执行本地或远端的数据比较;收发命令,用于执行双边消息的收发;原子比较并交换命令,用于执行预设数量字节的第五数据带比较条件和掩码的原子交换;原子加命令,用于执行预设数量字节的第六数据带比较条件的原子加操作;独占命令,用于通过缓存一致性协议获取一个本地或远端内存地址的独占访问权限。
需要说明的是,图14提供的第一网络设备1400中各模块/单元之间的信息交互、执行 过程等内容,与本申请中图6对应的方法实施例中第一网络设备的执行过程基于同一构思, 具体内容可参见本申请前述所示的方法实施例中的叙述,此处不再赘述。
本申请实施例还提供了一种网络设备,该网络设备作为第二网络设备,具体参阅图15, 图15为本申请实施例提供的第二网络设备的一个结构示意图,第二网络设备1500包括: 获取模块1501、读取模块1502、编排模块1503以及发送模块1504,其中,获取模块1501,用于接收由第一网络设备发送的目标网络报文,该目标网络报文由该第一网络设备基于目标执行指令生成,该目标执行指令用于指示该第二网络设备从第二存储区域读取第二编排算子,该第二编排算子为该第二计算机设备的控制单元基于第二请求生成的编排命令的有序集合,用于表征该第二请求的运行逻辑,该第二请求为该第二计算机设备上运行的第二应用产生的请求,该第二编排算子包括内存访问命令,该内存访问命令用于表征进行内存访问的操作类型;读取模块1502,用于根据该目标网络报文从该第二存储区域读取该第二编排算子;编排模块1503,用于根据该第二编排算子执行多个内存访问操作,并获取每个该内存访问操作的响应结果;发送模块1504,用于编排模块1503在获取到每个内存访问 操作的响应结果之后,生成该目标网络报文的目标响应,并将该目标响应向该第一网络设 备发送,以使得该第一网络设备基于该目标响应生成第二完成指令,该第二完成指令用于 表征该第二编排算子执行完毕。
在一种可能的设计中,该获取模块1501,具体用于:在该第二网络设备根据该第二编 排算子执行多个内存访问操作之前,生成与该第二编排算子对应的第二编排上下文,该第 二编排上下文用于存储该内存访问操作的执行状态。
在一种可能的设计中,该第二编排上下文至少包括如下任意一种:该第二编排算子 的调用者、当前执行的编排命令的指针、异步执行的编排命令计数器、该第二编排算子中 最后一条编排命令的位置、循环计数器、循环跳转位置、该内存访问操作执行过程中的中 间变量。
在一种可能的设计中,该内存访问操作为远端内存访问操作,该编排模块1503,具体 用于:解析该第二编排算子中的编排命令,得到多个该远端内存访问操作;向至少一个第 三网络设备发送与至少一个该远端内存访问操作对应的网络报文,以使得该第三网络设备 基于该网络报文访问与该第三网络设备各自对应的内存(也就是第二网络设备的远端内 存),并使得该第三网络设备在访问完成后生成响应结果,一个远端内存访问操作对应一 个响应结果;接收由该第三网络设备发送的该响应结果。
在一种可能的设计中,该第三网络设备包括:该第一网络设备,或,与该第一网络设 备不同的网络设备。
在一种可能的设计中,该内存访问操作为本地内存访问操作,该编排模块1503,具体 用于:解析该第二编排算子中的编排命令,得到多个该本地内存访问操作;基于该第二编 排算子访问本地内存,得到每个该本地内存访问操作的响应结果。
在一种可能的设计中,该第一编排算子至少还包括如下任意一种类型的编排命令:控 制命令、计算命令,其中,该控制命令用于控制第二网络设备,该计算命令用于对至少一 个操作数进行算术和/或逻辑运算。
在一种可能的设计中,该控制命令的类型至少包括如下任意一种:条件跳转命令、循 环命令、等待命令、本地编排算子调用命令、远端编排算子调用命令、结束编排命令;该条件跳转命令,用于根据至少一个可变参数,跳转到至少一个第一目标编排命令,可变参数为编排命令在运行时才能确定具体取值的参数;该循环命令,用于循环执行至少一个第二目标编排命令m次,m≥1;该等待命令,用于等待至少一个第三目标编排命令执行完 成;该本地编排算子调用命令,用于异步调用本地的编排算子;该远端编排算子调用命令, 用于异步调用远端的编排算子;该结束编排命令,用于结束编排上下文的执行。
在一种可能的设计中,该计算命令的类型至少包括如下任意一种:双目算术逻辑计算 命令、位宽转换计算命令;该双目算术逻辑计算命令,用于根据两个操作数获得第一计算 结果;该位宽转换计算命令,用于转换一个操作数的位宽,获得第二计算结果。
在一种可能的设计中,该内存访问命令的类型至少包括如下任意一种:加载命令,用 于从本地内存地址中取出预设数量字节的第一数据,或,用于从远端内存地址中取出预设 数量字节的第二数据;存储命令,用于向该本地内存地址中写入预设数量字节的第三数据, 或,用于向该远端内存地址中写入预设数量字节的第四数据;内存拷贝命令,用于执行本 地或远端的数据拷贝;比较命令,用于执行本地或远端的数据比较;收发命令,用于执行双边消息的收发;原子比较并交换命令,用于执行预设数量字节的第五数据带比较条件和掩码的原子交换;原子加命令,用于执行预设数量字节的第六数据带比较条件的原子加操作;独占命令,用于通过缓存一致性协议获取一个本地或远端内存地址的独占访问权限。
需要说明的是,图15提供的第二网络设备1500中各模块/单元之间的信息交互、执行 过程等内容,与本申请中图6对应的方法实施例中第二网络设备的执行过程基于同一构思, 具体内容可参见本申请前述所示的方法实施例中的叙述,此处不再赘述。
本申请实施例还提供了一种网络设备,请参阅图16,图16为本申请实施例提供的网 络设备一种结构示意图,为便于说明,仅示出了与本申请实施例相关的部分,具体技术细 节未揭示的,请参照本申请实施例方法部分。该网络设备1600可包括但不仅限于:处理器、存储器。本领域技术人员可以理解,该示意图仅仅是网络设备的示例,并不构成对该 网络设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部 件,例如该网络设备还可以包括输入输出设备、网络接入设备、总线等。该网络设备1600 上可以部署有图13至图15对应实施例中所描述的模块,用于实现图13至图15对应实施 例中第一网络设备或第二网络设备的功能。
具体的,所称处理器可以是通用处理器、数字信号处理器(digital signalprocessor,DSP)、 专用集成电路(application specific integrated circuit,ASIC)、现成可编程门阵列 (field-programmable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻 辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的 处理器等,该处理器是该网络设备的控制中心,利用各种接口和线路连接整个网络设备的 各个部分。
该存储器可用于存储所述程序和/或模块,该处理器通过运行或执行存储在该存储器内 的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述网络设备的各种功能。 所述存储器可主要包括存储程序区和存储数据区。
本申请实施例中还提供一种计算机可读存储介质,该计算机可读存储介质中存储有用 于进行信号处理的程序,当其在计算机上运行时,使得计算机执行如前述所示实施例描述 中计算机设备所执行的步骤。
另外需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件 说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以 不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际 的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本申请提供的装 置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条 或多条通信总线或信号线。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本申请可借助软 件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专用 CPU、专用存储器、专用元器件等来实现。一般情况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、数字电路或专用电路等。但是,对本申请而言更多情况下软件程 序实现是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术 做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘、U盘、移动硬盘、只读存储器(read only memory,ROM)、随 机存取存储器(random access memory,RAM)、磁碟或者光盘等,包括若干指令用以使得 一台计算机设备(可以是个人计算机,训练设备,或者网络设备等)执行本申请各个实施 例所述的方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。 当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。
所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机 程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是 通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储 在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传 输,例如,所述计算机指令可以从一个网站站点、计算机、训练设备或数据中心通过有线 (例如同轴电缆、光纤、数字用户线)或无线(例如红外、无线、微波等)方式向另一个 网站站点、计算机、训练设备或数据中心进行传输。所述计算机可读存储介质可以是计算 机能够存储的任何可用介质或者是包含一个或多个可用介质集成的训练设备、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例 如,高密度数字视频光盘(digital video disc,DVD))、或者半导体介质(例如,固态硬盘 (solidstate disk,SSD))等。
Claims (56)
1.一种基于网络设备的数据处理方法,其特征在于,包括:
第一网络设备获取第一编排算子,所述第一编排算子为第一计算机设备的控制单元基于第一请求生成的编排命令的有序集合,用于表征所述第一请求的运行逻辑,所述第一请求为所述第一计算机设备上运行的第一应用产生的请求,所述第一编排算子包括内存访问命令,所述内存访问命令用于表征进行内存访问的操作类型;
所述第一网络设备根据所述第一编排算子执行多个内存访问操作,并获取每个所述内存访问操作的响应结果;
所述第一网络设备在获取到每个所述内存访问操作的响应结果之后,生成第一完成指令,所述第一完成指令用于表征所述第一编排算子执行完毕。
2.根据权利要求1所述的方法,其特征在于,在所述第一网络设备根据所述第一编排算子执行多个内存访问操作之前,所述方法还包括:
所述第一网络设备生成与所述第一编排算子对应的第一编排上下文,所述第一编排上下文用于存储所述内存访问操作的执行状态。
3.根据权利要求2所述的方法,其特征在于,所述第一编排上下文至少包括如下任意一种:
所述第一编排算子的调用者、当前执行的编排命令的指针、异步执行的编排命令计数器、所述第一编排算子中最后一条编排命令的位置、循环计数器、循环跳转位置、所述内存访问操作执行过程中的中间变量。
4.根据权利要求1-3中任一项所述的方法,其特征在于,所述内存访问操作包括远端内存访问操作,所述第一网络设备根据所述第一编排算子执行多个内存访问操作,并获取每个所述内存访问操作的响应结果包括:
所述第一网络设备解析所述第一编排算子中的编排命令,得到多个所述远端内存访问操作;
所述第一网络设备向至少一个第二网络设备发送与至少一个所述远端内存访问操作对应的网络报文,以使得所述第二网络设备基于所述网络报文访问与所述第二网络设备对应的内存,并使得所述第二网络设备在访问完成后生成响应结果,一个远端内存访问操作对应一个响应结果;
所述第一网络设备接收由所述第二网络设备发送的所述响应结果。
5.根据权利要求1-3中任一项所述的方法,其特征在于,所述内存访问操作包括本地内存访问操作,所述第一网络设备根据所述第一编排算子执行多个内存访问操作,并获取每个所述内存访问操作的响应结果包括:
所述第一网络设备解析所述第一编排算子中的编排命令,得到多个所述本地内存访问操作;
所述第一网络设备基于所述第一编排算子访问本地内存,得到每个所述本地内存访问操作的响应结果。
6.根据权利要求1-5中任一项所述的方法,其特征在于,所述第一网络设备获取第一编排算子包括:
所述第一网络设备从所述第一计算机设备获取第一执行指令,所述第一执行指令用于指示所述第一网络设备从第一存储区域读取第一编排算子。
7.根据权利要求1-5中任一项所述的方法,其特征在于,所述第一网络设备获取第一编排算子包括:
所述第一网络设备接收由所述第一计算机设备发送的第一编排算子。
8.根据权利要求1-7中任一项所述的方法,其特征在于,所述第一编排算子至少还包括如下任意一种类型的编排命令:
控制命令、计算命令,其中,所述控制命令用于控制所述第一网络设备,所述计算命令用于对至少一个操作数进行算术和/或逻辑运算。
9.根据权利要求8所述的方法,其特征在于,所述控制命令的类型至少包括如下任意一种:
条件跳转命令、循环命令、等待命令、本地编排算子调用命令、远端编排算子调用命令、结束编排命令;
所述条件跳转命令,用于根据至少一个可变参数,跳转到至少一个第一目标编排命令,所述可变参数为编排命令在运行时才能确定具体取值的参数;
所述循环命令,用于循环执行至少一个第二目标编排命令m次,m≥1;
所述等待命令,用于等待至少一个第三目标编排命令执行完成;
所述本地编排算子调用命令,用于异步调用本地的编排算子;
所述远端编排算子调用命令,用于异步调用远端的编排算子;
所述结束编排命令,用于结束编排上下文的执行。
10.根据权利要求8-9中任一项所述的方法,其特征在于,所述计算命令的类型至少包括如下任意一种:
双目算术逻辑计算命令、位宽转换计算命令;
所述双目算术逻辑计算命令,用于根据两个操作数获得第一计算结果;
所述位宽转换计算命令,用于转换一个操作数的位宽,获得第二计算结果。
11.根据权利要求1-10中任一项所述的方法,其特征在于,所述内存访问命令的类型至少包括如下任意一种:
加载命令、存储命令、内存拷贝命令、比较命令、收发命令、原子比较并交换命令、原子加命令、独占命令;
所述加载命令,用于从本地内存地址中取出预设数量字节的第一数据,或,用于从远端内存地址中取出预设数量字节的第二数据;
所述存储命令,用于向所述本地内存地址中写入预设数量字节的第三数据,或,用于向所述远端内存地址中写入预设数量字节的第四数据;
所述内存拷贝命令,用于执行不同计算机设备之间的数据拷贝;
所述比较命令,用于执行不同计算机设备之间的数据比较;
所述收发命令,用于执行双边消息的收发;
所述原子写命令,用于执行预设数量字节的第五数据带比较条件和掩码的原子交换;
所述原子加命令,用于执行预设数量字节的第六数据带比较条件的原子加操作;
所述独占命令,用于通过缓存一致性协议获取一个本地或远端内存地址的独占访问权限。
12.一种基于网络设备的数据处理方法,其特征在于,包括:
第一网络设备从第一计算机设备获取目标执行指令,所述目标执行指令用于指示第二网络设备从第二存储区域读取第二编排算子,所述第二编排算子为所述第二计算机设备的控制单元基于第二请求生成的编排命令的有序集合,用于表征所述第二请求的运行逻辑,所述第二请求为所述第二计算机设备上运行的第二应用产生的请求,所述第二编排算子包括内存访问命令,所述内存访问命令用于表征进行内存访问的操作类型;
所述第一网络设备基于所述目标执行指令生成目标网络报文,并将所述目标网络报文向所述第二网络设备发送,以使得所述第二网络设备基于所述目标网络报文从所述第二存储区域读取所述第二编排算子,并使得所述第二网络设备根据所述第二编排算子执行多个内存访问操作,并使得所述第二网络设备获取每个所述内存访问操作的响应结果并生成所述目标网络报文的目标响应;
所述第一网络设备在接收到所述第二网络设备发送的所述目标响应之后,生成第二完成指令,所述第二完成指令用于表征所述第二编排算子执行完毕。
13.根据权利要求12所述的方法,其特征在于,所述第二编排算子至少还包括如下任意一种类型的编排命令:
控制命令、计算命令,其中,所述控制命令用于控制所述第二网络设备,所述计算命令用于对至少一个操作数进行算术和/或逻辑运算。
14.根据权利要求13所述的方法,其特征在于,所述控制命令的类型至少包括如下任意一种:
条件跳转命令、循环命令、等待命令、本地编排算子调用命令、远端编排算子调用命令、结束编排命令;
所述条件跳转命令,用于根据至少一个可变参数,跳转到至少一个第一目标编排命令,所述可变参数为编排命令在运行时才能确定具体取值的参数;
所述循环命令,用于循环执行至少一个第二目标编排命令m次,m≥1;
所述等待命令,用于等待至少一个第三目标编排命令执行完成;
所述本地编排算子调用命令,用于异步调用本地的编排算子;
所述远端编排算子调用命令,用于异步调用远端的编排算子;
所述结束编排命令,用于结束编排上下文的执行,所述编排上下文用于存储所述内存访问操作的执行状态。
15.根据权利要求13-14中任一项所述的方法,其特征在于,所述计算命令的类型至少包括如下任意一种:
双目算术逻辑计算命令、位宽转换计算命令;
所述双目算术逻辑计算命令,用于根据两个操作数获得第一计算结果;
所述位宽转换计算命令,用于转换一个操作数的位宽,获得第二计算结果。
16.根据权利要求12-15中任一项所述的方法,其特征在于,所述内存访问命令的类型至少包括如下任意一种:
加载命令、存储命令、内存拷贝命令、比较命令、收发命令、原子比较并交换命令、原子加命令、独占命令;
所述加载命令,用于从本地内存地址中取出预设数量字节的第一数据,或,用于从远端内存地址中取出预设数量字节的第二数据;
所述存储命令,用于向所述本地内存地址中写入预设数量字节的第三数据,或,用于向所述远端内存地址中写入预设数量字节的第四数据;
所述内存拷贝命令,用于执行本地或远端的数据拷贝;
所述比较命令,用于执行本地或远端的数据比较;
所述收发命令,用于执行双边消息的收发;
所述原子比较并交换命令,用于执行预设数量字节的第五数据带比较条件和掩码的原子交换;
所述原子加命令,用于执行预设数量字节的第六数据带比较条件的原子加操作;
所述独占命令,用于通过缓存一致性协议获取一个本地或远端内存地址的独占访问权限。
17.一种基于网络设备的数据处理方法,其特征在于,包括:
第二网络设备接收由第一网络设备发送的目标网络报文,所述目标网络报文由所述第一网络设备基于目标执行指令生成,所述目标执行指令用于指示所述第二网络设备从第二存储区域读取第二编排算子,所述第二编排算子为所述第二计算机设备的控制单元基于第二请求生成的编排命令的有序集合,用于表征所述第二请求的运行逻辑,所述第二请求为所述第二计算机设备上运行的第二应用产生的请求,所述第二编排算子包括内存访问命令,所述内存访问命令用于表征进行内存访问的操作类型;
所述第二网络设备根据所述目标网络报文从所述第二存储区域读取所述第二编排算子;
所述第二网络设备根据所述第二编排算子执行多个内存访问操作,并获取每个所述内存访问操作的响应结果;
所述第二网络设备在获取到每个所述内存访问操作的响应结果之后,生成所述目标网络报文的目标响应,并将所述目标响应向所述第一网络设备发送,以使得所述第一网络设备基于所述目标响应生成第二完成指令,所述第二完成指令用于表征所述第二编排算子执行完毕。
18.根据权利要求17所述的方法,其特征在于,在所述第二网络设备根据所述第二编排算子执行多个内存访问操作之前,所述方法还包括:
所述第二网络设备生成与所述第二编排算子对应的第二编排上下文,所述第二编排上下文用于存储所述内存访问操作的执行状态。
19.根据权利要求18所述的方法,其特征在于,所述第二编排上下文至少包括如下任意一种:
所述第二编排算子的调用者、当前执行的编排命令的指针、异步执行的编排命令计数器、所述第二编排算子中最后一条编排命令的位置、循环计数器、循环跳转位置、所述内存访问操作执行过程中的中间变量。
20.根据权利要求17-19中任一项所述的方法,其特征在于,所述内存访问操作包括远端内存访问操作,所述第二网络设备根据所述第二编排算子执行多个内存访问操作,并获取每个所述内存访问操作的响应结果包括:
所述第二网络设备解析所述第二编排算子中的编排命令,得到多个所述远端内存访问操作;
所述第二网络设备向至少一个第三网络设备发送与至少一个所述远端内存访问操作对应的网络报文,以使得所述第三网络设备基于所述网络报文访问与所述第三网络设备对应的内存,并使得所述第三网络设备在访问完成后生成响应结果,一个远端内存访问操作对应一个响应结果;
所述第二网络设备接收由所述第三网络设备发送的所述响应结果。
21.根据权利要求20所述的方法,其特征在于,所述第三网络设备包括:
所述第一网络设备,或,与所述第一网络设备不同的网络设备。
22.根据权利要求17-19中任一项所述的方法,其特征在于,所述内存访问操作包括本地内存访问操作,所述第二网络设备根据所述第二编排算子执行多个内存访问操作,并获取每个所述内存访问操作的响应结果包括:
所述第二网络设备解析所述第二编排算子中的编排命令,得到多个所述本地内存访问操作;
所述第二网络设备基于所述第二编排算子访问本地内存,得到每个所述本地内存访问操作的响应结果。
23.根据权利要求17-22中任一项所述的方法,其特征在于,所述第二编排算子至少还包括如下任意一种类型的编排命令:
控制命令、计算命令,其中,所述控制命令用于控制所述第二网络设备,所述计算命令用于对至少一个操作数进行算术和/或逻辑运算。
24.根据权利要求23所述的方法,其特征在于,所述控制命令的类型至少包括如下任意一种:
条件跳转命令、循环命令、等待命令、本地编排算子调用命令、远端编排算子调用命令、结束编排命令;
所述条件跳转命令,用于根据至少一个可变参数,跳转到至少一个第一目标编排命令,所述可变参数为编排命令在运行时才能确定具体取值的参数;
所述循环命令,用于循环执行至少一个第二目标编排命令m次,m≥1;
所述等待命令,用于等待至少一个第三目标编排命令执行完成;
所述本地编排算子调用命令,用于异步调用本地的编排算子;
所述远端编排算子调用命令,用于异步调用远端的编排算子;
所述结束编排命令,用于结束编排上下文的执行。
25.根据权利要求23-24中任一项所述的方法,其特征在于,所述计算命令的类型至少包括如下任意一种:
双目算术逻辑计算命令、位宽转换计算命令;
所述双目算术逻辑计算命令,用于根据两个操作数获得第一计算结果;
所述位宽转换计算命令,用于转换一个操作数的位宽,获得第二计算结果。
26.根据权利要求17-25中任一项所述的方法,其特征在于,所述内存访问命令的类型至少包括如下任意一种:
加载命令、存储命令、内存拷贝命令、比较命令、收发命令、原子比较并交换命令、原子加命令、独占命令;
所述加载命令,用于从本地内存地址中取出预设数量字节的第一数据,或,用于从远端内存地址中取出预设数量字节的第二数据;
所述存储命令,用于向所述本地内存地址中写入预设数量字节的第三数据,或,用于向所述远端内存地址中写入预设数量字节的第四数据;
所述内存拷贝命令,用于执行本地或远端的数据拷贝;
所述比较命令,用于执行本地或远端的数据比较;
所述收发命令,用于执行双边消息的收发;
所述原子比较并交换命令,用于执行预设数量字节的第五数据带比较条件和掩码的原子交换;
所述原子加命令,用于执行预设数量字节的第六数据带比较条件的原子加操作;
所述独占命令,用于通过缓存一致性协议获取一个本地或远端内存地址的独占访问权限。
27.一种网络设备,所述网络设备作为第一网络设备,其特征在于,包括:
获取模块,用于获取第一编排算子,所述第一编排算子为第一计算机设备的控制单元基于第一请求生成的编排命令的有序集合,用于表征所述第一请求的运行逻辑,所述第一请求为所述第一计算机设备上运行的第一应用产生的请求,所述第一编排算子包括内存访问命令,所述内存访问命令用于表征进行内存访问的操作类型;
编排模块,用于根据所述第一编排算子执行多个内存访问操作,并获取每个所述内存访问操作的响应结果;
生成模块,用于在所述编排模块获取到每个所述内存访问操作的响应结果之后,生成第一完成指令,所述第一完成指令用于表征所述第一编排算子执行完毕。
28.根据权利要求27所述的第一网络设备,其特征在于,所述获取模块,还用于:
在所述编排模块根据所述第一编排算子执行多个内存访问操作之前,生成与所述第一编排算子对应的第一编排上下文,所述第一编排上下文用于存储所述内存访问操作的执行状态。
29.根据权利要求28所述的第一网络设备,其特征在于,所述第一编排上下文至少包括如下任意一种:
所述第一编排算子的调用者、当前执行的编排命令的指针、异步执行的编排命令计数器、所述第一编排算子中最后一条编排命令的位置、循环计数器、循环跳转位置、所述内存访问操作执行过程中的中间变量。
30.根据权利要求27-29中任一项所述的第一网络设备,其特征在于,所述内存访问操作包括远端内存访问操作,所述编排模块,具体用于:
解析所述第一编排算子中的编排命令,得到多个所述远端内存访问操作;
向至少一个第二网络设备发送与至少一个所述远端内存访问操作对应的网络报文,以使得所述第二网络设备基于所述网络报文访问与所述第二网络设备对应的内存,并使得所述第二网络设备在访问完成后生成响应结果,一个远端内存访问操作对应一个响应结果;
接收由所述第二网络设备发送的所述响应结果。
31.根据权利要求27-29中任一项所述的第一网络设备,其特征在于,所述内存访问操作包括本地内存访问操作,所述编排模块,具体用于:
解析所述第一编排算子中的编排命令,得到多个所述本地内存访问操作;
基于所述第一编排算子访问本地内存,得到每个所述本地内存访问操作的响应结果。
32.根据权利要求27-31中任一项所述的第一网络设备,其特征在于,所述获取模块,具体用于:
从所述第一计算机设备获取第一执行指令,所述第一执行指令用于指示所述第一网络设备从第一存储区域读取第一编排算子。
33.根据权利要求27-31中任一项所述的第一网络设备,其特征在于,所述获取模块,具体用于:
接收由所述第一计算机设备发送的第一编排算子。
34.根据权利要求27-33中任一项所述的第一网络设备,其特征在于,所述第一编排算子至少还包括如下任意一种类型的编排命令:
控制命令、计算命令,其中,所述控制命令用于控制所述第一网络设备,所述计算命令用于对至少一个操作数进行算术和/或逻辑运算。
35.根据权利要求34所述的第一网络设备,其特征在于,所述控制命令的类型至少包括如下任意一种:
条件跳转命令、循环命令、等待命令、本地编排算子调用命令、远端编排算子调用命令、结束编排命令;
所述条件跳转命令,用于根据至少一个可变参数,跳转到至少一个第一目标编排命令,所述可变参数为编排命令在运行时才能确定具体取值的参数;
所述循环命令,用于循环执行至少一个第二目标编排命令m次,m≥1;
所述等待命令,用于等待至少一个第三目标编排命令执行完成;
所述本地编排算子调用命令,用于异步调用本地的编排算子;
所述远端编排算子调用命令,用于异步调用远端的编排算子;
所述结束编排命令,用于结束编排上下文的执行。
36.根据权利要求34-35中任一项所述的第一网络设备,其特征在于,所述计算命令的类型至少包括如下任意一种:
双目算术逻辑计算命令、位宽转换计算命令;
所述双目算术逻辑计算命令,用于根据两个操作数获得第一计算结果;
所述位宽转换计算命令,用于转换一个操作数的位宽,获得第二计算结果。
37.根据权利要求27-36中任一项所述的第一网络设备,其特征在于,所述内存访问命令的类型至少包括如下任意一种:
加载命令、存储命令、内存拷贝命令、比较命令、收发命令、原子比较并交换命令、原子加命令、独占命令;
所述加载命令,用于从本地内存地址中取出预设数量字节的第一数据,或,用于从远端内存地址中取出预设数量字节的第二数据;
所述存储命令,用于向所述本地内存地址中写入预设数量字节的第三数据,或,用于向所述远端内存地址中写入预设数量字节的第四数据;
所述内存拷贝命令,用于执行本地或远端的数据拷贝;
所述比较命令,用于执行本地或远端的数据比较;
所述收发命令,用于执行双边消息的收发;
所述原子比较并交换命令,用于执行预设数量字节的第五数据带比较条件和掩码的原子交换;
所述原子加命令,用于执行预设数量字节的第六数据带比较条件的原子加操作;
所述独占命令,用于通过缓存一致性协议获取一个本地或远端内存地址的独占访问权限。
38.一种网络设备,所述网络设备作为第一网络设备,其特征在于,包括:
获取模块,用于从第一计算机设备获取目标执行指令,所述目标执行指令用于指示第二网络设备从第二存储区域读取第二编排算子,所述第二编排算子为所述第二计算机设备的控制单元基于第二请求生成的编排命令的有序集合,用于表征所述第二请求的运行逻辑,所述第二请求为所述第二计算机设备上运行的第二应用产生的请求,所述第二编排算子包括内存访问命令,所述内存访问命令用于表征进行内存访问的操作类型;
发送模块,用于基于所述目标执行指令生成目标网络报文,并将所述目标网络报文向所述第二网络设备发送,以使得所述第二网络设备基于所述目标网络报文从所述第二存储区域读取所述第二编排算子,并使得所述第二网络设备根据所述第二编排算子执行多个内存访问操作,并使得所述第二网络设备获取每个所述内存访问操作的响应结果并生成所述目标网络报文的目标响应;
生成模块,用于在接收到所述第二网络设备发送的所述目标响应之后,生成第二完成指令,所述第二完成指令用于表征所述第二编排算子执行完毕。
39.根据权利要求38所述的第一网络设备,其特征在于,所述第二编排算子至少还包括如下任意一种类型的编排命令:
控制命令、计算命令,其中,所述控制命令用于控制所述第二网络设备,所述计算命令用于对至少一个操作数进行算术和/或逻辑运算。
40.根据权利要求39所述的第一网络设备,其特征在于,所述控制命令的类型至少包括如下任意一种:
条件跳转命令、循环命令、等待命令、本地编排算子调用命令、远端编排算子调用命令、结束编排命令;
所述条件跳转命令,用于根据至少一个可变参数,跳转到至少一个第一目标编排命令,所述可变参数为编排命令在运行时才能确定具体取值的参数;
所述循环命令,用于循环执行至少一个第二目标编排命令m次,m≥1;
所述等待命令,用于等待至少一个第三目标编排命令执行完成;
所述本地编排算子调用命令,用于异步调用本地的编排算子;
所述远端编排算子调用命令,用于异步调用远端的编排算子;
所述结束编排命令,用于结束编排上下文的执行,所述编排上下文用于存储所述内存访问操作的执行状态。
41.根据权利要求39-40中任一项所述的第一网络设备,其特征在于,所述计算命令的类型至少包括如下任意一种:
双目算术逻辑计算命令、位宽转换计算命令;
所述双目算术逻辑计算命令,用于根据两个操作数获得第一计算结果;
所述位宽转换计算命令,用于转换一个操作数的位宽,获得第二计算结果。
42.根据权利要求38-41中任一项所述的第一网络设备,其特征在于,所述内存访问命令的类型至少包括如下任意一种:
加载命令、存储命令、内存拷贝命令、比较命令、收发命令、原子比较并交换命令、原子加命令、独占命令;
所述加载命令,用于从本地内存地址中取出预设数量字节的第一数据,或,用于从远端内存地址中取出预设数量字节的第二数据;
所述存储命令,用于向所述本地内存地址中写入预设数量字节的第三数据,或,用于向所述远端内存地址中写入预设数量字节的第四数据;
所述内存拷贝命令,用于执行本地或远端的数据拷贝;
所述比较命令,用于执行本地或远端的数据比较;
所述收发命令,用于执行双边消息的收发;
所述原子比较并交换命令,用于执行预设数量字节的第五数据带比较条件和掩码的原子交换;
所述原子加命令,用于执行预设数量字节的第六数据带比较条件的原子加操作;
所述独占命令,用于通过缓存一致性协议获取一个本地或远端内存地址的独占访问权限。
43.一种网络设备,所述网络设备作为第二网络设备,其特征在于,包括:
获取模块,用于接收由第一网络设备发送的目标网络报文,所述目标网络报文由所述第一网络设备基于目标执行指令生成,所述目标执行指令用于指示所述第二网络设备从第二存储区域读取第二编排算子,所述第二编排算子为所述第二计算机设备的控制单元基于第二请求生成的编排命令的有序集合,用于表征所述第二请求的运行逻辑,所述第二请求为所述第二计算机设备上运行的第二应用产生的请求,所述第二编排算子包括内存访问命令,所述内存访问命令用于表征进行内存访问的操作类型;
读取模块,用于根据所述目标网络报文从所述第二存储区域读取所述第二编排算子;
编排模块,用于根据所述第二编排算子执行多个内存访问操作,并获取每个所述内存访问操作的响应结果;
发送模块,用于在所述编排模块获取到每个所述内存访问操作的响应结果之后,生成所述目标网络报文的目标响应,并将所述目标响应向所述第一网络设备发送,以使得所述第一网络设备基于所述目标响应生成第二完成指令,所述第二完成指令用于表征所述第二编排算子执行完毕。
44.根据权利要求43所述的第二网络设备,其特征在于,所述获取模块,具体用于:
在所述第二网络设备根据所述第二编排算子执行多个内存访问操作之前,生成与所述第二编排算子对应的第二编排上下文,所述第二编排上下文用于存储所述内存访问操作的执行状态。
45.根据权利要求44所述的第二网络设备,其特征在于,所述第二编排上下文至少包括如下任意一种:
所述第二编排算子的调用者、当前执行的编排命令的指针、异步执行的编排命令计数器、所述第二编排算子中最后一条编排命令的位置、循环计数器、循环跳转位置、所述内存访问操作执行过程中的中间变量。
46.根据权利要求43-45中任一项所述的第二网络设备,其特征在于,所述内存访问操作包括远端内存访问操作,所述编排模块,具体用于:
解析所述第二编排算子中的编排命令,得到多个所述远端内存访问操作;
向至少一个第三网络设备发送与至少一个所述远端内存访问操作对应的网络报文,以使得所述第三网络设备基于所述网络报文访问与所述第三网络设备对应的内存,并使得所述第三网络设备在访问完成后生成响应结果,一个远端内存访问操作对应一个响应结果;
接收由所述第三网络设备发送的所述响应结果。
47.根据权利要求46所述的第二网络设备,其特征在于,所述第三网络设备包括:
所述第一网络设备,或,与所述第一网络设备不同的网络设备。
48.根据权利要求43-45中任一项所述的第二网络设备,其特征在于,所述内存访问操作包括本地内存访问操作,所述编排模块,具体用于:
解析所述第二编排算子中的编排命令,得到多个所述本地内存访问操作;
基于所述第二编排算子访问本地内存,得到每个所述本地内存访问操作的响应结果。
49.根据权利要求43-48中任一项所述的第二网络设备,其特征在于,所述第二编排算子至少还包括如下任意一种类型的编排命令:
控制命令、计算命令,其中,所述控制命令用于控制所述第二网络设备,所述计算命令用于对至少一个操作数进行算术和/或逻辑运算。
50.根据权利要求49所述的第二网络设备,其特征在于,所述控制命令的类型至少包括如下任意一种:
条件跳转命令、循环命令、等待命令、本地编排算子调用命令、远端编排算子调用命令、结束编排命令;
所述条件跳转命令,用于根据至少一个可变参数,跳转到至少一个第一目标编排命令,所述可变参数为编排命令在运行时才能确定具体取值的参数;
所述循环命令,用于循环执行至少一个第二目标编排命令m次,m≥1;
所述等待命令,用于等待至少一个第三目标编排命令执行完成;
所述本地编排算子调用命令,用于异步调用本地的编排算子;
所述远端编排算子调用命令,用于异步调用远端的编排算子;
所述结束编排命令,用于结束编排上下文的执行。
51.根据权利要求48-49中任一项所述的第二网络设备,其特征在于,所述计算命令的类型至少包括如下任意一种:
双目算术逻辑计算命令、位宽转换计算命令;
所述双目算术逻辑计算命令,用于根据两个操作数获得第一计算结果;
所述位宽转换计算命令,用于转换一个操作数的位宽,获得第二计算结果。
52.根据权利要求43-51中任一项所述的第二网络设备,其特征在于,所述内存访问命令的类型至少包括如下任意一种:
加载命令、存储命令、内存拷贝命令、比较命令、收发命令、原子比较并交换命令、原子加命令、独占命令;
所述加载命令,用于从本地内存地址中取出预设数量字节的第一数据,或,用于从远端内存地址中取出预设数量字节的第二数据;
所述存储命令,用于向所述本地内存地址中写入预设数量字节的第三数据,或,用于向所述远端内存地址中写入预设数量字节的第四数据;
所述内存拷贝命令,用于执行本地或远端的数据拷贝;
所述比较命令,用于执行本地或远端的数据比较;
所述收发命令,用于执行双边消息的收发;
所述原子比较并交换命令,用于执行预设数量字节的第五数据带比较条件和掩码的原子交换;
所述原子加命令,用于执行预设数量字节的第六数据带比较条件的原子加操作;
所述独占命令,用于通过缓存一致性协议获取一个本地或远端内存地址的独占访问权限。
53.一种网络设备,包括处理器和存储器,所述处理器与所述存储器耦合,其特征在于,
所述存储器,用于存储程序;
所述处理器,用于执行所述存储器中的程序,使得所述网络设备执行如权利要求1-26中任一项所述的方法。
54.一种计算机可读存储介质,包括程序,当其在计算机上运行时,使得计算机执行如权利要求1-26中任一项所述的方法。
55.一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行如权利要求1-26中任一项所述的方法。
56.一种芯片,所述芯片包括处理器与数据接口,所述处理器通过所述数据接口读取存储器上存储的指令,执行如权利要求1-26中任一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210227663.1A CN116775522A (zh) | 2022-03-08 | 2022-03-08 | 一种基于网络设备的数据处理方法及网络设备 |
PCT/CN2023/078920 WO2023169267A1 (zh) | 2022-03-08 | 2023-03-01 | 一种基于网络设备的数据处理方法及网络设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210227663.1A CN116775522A (zh) | 2022-03-08 | 2022-03-08 | 一种基于网络设备的数据处理方法及网络设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116775522A true CN116775522A (zh) | 2023-09-19 |
Family
ID=87937205
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210227663.1A Pending CN116775522A (zh) | 2022-03-08 | 2022-03-08 | 一种基于网络设备的数据处理方法及网络设备 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN116775522A (zh) |
WO (1) | WO2023169267A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117255055A (zh) * | 2023-11-15 | 2023-12-19 | 新华三技术有限公司 | 报文转发方法、装置及电子设备 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117714711B (zh) * | 2024-02-05 | 2024-04-30 | 北京象帝先计算技术有限公司 | 解码方法、解码系统、电子设备及可读存储介质 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103514028B (zh) * | 2012-06-14 | 2016-12-21 | 北京新媒传信科技有限公司 | 一种处理分布式事务的方法和装置 |
CN103152197B (zh) * | 2013-02-27 | 2018-01-09 | 华为技术有限公司 | 规则集编排处理方法、装置及集群数据系统 |
US9922124B2 (en) * | 2016-01-29 | 2018-03-20 | Yogesh Rathod | Enable user to establish request data specific connections with other users of network(s) for communication, participation and collaboration |
CN107135189B (zh) * | 2016-02-26 | 2020-02-14 | 华为技术有限公司 | 一种报文发送方法及物理机 |
CN106487896B (zh) * | 2016-10-14 | 2019-10-08 | 北京百度网讯科技有限公司 | 用于处理远程直接内存访问请求的方法和装置 |
CN111880908A (zh) * | 2020-06-28 | 2020-11-03 | 北京沃东天骏信息技术有限公司 | 分布式事务的处理方法、装置及存储介质 |
-
2022
- 2022-03-08 CN CN202210227663.1A patent/CN116775522A/zh active Pending
-
2023
- 2023-03-01 WO PCT/CN2023/078920 patent/WO2023169267A1/zh active Application Filing
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117255055A (zh) * | 2023-11-15 | 2023-12-19 | 新华三技术有限公司 | 报文转发方法、装置及电子设备 |
CN117255055B (zh) * | 2023-11-15 | 2024-02-23 | 新华三技术有限公司 | 报文转发方法、装置及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
WO2023169267A1 (zh) | 2023-09-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11010681B2 (en) | Distributed computing system, and data transmission method and apparatus in distributed computing system | |
US10819831B2 (en) | Methods and apparatus for channel defunct within user space stack architectures | |
US7502826B2 (en) | Atomic operations | |
RU2356089C2 (ru) | Передача и прием сообщений посредством индивидуально конфигурируемых канала обмена данных и модели программирования | |
US7320041B2 (en) | Controlling flow of data between data processing systems via a memory | |
US8094560B2 (en) | Multi-stage multi-core processing of network packets | |
US7080386B2 (en) | Architecture with digital signal processor plug-ins for general purpose processor media frameworks | |
JP3696563B2 (ja) | コンピュータ・プロセッサ及び処理装置 | |
US7409468B2 (en) | Controlling flow of data between data processing systems via a memory | |
WO2023169267A1 (zh) | 一种基于网络设备的数据处理方法及网络设备 | |
US8291486B2 (en) | Gateway device having socket library for monitoring, communication method of gateway device having socket library for monitoring, and communication program of gateway device having socket library for monitoring | |
US10303529B2 (en) | Protocol for communication of data structures | |
WO2024037296A1 (zh) | 基于协议族的quic数据传输方法及装置 | |
US20040047361A1 (en) | Method and system for TCP/IP using generic buffers for non-posting TCP applications | |
US20110191422A1 (en) | Multiple communication networks for multiple computers | |
CN116049085A (zh) | 一种数据处理系统及方法 | |
EP4052141A1 (en) | System and method for constructing filter graph-based media processing pipelines in a browser | |
Manohar et al. | Progressive vector quantization of multispectral image data using a massively parallel SIMD machine | |
US9058225B2 (en) | Secure and reliable mechanism to provide a single object instance in a clustered system | |
GB2530513A (en) | Assembling response packets | |
Girondi et al. | Toward GPU-centric Networking on Commodity Hardware | |
US20240314204A1 (en) | Transaction processing method and device | |
CN118606079B (zh) | 一种基于socket接口的通信方法和系统 | |
US20230033312A1 (en) | Secure computing control method, data packet processing method and device and system thereof | |
JPH1153273A (ja) | 要求応答型無限長データ通信方法 |
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 |