7.3.12 多媒体性能调试
概述
Camera是图像数据的主要外部来源,VIO部分软件是一个相对不透明的内部软件,主要面向提供内部应用软件提供相关的图像以及信息,XJ3芯片内部图像处理IP信息大致如下:
输入方式 | IP | 输出方式 |
---|---|---|
Online | MIPI | Online |
Online/Offline | SIF | Online/Offline |
Online | ISP | Online/Offline |
Online | LDC | Online |
Offline | GDC | Offline |
Online/Offline | IPU | Online/Offline |
Online/Offline | PYM | Offline |
注:Online 指硬件通过片内RAM交换数据,Offline指硬件通过DDR交换数据。
本章节主要描述X3芯片关于图像数据处理通路等模块在实际使用的常用场景中,根据DDR带宽和延迟进行各处理模块DDR优先级和其它一些相关参数的调整。
在DDR瞬时带宽不足时会造成视频丢帧,在帧率和丢帧这两个问题之间,可以根据本章节的描述,选择一个合适的配置值来平衡。
DDR Master的QoS
XJ3 各模块通过AXI接口访问DDR,XJ3有8个AXI接口,分别为AXI_0 ~ AXI_7,XJ3的模块使用AXI接口关系如下表:
端口号 | AXI_0 | AXI_1 | AXI_2 | AXI_3 | AXI_4 | AXI_5 | AXI_6 | AXI_7 |
---|---|---|---|---|---|---|---|---|
模块名 | CPU/R5 | NOC | CNN0 | CNN1 | VIO0 | VPU/JPU | VIO1 | PERI |
AXI_4和AXI_6可配置,可以通过寄存器配置VIO子模块到AXI_4或者AXI_6,AXI_6有更高的优先级。
XJ3 VIO包括如下子模块:SIF_W、ISP0_M0、ISP0_M2、GDC0、DIS、SIF_R、IPU0、PYM、IAR。
AXI QOS控制
AXI Qos优先级范围0~15,值越大优先级越高。XJ3系统启动后读写QoS默认配置为0x2021100。
每个Port的优先级值通过Perf Monitor的DDR_PORT_READ/WRITE_QOS_CTRL寄存器设置,Perf Montior再通过硬件的方式设置到DDR控制器中。软件无需设置DDR控制器。
DDR QoS的值在DDR_Monitor驱动中通过Sysfs的属性文件的方式设置和查询。
可以通过all属性文件一次性设置,最低的4bit对应P0_CPU,最高4bit对应P7_PERI。
也可以通过cpu、bifdma、bpu0、bpu1、vio0、vpu、vio1、peri单独设置和查询各个端口的优先级,如下:
QoS sysfs接口
#查询读QoS:
cat /sys/bus/platform/drivers/ddr_monitor/read_qos_ctrl/all
CPU port is not allowed to be configured in runtime.
You can run chmod +w as root for debugging purpose.
****************************************************
04032221:
P0_CPU: 1
P1_BIFDMA: 2
P2_CNN0: 2
P3_CNN1: 2
P4_VIO0: 3
P5_VPU: 0
P6_VIO1: 4
P7_PERI: 0
cat /sys/bus/platform/drivers/ddr_monitor/write_qos_ctrl/all
****************************************************
CPU port is not allowed to be configured in runtime.
You can run chmod +w as root for debugging purpose.
****************************************************
04032211:
P0_CPU: 1
P1_BIFDMA: 1
P2_CNN0: 2
P3_CNN1: 2
P4_VIO0: 3
P5_VPU: 0
P6_VIO1: 4
P7_PERI: 0
#设置bifdma读QoS为2:
echo 2 > /sys/bus/platform/drivers/ddr_monitor/read_qos_ctrl/bifdma
#设置bpu0读QoS为1:
echo 1 > /sys/bus/platform/drivers/ddr_monitor/read_qos_ctrl/bpu0
#设置bpu1读QoS为1:
echo 1 > /sys/bus/platform/drivers/ddr_monitor/read_qos_ctrl/bpu1
#设置vio0读QoS为2:
echo 2 > /sys/bus/platform/drivers/ddr_monitor/read_qos_ctrl/vio0
#设置vpu读QoS为0:
echo 0 > /sys/bus/platform/drivers/ddr_monitor/read_qos_ctrl/vpu
#设置vio1读QoS为3:
echo 3 > /sys/bus/platform/drivers/ddr_monitor/read_qos_ctrl/vio1
#设置peri读QoS为0:
echo 0 > /sys/bus/platform/drivers/ddr_monitor/read_qos_ctrl/peri
#设置bifdma写QoS为2:
echo 2 > /sys/bus/platform/drivers/ddr_monitor/write_qos_ctrl/bifdma
#设置bpu0写QoS为1:
echo 1 > /sys/bus/platform/drivers/ddr_monitor/write_qos_ctrl/bpu0
#设置bpu1写QoS为1:
echo 1 > /sys/bus/platform/drivers/ddr_monitor/write_qos_ctrl/bpu1
#设置vio0写QoS为2:
echo 2 > /sys/bus/platform/drivers/ddr_monitor/write_qos_ctrl/vio0
#设置vpu写QoS为0:
echo 0 > /sys/bus/platform/drivers/ddr_monitor/write_qos_ctrl/vpu
#设置vio1写QoS为3:
echo 3 > /sys/bus/platform/drivers/ddr_monitor/write_qos_ctrl/vio1
#设置peri写QoS为0:
echo 0 > /sys/bus/platform/drivers/ddr_monitor/write_qos_ctrl/peri