FPGA性能问题探讨(一)Simeone_xu2年前更新70最近遇到一个问题,FPGA的性能不够,业务场景是CPU给FPGA发送报文,FPGA处理完成后返回给CPU,在CPU测看到FPGA的性能比较低,然后对FPGA进行优化,性能稍有提升,但是不尽人意,那究竟是什么问题呢? 想起了多年前的一个案例,整个FPFA的性能低于预期,FPGA内部处理非常的复杂,究竟是哪个模块的设计缺陷导致的性能不满足呢?FPGA的内部架构类似于下图所示,模块之间有相互的耦合,比如请求应答式的接口,也有数据流接口。任务由CPU下发给FPGA,FPGA处理完成后返回给CPU。 对于性能问题的定位,当时的第一招就是谁反压了,或者谁丢包了。先对1-8号链路上的反应进行统计,那么一定可以找到这样的一种情况,就是上级模块没有给本模块反压或者少量反压,但是本级模块对下级模块反压了。比如7号接口没有给B模块反压或者一秒内反压的时间很少,但是B模块通过6号接口给C模块反压的时间较长,那么显然B模块在处理6/7号接口数据的时候性能有问题了。 那究竟如何定位整个FPGA或者某个模块的性能问题?我们先确定一个概念:FPGA系统(模块)的工作时间。所谓工作时间,就是有任务停留在该模块的时间,如下图所示: 左图是一个常见的流水线工作示意图,假定完成了4个任务的处理,总共消耗的时间为t1,也就是模块的工作时间。右边的图也是一个流水线工作示意图,不同的是,任务b和任务c之间没有流水起来,完成4个任务的时间为t2,但是这并不是它的工作时间,因为在任务b和任务c之间,有一个t3时间的空白期,这个时间段系统没有工作,所以实际的工作时间为t2-t3。 另外,我们设定一个性能模型,如下图所示,一个系统在接口上和性能相关的就只有2种接口,数据接口和反压接口,原则上反压后不能再发送数据。那么在接口上,单位时间内的状态就分成如图所示的三种情况,发送数据、反压和空闲。 有了上面两个背景,那如何衡量FPGA系统的最大性能,就可以分成如下几种情况: 一、接口上单位时间有反压无空闲 这种场景,系统入口处数据的发送显然没有性能问题,已经发到了线速,即只要不反压,就能一直发送数据。那是不是性能就没有问题呢?不一定,如果单位时间并不全是工作时间,那么性能问题就在于系统本身了,大概率是反压没有处理好,导致数据进不来,系统的性能没有达到最大值。 二、接口上单位时间有空闲 这种场景又分二种情况,如果单位时间内全部是工作时间,说明FPGA对一个任务的处理时间很长,远大于数据的发送时间。这个时候的性能大概率就是系统的最大性能,加快数据的发送并不一定能提升性能(最好是进一步加快数据发送消除接口上的空闲时间)。第二种情况就是单位时间内系统有空闲,不全是工作时间,那显然就是数据发送的太慢,性能问题在上一级数据发送部分。要加快数据的发送,直到系统在单位时间都是工作状态。 三、接口上单位时间有空闲有反应 这种场景和第二种场景类似,主要还是看单位时间内是否全部是工作时间。 一句话总结,一个系统理想的满性能工作状态就是接口上只有数据发送和反压,没有空闲,且单位时间全部是工作时间。
没有回复内容