张冬:OpenPOWER CAPI为什么这么快?(二)

PMC公司数据中心存储架构师张冬

有了CAPI的FPGA是怎么做的?

首先认识一下这个体系里的三个角色:

AFU(Acceleration Function Unit),主加速逻辑部分就是FPAG的加速芯片。用户能够把自己的加速逻辑和Firmware写进去。

PSL—Power Service Layer,提供接口给AFU用于读写主存和V2P地址翻译(与CPU側使用同一个页表,并包括TLB),同一时候负责Probe
CAPP实现全局cc,并提供Cache。PSL由IBM作为硬核IP提供给FPGA开发人员。

CAPP—Coherent Attached Processor Proxy,相当于FPGA側的ccAgent,可是被放在了CPU側,其维护一个filter文件夹并接受来自其它CPU的Probe。未过滤掉的Probe转发PSL。

操作要点能够简要的概括为下面6点:

  • 针对专用场景、PCIE专用加速卡进行优化;

  • FPGA直接訪问当前进程的所有虚拟地址空间。无需转成PCIE地址。

  • 加速卡上能够使用Cache并通过CAPP的Probe操作自己主动与主存cc;

  • 加速卡与CPU看到相同的地址空间而且cc;

  • 提供API,包含打开设备、传递任务描写叙述信息等。相当于驱动程序;

  • PSL由IBM提供,硬核IP。

    AFU通过opcode及地址控制PSL收发数据。

在此过程中,CAPI致力于把FPGA当成CPU的对等端,但这是一个特殊的CPU,对计算加速很快的,很高效的一个CPU。

优势在于:两边看到了一样的地址空间,FPGA看到的不再是PCIe空间了。所以就省去了映射地址这一环节。再就是FPGA一側能够有Cache,能够缓存主存里的数据,并且Cache是与主存一致的。

如今FPGA可直接訪问主存空间,但它不会訪问全部的物理空间,由于CAPI 1.0每一个时刻仅仅能给一个进程来用。CAPI会为进程会提供一个接口,打开FPGA之后发数据和指令。CAPI
2.0会让FPGA有一个分时复用机制,比方。每10毫秒跳一个线程,可是当前的FPGA不具备这个功能,仅仅能是谁用谁打开。

谁打开了FPGA就看到谁的虚拟空间。有了这样的机制以后就不须要映射了,再就是能够直接訪问内存地址了。还有Cache,基本就融入了全部的CPU了。就是一个对等、对称的关系。

性能能提高多少?

硬件配置是这种:

IBM Power8 Server, S822L

Ubuntu, kernel 3.18.0-14-generic

Nallatech 385 CAPI card

Samsung SM1715 1.6TB NVM ExpressSSD

測试时,ŸPMCproject师用FPGA制作了一个文本搜索引擎,如上图。

測试过程中,Host端主程序从NVMe SSD读入数据,并生成任务描写叙述链表,ŸAFU採用pooling的方式訪问主存获取任务描写叙述链表并运行搜索任务。Snooper用来debug和性能监控。

性能 – P8<->AFU

当队列深度60时的时候,获得一个极限吞吐量,接近6GB/s的带宽,带宽很大。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcG1j/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center">

延时也非常小。仅仅有1.5微秒。平均90%读写在1.5微秒完毕。

CAPI1.0临时做不到的事情

如今CPU的线程看不到AFU上的地址空间(MMIO控制寄存器地址除外)。并且。AFU仅仅能给一个进程使用。

假设未来能够把FPGA直接接入CPU的FSB,是不是会更快?



张冬:OpenPOWER CAPI为什么这么快?(二)的更多相关文章

  1. 20145302张薇《Java程序设计》实验二报告

    20145302张薇<Java程序设计>实验二:Java面向对象程序设计 使用TDD的方式设计实现复数类:Complex 测试代码 import org.junit.Test; publi ...

  2. [LeetCode] 24 Game 二十四点游戏

    You have 4 cards each containing a number from 1 to 9. You need to judge whether they could operated ...

  3. MariaDB/MySQL备份和恢复(二):数据导入、导出

    MariaDB/MySQL备份恢复系列: 备份和恢复(一):mysqldump工具用法详述 备份和恢复(二):导入.导出表数据 备份和恢复(三):xtrabackup用法和原理详述 1.导出.导入数据 ...

  4. Java已五年1—二本物理到前端实习生到Java程序员「回忆贴」

    关键词:郑州 二本 物理专业 先前端实习生 后Java程序员 更多文章收录在码云仓库:https://gitee.com/bingqilinpeishenme/Java-Tutorials 前言 没有 ...

  5. android之二维码扫描的实现

    二维码扫描引擎有 ZBar 和ZXing 一. 使用开源ZXing扫描的缺点 1.原始代码是横屏模式,尽管可以改成竖屏,但是扫描界面的自定义和多屏幕适配不好做 2.有效扫描区域不好控制,可能是我自己技 ...

  6. 【转】Android手机客户端关于二维码扫描的源码--不错

    原文网址:https://github.com/SkillCollege/QrCodeScan QrCodeScan 这是Android手机客户端关于二维码扫描的源码,使用了高效的ZBar解码库,并修 ...

  7. 【PHP】 PHPqrCode二维码类库使用方法

    1.首先去官网下载PHPqrCode库文件,只需要里面的phpqrcode.php文件,下载地址:http://phpqrcode.sourceforge.net 2.二维码生成实例代码: <? ...

  8. Node.js在指定的图片模板上生成二维码图片并附带底部文字说明

    在Node.js中,我们可以通过qr-image包直接在后台生成二维码图片,使用方法很简单: var qr = require('qr-image'); exports.createQRImage = ...

  9. Django之django模型层二多表操作

    一 创建模型 表和表之间的关系 一对一.多对一.多对多 ,用book表和publish表自己来想想关系,想想里面的操作,加外键约束和不加外键约束的区别,一对一的外键约束是在一对多的约束上加上唯一约束. ...

随机推荐

  1. 记事本写hello world_Java

    1 新建记事本,重命名为hello.java 2 打开hello.java,编辑并保存 class Hello { public static void main(String[] args) { S ...

  2. eclipse默认编码设置为utf-8

    需要设置的几处地方为: Window->Preferences->General ->Content Type->Text->JSP 最下面设置为UTF-8 Window ...

  3. ios应用view之间数据传递的方式

    对于不同的viewcontroller之间数据的共享和处理 采用代理的方式,子viewcontroller设计代理协议,并定义协议接口,父viewcontroller实现协议接口,实现子视图控制器退出 ...

  4. protobuf NET使用

    首先,开源项目地址为: protobuf NET的GITHUB地址 下载下来后,打开项目,找到目录:Core/protobuf-net,生成一下,然后就可以在bin里得到protobuf-net.dl ...

  5. bootstrap插件小记

    1.模态框 除了通过data-toggle和data-target来控制模态弹出窗之外,Bootstrap框架针对模态弹出框还提供了其他自定义data-属性,来控制模态弹出窗.比如说:是否有灰色背景m ...

  6. CSS3属性transform详解之(旋转:rotate,缩放:scale,倾斜:skew,移动:translate)(转载)

    在CSS3中,可以利用transform功能来实现文字或图像的旋转.缩放.倾斜.移动这四种类型的变形处理,本文将对此做详细介绍. 一.旋转 rotate 用法:transform: rotate(45 ...

  7. 初探JS-html5移动端发送指定内容短信到指定号码

    原理:利用a标签跳转指定网址: sms://[号码]?body=[内容] //安卓 sms://[号码]&body=[内容] //IOS 首先简单的做两个input,一个用于输入内容,一个用于 ...

  8. Ribbon2: 创建动态的Ribbon库

    Sam Radakovitz曾在Excel团队博客中发表过一篇文章,介绍了如何创建动态的Ribbon库,即如何通过RibbonX和VBA放置动态的图形图像到功能区库中,在该文中,作者创建了两个库:一个 ...

  9. Integer to Roman(JAVA)

    public String intToRoman(int num) { int[] values={1000,900,500,400,100,90,50,40,10,9,5,4,1}; String[ ...

  10. javascript EcmaScript5 新增对象之Object.freeze

    我们都知道在js里对象是很容易改变的 var obj1 ={ a:'111' } obj1.a = '222'; console.log( obj.a ) //output 222 对象的属性发生了变 ...