CC: [email protected] BCC: [email protected] In-Reply-To: <[email protected]> References: <[email protected]> TO: Vincent Donnefort <[email protected]>
Hi Vincent, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on tip/sched/core] [also build test WARNING on rafael-pm/linux-next rafael-pm/thermal v5.18-rc2 next-20220414] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/intel-lab-lkp/linux/commits/Vincent-Donnefort/feec-energy-margin-removal/20220412-214441 base: https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git 089c02ae2771a14af2928c59c56abfb9b885a8d7 :::::: branch date: 3 days ago :::::: commit date: 3 days ago config: i386-randconfig-m021 (https://download.01.org/0day-ci/archive/20220415/[email protected]/config) compiler: gcc-11 (Debian 11.2.0-19) 11.2.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> Reported-by: Dan Carpenter <[email protected]> smatch warnings: kernel/sched/fair.c:6975 find_energy_efficient_cpu() error: uninitialized symbol 'best_energy_cpu'. vim +/best_energy_cpu +6975 kernel/sched/fair.c 390031e4c309c9 Quentin Perret 2018-12-03 6814 732cd75b8c920d Quentin Perret 2018-12-03 6815 /* 732cd75b8c920d Quentin Perret 2018-12-03 6816 * find_energy_efficient_cpu(): Find most energy-efficient target CPU for the 732cd75b8c920d Quentin Perret 2018-12-03 6817 * waking task. find_energy_efficient_cpu() looks for the CPU with maximum 732cd75b8c920d Quentin Perret 2018-12-03 6818 * spare capacity in each performance domain and uses it as a potential 732cd75b8c920d Quentin Perret 2018-12-03 6819 * candidate to execute the task. Then, it uses the Energy Model to figure 732cd75b8c920d Quentin Perret 2018-12-03 6820 * out which of the CPU candidates is the most energy-efficient. 732cd75b8c920d Quentin Perret 2018-12-03 6821 * 732cd75b8c920d Quentin Perret 2018-12-03 6822 * The rationale for this heuristic is as follows. In a performance domain, 732cd75b8c920d Quentin Perret 2018-12-03 6823 * all the most energy efficient CPU candidates (according to the Energy 732cd75b8c920d Quentin Perret 2018-12-03 6824 * Model) are those for which we'll request a low frequency. When there are 732cd75b8c920d Quentin Perret 2018-12-03 6825 * several CPUs for which the frequency request will be the same, we don't 732cd75b8c920d Quentin Perret 2018-12-03 6826 * have enough data to break the tie between them, because the Energy Model 732cd75b8c920d Quentin Perret 2018-12-03 6827 * only includes active power costs. With this model, if we assume that 732cd75b8c920d Quentin Perret 2018-12-03 6828 * frequency requests follow utilization (e.g. using schedutil), the CPU with 732cd75b8c920d Quentin Perret 2018-12-03 6829 * the maximum spare capacity in a performance domain is guaranteed to be among 732cd75b8c920d Quentin Perret 2018-12-03 6830 * the best candidates of the performance domain. 732cd75b8c920d Quentin Perret 2018-12-03 6831 * 732cd75b8c920d Quentin Perret 2018-12-03 6832 * In practice, it could be preferable from an energy standpoint to pack 732cd75b8c920d Quentin Perret 2018-12-03 6833 * small tasks on a CPU in order to let other CPUs go in deeper idle states, 732cd75b8c920d Quentin Perret 2018-12-03 6834 * but that could also hurt our chances to go cluster idle, and we have no 732cd75b8c920d Quentin Perret 2018-12-03 6835 * ways to tell with the current Energy Model if this is actually a good 732cd75b8c920d Quentin Perret 2018-12-03 6836 * idea or not. So, find_energy_efficient_cpu() basically favors 732cd75b8c920d Quentin Perret 2018-12-03 6837 * cluster-packing, and spreading inside a cluster. That should at least be 732cd75b8c920d Quentin Perret 2018-12-03 6838 * a good thing for latency, and this is consistent with the idea that most 732cd75b8c920d Quentin Perret 2018-12-03 6839 * of the energy savings of EAS come from the asymmetry of the system, and 732cd75b8c920d Quentin Perret 2018-12-03 6840 * not so much from breaking the tie between identical CPUs. That's also the 732cd75b8c920d Quentin Perret 2018-12-03 6841 * reason why EAS is enabled in the topology code only for systems where 732cd75b8c920d Quentin Perret 2018-12-03 6842 * SD_ASYM_CPUCAPACITY is set. 732cd75b8c920d Quentin Perret 2018-12-03 6843 * 732cd75b8c920d Quentin Perret 2018-12-03 6844 * NOTE: Forkees are not accepted in the energy-aware wake-up path because 732cd75b8c920d Quentin Perret 2018-12-03 6845 * they don't have any useful utilization data yet and it's not possible to 732cd75b8c920d Quentin Perret 2018-12-03 6846 * forecast their impact on energy consumption. Consequently, they will be 732cd75b8c920d Quentin Perret 2018-12-03 6847 * placed by find_idlest_cpu() on the least loaded CPU, which might turn out 732cd75b8c920d Quentin Perret 2018-12-03 6848 * to be energy-inefficient in some use-cases. The alternative would be to 732cd75b8c920d Quentin Perret 2018-12-03 6849 * bias new tasks towards specific types of CPUs first, or to try to infer 732cd75b8c920d Quentin Perret 2018-12-03 6850 * their util_avg from the parent task, but those heuristics could hurt 732cd75b8c920d Quentin Perret 2018-12-03 6851 * other use-cases too. So, until someone finds a better way to solve this, 732cd75b8c920d Quentin Perret 2018-12-03 6852 * let's keep things simple by re-using the existing slow path. 732cd75b8c920d Quentin Perret 2018-12-03 6853 */ 732cd75b8c920d Quentin Perret 2018-12-03 6854 static int find_energy_efficient_cpu(struct task_struct *p, int prev_cpu) 732cd75b8c920d Quentin Perret 2018-12-03 6855 { 04409022d37d2c Dietmar Eggemann 2022-04-12 6856 struct cpumask *cpus = this_cpu_cpumask_var_ptr(select_rq_mask); eb92692b2544d3 Quentin Perret 2019-09-12 6857 unsigned long prev_delta = ULONG_MAX, best_delta = ULONG_MAX; ce557de247bd64 Vincent Donnefort 2022-04-12 6858 struct root_domain *rd = this_rq()->rd; 5311f1261af84b Vincent Donnefort 2022-04-12 6859 int cpu, best_energy_cpu, target = -1; 732cd75b8c920d Quentin Perret 2018-12-03 6860 struct sched_domain *sd; eb92692b2544d3 Quentin Perret 2019-09-12 6861 struct perf_domain *pd; ce557de247bd64 Vincent Donnefort 2022-04-12 6862 struct energy_env eenv; 732cd75b8c920d Quentin Perret 2018-12-03 6863 732cd75b8c920d Quentin Perret 2018-12-03 6864 rcu_read_lock(); 732cd75b8c920d Quentin Perret 2018-12-03 6865 pd = rcu_dereference(rd->pd); 732cd75b8c920d Quentin Perret 2018-12-03 6866 if (!pd || READ_ONCE(rd->overutilized)) 619e090c8e409e Pierre Gondois 2021-05-04 6867 goto unlock; 732cd75b8c920d Quentin Perret 2018-12-03 6868 732cd75b8c920d Quentin Perret 2018-12-03 6869 /* 732cd75b8c920d Quentin Perret 2018-12-03 6870 * Energy-aware wake-up happens on the lowest sched_domain starting 732cd75b8c920d Quentin Perret 2018-12-03 6871 * from sd_asym_cpucapacity spanning over this_cpu and prev_cpu. 732cd75b8c920d Quentin Perret 2018-12-03 6872 */ 732cd75b8c920d Quentin Perret 2018-12-03 6873 sd = rcu_dereference(*this_cpu_ptr(&sd_asym_cpucapacity)); 732cd75b8c920d Quentin Perret 2018-12-03 6874 while (sd && !cpumask_test_cpu(prev_cpu, sched_domain_span(sd))) 732cd75b8c920d Quentin Perret 2018-12-03 6875 sd = sd->parent; 732cd75b8c920d Quentin Perret 2018-12-03 6876 if (!sd) 619e090c8e409e Pierre Gondois 2021-05-04 6877 goto unlock; 619e090c8e409e Pierre Gondois 2021-05-04 6878 619e090c8e409e Pierre Gondois 2021-05-04 6879 target = prev_cpu; 732cd75b8c920d Quentin Perret 2018-12-03 6880 732cd75b8c920d Quentin Perret 2018-12-03 6881 sync_entity_load_avg(&p->se); 732cd75b8c920d Quentin Perret 2018-12-03 6882 if (!task_util_est(p)) 732cd75b8c920d Quentin Perret 2018-12-03 6883 goto unlock; 732cd75b8c920d Quentin Perret 2018-12-03 6884 ce557de247bd64 Vincent Donnefort 2022-04-12 6885 eenv_task_busy_time(&eenv, p, prev_cpu); ce557de247bd64 Vincent Donnefort 2022-04-12 6886 732cd75b8c920d Quentin Perret 2018-12-03 6887 for (; pd; pd = pd->next) { ce557de247bd64 Vincent Donnefort 2022-04-12 6888 unsigned long cpu_cap, cpu_thermal_cap, util; ce557de247bd64 Vincent Donnefort 2022-04-12 6889 unsigned long cur_delta, max_spare_cap = 0; 8d4c97c105ca07 Pierre Gondois 2021-05-04 6890 bool compute_prev_delta = false; 732cd75b8c920d Quentin Perret 2018-12-03 6891 int max_spare_cap_cpu = -1; 5311f1261af84b Vincent Donnefort 2022-04-12 6892 unsigned long base_energy; 732cd75b8c920d Quentin Perret 2018-12-03 6893 04409022d37d2c Dietmar Eggemann 2022-04-12 6894 cpumask_and(cpus, perf_domain_span(pd), cpu_online_mask); 04409022d37d2c Dietmar Eggemann 2022-04-12 6895 ce557de247bd64 Vincent Donnefort 2022-04-12 6896 /* Account thermal pressure for the energy estimation */ ce557de247bd64 Vincent Donnefort 2022-04-12 6897 cpu = cpumask_first(cpus); ce557de247bd64 Vincent Donnefort 2022-04-12 6898 cpu_thermal_cap = arch_scale_cpu_capacity(cpu); ce557de247bd64 Vincent Donnefort 2022-04-12 6899 cpu_thermal_cap -= arch_scale_thermal_pressure(cpu); ce557de247bd64 Vincent Donnefort 2022-04-12 6900 ce557de247bd64 Vincent Donnefort 2022-04-12 6901 eenv.cpu_cap = cpu_thermal_cap; ce557de247bd64 Vincent Donnefort 2022-04-12 6902 eenv.pd_cap = 0; ce557de247bd64 Vincent Donnefort 2022-04-12 6903 ce557de247bd64 Vincent Donnefort 2022-04-12 6904 for_each_cpu(cpu, cpus) { ce557de247bd64 Vincent Donnefort 2022-04-12 6905 eenv.pd_cap += cpu_thermal_cap; ce557de247bd64 Vincent Donnefort 2022-04-12 6906 ce557de247bd64 Vincent Donnefort 2022-04-12 6907 if (!cpumask_test_cpu(cpu, sched_domain_span(sd))) ce557de247bd64 Vincent Donnefort 2022-04-12 6908 continue; ce557de247bd64 Vincent Donnefort 2022-04-12 6909 3bd3706251ee8a Sebastian Andrzej Siewior 2019-04-23 6910 if (!cpumask_test_cpu(cpu, p->cpus_ptr)) 732cd75b8c920d Quentin Perret 2018-12-03 6911 continue; 732cd75b8c920d Quentin Perret 2018-12-03 6912 732cd75b8c920d Quentin Perret 2018-12-03 6913 util = cpu_util_next(cpu, p, cpu); 732cd75b8c920d Quentin Perret 2018-12-03 6914 cpu_cap = capacity_of(cpu); 1d42509e475cdc Valentin Schneider 2019-12-11 6915 1d42509e475cdc Valentin Schneider 2019-12-11 6916 /* 1d42509e475cdc Valentin Schneider 2019-12-11 6917 * Skip CPUs that cannot satisfy the capacity request. 1d42509e475cdc Valentin Schneider 2019-12-11 6918 * IOW, placing the task there would make the CPU 1d42509e475cdc Valentin Schneider 2019-12-11 6919 * overutilized. Take uclamp into account to see how 1d42509e475cdc Valentin Schneider 2019-12-11 6920 * much capacity we can get out of the CPU; this is a5418be9dffe70 Viresh Kumar 2020-12-08 6921 * aligned with sched_cpu_util(). 1d42509e475cdc Valentin Schneider 2019-12-11 6922 */ 1d42509e475cdc Valentin Schneider 2019-12-11 6923 util = uclamp_rq_util_with(cpu_rq(cpu), util, p); 60e17f5cef838e Viresh Kumar 2019-06-04 6924 if (!fits_capacity(util, cpu_cap)) 732cd75b8c920d Quentin Perret 2018-12-03 6925 continue; 732cd75b8c920d Quentin Perret 2018-12-03 6926 ce557de247bd64 Vincent Donnefort 2022-04-12 6927 lsub_positive(&cpu_cap, util); ce557de247bd64 Vincent Donnefort 2022-04-12 6928 732cd75b8c920d Quentin Perret 2018-12-03 6929 if (cpu == prev_cpu) { 8d4c97c105ca07 Pierre Gondois 2021-05-04 6930 /* Always use prev_cpu as a candidate. */ 8d4c97c105ca07 Pierre Gondois 2021-05-04 6931 compute_prev_delta = true; ce557de247bd64 Vincent Donnefort 2022-04-12 6932 } else if (cpu_cap > max_spare_cap) { 732cd75b8c920d Quentin Perret 2018-12-03 6933 /* 8d4c97c105ca07 Pierre Gondois 2021-05-04 6934 * Find the CPU with the maximum spare capacity 8d4c97c105ca07 Pierre Gondois 2021-05-04 6935 * in the performance domain. 732cd75b8c920d Quentin Perret 2018-12-03 6936 */ ce557de247bd64 Vincent Donnefort 2022-04-12 6937 max_spare_cap = cpu_cap; 732cd75b8c920d Quentin Perret 2018-12-03 6938 max_spare_cap_cpu = cpu; 732cd75b8c920d Quentin Perret 2018-12-03 6939 } 732cd75b8c920d Quentin Perret 2018-12-03 6940 } 732cd75b8c920d Quentin Perret 2018-12-03 6941 8d4c97c105ca07 Pierre Gondois 2021-05-04 6942 if (max_spare_cap_cpu < 0 && !compute_prev_delta) 8d4c97c105ca07 Pierre Gondois 2021-05-04 6943 continue; 8d4c97c105ca07 Pierre Gondois 2021-05-04 6944 8d4c97c105ca07 Pierre Gondois 2021-05-04 6945 /* Compute the 'base' energy of the pd, without @p */ ce557de247bd64 Vincent Donnefort 2022-04-12 6946 eenv_pd_busy_time(&eenv, cpus, p); 5311f1261af84b Vincent Donnefort 2022-04-12 6947 base_energy = compute_energy(&eenv, pd, cpus, p, -1); 8d4c97c105ca07 Pierre Gondois 2021-05-04 6948 8d4c97c105ca07 Pierre Gondois 2021-05-04 6949 /* Evaluate the energy impact of using prev_cpu. */ 8d4c97c105ca07 Pierre Gondois 2021-05-04 6950 if (compute_prev_delta) { ce557de247bd64 Vincent Donnefort 2022-04-12 6951 prev_delta = compute_energy(&eenv, pd, cpus, p, ce557de247bd64 Vincent Donnefort 2022-04-12 6952 prev_cpu); 5311f1261af84b Vincent Donnefort 2022-04-12 6953 if (prev_delta < base_energy) 619e090c8e409e Pierre Gondois 2021-05-04 6954 goto unlock; 5311f1261af84b Vincent Donnefort 2022-04-12 6955 prev_delta -= base_energy; 8d4c97c105ca07 Pierre Gondois 2021-05-04 6956 best_delta = min(best_delta, prev_delta); 8d4c97c105ca07 Pierre Gondois 2021-05-04 6957 } 8d4c97c105ca07 Pierre Gondois 2021-05-04 6958 8d4c97c105ca07 Pierre Gondois 2021-05-04 6959 /* Evaluate the energy impact of using max_spare_cap_cpu. */ 8d4c97c105ca07 Pierre Gondois 2021-05-04 6960 if (max_spare_cap_cpu >= 0) { ce557de247bd64 Vincent Donnefort 2022-04-12 6961 cur_delta = compute_energy(&eenv, pd, cpus, p, ce557de247bd64 Vincent Donnefort 2022-04-12 6962 max_spare_cap_cpu); 5311f1261af84b Vincent Donnefort 2022-04-12 6963 if (cur_delta < base_energy) 619e090c8e409e Pierre Gondois 2021-05-04 6964 goto unlock; 5311f1261af84b Vincent Donnefort 2022-04-12 6965 cur_delta -= base_energy; eb92692b2544d3 Quentin Perret 2019-09-12 6966 if (cur_delta < best_delta) { eb92692b2544d3 Quentin Perret 2019-09-12 6967 best_delta = cur_delta; 732cd75b8c920d Quentin Perret 2018-12-03 6968 best_energy_cpu = max_spare_cap_cpu; 732cd75b8c920d Quentin Perret 2018-12-03 6969 } 732cd75b8c920d Quentin Perret 2018-12-03 6970 } 732cd75b8c920d Quentin Perret 2018-12-03 6971 } 732cd75b8c920d Quentin Perret 2018-12-03 6972 rcu_read_unlock(); 732cd75b8c920d Quentin Perret 2018-12-03 6973 5311f1261af84b Vincent Donnefort 2022-04-12 6974 if (best_delta < prev_delta) 619e090c8e409e Pierre Gondois 2021-05-04 @6975 target = best_energy_cpu; 732cd75b8c920d Quentin Perret 2018-12-03 6976 619e090c8e409e Pierre Gondois 2021-05-04 6977 return target; 732cd75b8c920d Quentin Perret 2018-12-03 6978 619e090c8e409e Pierre Gondois 2021-05-04 6979 unlock: 732cd75b8c920d Quentin Perret 2018-12-03 6980 rcu_read_unlock(); 732cd75b8c920d Quentin Perret 2018-12-03 6981 619e090c8e409e Pierre Gondois 2021-05-04 6982 return target; 732cd75b8c920d Quentin Perret 2018-12-03 6983 } 732cd75b8c920d Quentin Perret 2018-12-03 6984 -- 0-DAY CI Kernel Test Service https://01.org/lkp _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
