A better approach for the out-of-kernel issue would be to have a kernel command-line option to select or disable frequency scaling drivers, e.g. just
scaling_driver=acpi-cpufreq
or
scaling_driver=none
Then users can load another module later if they want.
One major reason these have to be built-in is that much of the "which driver do we use?" code is raw assembler and machine instructions in each of the drivers, that know the precise magic. (Fundamentally they try and enable their particular blend of scaling, and see if it works). In userspace, the only way to replicate this would be to force-load all of the modules anyway (in the right order, which again duplicates information already known to the kernel source). We always got this wrong.
Another key point is that many processors come up in their lowest power/speed mode by default; only by loading the cpu frequency scaling early can we nail the driver to performance during boot. (performance is our default governor for precisely this reason). If we delay to later in the boot, we have half the boot on the lower power/speed.
A better approach for the out-of-kernel issue would be to have a kernel command-line option to select or disable frequency scaling drivers, e.g. just
scaling_ driver= acpi-cpufreq driver= none
or
scaling_
Then users can load another module later if they want.
One major reason these have to be built-in is that much of the "which driver do we use?" code is raw assembler and machine instructions in each of the drivers, that know the precise magic. (Fundamentally they try and enable their particular blend of scaling, and see if it works). In userspace, the only way to replicate this would be to force-load all of the modules anyway (in the right order, which again duplicates information already known to the kernel source). We always got this wrong.
Another key point is that many processors come up in their lowest power/speed mode by default; only by loading the cpu frequency scaling early can we nail the driver to performance during boot. (performance is our default governor for precisely this reason). If we delay to later in the boot, we have half the boot on the lower power/speed.