Hey,
I am running some ROS packages and python code on my JETSON TX2 jetpack 4.3.
When Checking jtop, I see that CPU2 and CPU3 are at 0% performance, even when they are ON, while the other CPUs (1, 4,5,6) are on ~90%.
Can someone explain why is it so? And is there a way to make them be active?
Those two CPU cores use a different microarchitecture (NVIDIA Denver2).
To use them, you can either add isolcpus= to override the isolcpus setting set by NVIDIA to your kernel arguments.
Another option is explicitly using taskset to schedule some processes to those cores. Both options are detailed in the L4T release notes.
Added note for what @never_released mentions: The two Denver cores have different performance metrics, and tend to be disabled until a user wants to dedicate a task to those cores (e.g., via taskset
).
If you look at the current kernel arguments via “cat /proc/cmdline
”, then you’ll see the current isolcpus
lists those processors (they are zero based index, so the first core is CPU0, and 1-2
are the two Denver cores you see), and this disables them from being scheduled by “random” tasks. Thus “taskset
”. Kernel command line parameters usually take the last argument (when there are multiple copies of the same argument) as the one to use. Thus, if you specify isolcpus=
, then the last argument clears the blocking of CPU cores 1-2
. You can add this to to the end of the “/boot/extlinux/extlinux.conf
” “APPEND
” key/value pair (if you have security fuses burned and use entirely partition based specifications, then you’d need to add this via the device tree’s “chosen->bootargs
” parameter, but I discourage using the device tree for this unless it is mandatory).
There is a man page for taskset
here if you want to use that:
https://man7.org/linux/man-pages/man1/taskset.1.html
Here are some related URLs from kernel.org and others which might provide a bit more insight:
https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v1/cpusets.html
https://www.kernel.org/doc/Documentation/kernel-per-CPU-kthreads.txt
https://wiki.linuxfoundation.org/realtime/documentation/howto/tools/cpu-partitioning/taskset
An example of binding an application to CPU2 (the second Denver core) from user space (likely you need sudo
):
taskset 0x2 <_USER_APPLICATION_> &