xref: /linux/Documentation/cpu-freq/cpufreq-stats.rst (revision ead5d1f4d877e92c051e1a1ade623d0d30e71619)
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