Search code examples
simics

Runtime frequency scaling on target machine in Simics


I'm working with a scheduling and resource management framework that essentially maps out the most energy efficient execution place and frequency for different types of applications. When attempting to use the framework on my Simics target machine, however, I've noticed that the system file structure seems to be a bit different than what I expected. An essential part of the framework is the ability to dynamically change the frequency of the machine at runtime.

Scaling the CPU frequency would usually be done by editing files in the /sys/devices/system/cpu/cpuX/cpufreq/ directory, but it doesn't seem to be present on Simics target machines. I'm aware that the target machine frequency may be edited in the system configuration files on the host machine, but I can't make heads of how frequency scaling should be done when the system is up and running.

How could I go about solving this problem?


Solution

  • That the file system nodes are missing is most likely due to the target hardware system not having processor frequency/power management functionality exposed to the target software. The QSP does not have that implemented, as it is a slightly simplified model. Supporting it might also need updates to the UEFI, not entirely clear from a quick look just how Linux does cpufreq handling.

    If you boot the QSP with the "client core" script to get a more modern processor, the default Linux will report that it cannot start the cpufreq driver. Due to missing device.

    To change the frequency of a processor, you can use the frequency interface on the processors to change it dynamically. But that is indeed done inside the model, not from target software.