xref: /openbmc/linux/Documentation/translations/zh_CN/userspace-api/accelerators/ocxl.rst (revision 7ae9fb1b7ecbb5d85d07857943f677fd1a559b18)
1*bf80eef2SRui Li.. SPDX-License-Identifier: GPL-2.0
2*bf80eef2SRui Li.. include:: ../../disclaimer-zh_CN.rst
3*bf80eef2SRui Li
4*bf80eef2SRui Li:Original: Documentation/userspace-api/accelerators/ocxl.rst
5*bf80eef2SRui Li
6*bf80eef2SRui Li:翻译:
7*bf80eef2SRui Li
8*bf80eef2SRui Li 李睿 Rui Li <me@lirui.org>
9*bf80eef2SRui Li
10*bf80eef2SRui Li=====================================
11*bf80eef2SRui LiOpenCAPI (开放相干加速器处理器接口)
12*bf80eef2SRui Li=====================================
13*bf80eef2SRui Li
14*bf80eef2SRui Li*OpenCAPI: Open Coherent Accelerator Processor Interface*
15*bf80eef2SRui Li
16*bf80eef2SRui LiOpenCAPI是处理器和加速器之间的一个接口,致力于达到低延迟和高带宽。该规范
17*bf80eef2SRui Li由 `OpenCAPI Consortium <http://opencapi.org/>`_ 开发。
18*bf80eef2SRui Li
19*bf80eef2SRui Li它允许加速器(可以是FPGA、ASIC等)使用虚拟地址连贯地访问主机内存。一个OpenCAPI
20*bf80eef2SRui Li设备也可以托管它自己的内存,并可以由主机访问。
21*bf80eef2SRui Li
22*bf80eef2SRui LiOpenCAPI在Linux中称为“ocxl”,它作为“cxl”(用于powerpc的IBM CAPI接口的驱动)的
23*bf80eef2SRui Li开放、处理器无关的演进,这么命名是为了避免与ISDN CAPI子系统相混淆。
24*bf80eef2SRui Li
25*bf80eef2SRui Li
26*bf80eef2SRui Li高层视角
27*bf80eef2SRui Li========
28*bf80eef2SRui Li
29*bf80eef2SRui LiOpenCAPI定义了一个在物理链路层上实现的数据链路层(TL)和传输层(TL)。任何
30*bf80eef2SRui Li实现DL和TL的处理器或者设备都可以开始共享内存。
31*bf80eef2SRui Li
32*bf80eef2SRui Li::
33*bf80eef2SRui Li
34*bf80eef2SRui Li  +-----------+                         +-------------+
35*bf80eef2SRui Li  |           |                         |             |
36*bf80eef2SRui Li  |           |                         | Accelerated |
37*bf80eef2SRui Li  | Processor |                         |  Function   |
38*bf80eef2SRui Li  |           |  +--------+             |    Unit     |  +--------+
39*bf80eef2SRui Li  |           |--| Memory |             |    (AFU)    |--| Memory |
40*bf80eef2SRui Li  |           |  +--------+             |             |  +--------+
41*bf80eef2SRui Li  +-----------+                         +-------------+
42*bf80eef2SRui Li       |                                       |
43*bf80eef2SRui Li  +-----------+                         +-------------+
44*bf80eef2SRui Li  |    TL     |                         |    TLX      |
45*bf80eef2SRui Li  +-----------+                         +-------------+
46*bf80eef2SRui Li       |                                       |
47*bf80eef2SRui Li  +-----------+                         +-------------+
48*bf80eef2SRui Li  |    DL     |                         |    DLX      |
49*bf80eef2SRui Li  +-----------+                         +-------------+
50*bf80eef2SRui Li       |                                       |
51*bf80eef2SRui Li       |                   PHY                 |
52*bf80eef2SRui Li       +---------------------------------------+
53*bf80eef2SRui Li
54*bf80eef2SRui Li  Processor:处理器
55*bf80eef2SRui Li  Memory:内存
56*bf80eef2SRui Li  Accelerated Function Unit:加速函数单元
57*bf80eef2SRui Li
58*bf80eef2SRui Li
59*bf80eef2SRui Li
60*bf80eef2SRui Li设备发现
61*bf80eef2SRui Li========
62*bf80eef2SRui Li
63*bf80eef2SRui LiOpenCAPI依赖一个在设备上实现的与PCI类似的配置空间。因此主机可以通过查询
64*bf80eef2SRui Li配置空间来发现AFU。
65*bf80eef2SRui Li
66*bf80eef2SRui LiOpenCAPI设备在Linux中被当作类PCI设备(有一些注意事项)。固件需要对硬件进行
67*bf80eef2SRui Li抽象,就好像它是一个PCI链路。许多已有的PCI架构被重用:在模拟标准PCI时,
68*bf80eef2SRui Li设备被扫描并且BAR(基址寄存器)被分配。像“lspci”的命令因此可以被用于查看
69*bf80eef2SRui Li哪些设备可用。
70*bf80eef2SRui Li
71*bf80eef2SRui Li配置空间定义了可以在物理适配器上可以被找到的AFU,比如它的名字、支持多少内
72*bf80eef2SRui Li存上下文、内存映射IO(MMIO)区域的大小等。
73*bf80eef2SRui Li
74*bf80eef2SRui Li
75*bf80eef2SRui Li
76*bf80eef2SRui LiMMIO
77*bf80eef2SRui Li====
78*bf80eef2SRui Li
79*bf80eef2SRui LiOpenCAPI为每个AFU定义了两个MMIO区域:
80*bf80eef2SRui Li
81*bf80eef2SRui Li* 全局MMIO区域,保存和整个AFU相关的寄存器。
82*bf80eef2SRui Li* 每个进程的MMIO区域,对于每个上下文固定大小。
83*bf80eef2SRui Li
84*bf80eef2SRui Li
85*bf80eef2SRui Li
86*bf80eef2SRui LiAFU中断
87*bf80eef2SRui Li=======
88*bf80eef2SRui Li
89*bf80eef2SRui LiOpenCAPI拥有AFU向主机进程发送中断的可能性。它通过定义在传输层的“intrp_req”
90*bf80eef2SRui Li来完成,指定一个定义中断的64位对象句柄。
91*bf80eef2SRui Li
92*bf80eef2SRui Li驱动允许一个进程分配中断并获取可以传递给AFU的64位对象句柄。
93*bf80eef2SRui Li
94*bf80eef2SRui Li
95*bf80eef2SRui Li
96*bf80eef2SRui Li字符设备
97*bf80eef2SRui Li========
98*bf80eef2SRui Li
99*bf80eef2SRui Li驱动为每个在物理设备上发现的AFU创建一个字符设备。一个物理设备可能拥有多个
100*bf80eef2SRui Li函数,一个函数可以拥有多个AFU。不过编写这篇文档之时,只对导出一个AFU的设备
101*bf80eef2SRui Li测试过。
102*bf80eef2SRui Li
103*bf80eef2SRui Li字符设备可以在 /dev/ocxl/ 中被找到,其命名为:
104*bf80eef2SRui Li/dev/ocxl/<AFU 名称>.<位置>.<索引>
105*bf80eef2SRui Li
106*bf80eef2SRui Li<AFU 名称> 是一个最长20个字符的名称,和在AFU配置空间中找到的相同。
107*bf80eef2SRui Li<位置>由驱动添加,可在系统有不止一个相同的OpenCAPI设备时帮助区分设备。
108*bf80eef2SRui Li<索引>也是为了在少见情况下帮助区分AFU,即设备携带多个同样的AFU副本时。
109*bf80eef2SRui Li
110*bf80eef2SRui Li
111*bf80eef2SRui Li
112*bf80eef2SRui LiSysfs类
113*bf80eef2SRui Li=======
114*bf80eef2SRui Li
115*bf80eef2SRui Li添加了代表AFU的ocxl类。查看/sys/class/ocxl。布局在
116*bf80eef2SRui LiDocumentation/ABI/testing/sysfs-class-ocxl 中描述。
117*bf80eef2SRui Li
118*bf80eef2SRui Li
119*bf80eef2SRui Li
120*bf80eef2SRui Li用户API
121*bf80eef2SRui Li=======
122*bf80eef2SRui Li
123*bf80eef2SRui Li打开
124*bf80eef2SRui Li----
125*bf80eef2SRui Li
126*bf80eef2SRui Li基于在配置空间中找到的AFU定义,AFU可能支持在多个内存上下文中工作,这种情况
127*bf80eef2SRui Li下相关的字符设备可以被不同进程多次打开。
128*bf80eef2SRui Li
129*bf80eef2SRui Li
130*bf80eef2SRui Liioctl
131*bf80eef2SRui Li-----
132*bf80eef2SRui Li
133*bf80eef2SRui LiOCXL_IOCTL_ATTACH:
134*bf80eef2SRui Li
135*bf80eef2SRui Li  附加调用进程的内存上下文到AFU,以允许AFU访问其内存。
136*bf80eef2SRui Li
137*bf80eef2SRui LiOCXL_IOCTL_IRQ_ALLOC:
138*bf80eef2SRui Li
139*bf80eef2SRui Li  分配AFU中断,返回标识符。
140*bf80eef2SRui Li
141*bf80eef2SRui LiOCXL_IOCTL_IRQ_FREE:
142*bf80eef2SRui Li
143*bf80eef2SRui Li  释放之前分配的AFU中断。
144*bf80eef2SRui Li
145*bf80eef2SRui LiOCXL_IOCTL_IRQ_SET_FD:
146*bf80eef2SRui Li
147*bf80eef2SRui Li  将一个事件文件描述符和AFU中断关联,因此用户进程可以在AFU发送中断时收到通
148*bf80eef2SRui Li  知。
149*bf80eef2SRui Li
150*bf80eef2SRui LiOCXL_IOCTL_GET_METADATA:
151*bf80eef2SRui Li
152*bf80eef2SRui Li  从卡中获取配置信息,比如内存映射IO区域的大小、AFU版本和当前上下文的进程
153*bf80eef2SRui Li  地址空间ID(PASID)。
154*bf80eef2SRui Li
155*bf80eef2SRui LiOCXL_IOCTL_ENABLE_P9_WAIT:
156*bf80eef2SRui Li
157*bf80eef2SRui Li  允许AFU唤醒执行“等待”的用户空间进程。返回信息给用户空间,允许其配置AFU。
158*bf80eef2SRui Li  注意这只在POWER9上可用。
159*bf80eef2SRui Li
160*bf80eef2SRui LiOCXL_IOCTL_GET_FEATURES:
161*bf80eef2SRui Li
162*bf80eef2SRui Li  报告用户空间可用的影响OpenCAPI的CPU特性。
163*bf80eef2SRui Li
164*bf80eef2SRui Li
165*bf80eef2SRui Limmap
166*bf80eef2SRui Li----
167*bf80eef2SRui Li
168*bf80eef2SRui Li一个进程可以mmap每个进程的MMIO区域来和AFU交互。
169