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交互。
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.