Hello,
We have an SoC which contains the MALI G78AE GPU. In the SoC, we have a linux image with the needed drivers for MALI and we are gathering metrics from the Performance Monitor Counters available through Streamline application.
The GPU has 4 slices, each slice with 2 shader cores. According to the document "Arm® Immortalis and Mali GPU Virtualization Guide", it is possible to change the partitioning of the GPU dynamically (or on the fly, without needing to rebuild the Linux image) through the utilization of sysfs interface. This means basically that the current configuration can be read using a "cat /sys/path/to/gpu/" or it can be written using a "echo 0x1 > /sys/path/to/gpu/", for instance.
We are interested in controlling the partitioning so that we can be sure we are exercising a single slice of the GPU and check its performance metrics. The document provides a few examples of possible modifications, but the logic to control the partitioning is not further explained. One of the examples is pasted below:
The following example shows the use of the sysfs interface to allocate slices 0, 1, 2, and 3 tothe first partition. In the example, all literal values are hex bitmasks, where each bit representsa slice or access window.
echo "0xF" > /sys/bus/platform/devices/6e0a0000.gpu_resource_group/arbiter/partitions/partition0/active_slices
This example is basic as probably the F means 1111 in binary, which asserts every slice to the first partition defined with the path ".../partitions/partition0/active_slices".
But, for instance, how could I change the partitioning of the system after if I want multiple partitions?
The system currently has only the partition0 directory, should I do a "mkdir partition1" in partitions directory and then create a new "active_slices" file? Will that work? I am not very familiarized with the sysfs interface to have a proper understanding on the topic.
Can anyone point me towards the documentation which explains this definition?
Any reply will be appreciated,
thanks, Luca.