Re: more generic cpu freq reporting
On 25.4.2022. 19:38, Hrvoje Popovski wrote: > On 25.4.2022. 17:32, Claudio Jeker wrote: >> You may need to play with hw.setperf and maybe run a single cpu load to >> see boost behaviour. I noticed that my 7th gen Intel CPU behaves different >> to the AMD Ryzen CPUs I own. > This is like playing with new desktop environment... Thank you :) Just for fun :) Dell R7515 with AMD EPYC 7702P 64-Core Processor hw.sensors.cpu0.frequency0=255000.00 Hz hw.sensors.cpu1.frequency0=27.00 Hz hw.sensors.cpu2.frequency0=275000.00 Hz hw.sensors.cpu3.frequency0=315000.00 Hz hw.sensors.cpu4.frequency0=20.00 Hz hw.sensors.cpu5.frequency0=335000.00 Hz hw.sensors.cpu6.frequency0=305000.00 Hz hw.sensors.cpu7.frequency0=305000.00 Hz hw.sensors.cpu8.frequency0=29.00 Hz hw.sensors.cpu9.frequency0=32.00 Hz hw.sensors.cpu10.frequency0=325000.00 Hz hw.sensors.cpu11.frequency0=22.00 Hz hw.sensors.cpu12.frequency0=245000.00 Hz hw.sensors.cpu13.frequency0=32.00 Hz hw.sensors.cpu14.frequency0=30.00 Hz hw.sensors.cpu15.frequency0=21.00 Hz hw.sensors.cpu16.frequency0=32.00 Hz hw.sensors.cpu17.frequency0=325000.00 Hz hw.sensors.cpu18.frequency0=30.00 Hz hw.sensors.cpu19.frequency0=25.00 Hz hw.sensors.cpu20.frequency0=335000.00 Hz hw.sensors.cpu21.frequency0=33.00 Hz hw.sensors.cpu22.frequency0=26.00 Hz hw.sensors.cpu23.frequency0=195000.00 Hz hw.sensors.cpu24.frequency0=33.00 Hz hw.sensors.cpu25.frequency0=28.00 Hz hw.sensors.cpu26.frequency0=30.00 Hz hw.sensors.cpu27.frequency0=325000.00 Hz hw.sensors.cpu28.frequency0=32.00 Hz hw.sensors.cpu29.frequency0=29.00 Hz hw.sensors.cpu30.frequency0=275000.00 Hz hw.sensors.cpu31.frequency0=195000.00 Hz hw.sensors.cpu32.frequency0=315000.00 Hz hw.sensors.cpu33.frequency0=325000.00 Hz hw.sensors.cpu34.frequency0=295000.00 Hz hw.sensors.cpu35.frequency0=30.00 Hz hw.sensors.cpu36.frequency0=315000.00 Hz hw.sensors.cpu37.frequency0=325000.00 Hz hw.sensors.cpu38.frequency0=30.00 Hz hw.sensors.cpu39.frequency0=29.00 Hz hw.sensors.cpu40.frequency0=295000.00 Hz hw.sensors.cpu41.frequency0=325000.00 Hz hw.sensors.cpu42.frequency0=325000.00 Hz hw.sensors.cpu43.frequency0=30.00 Hz hw.sensors.cpu44.frequency0=325000.00 Hz hw.sensors.cpu45.frequency0=32.00 Hz hw.sensors.cpu46.frequency0=335000.00 Hz hw.sensors.cpu47.frequency0=305000.00 Hz hw.sensors.cpu48.frequency0=325000.00 Hz hw.sensors.cpu49.frequency0=33.00 Hz hw.sensors.cpu50.frequency0=23.00 Hz hw.sensors.cpu51.frequency0=275000.00 Hz hw.sensors.cpu52.frequency0=225000.00 Hz hw.sensors.cpu53.frequency0=255000.00 Hz hw.sensors.cpu54.frequency0=315000.00 Hz hw.sensors.cpu55.frequency0=325000.00 Hz hw.sensors.cpu56.frequency0=31.00 Hz hw.sensors.cpu57.frequency0=285000.00 Hz hw.sensors.cpu58.frequency0=21.00 Hz hw.sensors.cpu59.frequency0=24.00 Hz hw.sensors.cpu60.frequency0=275000.00 Hz hw.sensors.cpu61.frequency0=31.00 Hz hw.sensors.cpu62.frequency0=215000.00 Hz hw.sensors.cpu63.frequency0=215000.00 Hz hw.sensors.ksmn0.temp0=46.50 degC (Tctl) hw.sensors.ksmn0.temp1=42.00 degC (Tccd0) hw.sensors.ksmn0.temp2=46.25 degC (Tccd1) hw.sensors.ksmn0.temp3=41.00 degC (Tccd2) hw.sensors.ksmn0.temp4=41.50 degC (Tccd3) hw.sensors.ksmn0.temp5=42.25 degC (Tccd4) hw.sensors.ksmn0.temp6=44.50 degC (Tccd5) hw.sensors.ksmn0.temp7=42.00 degC (Tccd6) hw.sensors.ksmn0.temp8=44.00 degC (Tccd7) hw.sensors.mfii0.temp0=28.00 degC (bbu) hw.sensors.mfii0.volt0=3.94 VDC (bbu) hw.sensors.mfii0.current0=0.00 A (bbu) hw.sensors.mfii0.indicator0=On (bbu ok), OK hw.sensors.mfii0.indicator1=Off (pack missing) hw.sensors.mfii0.indicator2=Off (voltage low) hw.sensors.mfii0.indicator3=Off (temp high) hw.sensors.mfii0.indicator4=Off (charge active) hw.sensors.mfii0.indicator5=Off (discharge active) hw.sensors.mfii0.indicator6=Off (learn cycle req'd) hw.sensors.mfii0.indicator7=Off (learn cycle active) hw.sensors.mfii0.indicator8=Off (learn cycle failed) hw.sensors.mfii0.indicator9=Off (learn cycle timeout) hw.sensors.mfii0.indicator10=Off (I2C errors) hw.sensors.mfii0.indicator11=Off (replace pack) hw.sensors.mfii0.indicator12=Off (low capacity) hw.sensors.mfii0.indicator13=Off (periodic learn req'd) hw.sensors.mfii0.drive0=online (sd0), OK hw.sensors.ksmn1.temp0=46.50 degC (Tctl) hw.sensors.ksmn1.temp1=42.00 degC (Tccd0) hw.sensors.ksmn1.temp2=46.25 degC (Tccd1) hw.sensors.ksmn1.temp3=41.00 degC (Tccd2) hw.sensors.ksmn1.temp4=41.50 degC (Tccd3) hw.sensors.ksmn1.temp5=42.25 degC (Tccd4) hw.sensors.ksmn1.temp6=44.50 degC (Tccd5) hw.sensors.ksmn1.temp7=42.00 degC (Tccd6) hw.sensors.ksmn1.temp8=44.00 degC (Tccd7) hw.sensors.ksmn2.temp0=46.50 degC (Tctl) hw.sensors.ksmn2.temp1=42.00 degC (Tccd0) hw.sensors.ksmn2.temp2=46.25 degC
Re: more generic cpu freq reporting
On 25.4.2022. 17:32, Claudio Jeker wrote: > You may need to play with hw.setperf and maybe run a single cpu load to > see boost behaviour. I noticed that my 7th gen Intel CPU behaves different > to the AMD Ryzen CPUs I own. This is like playing with new desktop environment... Thank you :) 2 cores - E5-2650 v3 @ 2.30GHz, 2996.54 MHz, 06-3f-02 hw.cpuspeed=2996 hw.sensors.cpu0.temp0=54.00 degC hw.sensors.cpu0.frequency0=30.00 Hz hw.sensors.cpu1.frequency0=30.00 Hz hw.sensors.mfii0.drive0=online (sd0), OK 4 cores - E5-2650 v3 @ 2.30GHz, 2996.54 MHz, 06-3f-02 hw.cpuspeed=2996 hw.sensors.cpu0.temp0=45.00 degC hw.sensors.cpu0.frequency0=30.00 Hz hw.sensors.cpu1.frequency0=30.00 Hz hw.sensors.cpu2.frequency0=30.00 Hz hw.sensors.cpu3.frequency0=30.00 Hz hw.sensors.mfii0.drive0=online (sd0), OK 8 cores - E5-2650 v3 @ 2.30GHz, 2696.88 MHz, 06-3f-02 hw.cpuspeed=2697 hw.sensors.cpu0.temp0=50.00 degC hw.sensors.cpu0.frequency0=27.00 Hz hw.sensors.cpu1.frequency0=27.00 Hz hw.sensors.cpu2.frequency0=27.00 Hz hw.sensors.cpu3.frequency0=27.00 Hz hw.sensors.cpu4.frequency0=27.00 Hz hw.sensors.cpu5.frequency0=27.00 Hz hw.sensors.cpu6.frequency0=27.00 Hz hw.sensors.cpu7.frequency0=27.00 Hz 12 cores - E5-2650 v3 @ 2.30GHz, 2597.00 MHz, 06-3f-02 hw.cpuspeed=2597 hw.sensors.cpu0.temp0=50.00 degC hw.sensors.cpu0.frequency0=26.00 Hz hw.sensors.cpu1.frequency0=26.00 Hz hw.sensors.cpu2.frequency0=26.00 Hz hw.sensors.cpu3.frequency0=26.00 Hz hw.sensors.cpu4.frequency0=26.00 Hz hw.sensors.cpu5.frequency0=26.00 Hz hw.sensors.cpu6.frequency0=26.00 Hz hw.sensors.cpu7.frequency0=26.00 Hz hw.sensors.cpu8.frequency0=26.00 Hz hw.sensors.cpu9.frequency0=26.00 Hz hw.sensors.cpu10.frequency0=26.00 Hz hw.sensors.cpu11.frequency0=26.00 Hz hw.sensors.mfii0.drive0=online (sd0), OK 16 cores - E5-2650 v3 @ 2.30GHz, 2597.01 MHz, 06-3f-02 hw.cpuspeed=2597 hw.sensors.cpu0.temp0=59.00 degC hw.sensors.cpu0.frequency0=26.00 Hz hw.sensors.cpu1.frequency0=26.00 Hz hw.sensors.cpu2.frequency0=26.00 Hz hw.sensors.cpu3.frequency0=26.00 Hz hw.sensors.cpu4.frequency0=26.00 Hz hw.sensors.cpu5.frequency0=26.00 Hz hw.sensors.cpu6.frequency0=26.00 Hz hw.sensors.cpu7.frequency0=26.00 Hz hw.sensors.cpu8.frequency0=26.00 Hz hw.sensors.cpu9.frequency0=26.00 Hz hw.sensors.cpu10.frequency0=26.00 Hz hw.sensors.cpu11.frequency0=26.00 Hz hw.sensors.cpu12.frequency0=26.00 Hz hw.sensors.cpu13.frequency0=26.00 Hz hw.sensors.cpu14.frequency0=26.00 Hz hw.sensors.cpu15.frequency0=26.00 Hz hw.sensors.mfii0.drive0=online (sd0), OK 20 cores - E5-2650 v3 @ 2.30GHz, 2597.00 MHz, 06-3f-02 hw.cpuspeed=2597 hw.sensors.cpu0.temp0=61.00 degC hw.sensors.cpu0.frequency0=26.00 Hz hw.sensors.cpu1.frequency0=26.00 Hz hw.sensors.cpu2.frequency0=26.00 Hz hw.sensors.cpu3.frequency0=26.00 Hz hw.sensors.cpu4.frequency0=26.00 Hz hw.sensors.cpu5.frequency0=26.00 Hz hw.sensors.cpu6.frequency0=26.00 Hz hw.sensors.cpu7.frequency0=26.00 Hz hw.sensors.cpu8.frequency0=26.00 Hz hw.sensors.cpu9.frequency0=26.00 Hz hw.sensors.cpu10.frequency0=26.00 Hz hw.sensors.cpu11.frequency0=26.00 Hz hw.sensors.cpu12.frequency0=26.00 Hz hw.sensors.cpu13.frequency0=26.00 Hz hw.sensors.cpu14.frequency0=26.00 Hz hw.sensors.cpu15.frequency0=26.00 Hz hw.sensors.cpu16.frequency0=26.00 Hz hw.sensors.cpu17.frequency0=26.00 Hz hw.sensors.cpu18.frequency0=26.00 Hz hw.sensors.cpu19.frequency0=26.00 Hz hw.sensors.mfii0.drive0=online (sd0), OK OpenBSD 7.1-current (GENERIC.MP) #12: Mon Apr 25 19:30:26 CEST 2022 hrv...@r430.srce.hr:/sys/arch/amd64/compile/GENERIC.MP real mem = 137189920768 (130834MB) avail mem = 133014806528 (126852MB) random: good seed from bootblocks mpath0 at root scsibus0 at mpath0: 256 targets mainbus0 at root bios0 at mainbus0: SMBIOS rev. 2.8 @ 0x7af09000 (64 entries) bios0: vendor Dell Inc. version "2.14.0" date 01/25/2022 bios0: Dell Inc. PowerEdge R430 acpi0 at bios0: ACPI 4.0 acpi0: sleep states S0 S5 acpi0: tables DSDT FACP MCEJ WD__ SLIC HPET APIC MCFG MSCT SLIT SRAT SSDT SSDT SSDT PRAD DMAR HEST BERT ERST EINJ acpi0: wakeup devices PCI0(S4) BR1A(S4) BR2A(S4) BR2B(S4) BR2C(S4) BR2D(S4) BR3A(S4) BR3B(S4) BR3C(S4) BR3D(S4) XHC_(S0) RP01(S4) RP02(S4) RP03(S4) RP04(S4) RP05(S4) [...] acpitimer0 at acpi0: 3579545 Hz, 24 bits acpihpet0 at acpi0: 14318179 Hz acpimadt0 at acpi0 addr 0xfee0: PC-AT compat cpu0 at mainbus0: apid 0 (boot processor) cpu0: Intel(R) Xeon(R) CPU E5-2650 v3 @ 2.30GHz, 2597.34 MHz, 06-3f-02 cpu0:
Re: more generic cpu freq reporting
On Mon, Apr 25, 2022 at 05:22:51PM +0200, Hrvoje Popovski wrote: > On 25.4.2022. 16:50, Hrvoje Popovski wrote: > > On 25.4.2022. 16:19, Claudio Jeker wrote: > >> After I sent out my ksmn(4) diff to include cpu frequency sensors dlg@ > >> told me that this is a generic way to find the cpu frequency on modern x86 > >> cpus (both intel and amd support it). > >> > >> So this diff cleans up the CPU frequency sensors and moves them to the > >> cpu(4). I had to split the sensor attachement up since sensordev_install() > >> calls into hotplug which does a selwakeup() and that call locks up (I > >> guess it is the KERNEL_LOCK()). Moving that part of the code to > >> cpu_attach() makes the problem go away. > >> > >> Tested on a AMD Ryzen Pro 5850U and an Intel Core i7-7500U. > > > > Hi, > > > > Supermicro AS-1114S-WTRT with AMD EPYC 7413 > > > > > > smc24# sysctl hw.sensors > > hw.sensors.cpu0.frequency0=29.00 Hz > > hw.sensors.cpu1.frequency0=21.00 Hz > > hw.sensors.cpu2.frequency0=195000.00 Hz > > hw.sensors.cpu3.frequency0=235000.00 Hz > > hw.sensors.cpu4.frequency0=195000.00 Hz > > hw.sensors.cpu5.frequency0=195000.00 Hz > > hw.sensors.cpu6.frequency0=19.00 Hz > > hw.sensors.cpu7.frequency0=195000.00 Hz > > hw.sensors.cpu8.frequency0=195000.00 Hz > > hw.sensors.cpu9.frequency0=195000.00 Hz > > hw.sensors.cpu10.frequency0=195000.00 Hz > > hw.sensors.cpu11.frequency0=195000.00 Hz > > hw.sensors.cpu12.frequency0=205000.00 Hz > > hw.sensors.cpu13.frequency0=28.00 Hz > > hw.sensors.cpu14.frequency0=20.00 Hz > > hw.sensors.cpu15.frequency0=29.00 Hz > > hw.sensors.cpu16.frequency0=21.00 Hz > > hw.sensors.cpu17.frequency0=20.00 Hz > > hw.sensors.cpu18.frequency0=19.00 Hz > > hw.sensors.cpu19.frequency0=27.00 Hz > > hw.sensors.cpu20.frequency0=195000.00 Hz > > hw.sensors.cpu21.frequency0=215000.00 Hz > > hw.sensors.cpu22.frequency0=255000.00 Hz > > hw.sensors.cpu23.frequency0=20.00 Hz > > hw.sensors.ksmn0.temp0=47.12 degC > > hw.sensors.ksmn1.temp0=47.12 degC > > hw.sensors.ksmn2.temp0=47.12 degC > > hw.sensors.ksmn3.temp0=47.12 degC > > > > > > while doing make -j24 > > hw.sensors.cpu0.frequency0=36.00 Hz > > hw.sensors.cpu1.frequency0=36.00 Hz > > hw.sensors.cpu2.frequency0=36.00 Hz > > hw.sensors.cpu3.frequency0=36.00 Hz > > hw.sensors.cpu4.frequency0=36.00 Hz > > hw.sensors.cpu5.frequency0=36.00 Hz > > hw.sensors.cpu6.frequency0=36.00 Hz > > hw.sensors.cpu7.frequency0=36.00 Hz > > hw.sensors.cpu8.frequency0=36.00 Hz > > hw.sensors.cpu9.frequency0=36.00 Hz > > hw.sensors.cpu10.frequency0=36.00 Hz > > hw.sensors.cpu11.frequency0=36.00 Hz > > hw.sensors.cpu12.frequency0=36.00 Hz > > hw.sensors.cpu13.frequency0=36.00 Hz > > hw.sensors.cpu14.frequency0=36.00 Hz > > hw.sensors.cpu15.frequency0=36.00 Hz > > hw.sensors.cpu16.frequency0=36.00 Hz > > hw.sensors.cpu17.frequency0=36.00 Hz > > hw.sensors.cpu18.frequency0=36.00 Hz > > hw.sensors.cpu19.frequency0=36.00 Hz > > hw.sensors.cpu20.frequency0=36.00 Hz > > hw.sensors.cpu21.frequency0=36.00 Hz > > hw.sensors.cpu22.frequency0=36.00 Hz > > hw.sensors.cpu23.frequency0=36.00 Hz > > hw.sensors.ksmn0.temp0=63.25 degC > > hw.sensors.ksmn1.temp0=63.25 degC > > hw.sensors.ksmn2.temp0=63.25 degC > > hw.sensors.ksmn3.temp0=63.25 degC > > > > Dell R430 with Intel E5-2650 v3 > > before > r430# sysctl hw.sensors > hw.sensors.cpu0.temp0=51.00 degC > hw.sensors.mfii0.drive0=online (sd0), OK > > > after > r430# sysctl hw.sensors > hw.sensors.cpu0.temp0=55.00 degC > hw.sensors.cpu0.frequency0=26.00 Hz > hw.sensors.cpu1.frequency0=26.00 Hz > hw.sensors.cpu2.frequency0=26.00 Hz > hw.sensors.cpu3.frequency0=26.00 Hz > hw.sensors.cpu4.frequency0=26.00 Hz > hw.sensors.cpu5.frequency0=26.00 Hz > hw.sensors.cpu6.frequency0=26.00 Hz > hw.sensors.cpu7.frequency0=26.00 Hz > hw.sensors.cpu8.frequency0=26.00 Hz > hw.sensors.cpu9.frequency0=26.00 Hz > hw.sensors.cpu10.frequency0=26.00 Hz > hw.sensors.cpu11.frequency0=26.00 Hz > hw.sensors.cpu12.frequency0=26.00 Hz > hw.sensors.cpu13.frequency0=26.00 Hz > hw.sensors.cpu14.frequency0=26.00 Hz > hw.sensors.cpu15.frequency0=26.00 Hz > hw.sensors.cpu16.frequency0=26.00 Hz > hw.sensors.cpu17.frequency0=26.00 Hz > hw.sensors.cpu18.frequency0=26.00 Hz > hw.sensors.cpu19.frequency0=26.00 Hz > hw.sensors.mfii0.drive0=online (sd0), OK > > > > while doing make -j20 > r430# sysctl hw.sensors > hw.sensors.cpu0.temp0=62.00 degC > hw.sensors.cpu0.frequency0=26.00 Hz > hw.sensors.cpu1.frequency0=26.00 Hz > hw.sensors.cpu2.frequency0=26.00 Hz >
Re: more generic cpu freq reporting
On 25.4.2022. 16:50, Hrvoje Popovski wrote: > On 25.4.2022. 16:19, Claudio Jeker wrote: >> After I sent out my ksmn(4) diff to include cpu frequency sensors dlg@ >> told me that this is a generic way to find the cpu frequency on modern x86 >> cpus (both intel and amd support it). >> >> So this diff cleans up the CPU frequency sensors and moves them to the >> cpu(4). I had to split the sensor attachement up since sensordev_install() >> calls into hotplug which does a selwakeup() and that call locks up (I >> guess it is the KERNEL_LOCK()). Moving that part of the code to >> cpu_attach() makes the problem go away. >> >> Tested on a AMD Ryzen Pro 5850U and an Intel Core i7-7500U. > > Hi, > > Supermicro AS-1114S-WTRT with AMD EPYC 7413 > > > smc24# sysctl hw.sensors > hw.sensors.cpu0.frequency0=29.00 Hz > hw.sensors.cpu1.frequency0=21.00 Hz > hw.sensors.cpu2.frequency0=195000.00 Hz > hw.sensors.cpu3.frequency0=235000.00 Hz > hw.sensors.cpu4.frequency0=195000.00 Hz > hw.sensors.cpu5.frequency0=195000.00 Hz > hw.sensors.cpu6.frequency0=19.00 Hz > hw.sensors.cpu7.frequency0=195000.00 Hz > hw.sensors.cpu8.frequency0=195000.00 Hz > hw.sensors.cpu9.frequency0=195000.00 Hz > hw.sensors.cpu10.frequency0=195000.00 Hz > hw.sensors.cpu11.frequency0=195000.00 Hz > hw.sensors.cpu12.frequency0=205000.00 Hz > hw.sensors.cpu13.frequency0=28.00 Hz > hw.sensors.cpu14.frequency0=20.00 Hz > hw.sensors.cpu15.frequency0=29.00 Hz > hw.sensors.cpu16.frequency0=21.00 Hz > hw.sensors.cpu17.frequency0=20.00 Hz > hw.sensors.cpu18.frequency0=19.00 Hz > hw.sensors.cpu19.frequency0=27.00 Hz > hw.sensors.cpu20.frequency0=195000.00 Hz > hw.sensors.cpu21.frequency0=215000.00 Hz > hw.sensors.cpu22.frequency0=255000.00 Hz > hw.sensors.cpu23.frequency0=20.00 Hz > hw.sensors.ksmn0.temp0=47.12 degC > hw.sensors.ksmn1.temp0=47.12 degC > hw.sensors.ksmn2.temp0=47.12 degC > hw.sensors.ksmn3.temp0=47.12 degC > > > while doing make -j24 > hw.sensors.cpu0.frequency0=36.00 Hz > hw.sensors.cpu1.frequency0=36.00 Hz > hw.sensors.cpu2.frequency0=36.00 Hz > hw.sensors.cpu3.frequency0=36.00 Hz > hw.sensors.cpu4.frequency0=36.00 Hz > hw.sensors.cpu5.frequency0=36.00 Hz > hw.sensors.cpu6.frequency0=36.00 Hz > hw.sensors.cpu7.frequency0=36.00 Hz > hw.sensors.cpu8.frequency0=36.00 Hz > hw.sensors.cpu9.frequency0=36.00 Hz > hw.sensors.cpu10.frequency0=36.00 Hz > hw.sensors.cpu11.frequency0=36.00 Hz > hw.sensors.cpu12.frequency0=36.00 Hz > hw.sensors.cpu13.frequency0=36.00 Hz > hw.sensors.cpu14.frequency0=36.00 Hz > hw.sensors.cpu15.frequency0=36.00 Hz > hw.sensors.cpu16.frequency0=36.00 Hz > hw.sensors.cpu17.frequency0=36.00 Hz > hw.sensors.cpu18.frequency0=36.00 Hz > hw.sensors.cpu19.frequency0=36.00 Hz > hw.sensors.cpu20.frequency0=36.00 Hz > hw.sensors.cpu21.frequency0=36.00 Hz > hw.sensors.cpu22.frequency0=36.00 Hz > hw.sensors.cpu23.frequency0=36.00 Hz > hw.sensors.ksmn0.temp0=63.25 degC > hw.sensors.ksmn1.temp0=63.25 degC > hw.sensors.ksmn2.temp0=63.25 degC > hw.sensors.ksmn3.temp0=63.25 degC > Dell R430 with Intel E5-2650 v3 before r430# sysctl hw.sensors hw.sensors.cpu0.temp0=51.00 degC hw.sensors.mfii0.drive0=online (sd0), OK after r430# sysctl hw.sensors hw.sensors.cpu0.temp0=55.00 degC hw.sensors.cpu0.frequency0=26.00 Hz hw.sensors.cpu1.frequency0=26.00 Hz hw.sensors.cpu2.frequency0=26.00 Hz hw.sensors.cpu3.frequency0=26.00 Hz hw.sensors.cpu4.frequency0=26.00 Hz hw.sensors.cpu5.frequency0=26.00 Hz hw.sensors.cpu6.frequency0=26.00 Hz hw.sensors.cpu7.frequency0=26.00 Hz hw.sensors.cpu8.frequency0=26.00 Hz hw.sensors.cpu9.frequency0=26.00 Hz hw.sensors.cpu10.frequency0=26.00 Hz hw.sensors.cpu11.frequency0=26.00 Hz hw.sensors.cpu12.frequency0=26.00 Hz hw.sensors.cpu13.frequency0=26.00 Hz hw.sensors.cpu14.frequency0=26.00 Hz hw.sensors.cpu15.frequency0=26.00 Hz hw.sensors.cpu16.frequency0=26.00 Hz hw.sensors.cpu17.frequency0=26.00 Hz hw.sensors.cpu18.frequency0=26.00 Hz hw.sensors.cpu19.frequency0=26.00 Hz hw.sensors.mfii0.drive0=online (sd0), OK while doing make -j20 r430# sysctl hw.sensors hw.sensors.cpu0.temp0=62.00 degC hw.sensors.cpu0.frequency0=26.00 Hz hw.sensors.cpu1.frequency0=26.00 Hz hw.sensors.cpu2.frequency0=26.00 Hz hw.sensors.cpu3.frequency0=26.00 Hz hw.sensors.cpu4.frequency0=26.00 Hz hw.sensors.cpu5.frequency0=26.00 Hz hw.sensors.cpu6.frequency0=26.00 Hz hw.sensors.cpu7.frequency0=26.00 Hz hw.sensors.cpu8.frequency0=26.00 Hz hw.sensors.cpu9.frequency0=26.00 Hz
Re: more generic cpu freq reporting
> Date: Mon, 25 Apr 2022 16:19:45 +0200 > From: Claudio Jeker > > After I sent out my ksmn(4) diff to include cpu frequency sensors dlg@ > told me that this is a generic way to find the cpu frequency on modern x86 > cpus (both intel and amd support it). > > So this diff cleans up the CPU frequency sensors and moves them to the > cpu(4). I had to split the sensor attachement up since sensordev_install() > calls into hotplug which does a selwakeup() and that call locks up (I > guess it is the KERNEL_LOCK()). Moving that part of the code to > cpu_attach() makes the problem go away. > > Tested on a AMD Ryzen Pro 5850U and an Intel Core i7-7500U. Yes, that looks much better. ok kettenis@ > Index: arch/amd64/amd64/cpu.c > === > RCS file: /cvs/src/sys/arch/amd64/amd64/cpu.c,v > retrieving revision 1.155 > diff -u -p -r1.155 cpu.c > --- arch/amd64/amd64/cpu.c21 Feb 2022 11:03:39 - 1.155 > +++ arch/amd64/amd64/cpu.c25 Apr 2022 13:56:28 - > @@ -558,6 +558,11 @@ cpu_attach(struct device *parent, struct > ci->ci_func = caa->cpu_func; > ci->ci_handled_intr_level = IPL_NONE; > > +#ifndef SMALL_KERNEL > + strlcpy(ci->ci_sensordev.xname, ci->ci_dev->dv_xname, > + sizeof(ci->ci_sensordev.xname)); > +#endif > + > #if defined(MULTIPROCESSOR) > /* >* Allocate UPAGES contiguous pages for the idle PCB and stack. > @@ -663,6 +668,11 @@ cpu_attach(struct device *parent, struct > #if NVMM > 0 > cpu_init_vmm(ci); > #endif /* NVMM > 0 */ > + > +#ifndef SMALL_KERNEL > + if (ci->ci_sensordev.sensors_count > 0) > + sensordev_install(>ci_sensordev); > +#endif > } > > static void > Index: arch/amd64/amd64/identcpu.c > === > RCS file: /cvs/src/sys/arch/amd64/amd64/identcpu.c,v > retrieving revision 1.122 > diff -u -p -r1.122 identcpu.c > --- arch/amd64/amd64/identcpu.c 20 Jan 2022 11:06:57 - 1.122 > +++ arch/amd64/amd64/identcpu.c 25 Apr 2022 13:55:33 - > @@ -38,6 +38,8 @@ > > #include > #include > +#include > +#include > #include > > #include "vmm.h" > @@ -246,7 +248,9 @@ cpu_amd64speed(int *freq) > } > > #ifndef SMALL_KERNEL > -void intelcore_update_sensor(void *args); > +void intelcore_update_sensor(void *); > +void cpu_hz_update_sensor(void *); > + > /* > * Temperature read on the CPU is relative to the maximum > * temperature supported by the CPU, Tj(Max). > @@ -299,6 +303,44 @@ intelcore_update_sensor(void *args) > } > } > > +/* > + * Effective CPU frequency measurement > + * > + * Refer to: > + * 64-ia-32-architectures-software-developer-vol-3b-part-2-manual.pdf > + * Section 14.2 and > + * OSRR for AMD Family 17h processors Section 2.1.2 > + * Round to 50Mhz which is the accuracy of this measurement. > + */ > +#define FREQ_50MHZ (50ULL * 100ULL * 100ULL) > +void > +cpu_hz_update_sensor(void *args) > +{ > + extern uint64_t tsc_frequency; > + struct cpu_info *ci = args; > + uint64_t mperf, aperf, mdelta, adelta, val; > + unsigned longs; > + > +sched_peg_curproc(ci); > + > + s = intr_disable(); > + mperf = rdmsr(MSR_MPERF); > + aperf = rdmsr(MSR_APERF); > + intr_restore(s); > + > + mdelta = mperf - ci->ci_hz_mperf; > + adelta = aperf - ci->ci_hz_aperf; > + ci->ci_hz_mperf = mperf; > + ci->ci_hz_aperf = aperf; > + > + if (mdelta > 0) { > + val = (adelta * 100) / mdelta * tsc_frequency; > + val = ((val + FREQ_50MHZ / 2) / FREQ_50MHZ) * FREQ_50MHZ; > + ci->ci_hz_sensor.value = val; > + } > + > + atomic_clearbits_int(>p_flag, P_CPUPEG); > +} > #endif > > void (*setperf_setup)(struct cpu_info *); > @@ -469,7 +511,7 @@ void > identifycpu(struct cpu_info *ci) > { > uint64_t freq = 0; > - u_int32_t dummy, val; > + u_int32_t dummy, val, cpu_tpm_ecxflags = 0; > char mycpu_model[48]; > int i; > char *brandstr_from, *brandstr_to; > @@ -619,12 +661,15 @@ identifycpu(struct cpu_info *ci) > } > > if (!strcmp(cpu_vendor, "GenuineIntel") && cpuid_level >= 0x06) { > - CPUID(0x06, ci->ci_feature_tpmflags, dummy, dummy, dummy); > + CPUID(0x06, ci->ci_feature_tpmflags, dummy, cpu_tpm_ecxflags, > + dummy); > for (i = 0; i < nitems(cpu_tpm_eaxfeatures); i++) > if (ci->ci_feature_tpmflags & > cpu_tpm_eaxfeatures[i].bit) > printf(",%s", cpu_tpm_eaxfeatures[i].str); > } else if (!strcmp(cpu_vendor, "AuthenticAMD")) { > + CPUID(0x06, ci->ci_feature_tpmflags, dummy, cpu_tpm_ecxflags, > + dummy); > if (ci->ci_family >= 0x12) > ci->ci_feature_tpmflags |= TPM_ARAT; > } > @@ -737,12 +782,9 @@
Re: more generic cpu freq reporting
On 25.4.2022. 16:19, Claudio Jeker wrote: > After I sent out my ksmn(4) diff to include cpu frequency sensors dlg@ > told me that this is a generic way to find the cpu frequency on modern x86 > cpus (both intel and amd support it). > > So this diff cleans up the CPU frequency sensors and moves them to the > cpu(4). I had to split the sensor attachement up since sensordev_install() > calls into hotplug which does a selwakeup() and that call locks up (I > guess it is the KERNEL_LOCK()). Moving that part of the code to > cpu_attach() makes the problem go away. > > Tested on a AMD Ryzen Pro 5850U and an Intel Core i7-7500U. Hi, Supermicro AS-1114S-WTRT with AMD EPYC 7413 smc24# sysctl hw.sensors hw.sensors.cpu0.frequency0=29.00 Hz hw.sensors.cpu1.frequency0=21.00 Hz hw.sensors.cpu2.frequency0=195000.00 Hz hw.sensors.cpu3.frequency0=235000.00 Hz hw.sensors.cpu4.frequency0=195000.00 Hz hw.sensors.cpu5.frequency0=195000.00 Hz hw.sensors.cpu6.frequency0=19.00 Hz hw.sensors.cpu7.frequency0=195000.00 Hz hw.sensors.cpu8.frequency0=195000.00 Hz hw.sensors.cpu9.frequency0=195000.00 Hz hw.sensors.cpu10.frequency0=195000.00 Hz hw.sensors.cpu11.frequency0=195000.00 Hz hw.sensors.cpu12.frequency0=205000.00 Hz hw.sensors.cpu13.frequency0=28.00 Hz hw.sensors.cpu14.frequency0=20.00 Hz hw.sensors.cpu15.frequency0=29.00 Hz hw.sensors.cpu16.frequency0=21.00 Hz hw.sensors.cpu17.frequency0=20.00 Hz hw.sensors.cpu18.frequency0=19.00 Hz hw.sensors.cpu19.frequency0=27.00 Hz hw.sensors.cpu20.frequency0=195000.00 Hz hw.sensors.cpu21.frequency0=215000.00 Hz hw.sensors.cpu22.frequency0=255000.00 Hz hw.sensors.cpu23.frequency0=20.00 Hz hw.sensors.ksmn0.temp0=47.12 degC hw.sensors.ksmn1.temp0=47.12 degC hw.sensors.ksmn2.temp0=47.12 degC hw.sensors.ksmn3.temp0=47.12 degC while doing make -j24 hw.sensors.cpu0.frequency0=36.00 Hz hw.sensors.cpu1.frequency0=36.00 Hz hw.sensors.cpu2.frequency0=36.00 Hz hw.sensors.cpu3.frequency0=36.00 Hz hw.sensors.cpu4.frequency0=36.00 Hz hw.sensors.cpu5.frequency0=36.00 Hz hw.sensors.cpu6.frequency0=36.00 Hz hw.sensors.cpu7.frequency0=36.00 Hz hw.sensors.cpu8.frequency0=36.00 Hz hw.sensors.cpu9.frequency0=36.00 Hz hw.sensors.cpu10.frequency0=36.00 Hz hw.sensors.cpu11.frequency0=36.00 Hz hw.sensors.cpu12.frequency0=36.00 Hz hw.sensors.cpu13.frequency0=36.00 Hz hw.sensors.cpu14.frequency0=36.00 Hz hw.sensors.cpu15.frequency0=36.00 Hz hw.sensors.cpu16.frequency0=36.00 Hz hw.sensors.cpu17.frequency0=36.00 Hz hw.sensors.cpu18.frequency0=36.00 Hz hw.sensors.cpu19.frequency0=36.00 Hz hw.sensors.cpu20.frequency0=36.00 Hz hw.sensors.cpu21.frequency0=36.00 Hz hw.sensors.cpu22.frequency0=36.00 Hz hw.sensors.cpu23.frequency0=36.00 Hz hw.sensors.ksmn0.temp0=63.25 degC hw.sensors.ksmn1.temp0=63.25 degC hw.sensors.ksmn2.temp0=63.25 degC hw.sensors.ksmn3.temp0=63.25 degC
more generic cpu freq reporting
After I sent out my ksmn(4) diff to include cpu frequency sensors dlg@ told me that this is a generic way to find the cpu frequency on modern x86 cpus (both intel and amd support it). So this diff cleans up the CPU frequency sensors and moves them to the cpu(4). I had to split the sensor attachement up since sensordev_install() calls into hotplug which does a selwakeup() and that call locks up (I guess it is the KERNEL_LOCK()). Moving that part of the code to cpu_attach() makes the problem go away. Tested on a AMD Ryzen Pro 5850U and an Intel Core i7-7500U. -- :wq Claudio Index: arch/amd64/amd64/cpu.c === RCS file: /cvs/src/sys/arch/amd64/amd64/cpu.c,v retrieving revision 1.155 diff -u -p -r1.155 cpu.c --- arch/amd64/amd64/cpu.c 21 Feb 2022 11:03:39 - 1.155 +++ arch/amd64/amd64/cpu.c 25 Apr 2022 13:56:28 - @@ -558,6 +558,11 @@ cpu_attach(struct device *parent, struct ci->ci_func = caa->cpu_func; ci->ci_handled_intr_level = IPL_NONE; +#ifndef SMALL_KERNEL + strlcpy(ci->ci_sensordev.xname, ci->ci_dev->dv_xname, + sizeof(ci->ci_sensordev.xname)); +#endif + #if defined(MULTIPROCESSOR) /* * Allocate UPAGES contiguous pages for the idle PCB and stack. @@ -663,6 +668,11 @@ cpu_attach(struct device *parent, struct #if NVMM > 0 cpu_init_vmm(ci); #endif /* NVMM > 0 */ + +#ifndef SMALL_KERNEL + if (ci->ci_sensordev.sensors_count > 0) + sensordev_install(>ci_sensordev); +#endif } static void Index: arch/amd64/amd64/identcpu.c === RCS file: /cvs/src/sys/arch/amd64/amd64/identcpu.c,v retrieving revision 1.122 diff -u -p -r1.122 identcpu.c --- arch/amd64/amd64/identcpu.c 20 Jan 2022 11:06:57 - 1.122 +++ arch/amd64/amd64/identcpu.c 25 Apr 2022 13:55:33 - @@ -38,6 +38,8 @@ #include #include +#include +#include #include #include "vmm.h" @@ -246,7 +248,9 @@ cpu_amd64speed(int *freq) } #ifndef SMALL_KERNEL -void intelcore_update_sensor(void *args); +void intelcore_update_sensor(void *); +void cpu_hz_update_sensor(void *); + /* * Temperature read on the CPU is relative to the maximum * temperature supported by the CPU, Tj(Max). @@ -299,6 +303,44 @@ intelcore_update_sensor(void *args) } } +/* + * Effective CPU frequency measurement + * + * Refer to: + * 64-ia-32-architectures-software-developer-vol-3b-part-2-manual.pdf + * Section 14.2 and + * OSRR for AMD Family 17h processors Section 2.1.2 + * Round to 50Mhz which is the accuracy of this measurement. + */ +#define FREQ_50MHZ (50ULL * 100ULL * 100ULL) +void +cpu_hz_update_sensor(void *args) +{ + extern uint64_t tsc_frequency; + struct cpu_info *ci = args; + uint64_t mperf, aperf, mdelta, adelta, val; + unsigned longs; + +sched_peg_curproc(ci); + + s = intr_disable(); + mperf = rdmsr(MSR_MPERF); + aperf = rdmsr(MSR_APERF); + intr_restore(s); + + mdelta = mperf - ci->ci_hz_mperf; + adelta = aperf - ci->ci_hz_aperf; + ci->ci_hz_mperf = mperf; + ci->ci_hz_aperf = aperf; + + if (mdelta > 0) { + val = (adelta * 100) / mdelta * tsc_frequency; + val = ((val + FREQ_50MHZ / 2) / FREQ_50MHZ) * FREQ_50MHZ; + ci->ci_hz_sensor.value = val; + } + + atomic_clearbits_int(>p_flag, P_CPUPEG); +} #endif void (*setperf_setup)(struct cpu_info *); @@ -469,7 +511,7 @@ void identifycpu(struct cpu_info *ci) { uint64_t freq = 0; - u_int32_t dummy, val; + u_int32_t dummy, val, cpu_tpm_ecxflags = 0; char mycpu_model[48]; int i; char *brandstr_from, *brandstr_to; @@ -619,12 +661,15 @@ identifycpu(struct cpu_info *ci) } if (!strcmp(cpu_vendor, "GenuineIntel") && cpuid_level >= 0x06) { - CPUID(0x06, ci->ci_feature_tpmflags, dummy, dummy, dummy); + CPUID(0x06, ci->ci_feature_tpmflags, dummy, cpu_tpm_ecxflags, + dummy); for (i = 0; i < nitems(cpu_tpm_eaxfeatures); i++) if (ci->ci_feature_tpmflags & cpu_tpm_eaxfeatures[i].bit) printf(",%s", cpu_tpm_eaxfeatures[i].str); } else if (!strcmp(cpu_vendor, "AuthenticAMD")) { + CPUID(0x06, ci->ci_feature_tpmflags, dummy, cpu_tpm_ecxflags, + dummy); if (ci->ci_family >= 0x12) ci->ci_feature_tpmflags |= TPM_ARAT; } @@ -737,12 +782,9 @@ identifycpu(struct cpu_info *ci) #ifndef SMALL_KERNEL if (CPU_IS_PRIMARY(ci) && (ci->ci_feature_tpmflags & TPM_SENSOR)) { - strlcpy(ci->ci_sensordev.xname, ci->ci_dev->dv_xname, - sizeof(ci->ci_sensordev.xname));