High CPU Usage on Orin Nano

Device: Jetson Orin Nano (L4T 36.4.0, JetPack 6.x)
Use case: AWS Kinesis Video Streams WebRTC SDK (C), 6 concurrent RTSP camera sources, each running its own GStreamer pipeline and kvsWebrtcClient process

Pipeline (per stream):

rtspsrc protocols=tcp short-header=true latency=0 location="<rtsp_uri>" !
decodebin !
nvvidconv !
video/x-raw(memory:NVMM),format=I420,width=<w>,height=<h> !
x264enc bitrate=512 speed-preset=ultrafast key-int-max=60 tune=zerolatency qos=true !
video/x-h264,stream-format=byte-stream,alignment=au,profile=baseline ! queue !
appsink sync=1 emit-signals=1 name=appsink-video

Context: We confirmed via gst-inspect-1.0 and the forums that the Orin Nano has no hardware H.264 encoder (NVENC), so x264enc software encoding is expected here. nvv4l2decoder/decodebin is correctly using hardware decode (NVDEC shows active utilization in tegrastats).

tegrastats output (6 streams running, ~50s sample):

CPU [67%@1420,64%@1113,65%@1113,61%@1113,72%@883,71%@883]
CPU [66%@1267,61%@1344,67%@1344,65%@1497,69%@1344,70%@1344]
CPU [68%@1420,67%@1510,67%@1510,64%@1510,70%@1267,72%@1267]
... (consistent pattern across ~50 samples)

Averaged: cores sit at roughly 62-70% each, fairly evenly distributed, with cores 4/5 running consistently 5-8 points hotter than cores 0-3. NVDEC fluctuates 8-86% (bursty, presumably I-frame vs P-frame decode cost). GR3D_FREQ stays at 0% throughout. Temps stable ~53-57°C, no throttling observed.

Question: Is ~65% average CPU utilization across all 6 cores in line with what you’d expect for 6 concurrent 512kbps H.264 software-encoded streams (via x264enc, ultrafast preset) at this resolution/framerate on the Orin Nano? We want to confirm whether this is within normal/expected bounds for this workload before we either (a) accept it as the hardware ceiling, (b) tune further, or (c) plan to move to an Orin NX/AGX for hardware encode. Any guidance on what’s a ‘healthy’ CPU budget to leave free for the rest of the WebRTC client logic (signaling, ICE, etc.) running alongside this would also help.

Happy to share the full tegrastats log or pipeline source if useful.

Hello @parthm!

Based on the title and content of your topic, it looks like it may receive better visibility and feedback in a different category. We took the liberty of moving it for you.

If this was an incorrect assessment, please send me a direct message.

Disclaimer: this moderation suggestion and message were generated with AI assistance.

Hi,
This looks expected since you use software h264 encoder. For the use-case requiring hardware encoder, it would be better to use Orin NX. There is no hardware encoder in Orin Nano.

Hello @parthm ,

This looks expected for Jetson Orin Nano when using x264enc.

Orin Nano does not include NVENC, so H.264 encoding is done in software on the CPU. Even if the decode side is using NVDEC correctly, the encode stage can still consume significant CPU with multiple concurrent streams.

This wiki has useful benchmark/reference for this topic here: NVIDIA Jetson Orin - JetPack 5.0.2 - Performance Tuning with Software Encoders For Jetson Orin Nano

The wiki compares software encoding options on Jetson Orin Nano and includes GStreamer/FFmpeg H.264 encoding performance results, CPU usage, FPS, bitrate, and preset comparisons. It is a good reference for tuning and validating CPU expectations when using software encoders on Orin Nano.

Please feel free to contact us if you have any questions.

Best regards!
Julian Camacho
Embedded SW Engineer at RidgeRun

Contact us: support@ridgerun.com
Developers wiki: https://developer.ridgerun.com/
Website: www.ridgerun.com