On 01/10/2014 10:40 AM, Alexander Graf wrote: > > >> Am 09.01.2014 um 23:12 schrieb Alexey Kardashevskiy <a...@ozlabs.ru>: >> >>> On 01/10/2014 08:00 AM, Mike Day wrote: >>> >>> Alexey Kardashevskiy <a...@ozlabs.ru> writes: >>> >>>> /* compute missing values, prefer sockets over cores over threads >>>> */ >>>> if (cpus == 0 || sockets == 0) { >>>> sockets = sockets > 0 ? sockets : 1; >>>> cores = cores > 0 ? cores : 1; >>>> - threads = threads > 0 ? threads : 1; >>>> + if (threads_max) { >>>> + if (threads > 0) { >>>> + fprintf(stderr, "Use either threads or >>>> threads_max\n"); >>>> + exit(1); >>> >>> If you went ahead with the threads="max" string option you wouldn't need >>> to check here for mutual excusivity and the user wouldn't need to worry >>> about an extra command options. >> >> >> Is this the only concern and the rest is fine and can go to upstream? If >> so, I'll fix it and repost. >
> What if we make the max thread count a property of our cpu class? The > we can add a threads=max option which will be identical between kvm and tcg. You lost me here :) Right now the sequence is: 1. smp_parse 2. config_accelerator 3. machine_init I proposed 1. config_accelerator - reads max threads from KVM (and initializes "host" type) 2. smp_parse - does the parsing using smp_threads tweaked in 1) 3. machine_init - creates CPUs which may or may be not "host". >From what you said I conclude that we add this "max" property only to the "host" CPU type and then in smp_parse() we look if "host" CPU is going to be used and if so, then we read "max" property from it and use it. But we cannot read property for a class, only from an instance and it is not created yet. And we also need to tweak the number depending on "compat". And we still need "-smp ...threads_max" or "-smp ...threads=max" property for "-smp". Where am I wrong here? > Overall I'm not yet fully convinced this whole idea is eventually going > to improve the situation though. My goal is to have a script which would automatically set threads to the maximum value supported by the host hardware. Reading /proc/cpuinfo and parsing for POWER6/7/8 and setting threads to 2/4/8 is lame for my taste because what was the point of adding cap_ppc_smt at the first place then? > > > Alex > >> >> >>>> + } >>>> + threads = smp_threads > 0 ? smp_threads : 1; >>>> + } else { >>>> + threads = threads > 0 ? threads : 1; >>>> + } >>>> if (cpus == 0) { >>>> cpus = cores * threads * sockets; >>>> } >> >> >> -- >> Alexey -- Alexey