1*aadfa206SMauro Carvalho Chehab.. SPDX-License-Identifier: GPL-2.0 2*aadfa206SMauro Carvalho Chehab 3*aadfa206SMauro Carvalho Chehab========================================== 4*aadfa206SMauro Carvalho ChehabGeneral Description of sysfs CPUFreq Stats 5*aadfa206SMauro Carvalho Chehab========================================== 6*aadfa206SMauro Carvalho Chehab 7*aadfa206SMauro Carvalho Chehabinformation for users 8*aadfa206SMauro Carvalho Chehab 9*aadfa206SMauro Carvalho Chehab 10*aadfa206SMauro Carvalho ChehabAuthor: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com> 11*aadfa206SMauro Carvalho Chehab 12*aadfa206SMauro Carvalho Chehab.. Contents 13*aadfa206SMauro Carvalho Chehab 14*aadfa206SMauro Carvalho Chehab 1. Introduction 15*aadfa206SMauro Carvalho Chehab 2. Statistics Provided (with example) 16*aadfa206SMauro Carvalho Chehab 3. Configuring cpufreq-stats 17*aadfa206SMauro Carvalho Chehab 18*aadfa206SMauro Carvalho Chehab 19*aadfa206SMauro Carvalho Chehab1. Introduction 20*aadfa206SMauro Carvalho Chehab=============== 21*aadfa206SMauro Carvalho Chehab 22*aadfa206SMauro Carvalho Chehabcpufreq-stats is a driver that provides CPU frequency statistics for each CPU. 23*aadfa206SMauro Carvalho ChehabThese statistics are provided in /sysfs as a bunch of read_only interfaces. This 24*aadfa206SMauro Carvalho Chehabinterface (when configured) will appear in a separate directory under cpufreq 25*aadfa206SMauro Carvalho Chehabin /sysfs (<sysfs root>/devices/system/cpu/cpuX/cpufreq/stats/) for each CPU. 26*aadfa206SMauro Carvalho ChehabVarious statistics will form read_only files under this directory. 27*aadfa206SMauro Carvalho Chehab 28*aadfa206SMauro Carvalho ChehabThis driver is designed to be independent of any particular cpufreq_driver 29*aadfa206SMauro Carvalho Chehabthat may be running on your CPU. So, it will work with any cpufreq_driver. 30*aadfa206SMauro Carvalho Chehab 31*aadfa206SMauro Carvalho Chehab 32*aadfa206SMauro Carvalho Chehab2. Statistics Provided (with example) 33*aadfa206SMauro Carvalho Chehab===================================== 34*aadfa206SMauro Carvalho Chehab 35*aadfa206SMauro Carvalho Chehabcpufreq stats provides following statistics (explained in detail below). 36*aadfa206SMauro Carvalho Chehab 37*aadfa206SMauro Carvalho Chehab- time_in_state 38*aadfa206SMauro Carvalho Chehab- total_trans 39*aadfa206SMauro Carvalho Chehab- trans_table 40*aadfa206SMauro Carvalho Chehab 41*aadfa206SMauro Carvalho ChehabAll the statistics will be from the time the stats driver has been inserted 42*aadfa206SMauro Carvalho Chehab(or the time the stats were reset) to the time when a read of a particular 43*aadfa206SMauro Carvalho Chehabstatistic is done. Obviously, stats driver will not have any information 44*aadfa206SMauro Carvalho Chehababout the frequency transitions before the stats driver insertion. 45*aadfa206SMauro Carvalho Chehab 46*aadfa206SMauro Carvalho Chehab:: 47*aadfa206SMauro Carvalho Chehab 48*aadfa206SMauro Carvalho Chehab <mysystem>:/sys/devices/system/cpu/cpu0/cpufreq/stats # ls -l 49*aadfa206SMauro Carvalho Chehab total 0 50*aadfa206SMauro Carvalho Chehab drwxr-xr-x 2 root root 0 May 14 16:06 . 51*aadfa206SMauro Carvalho Chehab drwxr-xr-x 3 root root 0 May 14 15:58 .. 52*aadfa206SMauro Carvalho Chehab --w------- 1 root root 4096 May 14 16:06 reset 53*aadfa206SMauro Carvalho Chehab -r--r--r-- 1 root root 4096 May 14 16:06 time_in_state 54*aadfa206SMauro Carvalho Chehab -r--r--r-- 1 root root 4096 May 14 16:06 total_trans 55*aadfa206SMauro Carvalho Chehab -r--r--r-- 1 root root 4096 May 14 16:06 trans_table 56*aadfa206SMauro Carvalho Chehab 57*aadfa206SMauro Carvalho Chehab- **reset** 58*aadfa206SMauro Carvalho Chehab 59*aadfa206SMauro Carvalho ChehabWrite-only attribute that can be used to reset the stat counters. This can be 60*aadfa206SMauro Carvalho Chehabuseful for evaluating system behaviour under different governors without the 61*aadfa206SMauro Carvalho Chehabneed for a reboot. 62*aadfa206SMauro Carvalho Chehab 63*aadfa206SMauro Carvalho Chehab- **time_in_state** 64*aadfa206SMauro Carvalho Chehab 65*aadfa206SMauro Carvalho ChehabThis gives the amount of time spent in each of the frequencies supported by 66*aadfa206SMauro Carvalho Chehabthis CPU. The cat output will have "<frequency> <time>" pair in each line, which 67*aadfa206SMauro Carvalho Chehabwill mean this CPU spent <time> usertime units of time at <frequency>. Output 68*aadfa206SMauro Carvalho Chehabwill have one line for each of the supported frequencies. usertime units here 69*aadfa206SMauro Carvalho Chehabis 10mS (similar to other time exported in /proc). 70*aadfa206SMauro Carvalho Chehab 71*aadfa206SMauro Carvalho Chehab:: 72*aadfa206SMauro Carvalho Chehab 73*aadfa206SMauro Carvalho Chehab <mysystem>:/sys/devices/system/cpu/cpu0/cpufreq/stats # cat time_in_state 74*aadfa206SMauro Carvalho Chehab 3600000 2089 75*aadfa206SMauro Carvalho Chehab 3400000 136 76*aadfa206SMauro Carvalho Chehab 3200000 34 77*aadfa206SMauro Carvalho Chehab 3000000 67 78*aadfa206SMauro Carvalho Chehab 2800000 172488 79*aadfa206SMauro Carvalho Chehab 80*aadfa206SMauro Carvalho Chehab 81*aadfa206SMauro Carvalho Chehab- **total_trans** 82*aadfa206SMauro Carvalho Chehab 83*aadfa206SMauro Carvalho ChehabThis gives the total number of frequency transitions on this CPU. The cat 84*aadfa206SMauro Carvalho Chehaboutput will have a single count which is the total number of frequency 85*aadfa206SMauro Carvalho Chehabtransitions. 86*aadfa206SMauro Carvalho Chehab 87*aadfa206SMauro Carvalho Chehab:: 88*aadfa206SMauro Carvalho Chehab 89*aadfa206SMauro Carvalho Chehab <mysystem>:/sys/devices/system/cpu/cpu0/cpufreq/stats # cat total_trans 90*aadfa206SMauro Carvalho Chehab 20 91*aadfa206SMauro Carvalho Chehab 92*aadfa206SMauro Carvalho Chehab- **trans_table** 93*aadfa206SMauro Carvalho Chehab 94*aadfa206SMauro Carvalho ChehabThis will give a fine grained information about all the CPU frequency 95*aadfa206SMauro Carvalho Chehabtransitions. The cat output here is a two dimensional matrix, where an entry 96*aadfa206SMauro Carvalho Chehab<i,j> (row i, column j) represents the count of number of transitions from 97*aadfa206SMauro Carvalho ChehabFreq_i to Freq_j. Freq_i rows and Freq_j columns follow the sorting order in 98*aadfa206SMauro Carvalho Chehabwhich the driver has provided the frequency table initially to the cpufreq core 99*aadfa206SMauro Carvalho Chehaband so can be sorted (ascending or descending) or unsorted. The output here 100*aadfa206SMauro Carvalho Chehabalso contains the actual freq values for each row and column for better 101*aadfa206SMauro Carvalho Chehabreadability. 102*aadfa206SMauro Carvalho Chehab 103*aadfa206SMauro Carvalho ChehabIf the transition table is bigger than PAGE_SIZE, reading this will 104*aadfa206SMauro Carvalho Chehabreturn an -EFBIG error. 105*aadfa206SMauro Carvalho Chehab 106*aadfa206SMauro Carvalho Chehab:: 107*aadfa206SMauro Carvalho Chehab 108*aadfa206SMauro Carvalho Chehab <mysystem>:/sys/devices/system/cpu/cpu0/cpufreq/stats # cat trans_table 109*aadfa206SMauro Carvalho Chehab From : To 110*aadfa206SMauro Carvalho Chehab : 3600000 3400000 3200000 3000000 2800000 111*aadfa206SMauro Carvalho Chehab 3600000: 0 5 0 0 0 112*aadfa206SMauro Carvalho Chehab 3400000: 4 0 2 0 0 113*aadfa206SMauro Carvalho Chehab 3200000: 0 1 0 2 0 114*aadfa206SMauro Carvalho Chehab 3000000: 0 0 1 0 3 115*aadfa206SMauro Carvalho Chehab 2800000: 0 0 0 2 0 116*aadfa206SMauro Carvalho Chehab 117*aadfa206SMauro Carvalho Chehab3. Configuring cpufreq-stats 118*aadfa206SMauro Carvalho Chehab============================ 119*aadfa206SMauro Carvalho Chehab 120*aadfa206SMauro Carvalho ChehabTo configure cpufreq-stats in your kernel:: 121*aadfa206SMauro Carvalho Chehab 122*aadfa206SMauro Carvalho Chehab Config Main Menu 123*aadfa206SMauro Carvalho Chehab Power management options (ACPI, APM) ---> 124*aadfa206SMauro Carvalho Chehab CPU Frequency scaling ---> 125*aadfa206SMauro Carvalho Chehab [*] CPU Frequency scaling 126*aadfa206SMauro Carvalho Chehab [*] CPU frequency translation statistics 127*aadfa206SMauro Carvalho Chehab 128*aadfa206SMauro Carvalho Chehab 129*aadfa206SMauro Carvalho Chehab"CPU Frequency scaling" (CONFIG_CPU_FREQ) should be enabled to configure 130*aadfa206SMauro Carvalho Chehabcpufreq-stats. 131*aadfa206SMauro Carvalho Chehab 132*aadfa206SMauro Carvalho Chehab"CPU frequency translation statistics" (CONFIG_CPU_FREQ_STAT) provides the 133*aadfa206SMauro Carvalho Chehabstatistics which includes time_in_state, total_trans and trans_table. 134*aadfa206SMauro Carvalho Chehab 135*aadfa206SMauro Carvalho ChehabOnce this option is enabled and your CPU supports cpufrequency, you 136*aadfa206SMauro Carvalho Chehabwill be able to see the CPU frequency statistics in /sysfs. 137