~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/translations/zh_CN/userspace-api/accelerators/ocxl.rst

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

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

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php