1 Kernel driver fam15h_power 1 Kernel driver fam15h_power 2 ========================== 2 ========================== 3 3 4 Supported chips: 4 Supported chips: 5 5 6 * AMD Family 15h Processors 6 * AMD Family 15h Processors 7 7 8 * AMD Family 16h Processors 8 * AMD Family 16h Processors 9 9 10 Prefix: 'fam15h_power' 10 Prefix: 'fam15h_power' 11 11 12 Addresses scanned: PCI space 12 Addresses scanned: PCI space 13 13 14 Datasheets: 14 Datasheets: 15 15 16 - BIOS and Kernel Developer's Guide (BKDG) F 16 - BIOS and Kernel Developer's Guide (BKDG) For AMD Family 15h Processors 17 - BIOS and Kernel Developer's Guide (BKDG) F 17 - BIOS and Kernel Developer's Guide (BKDG) For AMD Family 16h Processors 18 - AMD64 Architecture Programmer's Manual Vol 18 - AMD64 Architecture Programmer's Manual Volume 2: System Programming 19 19 20 Author: Andreas Herrmann <herrmann.der.user@goo 20 Author: Andreas Herrmann <herrmann.der.user@googlemail.com> 21 21 22 Description 22 Description 23 ----------- 23 ----------- 24 24 25 1) Processor TDP (Thermal design power) 25 1) Processor TDP (Thermal design power) 26 26 27 Given a fixed frequency and voltage, the power 27 Given a fixed frequency and voltage, the power consumption of a 28 processor varies based on the workload being e 28 processor varies based on the workload being executed. Derated power 29 is the power consumed when running a specific 29 is the power consumed when running a specific application. Thermal 30 design power (TDP) is an example of derated po 30 design power (TDP) is an example of derated power. 31 31 32 This driver permits reading of registers provi 32 This driver permits reading of registers providing power information 33 of AMD Family 15h and 16h processors via TDP a 33 of AMD Family 15h and 16h processors via TDP algorithm. 34 34 35 For AMD Family 15h and 16h processors the foll 35 For AMD Family 15h and 16h processors the following power values can 36 be calculated using different processor northb 36 be calculated using different processor northbridge function 37 registers: 37 registers: 38 38 39 * BasePwrWatts: 39 * BasePwrWatts: 40 Specifies in watts the maximum amount of p 40 Specifies in watts the maximum amount of power 41 consumed by the processor for NB and logic 41 consumed by the processor for NB and logic external to the core. 42 42 43 * ProcessorPwrWatts: 43 * ProcessorPwrWatts: 44 Specifies in watts the maximum amount of p 44 Specifies in watts the maximum amount of power 45 the processor can support. 45 the processor can support. 46 * CurrPwrWatts: 46 * CurrPwrWatts: 47 Specifies in watts the current amount of p 47 Specifies in watts the current amount of power being 48 consumed by the processor. 48 consumed by the processor. 49 49 50 This driver provides ProcessorPwrWatts and Cur 50 This driver provides ProcessorPwrWatts and CurrPwrWatts: 51 51 52 * power1_crit (ProcessorPwrWatts) 52 * power1_crit (ProcessorPwrWatts) 53 * power1_input (CurrPwrWatts) 53 * power1_input (CurrPwrWatts) 54 54 55 On multi-node processors the calculated value 55 On multi-node processors the calculated value is for the entire 56 package and not for a single node. Thus the dr 56 package and not for a single node. Thus the driver creates sysfs 57 attributes only for internal node0 of a multi- 57 attributes only for internal node0 of a multi-node processor. 58 58 59 2) Accumulated Power Mechanism 59 2) Accumulated Power Mechanism 60 60 61 This driver also introduces an algorithm that 61 This driver also introduces an algorithm that should be used to 62 calculate the average power consumed by a proc 62 calculate the average power consumed by a processor during a 63 measurement interval Tm. The feature of accumu 63 measurement interval Tm. The feature of accumulated power mechanism is 64 indicated by CPUID Fn8000_0007_EDX[12]. 64 indicated by CPUID Fn8000_0007_EDX[12]. 65 65 66 * Tsample: 66 * Tsample: 67 compute unit power accumulator sample 67 compute unit power accumulator sample period 68 68 69 * Tref: 69 * Tref: 70 the PTSC counter period 70 the PTSC counter period 71 71 72 * PTSC: 72 * PTSC: 73 performance timestamp counter 73 performance timestamp counter 74 74 75 * N: 75 * N: 76 the ratio of compute unit power accumu 76 the ratio of compute unit power accumulator sample period to the 77 PTSC period 77 PTSC period 78 78 79 * Jmax: 79 * Jmax: 80 max compute unit accumulated power whi 80 max compute unit accumulated power which is indicated by 81 MaxCpuSwPwrAcc MSR C001007b 81 MaxCpuSwPwrAcc MSR C001007b 82 82 83 * Jx/Jy: 83 * Jx/Jy: 84 compute unit accumulated power which i 84 compute unit accumulated power which is indicated by 85 CpuSwPwrAcc MSR C001007a 85 CpuSwPwrAcc MSR C001007a 86 * Tx/Ty: 86 * Tx/Ty: 87 the value of performance timestamp cou 87 the value of performance timestamp counter which is indicated 88 by CU_PTSC MSR C0010280 88 by CU_PTSC MSR C0010280 89 89 90 * PwrCPUave: 90 * PwrCPUave: 91 CPU average power 91 CPU average power 92 92 93 i. Determine the ratio of Tsample to Tref by e 93 i. Determine the ratio of Tsample to Tref by executing CPUID Fn8000_0007. 94 94 95 N = value of CPUID Fn8000_0007_ECX[Cpu 95 N = value of CPUID Fn8000_0007_ECX[CpuPwrSampleTimeRatio[15:0]]. 96 96 97 ii. Read the full range of the cumulative ener 97 ii. Read the full range of the cumulative energy value from the new 98 MSR MaxCpuSwPwrAcc. 98 MSR MaxCpuSwPwrAcc. 99 99 100 Jmax = value returned. 100 Jmax = value returned. 101 101 102 iii. At time x, SW reads CpuSwPwrAcc MSR and s 102 iii. At time x, SW reads CpuSwPwrAcc MSR and samples the PTSC. 103 103 104 Jx = value read from CpuSwPwrAcc and T 104 Jx = value read from CpuSwPwrAcc and Tx = value read from PTSC. 105 105 106 iv. At time y, SW reads CpuSwPwrAcc MSR and sa 106 iv. At time y, SW reads CpuSwPwrAcc MSR and samples the PTSC. 107 107 108 Jy = value read from CpuSwPwrAcc and T 108 Jy = value read from CpuSwPwrAcc and Ty = value read from PTSC. 109 109 110 v. Calculate the average power consumption for 110 v. Calculate the average power consumption for a compute unit over 111 time period (y-x). Unit of result is uWatt: 111 time period (y-x). Unit of result is uWatt:: 112 112 113 if (Jy < Jx) // Rollover has occurred 113 if (Jy < Jx) // Rollover has occurred 114 Jdelta = (Jy + Jmax) - Jx 114 Jdelta = (Jy + Jmax) - Jx 115 else 115 else 116 Jdelta = Jy - Jx 116 Jdelta = Jy - Jx 117 PwrCPUave = N * Jdelta * 1000 / (Ty - 117 PwrCPUave = N * Jdelta * 1000 / (Ty - Tx) 118 118 119 This driver provides PwrCPUave and interval(de 119 This driver provides PwrCPUave and interval(default is 10 millisecond 120 and maximum is 1 second): 120 and maximum is 1 second): 121 121 122 * power1_average (PwrCPUave) 122 * power1_average (PwrCPUave) 123 * power1_average_interval (Interval) 123 * power1_average_interval (Interval) 124 124 125 The power1_average_interval can be updated at 125 The power1_average_interval can be updated at /etc/sensors3.conf file 126 as below: 126 as below: 127 127 128 chip `fam15h_power-*` 128 chip `fam15h_power-*` 129 set power1_average_interval 0.01 129 set power1_average_interval 0.01 130 130 131 Then save it with "sensors -s". 131 Then save it with "sensors -s".
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.