RV1126芯片DVR 系统CPU占用高的问题
问题描述:
使用RV1126做车载DVR,DVR接四路AHD1080P摄像头,业务需求是每路摄像头需要分别编码主码流1080P和子码流D1分辨率的两路码流
方案一:使用RGA来缩放产生D1分辨率的子码流,业务流程如下:
第一个摄像头:
VI(0,0)-1080P ------------------------------>VENC(0,0)-1080P
VI(0,0)-1080P------>RGA(0,0)-D1------->VENC(1,1)-D1
第二个摄像头:
VI(1,1)-1080P ------------------------------>VENC(2,2)-1080P
VI(1,1)-1080P------>RGA(1,1)-D1------->VENC(3,3)-D1
第三个摄像头:
VI(2,2)-1080P ------------------------------>VENC(4,4)-1080P
VI(2,2)-1080P------>RGA(2,2)-D1------->VENC(5,5)-D1
第三个摄像头:
VI(3,3)-1080P ------------------------------>VENC(6,6)-1080P
VI(3,3)-1080P------>RGA(3,3)-D1------->VENC(7,7)-D1
这样下来发现CPU占用率极高,平均值达到40-50%。最初怀疑编码性能不足导致,把主子码流都注释掉,发现CPU占用率并没有明显改善。最后发现性能瓶颈在RGA,在只使用主码流情况下CPU占用率正常,一般在10%以下,而只要一打开RGA,CPU占用率就明显增加,达到40%+。后尝试使用方案二使用VP来缩放。
方案二:使用VP来缩放产生D1分辨率的子码流,业务流程如下:
第一路摄像头:
VI(0,0)-1080P---------------------------------- >VENC(0,0)-1080P
VI(0,0)-1080P--------VP(0,0)-D1------------->VECN(1,1)-D1
第二路摄像头:
VI(1,1)-1080P----------------------------------->VENC(2,2)-1080P
VI(1,1)-1080P--------VP(1,1)-D1------------->VECN(3,3)-D1
第三路摄像头:
VI(2,2)-1080P----------------------------------->VENC(4,4)-1080P
VI(2,2)-1080P--------VP(2,2)-D1------------->VECN(5,5)-D1
第四路摄像头:
VI(3,3)-1080P----------------------------------->VENC(6,6)-1080P
VI(3,3)-1080P--------VP(3,3)-D1------------->VECN(7,7)-D1
发现对比方案一使用RGA CPU占用率高的问题并没有明显改善。
分析方案二的性能瓶颈在VP。如果开启主码流,不使用VP,系统CPU占用率在10%一下:
如下图所示:

但是只要打开VP并开启子码流,系统CPU占用率就飙升到40%左右,如下图所示:

这时,如果把子码流编码关掉,保留VP模块的使用,系统占用率虽有所下降,但是仍然在20%左右,如下图:

这时,只要关闭掉VP模块,系统CPU占用率会明显下降到10%以下,如下图所示:

使用top -H 发现如下:

使用pidstat -t发现如下图:

请问一下,怎么在使用4个1080P摄像头且每个摄像头编码一路1080P主码流和一路D1子码流的情况下,改善CPU占用率?请协助分析并解决该问题。