I’ve got 3 camera streams connected to CSI/E with virtual channel aggregation. One camera stream with 2160p30 while the other two stream with 1080p30.
If I stream only the first camera with the following pipeline: gst-launch-1.0 nvarguscamerasrc sensor-mode=2 sensor-id=0 ! 'video/x-raw(memory:NVMM),width=3840,height=2160,framerate=30/1,format=NV12' ! nvv4l2h265enc maxperf-enable=1 ! h265parse ! rtph265pay config-interval=1 ! udpsink host=192.168.10.55 port=16384
things work pretty stable, and I get a stable frame rate at receiver.
after a while the fan of the device gets active and framerate begins to drop on the receiving host.
What I also noticed is that if only the 2160p30 cam is streamed GPU is not active in jtop. However when both 1080p30 camera streams are streamed additionally GPU gets pretty loaded (peaks > 85% from time to time). I guess this is the reason for the frame drops.
I wonder since I only work with encoding, why does GPU come into play here?
Overall I thought having this kind of setup (1x2160p30, 2x1080p30) should not be to stressfull for the TX2, or am I wrong here with my assumption?
me again.
Not sure if I really have a performance problem, my timestamp analyzing tool may work incorrectly.
Do you have an advice for me on how to measure system performance of the TX2? With which tool I can check the framerate, or how to ensure that no frames getting dropped?
thanks for your support. From camera perspective Iam confident that framerate is achieved, I can see this also by setting silent=0 parameter to nvarguscamerasrc. Your pipeline suggestion unfortunatly doesn’t include nvvl42h265enc processing and all the rtp payload encapsulation and sending overhead on the target.
To include all these things into the benchmark is what Iam looking for, and additionally the jetson should do this for more than one camera in parallel. I want to find out how many streams and with which resolution and framerate I can stream in parallel with my custom cameras connected including encoding and sending the data.
The problem is when I use gstreamer and fpsdisplayink on the receiver side, I have to decode the data as welll for fpsdisplaysink to be shown, which might cause the receiver beeing the bottleneck, so that I end up benchmarking the receiver instead of the TX2. Do you have any tool recommendation I can use on the receiver side checking framerate is maintained without decoding the data first?
Sorry, can you be a little more specific? I mean if I udpsink the data into localhost, how to get information about framerate afterwards? I could imagine to udpsrc them again from localhost and then decode it on the jetson and show fps with fpsdisplaysink, however if I do this, I put alot of extra load onto the jetson don’t I?
And to confirm if framerate meets target while running 3 camera + encoding processes. To ensure hardware encoder is capable of encoding 3 tasks simultaneously.