包括主机计算设备和网络接口设备的可编程网络接口设备的制作方法

文档序号:29212247发布日期:2022-03-12 07:39阅读:163来源:国知局
包括主机计算设备和网络接口设备的可编程网络接口设备的制作方法
包括主机计算设备和网络接口设备的可编程网络接口设备
1.优先权申请
2.本技术要求于2019年7月29日提交的美国非临时申请号16/525,313的权益。
技术领域
3.本技术涉及网络接口设备、包括主机计算设备和网络接口设备的系统、方法和计算机程序。


背景技术:

4.网络接口设备是已知的,并且通常用于提供计算设备与网络之间的接口。网络接口设备可以被配置为处理从网络接收的数据和/或处理要放置到网络上的数据。


技术实现要素:

5.根据一个方面,提供了一种网络接口设备,包括可编程接口,该可编程接口被配置为提供与至少一个总线的设备接口,该至少一个总线在网络接口设备与主机设备之间,可编程接口是可编程的,以支持多个不同设备接口类型。
6.可编程接口可以被配置为同时支持至少两个设备接口实例。
7.可编程接口可以包括公共描述符高速缓存,所述公共描述符高速缓存被配置为存储用于多个设备接口实例的事务的相应条目。
8.所述公共描述符高速缓存中的条目可以包括以下各项中的一项或多项:指针信息;适配器实例和/或不透明端点索引;或元数据。
9.指针信息可以包括:指针;指针块;指针链表;或单词查找树(trie)。
10.元数据可以包括以下各项中的一项或多项:指针是否是指针、是指向数据位置的指针还是指向另一指针的指针的指示;与所述条目的至少一部分相关联的大小;与所述条目相关联的适配器的指示;一个或多个队列的指示;以及一个或多个队列中的位置的指示。
11.公共描述符高速缓存可以至少被部分分区,其中不同分区与不同设备接口实例相关联。
12.公共描述符高速缓存可以在不同设备接口实例之间被共享。
13.公共描述符高速缓存可以为每个设备接口实例提供保证高速缓存预留。
14.公共描述符高速缓存可以为设备接口的端点实例提供保证数目的描述符。端点实例可以为队列。
15.公共描述符高速缓存可以被配置为预取一个或多个设备接口实例的一个或多个描述符。
16.公共描述符高速缓存可以被配置为响应于与相应设备接口相关联的门铃的门铃处理或与相应设备接口相关联的数据到达中的一项或多项,预取一个或多个设备接口的一个或多个描述符。
17.可编程接口可以包括调度器,该调度器被配置为调度对多个不同设备接口实例的
所述至少总线的访问。
18.可编程接口可以被配置为为每个设备接口实例提供相应设备接口适配器。
19.相应设备接口适配器可以包括dma引擎。
20.可编程接口可以被配置为提供由所述至少两个设备接口实例共享的dma引擎。
21.可编程接口可以被配置为提供由所述至少两个设备接口实例共享的门铃功能。
22.可编程接口可以被配置为提供由所述至少两个设备接口实例共享的地址转换服务。
23.所述多个设备接口类型中的至少两个设备接口类型可以与不同队列结构类型相关联。
24.所述多个设备接口类型中的至少两个设备接口类型可以与不同语义或命令中的一个或多个语义或命令相关联。
25.多个设备接口类型可以包括以下各项中的一项或多项:rdma设备接口或virtio设备接口或nvme设备接口。
26.可编程接口可以被配置为支持所述至少一个总线的一个或多个不同的总线协议。
27.一个或多个不同的总线协议可以包括以下各项中的一项或多项:pcie总线;axi)总线;ccix总线;capi总线;或open capi总线。
28.可编程接口可以包括一个或多个模板功能,该一个或多个模板功能是可编程的,以支持所述不同设备接口类型中的一个或多个设备接口类型。
29.在所述网络接口设备处于操作的同时,所述可编程接口可以被配置为移除至少一个设备接口实例。
30.在所述网络接口设备处于操作的同时,所述可编程接口可以被配置为添加至少一个设备接口实例。
31.在所述网络接口设备处于操作的同时,所述可编程接口可以被配置为从至少一个设备接口实例切换到至少一个其他设备接口实例。
32.网络接口设备可以被配置为接收被配置为控制所述网络接口设备的编程的编程信息。
33.可以从所述主机设备或网络中的一项接收编程信息。
34.编程信息可以包括以下各项中的一项或多项:固件、rtl代码、hls代码或指令序列。
35.根据另一方面,一种网络接口设备包括可编程接口,该可编程接口被配置为提供与至少一个总线的设备接口,该至少一个总线在网络接口设备与主机设备之间,可编程接口是可编程的,以支持多个不同设备接口实例。
36.应当领会,任何其他方面的任何特征可以单独使用或与该方面的网络接口设备组合使用。
37.根据另一方面,提供了一种数据处理系统,包括主机设备和网络接口设备,所述网络接口设备包括可编程接口,该可编程接口被配置为提供与至少一个总线的设备接口,该至少一个总线在网络接口设备与主机设备之间,可编程接口是可编程的,以支持多个不同设备接口类型。
38.可编程接口可以被配置为同时支持至少两个设备接口实例。
39.可编程接口可以包括公共描述符高速缓存,所述公共描述符高速缓存被配置为存储用于多个设备接口实例的事务的相应条目。
40.所述公共描述符高速缓存中的条目可以包括以下各项中的一项或多项:指针信息;适配器实例和/或不透明端点索引;或元数据。
41.指针信息可以包括:指针;指针块;指针链表;或单词查找树。
42.元数据可以包括以下各项中的一项或多项:所述指针是否是指针、是指向数据位置的指针还是指向另一指针的指针的指示;与所述条目的至少一部分相关联的大小;与所述条目相关联的适配器的指示;一个或多个队列的指示;以及一个或多个队列中的位置。
43.公共描述符高速缓存可以至少被部分分区,其中不同分区与不同设备接口实例相关联。
44.公共描述符高速缓存可以在不同设备接口实例之间被共享。
45.公共描述符高速缓存可以为每个设备接口实例提供保证高速缓存预留。
46.公共描述符高速缓存可以为设备接口的端点实例提供保证数目的描述符。端点实例可以为队列。
47.公共描述符高速缓存可以被配置为预取一个或多个设备接口的一个或多个描述符。
48.公共描述符高速缓存可以被配置为响应于与相应设备接口相关联的门铃的门铃处理或与相应设备接口相关联的数据到达中的一项或多项,预取一个或多个设备接口的一个或多个描述符。
49.可编程接口可以包括调度器,该调度器被配置为调度对多个不同设备接口实例调度的所述至少总线的访问。
50.可编程接口可以被配置为为每个设备接口实例提供相应设备接口适配器。
51.相应设备接口适配器可以包括dma引擎。
52.可编程接口可以被配置为提供由所述至少两个设备接口实例共享的dma引擎。
53.可编程接口可以被配置为提供由所述至少两个设备接口实例共享的门铃功能。
54.主机设备可以包括至少一个处理器和至少一个存储器,所述存储器包括用于一个或多个程序的计算机代码。
55.至少一个存储器和计算机代码可以被配置为使用至少一个处理器使得主机计算设备至少将至少一个门铃写入所述门铃功能。
56.可编程接口可以被配置为提供由所述至少两个设备接口实例共享的地址转换服务。
57.所述多个设备接口类型中的至少两个设备接口类型可以与不同队列结构类型相关联。
58.至少一个存储器和计算机代码可以与至少一个处理器一起被配置为使得主机计算设备提供一个或多个设备接口实例的一个或多个队列。
59.所述多个设备接口类型中的至少两个设备接口类型可以与不同语义或命令中的一个或多个语义或命令相关联。
60.多个设备接口类型可以包括以下各项中的一项或多项:rdma设备接口或virtio设备接口或nvme设备接口。
61.可编程接口可以被配置为支持所述至少一个总线的一个或多个不同的总线协议。
62.一个或多个不同的总线协议可以包括以下各项中的一项或多项:pcie总线;axi)总线;ccix总线;capi总线;或open capi总线。
63.可编程接口可以包括一个或多个模板功能,该一个或多个模板功能是可编程的,以支持所述不同设备接口类型中的一个或多个设备接口类型。
64.在所述网络接口设备处于操作的同时,所述可编程接口可以被配置为移除至少一个设备接口实例。
65.在所述网络接口设备处于操作的同时,所述可编程接口可以被配置为添加至少一个设备接口实例。
66.在所述网络接口设备处于操作的同时,所述可编程接口可以被配置为从至少一个设备接口实例切换到至少一个其他设备接口实例。
67.网络接口设备可以被配置为接收被配置为控制所述网络接口设备的编程的编程信息。
68.可以从所述主机设备或网络中的一项接收编程信息。
69.编程信息可以包括以下各项中的一项或多项:固件、rtl代码、hls代码或指令序列。
70.根据另一方面,提供了一种数据处理系统,包括主机设备和网络接口设备,所述网络接口设备包括可编程接口,该可编程接口被配置为提供与至少一个总线的设备接口,该至少一个总线在网络接口设备与主机设备之间,可编程接口是可编程的,以支持多个不同设备接口实例。
71.应当领会,任何其他方面的任何特征可以单独使用或与该方面的数据处理系统组合使用。
72.根据一个方面,提供了一种方法,包括:对网络接口设备的可编程接口进行编程,以提供与至少一个总线的设备接口,该至少一个总线在网络接口设备与主机设备之间,可编程接口是可编程的,以支持多个不同设备接口类型。
73.该方法可以包括:对所述可编程接口进行编程以同时支持至少两个设备接口实例。
74.可编程接口可以包括公共描述符高速缓存,所述公共描述符高速缓存被配置为存储用于多个设备接口实例的事务的相应条目。
75.所述公共描述符缓存中的条目可以包括以下各项中的一项或多项:指针信息;适配器实例和/或不透明端点索引;或元数据。
76.指针信息可以包括:指针;指针块;指针链表;或单词查找树。
77.元数据可以包括以下各项中的一项或多项:所述指针是否是指针、是指向数据位置的指针还是指向另一指针的指针的指示;与所述条目的至少一部分相关联的大小;与所述条目相关联的适配器的指示;一个或多个队列的指示;以及一个或多个队列中的位置。
78.该方法可以包括:使得所述公共描述符高速缓存至少被部分分区,其中不同分区与不同设备接口实例相关联。
79.该方法可以包括:使得所述公共描述符高速缓存在不同设备接口实例之间被共享。
80.该方法可以包括:使得所述公共描述符高速缓存为每个设备接口实例提供保证高速缓存预留。
81.该方法可以包括:使得所述公共描述符高速缓存为设备接口的端点实例提供保证数目的描述符。端点实例可以为队列。
82.该方法可以包括:使得所述公共描述符高速缓存预取一个或多个设备接口的一个或多个描述符。
83.该方法可以包括:响应于与相应设备接口相关联的门铃的门铃处理或与相应设备接口相关联的数据到达中的一项或多项,预取一个或多个设备接口的一个或多个描述符。
84.可编程接口可以包括调度器,该调度器被配置为调度对多个不同的设备接口实例的所述至少总线的访问。
85.该方法可以包括:使得可编程接口为每个设备接口实例提供相应设备接口适配器。
86.相应设备接口适配器可以包括dma引擎。
87.可编程接口可以包括由所述至少两个设备接口实例共享的dma引擎。
88.可编程接口可以包括由所述至少两个设备接口实例共享的门铃功能。
89.可编程接口可以被配置为提供由所述至少两个设备接口实例共享的地址转换服务。
90.该方法可以包括:使得可编程接口支持与相应不同设备接口相关联的多个不同队列结构类型。
91.该方法可以包括:使得可编程接口支持与相应不同设备接口相关联的多个不同语义或命令。
92.多个设备接口类型可以包括以下各项中的一项或多项:rdma设备接口或virtio设备接口或nvme设备接口。
93.该方法可以包括:使得可编程接口支持所述至少一个总线的多个不同总线协议。
94.一个或多个不同的总线协议可以包括以下各项中的一项或多项:pcie总线;axi)总线;ccix总线;capi总线;或open capi总线。
95.该方法可以包括:使得可编程接口的一个或多个模板功能被编程以支持所述不同设备接口类型中的一个或多个设备接口类型。
96.该方法可以包括:在所述网络接口设备处于操作的同时,使得至少一个设备接口实例被移除。
97.该方法可以包括:在所述网络接口设备处于操作的同时,使得至少一个设备接口实例被添加。
98.该方法可以包括:在所述网络接口设备处于操作的同时,使得至少一个设备接口实例被切换到至少一个其他设备接口实例。
99.该方法可以包括:接收被配置为控制所述网络接口设备的编程的编程信息。
100.该方法可以包括:从所述主机设备或网络中的一项接收编程信息。
101.编程信息可以包括以下各项中的一项或多项:固件、rtl代码、hls代码或指令序列。
102.根据另一方面,提供了一种数据处理系统,包括网络接口设备;以及主机计算设
备,该主机计算设备包括至少一个处理器和至少一个存储器,所述存储器包括一个或多个程序的计算机代码,该至少一个存储器和计算机代码与至少一个处理器一起被配置为使得主机计算设备至少编译定义关于所述网络接口设备的设备接口的程序,所述经编译的程序被安装在所述主机计算设备中以定义用于所述设备接口的主机接口并且安装在所述网络接口设备中以定义对应设备接口。
103.该程序可以包括高层级程序。
104.经编译程序可以提供固件、hls代码或rtl代码来定义所述对应设备接口。
105.经编译程序可以提供中间层级程序,该中间层级程序定义所述设备驱动程序的至少一部分,并且所述主机计算设备被配置为确定所述中间层级程序的至少一部分可以被插入到主机计算设备的内核中。
106.主机接口可以包括设备驱动程序。
107.主机接口可以包括动态加载程序。
108.主机接口可以为以下各项中的至少一项:验证执行、作为沙盒代码被提供、或作为字节码被提供。
109.网络接口设备可以如先前所提及的。
110.网络接口设备可以包括:可编程接口,该可编程接口被配置为提供与至少一个总线的设备接口,该至少一个总线在网络接口设备与主机设备之间,可编程接口是可编程的,以支持多个不同设备接口类型。经编译程序可以被安装在可编程接口中。
111.可编程接口可以被配置为同时支持至少两个设备接口实例。
112.可编程接口可以包括公共描述符高速缓存,所述公共描述符高速缓存被配置为存储用于多个设备接口实例的事务的相应条目。
113.所述公共描述符高速缓存中的条目可以包括以下各项中的一项或多项:指针信息;适配器实例和/或不透明端点索引;或元数据。
114.指针信息可以包括:指针;指针块;指针链表;或单词查找树。
115.元数据可以包括以下各项中的一项或多项:所述指针是否是指针、是指向数据位置的指针还是指向另一指针的指针的指示;与所述条目的至少一部分相关联的大小;与所述条目相关联的适配器的指示;一个或多个队列的指示;以及一个或多个队列中的位置。
116.公共描述符高速缓存可以至少被部分分区,其中不同分区与不同设备接口实例相关联。
117.公共描述符高速缓存可以在不同设备接口实例之间被共享。
118.公共描述符高速缓存可以为每个设备接口实例提供保证高速缓存预留。
119.公共描述符高速缓存可以为设备接口的端点实例提供保证数目的描述符。端点实例可以为队列。
120.公共描述符高速缓存可以被配置为预取一个或多个设备接口的一个或多个描述符。
121.公共描述符高速缓存可以被配置为响应于与相应设备接口相关联的门铃的门铃处理或与相应设备接口相关联的数据到达中的一项或多项,预取一个或多个设备接口的一个或多个描述符。
122.可编程接口可以包括调度器,该调度器被配置为调度对多个不同设备接口实例的
所述至少总线的访问。
123.可编程接口可以被配置为为每个设备接口实例提供相应设备接口适配器。
124.相应设备接口适配器可以包括dma引擎。
125.可编程接口可以被配置为提供由所述至少两个设备接口实例共享的dma引擎。
126.可编程接口可以被配置为提供由所述至少两个设备接口实例共享的门铃功能。
127.主机设备可以包括至少一个处理器和至少一个存储器,所述存储器包括用于一个或多个程序的计算机代码。
128.至少一个存储器和计算机代码可以与至少一个处理器一起被配置为使得主机计算设备至少将至少一个门铃写入所述门铃功能。
129.可编程接口可以被配置为提供由所述至少两个设备接口实例共享的地址转换服务。
130.所述多个设备接口类型中的至少两个设备接口类型可以与不同队列结构类型相关联。
131.至少一个存储器和计算机代码可以与至少一个处理器一起被配置为使得主机计算设备提供一个或多个设备接口实例的一个或多个队列。
132.所述多个设备接口类型中的至少两个设备接口类型可以与不同语义或命令中的一个或多个语义或命令相关联。
133.多个设备接口类型可以包括以下各项中的一项或多项:rdma设备接口或virtio设备接口或nvme设备接口。
134.可编程接口可以被配置为支持所述至少一个总线的一个或多个不同的总线协议。
135.一个或多个不同的总线协议可以包括以下各项中的一项或多项:pcie总线;axi)总线;ccix总线;capi总线;或open capi总线。
136.可编程接口可以包括一个或多个模板功能,该一个或多个模板功能是可编程的,以支持所述不同设备接口类型中的一个或多个设备接口类型。
137.在所述网络接口设备处于操作的同时,所述可编程接口可以被配置为移除至少一个设备接口实例。
138.在所述网络接口设备处于操作的同时,所述可编程接口可以被配置为添加至少一个设备接口实例。
139.在所述网络接口设备处于操作的同时,所述可编程接口可以被配置为从至少一个设备接口实例切换到至少一个其他设备接口实例。
140.根据另一方面,提供了一种方法,包括:使得主机计算设备编译定义相对于网络接口设备的设备接口的程序,所述经编译程序被安装在所述主机计算设备中以定义所述设备接口的主机接口并且被安装在所述网络接口设备中以定义对应设备接口。
141.该程序可以包括高层级程序。
142.经编译程序可以提供固件、hls代码或rtl代码来定义所述对应设备接口。
143.经编译程序可以提供中间层级程序,该中间层级程序定义所述设备驱动程序的至少一部分,并且该方法包括:确定所述中间层级程序的至少一部分可以被插入到主机计算设备的内核中。
144.主机接口可以包括设备驱动程序。
145.主机接口可以包括动态加载程序。
146.主机接口可以为以下各项中的至少一项:验证执行、作为沙盒代码被提供、或作为字节码被提供。
147.网络接口设备可以如先前所提及的。
148.该方法可以包括:将所述经编译程序安装在所述网络接口设备的可编程接口中,所述可编程接口是可编程的,以支持多个不同设备接口类型。
149.该方法可以包括:对所述可编程接口进行编程以同时支持至少两个设备接口实例。
150.可编程接口可以包括公共描述符高速缓存,所述公共描述符高速缓存被配置为存储用于多个设备接口实例的事务的相应条目。
151.所述公共描述符高速缓存中的条目可以包括以下各项中的一项或多项:指针信息;适配器实例和/或不透明端点索引;或元数据。
152.指针信息可以包括:指针;指针块;指针链表;或单词查找树。
153.元数据可以包括以下各项中的一项或多项:所述指针是否是指针、是指向数据位置的指针还是指向另一指针的指针的指示;与所述条目的至少一部分相关联的大小;与所述条目相关联的适配器的指示;一个或多个队列的指示;以及一个或多个队列中的位置。
154.该方法可以包括:使得所述公共描述符高速缓存至少被部分分区,其中不同分区与不同设备接口实例相关联。
155.该方法可以包括:使得所述公共描述符高速缓存在不同设备接口实例之间被共享。
156.该方法可以包括:使得所述公共描述符高速缓存为每个设备接口实例提供保证高速缓存预留。
157.该方法可以包括:使得所述公共描述符高速缓存为设备接口的端点实例提供保证数目的描述符。端点实例可以为队列。
158.该方法可以包括:使得所述公共描述符高速缓存预取一个或多个设备接口的一个或多个描述符。
159.该方法可以包括:响应于与相应设备接口相关联的门铃的门铃处理或与相应设备接口相关联的数据到达中的一项或多项,预取一个或多个设备接口的一个或多个描述符。
160.可编程接口可以包括调度器,该调度器被配置为调度对多个不同的设备接口实例的所述至少总线的访问。
161.该方法可以包括:使得可编程接口为设备接口的每个实例提供相应设备接口适配器。
162.相应设备接口适配器可以包括dma引擎。
163.可编程接口可以被配置为提供由所述至少两个设备接口实例共享的dma引擎。
164.可编程接口可以被配置为提供由所述至少两个设备接口实例共享的门铃功能。
165.主机设备可以包括至少一个处理器和至少一个存储器,所述存储器包括用于一个或多个程序的计算机代码。
166.至少一个存储器和计算机代码可以与至少一个处理器一起被配置为使主机计算设备至少将至少一个门铃写入所述门铃功能。
167.可编程接口可以被配置为提供由所述至少两个设备接口实例共享的地址转换服务。
168.该方法可以包括:使得可编程接口支持与相应不同设备接口相关联的多个不同队列结构类型。
169.该方法可以包括:使得主机接口提供一个或多个设备接口实例的一个或多个队列。
170.该方法可以包括:使得可编程接口支持与相应不同设备接口相关联的多个不同语义或命令。
171.多个设备接口类型可以包括以下各项中的一项或多项:rdma设备接口或virtio设备接口或nvme设备接口。
172.该方法可以包括:使得可编程接口支持所述至少一个总线的多个不同总线协议。
173.一个或多个不同的总线协议可以包括以下各项中的一项或多项:pcie总线;axi)总线;ccix总线;capi总线;或open capi总线。
174.该方法可以包括:使用经编译程序来对可编程接口的一个或多个模板功能进行编程以支持相应设备接口。
175.该方法可以包括:在所述网络接口设备处于操作的同时,使得至少一个设备接口实例被移除。
176.该方法可以包括:在所述网络接口设备处于操作的同时,使得至少一个设备接口实例被添加。
177.该方法可以包括:在所述网络接口设备处于操作的同时,使得至少一个设备接口实例被切换到至少一个其他设备接口实例。
178.根据另一方面,提供了一种非暂态计算机可读介质,该非暂态计算机可读介质中编码有指令,其中,当在至少一个处理器上执行时,该指令使得该至少一个处理器能够执行前述方法中的任一方法的步骤。
179.在另一方面中,计算机程序产品包括计算机可执行代码,当运行时,该计算机可执行代码被配置为提供上述方法中的任一方法。
180.还可以提供一种计算机程序,该计算机程序包括适于执行(多个)方法的程序代码器件。计算机程序可以借助于载体介质而被存储和/或以其他方式体现。
181.在上文中,已经对许多不同的实施例进行了描述。应当领会,其他实施例可以通过组合上文所描述的实施例中的任何两个或更多个实施例来提供。
附图说明
182.现在,参考附图仅作为示例对一些实施例进行描述,其中
183.图1示出了耦合到网络的数据处理系统的示意图;
184.图2示出了第一网络接口设备的示意图;
185.图3示出了第二网络接口设备的示意图;
186.图4示出了在网络接口设备的可编程接口中提供的适配器的第一示例;
187.图5示出了在网络接口设备的可编程接口中提供的适配器的第二示例;
188.图6示出了另一网络接口设备的示意图;
189.图7示出了从存储器映射角度来看的数据处理系统的示意性概览;
190.图8示出了用于确定缓冲器的位置的缓冲器表;
191.图9示出了一个实施例的方法;以及
192.图10示出了另一实施例的方法。
具体实施方式
193.呈现以下描述以使得本领域的任何技术人员能够制造并使用本发明,并且在特定应用的上下文中提供。对于本领域技术人员而言,对所公开实施例的各种修改是显而易见的。
194.在没有背离本发明的精神和范围的情况下,本文中所定义的一般原理可以应用于其他实施例和应用。因此,本发明不旨在局限于所示的实施例,而是要符合与本文中所公开的原理和特征一致的最宽范围。
195.当数据要通过诸如网络之类的数据通道在两个数据处理系统之间被传送时,数据处理系统中的每个数据处理系统具有合适的网络接口以允许其跨过通道进行通信。网络通常基于以太网技术。其他实施例可以基于其他技术。
196.要通过网络进行通信的数据处理系统配备有能够支持网络协议的物理要求和逻辑要求的网络接口。网络接口的物理硬件部件被称为网络接口设备或网络接口卡(nic)。
197.图1中示出了用于跨过网络传输和/或接收的典型数据处理系统100。数据处理系统100包括主机计算设备101,该主机计算设备101耦合到网络接口设备102,该网络接口设备102被布置为将主机计算接口设备接口到网络103。主机计算设备101设有用于网络接口设备102的设备驱动程序115。主机计算设备101包括支持一个或多个用户层级应用105的操作系统104。主机计算设备101还可以包括网络协议堆栈(未示出)。例如,协议堆栈可以为应用的部件、与应用链接的库,和/或由操作系统提供。在一些实施例中,可以提供多于一个的协议堆栈。
198.网络协议堆栈可以是传输控制协议(tcp)堆栈。应用105可以通过打开套接口并从套接口读取和写入数据来发送和接收tcp/ip消息。操作系统104可以使得消息跨过网络而被传输。例如,应用可以调用系统调用(syscall)以通过套接口传输数据,然后经由操作系统104传输到网络103。
199.一些系统可以将协议处理的至少一部分卸载到网络接口设备102,而非在主机计算设备101中实现堆栈。例如,网络接口设备102可以包括用于执行tcp协议处理的tcp卸载引擎(toe)。要通过网络传输的数据可以由应用105经由toe启动虚拟接口驱动程序发送,从而部分或全部绕过主机计算设备中的tcp/ip堆栈。因此,沿着该快速路径发送的数据只需被格式化以满足toe驱动程序的要求。
200.应当领会,toe功能是可以被卸载到网络接口设备的功能的一个示例。可替代地或附加地,一个或多个其他功能可以被卸载到网络接口设备。作为示例,协议处理的一部分可以被卸载到网络接口设备,应用可以至少部分地在网络接口设备等上被提供。
201.网络接口设备可以包括一个或多个缓冲器106。缓冲器106可以是任何合适存储器、fifo或寄存器集合。缓冲器可以使得需要修改帧的任何操作(例如,将校验和插入到报头中)在帧的该部分被传送到mac(媒体访问控制)之前完成。
202.主机计算设备101可以包括一个或多个处理器113和一个或多个存储器109。(一个或多个处理器实际上可以提供操作系统的至少一部分和用户层级应用,连同一个或多个存储器)。
203.应当领会,系统的存储器空间可以由以下各项中的一项或多项提供:主机计算设备上的一个或多个存储器、网络接口设备上的一个或多个存储器、以及主机计算设备和网络接口设备外部的一个或多个存储器。
204.在一些实施例中,主机计算设备101和网络接口设备102可以经由一个或多个总线119进行通信。仅作为示例,总线可以是pcie(外围组件互连快速)总线、axi(高级可扩展接口)总线、ccix(加速器的高速缓存一致性互连)总线、capi(一致性加速器处理器接口)总线、open capi总线或任何其他合适总线。在提供两个或更多个总线的情况下,至少一个总线可以使用与至少一个其他总线不同的总线协议,或所有总线可以使用同一总线协议。
205.在数据处理系统的操作期间,要被传输到网络上的数据可以从主机计算设备101传送到网络接口设备102以供传输。从数据网络接收的数据可以经由网络接口设备被传递到主机设备。
206.在一些实施例中,使用设备队列技术来管理数据传送。设备队列技术可以支持dma(直接存储器访问)。通过dma,网络接口设备能够绕过主机设备的cpu向存储器发送数据或从存储器接收数据。从网络接收的数据在由(例如,接收队列中的)一个或多个描述符指示的位置处被直接写入主机存储器。对于要被传输到网络上的数据,网络接口在由(例如,传输队列中的)一个或多个描述符指示的存储器位置中传输数据。
207.主机设备和网络接口设备经由设备接口进行通信。存在多种不同方式可以实现主机设备与网络接口设备之间的接口。在下文中,主机设备与网络接口设备之间的接口被称为设备接口。
208.可以诸如在工业规范和/或专有规范中指定设备接口。这样的规范可以定义要如何配置主机计算设备和/或网络接口设备,以便允许主机和设备一起操作。
209.设备接口的一个方面是如何定义并管理队列(有时称为环)。一些设备接口可能无需队列类型结构。
210.参考图2,图2更详细地示出了网络接口设备的可编程接口510。可编程接口可以被配置为支持多个不同设备接口和/或多个不同总线协议。可编程接口可以同时支持设备接口的一个或多个实例和/或同时支持一个或多个总线。
211.在支持两个或更多个设备接口实例的情况下,它们可以支持相同或不同的设备接口规范。设备接口实例的数目可能会在网络接口设备的操作期间发生改变。所支持的(多个)设备接口类型可能会在网络接口设备的操作期间发生改变。
212.在支持两个或更多个总线的情况下,它们可以支持相同或不同的总线协议。总线的数目可能在网络接口设备的操作期间发生改变。一个或多个总线的总线协议可能在网络接口设备的操作期间发生改变。
213.可编程接口可以依据设备接口要求支持不同的设备接口。例如,设备接口可以使用队列或环对结构:tx/rx和(可选的)事件通知通道(或完成队列)或设备接口可以使用相对较大的存储器窗口。在后一示例中,数据帧以递增方式由写入管理,并且无需队列类型结构。
214.不同的设备接口可以以不同方式实现主机计算设备与网络接口设备之间的交互。
215.不同设备接口可以与不同语义相关联。
216.在一些设备接口规范中,用于控制进程的命令可以被称为描述符。描述符可以标识起始地址,有时也被称为指针。
217.依据设备接口,主机计算设备可以在存储器中创建工作队列或描述符环。该工作队列可能具有一个或多个命令。主机可以跨过通信信道将一个或多个命令从队列传送到网络接口设备上的本地存储器。这些命令可以存储在描述符高速缓存中(该描述符高速缓存稍后会在可编程接口中进行更详细的描述)。
218.网络接口设备既可以从网络发送数据也可以从网络接收数据。在示例设备接口规范中,可以在存储器中设置两个工作队列:一个传输(tx)工作队列以及一个接收(rx)工作队列,该tx工作队列标识存储器中的准备好传输到网络上的数据缓冲器,该rx工作队列标识可用于接收从网络传入的数据的存储器中的数据缓冲器。
219.如先前所提及的,依据设备接口,可能存在描述符的不同管理方式。在一些实施例中,网络接口设备的可编程接口被配置为使得同一网络接口设备可以支持多个不同设备接口规范中的任一个或多个不同设备接口规范。例如,可编程接口可以支持描述符的多个不同实现方式。
220.不同设备接口规范和/或队列管理和/或队列结构的语义可能不同。例如,不同规范可能具有不同命令和/或特定命令的不同语义和/或不同命令的不同动作。在一些规范中,可以提供单独完成队列,而在其他规范中,不提供完成队列。不同设备接口可能需要不同的元数据。不同的设备接口可以使用不同的校验和机制(例如,使用不同的计算技术和/或对不同的数据集进行计算)。不同的设备接口可能具有不同的方式来提供经过验证的校验和信息。仅作为示例,该信息可以作为分组数据的前缀或作为完成的一部分来提供。
221.规范可以在数据帧相对于缓冲器的处理方式上有所不同。例如,缓冲器可以接收一个且仅一个数据帧,缓冲器可以接收多个数据帧或单个帧可以跨越两个或更多个缓冲器。这可以由设备接口规范或主机规范的特定实现方式来定义。
222.设备接口可以支持间接描述符,其中环中的一个描述符指向更多描述符的表,而非数据缓冲器。这可以用于例如“扩展”环。该布置类型可以例如由virtio支持,稍后对该virtio进行详细讨论。
223.设备接口规范中的一个或多个设备接口规范可以定义事务如何和何时放置到总线上。例如,这些可能是dma相关事务。例如,一些规范可能会在一些或所有情况下汇总事务。一些规范可能会指定单个事务单被独放置到总线上。一些规范可能会定义被放置到总线上的事务的属性,诸如对齐和/或填充。
224.设备接口可以是“标准化”接口或专有接口或甚至是实现特定接口。仅作为示例,实现设备接口的一些途径由rdma(远程直接存储器访问)、virtio和nvme(非易失性存储器主机控制器接口快速)提供。nvme是一种开放逻辑设备接口规范,用于访问经由pci快速(pcie)总线附接的非易失性存储介质。
225.virtio设备存在于虚拟环境中。按照设计,它们对虚拟机内的访客而言就像物理设备。virtio规范是这样对待它们的。这种相似性允许访客使用标准驱动程序和发现机制。virtio规范的目的是虚拟环境和访客应当具有虚拟设备的标准可扩展机制。virtio设备可
以在硬件中实现为物理接口。这允许访客操作系统图像在没有管理程序的环境中执行。
226.本技术人所提供的ef100是所谓的专有规范的示例。
227.应当领会,不同设备接口的这些示例仅作为示例,并且其他实施例可替代地或附加地可与任何合适的设备接口一起使用。
228.规范可以定义虚拟化行为和/或硬件行为和/或软件行为和/或固件行为。
229.可编程接口被配置为使得至少两个不同设备接口的需求可以由相同的可编程接口支持。
230.如所提及的,不同的设备接口可能具有不同的要求,例如,用于实现队列类型结构。例如,队列中的至少一些队列的布局和功能可能大体相似,但仍有一些差异。例如,以下各项中的一项或多项可能不同:描述符的格式和布局、指针的索引、命令和通知完成。
231.例如,ef100具有接收队列、传输队列和事件队列。
232.一些设备接口规范可能具有网络接口设备到主机、主机到网络设备和完成环的集合。作为示例,事务队列可以由以下元件组成:描述符环、完成环、数据缓冲器、门铃和中断目标。
233.设备接口规范的一个示例可以定义若干个用户可配置主机配置文件,其中每个配置文件指定两个存储器区域中的哪个存储器区域保存特定队列元素。在一些实施例中,用户可配置主机配置文件的数目为16。应该领会,这仅作为示例,并且其他实现方式可以具有不同数目的用户可配置主机配置文件。
234.例如,可以指定pci物理功能或虚拟功能以支持若干个virtio队列(vring)并且具有virtio-net个性。另一功能可能支持nvme队列对并且具有nvme个性。
235.可以为每个队列指派预先配置的主机配置文件中的一个预先配置的主机配置文件。
236.配置文件可以指定队列数据、环和中断处于第一主机存储器空间中。同样,队列可以被存放在第二主机存储器空间中。队列可以在不同空间中具有其元素。例如,数据可能来自第一主机存储器,但描述符、完成和中断属于第二主机存储器,反之亦然。
237.设备接口适配器308(稍后对其进行更详细的描述)可以允许主机到网络接口队列描述符选取数据位置,该数据位置覆盖在队列的主机配置文件中指定的数据位置。
238.设备接口适配器可以通过将队列的所指派的配置文件id存储在本地队列状态表中并根据需要将id作为适配器dma事务的一部分供应来支持dma主机配置文件特征。
239.rdma具有队列对集合。在一些实施例中,该集合可以包括32k-128k队列对。每个队列对可以支持sq(发送队列)、rq(接收队列)和cq(完成队列)。
240.virtio可以具有一个或多个virt队列对和(可选的)控制virt队列。在一些实施例中,virtio块设备经由单个virt队列提供块存储接口。驱动程序提交读取请求,这些读取请求将数据块从存储部传送到驱动程序;并且提交写入请求,这些写入请求将数据块从驱动程序传送到设备。virtio设备可能需要描述符表、可用环和已用环。
241.设备接口的实例在主机软件实体与硬件数据路径之间提供通信通道。
242.可编程接口510可以至少部分地由可配置硬件提供。可配置硬件可以为任何合适的可配置硬件。仅作为示例,可编程接口510可以由fpga微引擎和asic微引擎中的一个或多个微引擎提供。要由可编程接口执行的操作可以以高层级语言指定。然后,这可以被编译为
门层级或rtl(寄存器传输语言)。可替代地,操作可以作为被编程到asic等的微处理器中的固件来提供。可以使用诸如hls(高层级综合)之类的程序。
243.在一些实施例中,同一可编程接口510可以被编程为支持任一个或多个合适总线协议和/或任一个或多个合适设备接口规范。这可以是网络接口设备第一次被使用的时候和/或可以是设备正在被使用的时候。
244.可编程接口510具有带有一个或多个共享总线119的接口304。(仅作为示例,图2示出了两个总线)在主机设备与网络接口设备之间提供总线119。依据网络接口设备如何被部署,接口304可以被配置为与一个或多个总线119接口。在存在多于一个总线的情况下,总线可以根据诸如先前所描述的协议之类的相同或不同的协议进行操作。在一些实施例中,该接口可以可替代地被配置为支持一个或多个总线,该一个或多个总线可以被分为较小单元(例如,二叉或四叉)。
245.图2还示出了具有一个或多个数据切片512的流式传输子系统310。切片可以在数据被传输之前或在其已被接收之后对数据执行例如数据处理。
246.可编程接口510被配置为实现一个或多个适配器308。适配器可以支持设备接口的实例。在一些实施例中,适配器可以支持多于一个的设备接口实例。在实现了多于一个的适配器的情况下,不同的适配器可以被配置为支持不同的设备接口。在一些实施例中,多于一个的适配器可以使用相同的设备接口规范。
247.适配器可以被配置为运行和控制去往和/或来自主机计算设备的相应操作。这可能是在硬件虚拟化之后。
248.适配器可以用于以下各项中的一项或多项:去往主机设备的通信和来自主机设备的通信。适配器可以支持去往和来自主机的dma事务中的一个或多个dma事务(例如,对于从网络接收的数据、要被传输到网络上的数据和/或经由作为虚拟设备接口的一部分的dma传送的信息,诸如描述符获取等)。
249.一个或多个适配器可以从一个或多个切片512接收输入和/或向一个或多个切片512提供输出。切片可以为流式传输子系统310的一部分。在一些实施例中,给定切片可以与单个适配器或多于一个的适配器通信。
250.可编程接口510具有公共调度器功能306,该公共调度器功能306控制对一个或多个总线的访问。调度器功能可以例如控制对网络接口设备与主机之间的共享总线的访问。总线具有有限带宽,该有限带宽例如需要在不同设备接口实例之间被共享。例如,调度器被配置为确保支持设备接口的不同实例的每个事务。调度程序需要在所有事务中调度总线资源(例如,dma带宽)。除了设备接口实例,可编程接口还可以支持其他dma客户端(诸如用户定义的外部内核)。调度器可以被配置为也调度这些功能。
251.在一些实施例中,单个调度器功能被配置为管理调度。
252.调度器还可以调度设备资源,诸如数据路径切片中的缓冲器。调度器可以用于在虚拟设备接口之间实施服务质量策略。服务质量策略可以与(例如,每个队列的)优先级或带宽中的一个或多个有关。调度器可以管理网络接口设备的不同子系统之间的公平性。
253.适配器的事务由调度器306调度。在一些实施例中,调度器还可以管理任何其他所需访问。
254.可编程接口包括门铃功能322。与从主机到网络接口设备的设备接口的不同实例
相关联的所有门铃都被写入该公共门铃功能。门铃的使用和/或如何实现门铃和/或如何使用门铃可能取决于相应的设备接口。例如,当主机具有待写入数据时,主机可以提供门铃。主机可以提供门铃来指示接收队列。更一般地,当主机想要由可编程接口510完成某事时,主机可以向门铃功能提供门铃。
255.门铃功能可以被配置为通过门铃写入的基本地址来确定门铃所针对的适配器。
256.门铃本身可以为相对较大的数据帧或可以相对较短,例如,指示特定队列或队列中的索引等。例如,相对较大的门铃可以包括待传输数据,可以是帧的第一部分,也可以是整个帧。当门铃被写入门铃功能时,这将导致适配器308支持设备接口的实例,对于该设备接口的实例,门铃旨在以适当方式对该门铃做出响应。
257.门铃通常可以由执行到目的地地址的加载/存储类指令的主机cpu来生成,该目的地地址被映射以使得发出目标总线写入。总线映射属性(例如,写入组合)和所使用的特定指令(例如,写入存储器屏障)影响所生成的总线事务。
258.门铃功能可以实施门铃的动作。这可能涉及标记异常门铃和/或拒绝缺陷门铃。门铃功能可以例如合并与给定适配器相关联的两个或更多个门铃
259.可编程接口包括地址转换服务ats 320,稍后对该地址转换服务ats 320进行更详细的讨论。ats可以由设备接口的不同实例共享。可编程接口被配置为使得iommu要被使用和/或ats。这可能取决于设备接口规范和/或特定类型的dma访问。可编程接口可以被配置为支持iommu和ats中的一项或两项。
260.在一些实施例中,公共dma描述符高速缓存314可以由可编程接口提供。该描述符高速缓存可以例如包括用于所有设备接口实例的所有高速缓存描述符。描述符高速缓存可能具有解析为总线物理地址的指针。应当领会,如果高速缓存开始用完相应队列的描述符,则高速缓存可以获取相应队列的一个或多个描述符。这可以由描述符高速缓存和/或由相应适配器控制。
261.描述符高速缓存可以驱逐一个或多个描述符,例如,如果描述符陈旧或为其他描述符腾出空间。驱逐可以基于以下各项中的一项或多项:随机的、最近最少使用的、与适配器相关联的优先级、与每个适配器相关联的描述符的数目和/或任何其他合适准则。
262.在确定为哪些队列获取了哪些描述符时和/或何时获取和/或当描述符高速缓存已满或正在变满时确定要从描述符高速缓存中删除哪些描述符时,描述符高速缓存的操作可以考虑服务保证和使用模式中的一项或多项。描述符高速缓存可能会尝试提前预取描述符以避免行头阻塞。
263.描述符高速缓存可以在不同适配器之间被分区。分区可以使得每个适配器都有固定分配。针对每个适配器的分配可能相同或不同。可替代地,分区的大小可以发生变化。这可能取决于诸如一个或多个适配器的活动和/或适配器所支持的活动的类型和/或设备接口类型之类的因素。
264.描述符高速缓存可替代地依据适配器的需要在不同适配器之间被共享。
265.在一些实施例中,描述符高速缓存可以具有与每个适配器相关联的固定分配和可由适配器中的任一个或多个适配器根据需要使用的共享分配。
266.描述符高速缓存可以为每个适配器实例提供保证高速缓存预留。
267.描述符高速缓存可以为适配器的端点实例提供保证数目的描述符。端点实例可以
为队列。
268.描述符高速缓存可以被配置为响应于与相应适配器相关联的门铃的门铃处理和/或与相应适配器相关联的数据的到达中的一项或多项,预取一个或多个描述符。
269.参考图3,图3更详细地示出了对图2的可编程接口510的修改。
270.在该示例中,可编程接口设有多个接口。在该示例中,示出了两个接口。然而,在一些实施例中,可以提供多于两个的接口。应当领会,图2的布置可以被修改为具有两个接口。
271.在图3所示的示例中,提供了共享dma引擎330。该dma引擎由不同的适配器308共享。共享dma引擎可以与单个接口一起使用,如图2所示。
272.如稍后所讨论的,图2的布置中的每个适配器都设有dma引擎,而在图3的示例中,dma引擎由两个或更多个适配器共享。共享dma引擎的优点在于资源的有效使用。为特定适配器提供的dma引擎可以针对该适配器的行为进行优化。
273.dma引擎将从描述符高速缓存中读取dma命令并且按所定义的顺序执行它们。dma引擎将从存储器中读取数据或将数据写入存储器。dma引擎与总线接口接口,并且可以处置总线流控制协议机制,诸如信用、乱序完成和并行事务(例如,多个未决事务)。dma引擎拥有的带宽份额由调度程序控制。
274.参考图4,图4更详细地示出了图2的适配器308的一个示例。
275.适配器308具有门铃处理程序350、描述符加载器354、dma引擎356和rx/tx处理功能360。
276.当门铃由门铃功能322接收时,它基于到特定适配器的动态地址映射来解决。特定适配器的门铃处理程序350将解析门铃。门铃处置程序可以被配置为轮询门铃功能以获得旨在用于该特定适配器的门铃。解析将确定以下各项中的一项或多项:与门铃相关联的命令、描述符、数据和设备索引。该命令可以是任何合适命令,诸如读取数据、写入数据和/或更复杂的命令。
277.门铃处理程序向描述符加载程序提供输出,该输出包括经解析门铃的一个或多个部分。描述符加载器被配置为从描述符高速缓存中组装描述符。描述符加载器还配置为获取高速缓存上下文信息,诸如队列指针。诸如队列指针之类的高速缓存上下文信息可以提供描述符索引的状态。
278.描述符高速缓存将向描述符加载器提供所请求的描述符高速缓存行。描述符高速缓存可以dma来自一个或多个主机或设备存储器的描述符高速缓存行。描述符高速缓存可以预取间接描述符和其他描述符中的一个或多个描述符。描述符高速缓存可以驱逐陈旧描述符。
279.命令和(多个)相关联描述符由描述符加载器提供给描述符处理程序。描述符处理程序将(多个)命令转换为dma请求链。因此,处理链最终形成对dma引擎的dma请求列表。dma引擎将进行dma请求。dma请求由调度器306调度。
280.dma引擎使用特定设备接口的语义进行编程。描述符的处置可能需要一些dma响应。描述符处理程序经由dma引擎提供给描述符处理程序的一个或多个完成来获知dma引擎进度。
281.其他dma响应可以被递送到rx/tx处理功能。rx/tx处理功能被配置为执行诸如卸载处理、重组逻辑等之类的功能。
282.应当领会,图4示出了一个适配器。应当领会,可编程接口可以支持一个或多个适配器。
283.参考图5,图5更详细地示出了图3的适配器308的一个示例。图5的适配器通常以与图4的适配器相同的方式操作。然而,在这种情况下,dma引擎位于适配器之外,并且可以由两个或更多个不同的适配器共享。然而,描述符处理程序和rx/tx功能与dma引擎的交互与关于图4所描述的交互相同。在这些实施例中,调度器被配置为调度不同适配器308经由公共dma引擎的dma访问。
284.参考图7,图7示出了一些实施例的存储器地址管理的各方面。主机计算设备101设有用于网络接口设备106的设备驱动程序115。设备驱动程序115有效地使网络接口设备可访问主机中的存储器109的一部分以进行dma读取和写入。
285.设备驱动程序115具有标为590的“顶部边缘”,该顶部边缘符合操作系统设备接口api。操作系统设备接口api可以为ndis或linux网络驱动程序api。设备驱动程序115具有标为591的“下部边缘”,该下部边缘适应网络接口设备硬件并且执行寄存器级操作以实施诸如api操作、发送操作、接收操作、中断操作和再填充缓冲器环操作之类的操作。
286.下部边缘可以支持供应商或设备特定操作。在一些实施例中,虚拟设备接口被标准化,从而使得设备驱动程序成为通用设备类型(例如,网络设备驱动程序)。virtio和nvme就是这样的示例。
287.主机可以包括iommu(输入/输出存储器管理单元)514。iommu可以被配置为在主机侧提供存储器映射。在一些实施例中,存储器映射在总线119的主机侧进行。是否提供这种iommu和/或iommu操作如何操作可以是主机cpu和/或芯片组架构的一部分。
288.可以由iommu执行地址转换。网络接口设备可以将数据“写入”到描述符队列中的地址。该写入事务由iommu接收,然后写入与描述符队列中的地址相关联的物理位置。iommu技术可以用于通过网络接口进行的一些dma访问。
289.可编程接口可以支持地址转换服务ats或缓冲器表。ats将转换设备可以用于dma事务的地址,并且可以形成描述符队列的一部分。该地址可以被转换为总线地址或物理地址。在地址被转换为总线物理地址的情况下,iommu可以转换总线物理地址。ats可以充当iommu的高速缓存,或将缓冲器虚拟地址映射到总线物理地址,或将缓冲器虚拟地址映射到没有iommu的物理地址。这可以至少部分由所需设备接口行为来定义。
290.在一个或多个设备接口类型中,不会提供ats。
291.应当领会,如何管理地址转换可以由设备接口定义。因此,描述符中的地址到物理位置的映射可以依据设备接口在iommu和/或ats中执行。
292.在一些实施例中,可以提供用于每个应用的地址空间。与特定应用相关联的描述符队列可能具有特定地址。在一些实施例中,ats可以被配置为转换该地址。应当指出,给定队列通常无法引用与另一队列相关联的存储器空间。主机的os可以更新缓冲器表。应用线程可以发布接收描述符,该接收描述符将定义应用想要将其数据例如注入的或要从中获取待传输数据的存储器。网络接口设备将使用例如使用ats或缓冲器表的映射来确定与所指示的存储器位置相关联的物理存储器位置。
293.dma可以允许数据被传送到指派给网络接口设备的地址空间区域/从指派给网络接口设备的地址空间区域传送。这允许经由网络接口设备的接收切片512接收的数据经由
dma过程被写入主机存储器。这允许主机存储器中的数据经由网络接口设备的传输切片512再次经由dma过程传输。
294.映射可以被实现为相对于描述符队列的上下文的私有地址映射,或被实现为共享数据结构(例如,系统页表),或被实现为地址转换高速缓存。
295.当网络接口设备已经将数据注入到物理位置时,可以更新相关联的套接口的事件队列以及网络接口设备所使用的接收队列中的写入指针。网络接口设备可以将下一接收到的数据写入或注入到接收队列中的更新写入指针所指示的下一位置。指针被存储在描述符高速缓存中。
296.图8所示的缓冲器表的一个示例用于确定缓冲器的物理位置(或如先前所讨论的总线物理地址)。iommu或ats可以被实现为缓冲器表。在一些实施例中,缓冲器表映射哪些线程或应用被分配给每个缓冲器,并且为每个缓冲器保存以下信息:
297.1.缓冲器索引。这是缓冲器的标识编号,该标识编号对于主机而言是唯一的。缓冲器由缓冲器表索引字段中的该编号标识。
298.2.所有权。这指示哪个应用或线程拥有缓冲器。
299.3.物理存储器地址。缓冲器占用连续物理存储器块,并且该数字指示该块开始的位置(或先前所讨论的总线物理地址)。
300.4.长度。这指示存储器中缓冲器的长度。
301.可以选择每个缓冲器表条目的大小以匹配主机系统的页面大小:通常为4kbytes。这样,映射到物理存储器的非连续区域上的应用的虚拟地址空间的连续区域可以由缓冲器表条目序列表示。在其他实施例中,可以支持高达gbyte huge page大小的若干个大小。
302.所指示的存储器到物理存储器位置的映射可以使用缓冲器表来执行。
303.描述符高速缓存可以包括关于描述符与哪个适配器相关联的直接或间接指示。这样就可以将正确语义应用于相应描述符。
304.在一些实施例中,描述符高速缓存中的给定条目可以包括以下各项中的一项或多项:
305.指向要写入/读取数据的位置的指针;
306.相关联的适配器实例和/或不透明端点索引;以及
307.元数据。
308.指针可以是单个指针、指针块、指针链表、单词查找树、或任何其他合适数据结构。
309.元数据可以包括一个或多个标志。
310.元数据可以指示指针是否是指向描述符表而非指向缓冲器的指针和/或指针是否指向缓冲器。
311.元数据可以指示设备接口类型和/或大小。在一些实施例中,描述符的大小可以不同。在一些实施例中,可以存在一组不同的大小。元数据可以指示正在使用的尺寸。
312.在一些实施例中,元数据可以指示设备接口类型。
313.元数据可以指示一个或多个队列索引(描述符相对于逻辑队列的位置)和/或相关联的队列。
314.应当领会,如果提供元数据,则元数据将取决于相关联的设备接口的要求。元数据的格式可能取决于相关联的设备接口的要求。元数据可能被描述符高速缓存视为不透明
的。
315.设备索引可以提供关于与描述符相关联的应用的信息。这可以指示适配器,或可以在给定条目中单独提供。设备索引可以提供关于条目是用于接收队列、命令队列还是发送队列甚至是窗口的信息。
316.为了跟踪可能同时与网络接口设备通信(并且可能使用不同的设备接口规范)的许多用户层级应用的队列和/或窗口的状态,常见描述符高速缓存可以至少包括下一描述符。描述符高速缓存可以被配置为保存每个端点的至少若干个描述符。例如,因为至少某个数目的描述符将始终可用,所以这允许适配器确保帧递送不会因描述符获取而停止。作为示例,描述符的数目可以为0、1、16、32、64、128个描述符。不同端点可能与相同或不同数目的描述符相关联。
317.每个设备接口可以具有至少一个对应的设备索引,该至少一个对应的设备索引可以用作公共描述符高速缓存的索引。
318.主机可以被配置为下载一个或多个设备驱动程序以支持由网络接口设备的可编程接口支持的设备接口类型中的一个或多个设备接口类型。
319.在一些实施例中,网络接口设备可以提供网络接口设备所支持的不同接口类型中的一个或多个接口类型的设备驱动程序。主机所接收的设备驱动程序可以表达为设备驱动程序,也可以表达为诸如ebpf程序之类的程序。
320.在一些实施例中,从单个高层级程序生成设备驱动程序和设备接口。该程序由操作系统编译并被下载到网络接口设备实例。主机计算设备可以编译程序以提供用于设备接口和内核模块、设备驱动程序或适用于本机操作系统的主机接口的任何其他表示的固件或rtl层级代码
321.主机计算设备可以被配置为将高层级语言程序编译为用于主机接口(设备驱动程序)的中间层级语言程序。如果程序要被插入到诸如内核之类的更高特权域中,则可以验证该中间层级语言程序。仅作为示例,中间层级语言程序可以为ebpf(或扩展ebpf)程序。
322.主机计算设备可以被配置为将高层级语言程序编译为用于设备接口的中间层级语言程序。(例如,hls、或用于执行物理设备的固件)
323.高层级程序的源可以为具有较高特权层级或较低特权层级的应用。具有更高特权层级的应用可以为所谓的受信应用,因此被委托以进行内核层级等修改。具有较低特权层级的应用可能为所谓的非受信应用,因此无法进行内核层级等修改。然而非非受信应用的经编译输出可以被特权验证者验证为安全使用,或在沙盒环境中执行。
324.应用可以使用高层级语言来表达设备接口的语义,该高层级语言被编译到主机中的设备驱动程序和网络接口设备中的设备接口。依据与应用相关的特权,设备驱动程序可以被插入内核(具有较高特权)或位于内核外部(具有较低特权)。
325.由编程接口用来提供所需设备接口的用于网络接口设备的程序可以与较高特权或较低特权相关联。如果程序具有较高特权,则程序可以使用与较高特权相关联的任何或所有硬件功能。如果程序具有较低特权,则程序可能仅使用与较低特权相关联的硬件。作为示例,如果程序与较低特权层级相关联,则访问可能会局限于某些dma缓冲器和/或所允许的中断数目可能会受到限制和/或可能不允许中断和/或对总线的访问调度可能会受到限制。
326.在一些实施例中,可以在网络接口设备上的沙盒环境中提供设备接口。例如,可以在沙盒环境中提供适配器。沙盒环境可以与适配器一起使用,该适配器与较低特权层级相关联。
327.在一些实施例中,可以依据与给定适配器相关联的特权来控制对ats进行编程。这是为了确保不授予特权较低的适配器访问与较高特权层级相关联的缓冲器或仅访问允许适配器访问的缓冲器。
328.在一些实施例中,可编程接口可以设有模板功能,诸如以下各项中的一项或多项作为模板:调度器功能、门铃功能、ats功能、描述符高速缓存、dma引擎(其中被共享)和多个适配器。当特定设备接口的可编程接口接收到程序代码等时,这将使得适配器的模板被修改以与特定设备接口一致。调度器功能、门铃功能、ats功能、描述符高速缓存和dma引擎的模板中的一个或多个模板可以被修改为支持特定设备接口。
329.在一些实施例中,对可编程接口的编程可以在运行时执行。在一些实施例中,对可编程接口进行编程可以在主机计算设备和网络接口设备的操作期间执行。
330.先前所描述的实施例已经对用于网络接口设备与主机设备之间的可编程接口进行了讨论。应当领会,可替代地或附加地,可编程接口可以用于网络接口设备上的路由。例如,网络接口设备上可能存在被配置为使用总线进行通信的部件。该总线可以是先前所讨论的总线中的任一类型的总线。
331.例如,网络接口设备可以包括两个或更多个asic,该两个或更多个asic被配置为使用诸如pcie总线之类的总线进行通信。在一些实施例中,被配置为与主机设备接口的同一可编程接口还可以被配置为在网络接口设备上的两个或更多个部件之间进行接口。在其他实施例中,与在网络接口设备上的部件之间进行接口所需的接口相比较,单独可编程接口可以用于与主机设备接口。
332.仅作为示例,现在,参考图6对包括诸如先前所描述的可编程接口之类的可编程接口的示例网络接口设备的一些示例进行描述。
333.在一些实施例中,协议处理可以被卸载到网络接口设备以在网络接口中被执行。在网络接口设备处执行这种卸载的情况下,可能期望在网络接口设备上实现能够利用网络接口设备的协议处理能力的功能。通过在网络接口设备而非主机中实现这种功能,可以通过减少主机与网络接口设备之间的数据传送来实现潜在延迟改进。
334.网络接口设备102包括输送引擎215,该输送引擎215被配置为根据诸如tcp/ip之类的输送协议来处理数据分组。输送引擎215可以包括协议堆栈。输送引擎215可以包括多个切片512或数据流水线,切片中的一些切片为被配置为执行从网络103接收的入口数据分组的接收处理的rx切片,并且切片中的一些切片为被配置为对要被传输到网络103上的出口数据分组执行传输处理的tx切片。在一些实施例中,切片可能能够处置待传输的数据和所接收的数据两者。
335.在所示示例中,提供了四个切片。然而,应当领会,在其他实施例中,使用不同数目的切片。在一个实施例中,切片可以被布置为处理所接收的数据或处理待传输数据。在其他实施例中,切片可以被布置为使得它能够处理所接收的数据和待传输数据。在一些实施例中,切片的数目可以与端口的数目相同。在一些实施例中,每个端口可能存在传输切片和接收切片。在一些实施例中,端口的数目与切片的数目之间可能不存在直接相关性。在一些实
施例中,切片可以从处理所接收的数据动态切换到处理所传输的数据,反之亦然。
336.每个切片可以被视为处理引擎。因此,每个切片都可以执行微代码来实现数据路径的解析、匹配卸载和递送语义之类的功能。切片可以作用于帧的任何位。
337.切片可以对切片正在处理的数据执行解析动作。可能存在将数据与例如过滤器进行匹配的匹配动作和依据匹配结果执行或不执行动作的动作功能。
338.网络接口设备可以提供诸如流转向和低延迟操作、硬件时间戳添加和时钟同步之类的功能。
339.以太网接口225被配置为从网络接收数据分组并且将它们传递到层2流式传输接口220。层2流式传输接口220被配置为将数据分组传递到输送引擎215,该输送引擎215在将经过处理的数据分组传递到可编程接口510之前执行对数据分组的处理。例如,可编程接口510被配置为在dma写入操作中将数据中的至少一些数据传递到主机101。对于要被传输到网络上的数据,可以遵循该路径的反向。经过协议处理的数据分组可以在传输到网络2103上之前传递到层2接口220,随后传递到以太网接口225。
340.参考图9,图9示出了一些实施例的方法。在步骤s1中,网络接口设备的可编程接口被编程为提供网络接口设备与主机设备之间具有至少一个总线的设备接口,可编程接口被编程以支持多个不同设备接口类型。
341.参考图10,图10示出了一些实施例的方法。在步骤t1中,主机计算设备编译定义相对于网络接口的设备接口的程序。
342.在步骤t2中,经编译程序被安装在主机计算设备中以定义用于所述设备接口的主机接口,并且被安装在网络接口设备中以定义对应的设备接口。
343.如本文中所使用的,“标识”信息项不一定需要该信息项的直接规范。例如,“标识”存储器中的起始地址的指针可以指定整个物理存储器地址,或它可以指定映射到物理地址的较大存储器地址空间中的地址,或它可以指定映射到物理地址的虚拟地址,或它还依据某种类型的用户id可以指定映射到物理地址的用户地址空间中的地址,或它可以以这些方式中的任一方式标识作为比所标识的实际起始地址小或大一的地址的地址,依此类推。
344.主机计算或处理设备或系统可以是任何合适的计算设备或系统。作为示例,主机计算设备可以包括以下各项中的一项或多项:服务器、个人计算机、交换机、路由器、网桥、虚拟化系统(例如,虚拟化操作系统及其支持的应用)、便携式设备(诸如平板计算机或智能手机)、或任何其他合适计算设备。在一些实施例中,主机计算设备可以由两个或更多个计算设备的集合提供。这些计算设备可能相同或不同。这些计算设备可以是先前计算设备示例中的任一个或多个计算设备示例。
345.网络接口设备可以为被配置为将有线网络或无线网络连接到主机计算设备的任何硬件设备。网络接口设备可以以任何方式设置在网络与主机设备之间。网络接口设备可以为主机处理设备的组成部分。网络接口的物理硬件部件有时称为网络接口卡(nic),尽管它们不必采用卡的形式。例如,它们可以采用直接适配到主板上的集成电路(ic)和连接器的形式。网络接口设备可以由lan(局域网)或lom(主板上的lan)提供。可替代地或附加地,网络接口设备被提供为一个或多个外围设备,诸如主机计算设备的pcie卡。应当领会,在其他实施例中,可以使用任何其他合适网络接口设备。
346.网络接口设备可以由至少一个处理器和至少一个存储器来实现。
347.实施例可以通过可由数据处理器执行的计算机软件来实现,诸如在处理器实体中、或通过硬件、或通过软件和硬件的组合来实现。包括软件例程、小程序和/或宏在内的计算机软件或程序(也称为程序产品)可以存储在任何装置可读数据存储介质中,并且它们包括执行特定任务的编程指令。计算机程序产品可以包括一个或多个计算机可执行部件,当程序运行时,该一个或多个计算机可执行部件被配置为进行实施例。一个或多个计算机可执行部件可以为至少一个软件代码或其的各部分。
348.进一步地,在这方面,应当指出,图中逻辑流程的任何块可以表示编程步骤;或互连逻辑电路、块和功能,或编程步骤和逻辑电路、块和功能的组合。该软件可以存储在诸如存储器芯片或在处理器内实现的存储器块之类的物理介质、诸如硬盘或软盘之类的磁性介质、以及诸如例如dvd及其数据变体cd之类的光学介质上。物理介质为非暂态介质。
349.存储器可以采用适合本地技术环境的任何类型并且可以使用任何适合数据存储技术来实现,诸如基于半导体的存储器设备、磁性存储器设备和系统、光学存储器设备和系统、固定存储器和可移除存储器。数据处理器可以采用适合局部技术环境的任何类型,并且可以包括以下各项中的一项或多项:通用计算机、专用计算机、微处理器、数字信号处理器(dsp),作为非限制性示例。
350.申请人在此单独公开本文中所描述的每个单独特征以及两个或更多个这样的特征的任何组合,以使这样的特征或组合能够整体鉴于本领域技术人员的公知常识基于本说明书来实施,无论这些特征或特征组合是否解决了本文中所公开的任何问题,并且不限于权利要求的范围。申请人指出,本发明的各方面可以由任何这样的单独特征或特征组合组成。鉴于前面的描述,对于本领域技术人员而言,显而易见的是,可以在本发明的范围内进行各种修改。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1