Intel® Acceleration Stack用户指南: Intel FPGA Programmable Acceleration Card N3000

ID 683040
日期 8/17/2020
Public
文档目录

11.2. SEU的DPDK处理

当出现SEU错误时,在DPDK IFPGA Rawdev驱动程序(支持FPGA管理)中生成一个中断。中断处理程序在文件$RTE_SDK/drivers/raw/ifpga/ifpga_rawdev.c中定义为:
static void
fme_interrupt_handler(void *param)
{
        struct opae_manager *mgr = (struct opae_manager *)param;
        IFPGA_RAWDEV_PMD_INFO("%s interrupt occurred\n", __func__);
        fme_err_handle_error0(mgr);
        fme_err_handle_nonfaterror(mgr);
        fme_err_handle_catfatal_error(mgr);
}

函数fme_err_handle_catfatal_error(mgr)通过rte_panic()功能调用引起恐慌来处理SEU错误。此中断处理程序的实现作为参考代码提供,可以自定义。

当发生SEU事件时,使用以下命令在运行DPDK应用程序时会收到一个恐慌(panic)消息:
$ sudo ./x86_64-native-linuxapp-gcc/app/testpmd -l 0,1,2,3,4,5,6,7 -n 4 \
--vdev 'ifpga_rawdev_cfg0,ifpga=15:00.0,port=0' -- -i --no-numa 
图 25. 恐慌消息(Panic Message)
要从由参考SEU事件中断处理程序引起的SEU恐慌中恢复,请执行以下步骤:
  1. 从vfio驱动程序解除绑定:
    sudo rmmod vfio-pci
  2. 重新绑定到OPAE驱动程序:
    modprobe intel-fpga-pci
    echo 0000:BB:DD.F > /sys/bus/pci/drivers/intel-fpga-pci/bind
  3. 重新配置FPGA:
    1. 解压缩N3000_supplemental_files.zip,此zip文件作为Acceleration Stack Installer的一部分提供:
      $ unzip N3000_supplemental_files.zip 
      $ cd N3000_supplemental_files/
    2. 查找PCIe Root Port:
      $ chmod +x find_RP.sh
      样例输出:
      0000:ae:00.0
      0000:af:00.0
      0000:b0:09.0
      0000:b2:00.0 -> intel-fpga-dev.0
      列表中的第一个条目是PCIe Root端口。最后一个条目是 Intel® FPGA PAC N3000
    3. 记录RP AER值:
      $ sudo setpci -s ae:00.0 ECAP_AER+0x08.L
      00210000
      $ sudo setpci -s ae:00.0 ECAP_AER+0x14.L
      000031c1
      注: AER值可能与上述响应不同。
    4. 禁止AER:
      $ sudo setpci -s <RP BDF> ECAP_AER+0x08.L=0xffffffff
      $ sudo setpci -s <RP BDF> ECAP_AER+0x14.L=0xffffffff
    5. 触发重配置FPGA:
      $ sudo rsu fpga b2:00.0
    6. 使能AER,使用从步骤3b得到的值:
      $ sudo setpci -s <RP BDF> ECAP_AER+0x08.L=0x00210000
      $ sudo setpci -s <RP BDF> ECAP_AER+0x14.L=0x000031c1
  4. 安装vfio-pci驱动程序。
    $ sudo modprobe vfio-pci
  5. 将所有端口绑定到vfio-pci驱动程序,重新启动DPDK应用程序。