def _from_target( cls, target: Target, *, res_dir: ArtifactPath = None, collector=None, ) -> 'UtilTrackingBase': plat_info = target.plat_info rtapp_profile = cls.get_rtapp_profile(plat_info) # After a bit of experimenting, it turns out that on some platforms # misprediction of the idle time (which leads to a shallow idle state, # a wakeup and another idle nap) can mess up the duty cycle of the # rt-app task we're running. In our case, a 50% duty cycle, 16ms period # task would always be active for 8ms, but it would sometimes sleep for # only 5 or 6 ms. # This is fine to do this here, as we only care about the proper # behaviour of the signal on running/not-running tasks. with target.disable_idle_states(): with target.cpufreq.use_governor('performance'): cls.run_rtapp(target, res_dir, rtapp_profile, collector=collector) return cls(res_dir, plat_info)
def _from_target(cls, target: Target, *, res_dir: ArtifactPath = None, collector=None) -> 'EASBehaviour': """ :meta public: Factory method to create a bundle using a live target This will execute the rt-app workload described in :meth:`lisa.tests.base.RTATestBundle.get_rtapp_profile` """ plat_info = target.plat_info rtapp_profile = cls.get_rtapp_profile(plat_info) # EAS doesn't make a lot of sense without schedutil, # so make sure this is what's being used with target.disable_idle_states(): with target.cpufreq.use_governor("schedutil"): cls.run_rtapp(target, res_dir, rtapp_profile, collector=collector) return cls(res_dir, plat_info)
def _from_target(cls, target: Target, *, res_dir: ArtifactPath = None, ftrace_coll: FtraceCollector = None, cpu=None, nr_steps=1) -> 'LargeStepUp': plat_info = target.plat_info # Use a big CPU by default to allow maximum range of utilization cpu = cpu if cpu is not None else plat_info["capacity-classes"][-1][0] rtapp_profile = cls.get_rtapp_profile(plat_info, cpu=cpu, nr_steps=nr_steps) # Ensure accurate duty cycle and idle state misprediction on some # boards. This helps having predictable execution. with target.disable_idle_states(): with target.cpufreq.use_governor("schedutil"): cls.run_rtapp(target, res_dir, rtapp_profile, ftrace_coll=ftrace_coll) return cls(res_dir, plat_info, cpu, nr_steps)