Modules ======= Modules add additional functionality to the core :class:`Target` interface. Usually, it is support for specific subsystems on the target. Modules are instantiated as attributes of the :class:`Target` instance. hotplug ------- Kernel ``hotplug`` subsystem allows offlining ("removing") cores from the system, and onlining them back int. The ``devlib`` module exposes a simple interface to this subsystem .. code:: python from devlib import LocalLinuxTarget target = LocalLinuxTarget() # offline cpus 2 and 3, "removing" them from the system target.hotplug.offline(2, 3) # bring CPU 2 back in target.hotplug.online(2) # Make sure all cpus are online target.hotplug.online_all() cpufreq ------- ``cpufreq`` is the kernel subsystem for managing DVFS (Dynamic Voltage and Frequency Scaling). It allows controlling frequency ranges and switching policies (governors). The ``devlib`` module exposes the following interface .. note:: On ARM big.LITTLE systems, all cores on a cluster (usually all cores of the same type) are in the same frequency domain, so setting ``cpufreq`` state on one core on a cluter will affect all cores on that cluster. Because of this, some devices only expose cpufreq sysfs interface (which is what is used by the ``devlib`` module) on the first cpu in a cluster. So to keep your scripts proable, always use the fist (online) CPU in a cluster to set ``cpufreq`` state. .. method:: target.cpufreq.list_governors(cpu) List cpufreq governors available for the specified cpu. Returns a list of strings. :param cpu: The cpu; could be a numeric or the corresponding string (e.g. ``1`` or ``"cpu1"``). .. method:: target.cpufreq.list_governor_tunables(cpu) List the tunables for the specified cpu's current governor. :param cpu: The cpu; could be a numeric or the corresponding string (e.g. ``1`` or ``"cpu1"``). .. method:: target.cpufreq.get_governor(cpu) Returns the name of the currently set governor for the specified cpu. :param cpu: The cpu; could be a numeric or the corresponding string (e.g. ``1`` or ``"cpu1"``). .. method:: target.cpufreq.set_governor(cpu, governor, **kwargs) Sets the governor for the specified cpu. :param cpu: The cpu; could be a numeric or the corresponding string (e.g. ``1`` or ``"cpu1"``). :param governor: The name of the governor. This must be one of the governors supported by the CPU (as retrunted by ``list_governors()``. Keyword arguments may be used to specify governor tunable values. .. method:: target.cpufreq.get_governor_tunables(cpu) Return a dict with the values of the specfied CPU's current governor. :param cpu: The cpu; could be a numeric or the corresponding string (e.g. ``1`` or ``"cpu1"``). .. method:: target.cpufreq.set_governor_tunables(cpu, **kwargs) Set the tunables for the current governor on the specified CPU. :param cpu: The cpu; could be a numeric or the corresponding string (e.g. ``1`` or ``"cpu1"``). Keyword arguments should be used to specify tunable values. .. method:: target.cpufreq.list_frequencie(cpu) List DVFS frequencies supported by the specified CPU. Returns a list of ints. :param cpu: The cpu; could be a numeric or the corresponding string (e.g. ``1`` or ``"cpu1"``). .. method:: target.cpufreq.get_min_frequency(cpu) target.cpufreq.get_max_frequency(cpu) target.cpufreq.set_min_frequency(cpu, frequency[, exact=True]) target.cpufreq.set_max_frequency(cpu, frequency[, exact=True]) Get and set min and max frequencies on the specfied CPU. "set" functions are avialable with all governors other than ``userspace``. :param cpu: The cpu; could be a numeric or the corresponding string (e.g. ``1`` or ``"cpu1"``). :param frequency: Frequency to set. .. method:: target.cpufreq.get_frequency(cpu) target.cpufreq.set_frequency(cpu, frequency[, exact=True]) Get and set current frequency on the specified CPU. ``set_frequency`` is only available if the current governor is ``userspace``. :param cpu: The cpu; could be a numeric or the corresponding string (e.g. ``1`` or ``"cpu1"``). :param frequency: Frequency to set. cpuidle ------- ``cpufreq`` is the kernel subsystem for managing CPU low power (idle) states. .. method:: taget.cpuidle.get_driver() Return the name current cpuidle driver. .. method:: taget.cpuidle.get_governor() Return the name current cpuidle governor (policy). .. method:: target.cpuidle.get_states([cpu=0]) Return idle states (optionally, for the specified CPU). Returns a list of :class:`CpuidleState` instances. .. method:: target.cpuidle.get_state(state[, cpu=0]) Return :class:`CpuidleState` instance (optionally, for the specified CPU) representing the specified idle state. ``state`` can be either an integer index of the state or a string with the states ``name`` or ``desc``. .. method:: target.cpuidle.enable(state[, cpu=0]) target.cpuidle.disable(state[, cpu=0]) target.cpuidle.enable_all([cpu=0]) target.cpuidle.disable_all([cpu=0]) Enable or disable the specified or all states (optionally on the specified CPU. You can also call ``enable()`` or ``disable()`` on :class:`CpuidleState` objects returned by get_state(s). cgroups ------- TODO hwmon ----- TODO API --- TODO