I see Orin have memory controller, so if it is possible to get memory bandwidth of GPU, CPU, VIC, DLA or other processor cores?
BTW, EMC_FREQ is memory controller frequency, how can it map to memory bandwidth? For example, EMC_FREQ is “10%@2133”, can I think totally memory bandwidth is 204*0.1=20.4 GB/s?
To answer your question
EMC_FREQ is memory controller frequency, how can it map to memory bandwidth?"
It depends on the platforms. Different platforms have different number of memory channels.
On Concord, there are 16 memory channel, and each channel is 16-bit width.
Considering EMC is running at 2133Mhz, the total capacity of memory bandwidth equals to:
EMC_FREQ * N_MEM_CHANNEL * CHANNEL_WIDTH * DDR / BITS_PER_BYTE
2133 * 16 * 16 * 2 / 8 = 136512 MBps
Since the utilization is 10%, the consumed memory bandwidth become 13651.2 MBps.
For your question:
Orin have memory controller, so if it is possible to get memory bandwidth of GPU, CPU, VIC, DLA or other processor cores?
You can refer to “/sys/kernel/debug/interconnect/interconnect_summary” to check the SW requested memory bandwidth for each device. (NOTE: those values do not mean the real consumed memory bandwidth of the devices)
Thanks for your reply.
But what do you mean of “those values do not mean the real consumed memory bandwidth of the devices”? It is not counter with hardware?
Anyway I hope to get bindwidth every seconds also include read and write, so it can show as a line chart of every core. So I think interconnect_summary is not satisfy my requirement.
I found tegra234-mc-sid.c from l4t kernel source show some registers, which export in debugfs.
Would you please tell me if those registers is counters of every cores’ w/r byte?
Would you please give me some suggestions?
Sorry to tell don’t support of query per device data bandwidth usage.
But would you please tell me what “those values do not mean the real consumed memory bandwidth of the devices” mean?
The device driver will send memory bandwidth requirement to BPMP through Linux ICC framework.
For example, if the driver send the request with peak_bw=136512000 KBs, BPMP will scale the EMC frequency to guarantee the requested memory bandwidth the system can provide. Therefore, 2133MHz is set for the EMC frequency (2133000 * 16 * 16 * 2 / 8 = 136512 KBs).
Even though the driver send the request with specific bandwidth value, the underlying device might not consume that much bandwidth at that point. Mostly, drivers determine the bandwidth value based on various factors given the types of devices. For PCIe devices, number of link lanes and GenX are considered. For VIC, the running frequency of VIC, and the physical AXI bus width are considered.