disabling a cpu socket

2021-11-27 Thread Stuart Henderson
I have some amd64 machines which are doing 600+ gettimeofday/second
at quiet times and way more when they're busy and I'd quite like to
get them onto userland tsc, however they're dual socket and the skew
between cores on the different sockets is too great. There's no way to
disable a socket in BIOS settings, and physically removing a cpu would
be very inconvenient.

Where would I need to make changes (as a local patch obviously) to skip
a cpu? Can I just avoid doing the cpu_intr_init/cpu_start_secondary/
sched_init_cpu/ncpus++/etc from amd64/cpu.c 638-645 ? i.e. these bits

 631 case CPU_ROLE_AP:
 632 /*
 633  * report on an AP
 634  */
 635 printf("apid %d (application processor)\n", 
caa->cpu_apicid);
 636 
 637 #if defined(MULTIPROCESSOR)
 638 cpu_intr_init(ci);
 639 cpu_start_secondary(ci);
 640 sched_init_cpu(ci);
 641 ncpus++;
 642 if (ci->ci_flags & CPUF_PRESENT) {
 643 ci->ci_next = cpu_info_list->ci_next;
 644 cpu_info_list->ci_next = ci;
 645 }
 646 #else
 647 printf("%s: not started\n", sc->sc_dev.dv_xname);
 648 #endif



Re: disabling a cpu socket

2021-11-27 Thread Mark Kettenis
> Date: Sat, 27 Nov 2021 20:28:39 +
> From: Stuart Henderson 
> 
> I have some amd64 machines which are doing 600+ gettimeofday/second
> at quiet times and way more when they're busy and I'd quite like to
> get them onto userland tsc, however they're dual socket and the skew
> between cores on the different sockets is too great. There's no way to
> disable a socket in BIOS settings, and physically removing a cpu would
> be very inconvenient.

I don't think ~1000 system calls per second is something you really
need to be worried about.

> 
> Where would I need to make changes (as a local patch obviously) to skip
> a cpu? Can I just avoid doing the cpu_intr_init/cpu_start_secondary/
> sched_init_cpu/ncpus++/etc from amd64/cpu.c 638-645 ? i.e. these bits

Best way is probably to skip attaching the CPUs in dev/acpi/acpimadt.c

>  631 case CPU_ROLE_AP:
>  632 /*
>  633  * report on an AP
>  634  */
>  635 printf("apid %d (application processor)\n", 
> caa->cpu_apicid);
>  636 
>  637 #if defined(MULTIPROCESSOR)
>  638 cpu_intr_init(ci);
>  639 cpu_start_secondary(ci);
>  640 sched_init_cpu(ci);
>  641 ncpus++;
>  642 if (ci->ci_flags & CPUF_PRESENT) {
>  643 ci->ci_next = cpu_info_list->ci_next;
>  644 cpu_info_list->ci_next = ci;
>  645 }
>  646 #else
>  647 printf("%s: not started\n", sc->sc_dev.dv_xname);
>  648 #endif
> 
>