显卡基本参数:
Timestamp : Fri Aug 27 10:04:12 2021
Driver Version : 460.32.03 CUDA Version 11.2
Attached GPUs : 8FB Memory
Total : 15109 MiB
BAR1 Memory Usage
Total : 256 MiB
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 64
On-line CPU(s) list: 0-63
Thread(s) per core: 2
Core(s) per socket: 16
Socket(s): 2
NUMA node(s): 2
Vendor ID: GenuineIntel
CPU family: 6
Model: 85
Model name: Intel(R) Xeon(R) Gold 5218 CPU @ 2.30GHz
Stepping: 7
CPU MHz: 1000.014
BogoMIPS: 4600.00
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 1024K
L3 cache: 22528K
NUMA node0 CPU(s): 0-15,32-47
NUMA node1 CPU(s): 16-31,48-63
输入: IPC摄像头 Rtsp
分辨率:2560*1440
码流:0.8M/bs
编码:h264
输出:Rtsp
分辨率:1920*1080
码流:0.4M/bs
编码:h264
操作流程:
拉流->解码->YUV2RGB->RGB2YUV->编码
因为解码后颜色空间是YUV如果想进行下一步图像处理,必须将颜色空间转换为BRG方可进行主流图片业务处理。
首先我们放入200路视频进行测试:
用dstat命令后可以看到,输入在150Mb。
接着查看帧率:
发现帧率非常低,只有11帧上下
继续看GPU情况:
GPU利用率只有一半过一点。
打开一路编解码会话就会占用一定GPU内存,所以编解码的另外一个限制是GPU显存的大小,英伟达官网有一篇论文阐述了这个问题
https://developer.nvidia.com/blog/optimizing-video-memory-usage-with-the-nvdecode-api-and-nvidia-video-codec-sdk/
论文名字:Optimizing Video Memory Usage with the NVDECODE API and NVIDIA Video Codec SDK
上面就是关于显存对于编解码的占用大小表格。
查看CPU情况:
GPU解码能力:
发现解码能力没有完全发挥出来,那么真正的瓶颈在哪里呢,接着往下看,瓶颈在颜色空间转换这里。所以如果你的代码中有颜色空间转换,那么毫无疑问,这里就是性能的瓶颈。
重点敲黑板:
颜色空间转换是性能的瓶颈。
总结:
其实从接受码流来看,8张显卡所能处理的最大码流为150Mb/s,每张卡所能处理的流量为150/8=18.75Mb/s,按照每路0.8Mb/s,那么就是23.5路,也就是23路,保守一点一张显卡能处理20路编解码+颜色空间转换。