Re: more generic cpu freq reporting

2022-04-26 Thread Hrvoje Popovski
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

2022-04-25 Thread Hrvoje Popovski
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

2022-04-25 Thread Claudio Jeker
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

2022-04-25 Thread Hrvoje Popovski
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

2022-04-25 Thread Mark Kettenis
> 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

2022-04-25 Thread Hrvoje Popovski
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

2022-04-25 Thread 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.
-- 
: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));