19338Srafael.vanoni@sun.com /* 29338Srafael.vanoni@sun.com * Copyright 2009, Intel Corporation 39338Srafael.vanoni@sun.com * Copyright 2009, Sun Microsystems, Inc 49338Srafael.vanoni@sun.com * 59338Srafael.vanoni@sun.com * This file is part of PowerTOP 69338Srafael.vanoni@sun.com * 79338Srafael.vanoni@sun.com * This program file is free software; you can redistribute it and/or modify it 89338Srafael.vanoni@sun.com * under the terms of the GNU General Public License as published by the 99338Srafael.vanoni@sun.com * Free Software Foundation; version 2 of the License. 109338Srafael.vanoni@sun.com * 119338Srafael.vanoni@sun.com * This program is distributed in the hope that it will be useful, but WITHOUT 129338Srafael.vanoni@sun.com * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 139338Srafael.vanoni@sun.com * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 149338Srafael.vanoni@sun.com * for more details. 159338Srafael.vanoni@sun.com * 169338Srafael.vanoni@sun.com * You should have received a copy of the GNU General Public License 179338Srafael.vanoni@sun.com * along with this program in a file named COPYING; if not, write to the 189338Srafael.vanoni@sun.com * Free Software Foundation, Inc., 199338Srafael.vanoni@sun.com * 51 Franklin Street, Fifth Floor, 209338Srafael.vanoni@sun.com * Boston, MA 02110-1301 USA 219338Srafael.vanoni@sun.com * 229338Srafael.vanoni@sun.com * Authors: 239338Srafael.vanoni@sun.com * Arjan van de Ven <arjan@linux.intel.com> 249338Srafael.vanoni@sun.com * Eric C Saxe <eric.saxe@sun.com> 259338Srafael.vanoni@sun.com * Aubrey Li <aubrey.li@intel.com> 269338Srafael.vanoni@sun.com */ 279338Srafael.vanoni@sun.com 289338Srafael.vanoni@sun.com /* 299338Srafael.vanoni@sun.com * GPL Disclaimer 309338Srafael.vanoni@sun.com * 319338Srafael.vanoni@sun.com * For the avoidance of doubt, except that if any license choice other 329338Srafael.vanoni@sun.com * than GPL or LGPL is available it will apply instead, Sun elects to 339338Srafael.vanoni@sun.com * use only the General Public License version 2 (GPLv2) at this time 349338Srafael.vanoni@sun.com * for any software where a choice of GPL license versions is made 359338Srafael.vanoni@sun.com * available with the language indicating that GPLv2 or any later 369338Srafael.vanoni@sun.com * version may be used, or where a choice of which version of the GPL 379338Srafael.vanoni@sun.com * is applied is otherwise unspecified. 389338Srafael.vanoni@sun.com */ 399338Srafael.vanoni@sun.com 409338Srafael.vanoni@sun.com /* 419338Srafael.vanoni@sun.com * DTrace scripts for observing interrupts, callouts and cyclic events 429338Srafael.vanoni@sun.com * that cause CPU activity. Such activity prevents the processor from 439338Srafael.vanoni@sun.com * entering lower power states and reducing power consumption. 449338Srafael.vanoni@sun.com * 459338Srafael.vanoni@sun.com * g_dtp_events is the default script 469338Srafael.vanoni@sun.com */ 479338Srafael.vanoni@sun.com const char *g_dtp_events = 489338Srafael.vanoni@sun.com "interrupt-complete" 499338Srafael.vanoni@sun.com "/arg0 != NULL && arg3 !=0/" 509338Srafael.vanoni@sun.com "{" 519338Srafael.vanoni@sun.com " this->devi = (struct dev_info *)arg0;" 529338Srafael.vanoni@sun.com " @interrupts[stringof(`devnamesp[this->devi->devi_major].dn_name)," 539338Srafael.vanoni@sun.com " this->devi->devi_instance] = count();" 549338Srafael.vanoni@sun.com "}" 559338Srafael.vanoni@sun.com "" 569338Srafael.vanoni@sun.com "sdt:::callout-start" 579338Srafael.vanoni@sun.com "/(caddr_t)((callout_t *)arg0)->c_func == (caddr_t)&`setrun/" 589338Srafael.vanoni@sun.com "{" 599338Srafael.vanoni@sun.com " this->thr = (kthread_t *)(((callout_t *)arg0)->c_arg);" 609338Srafael.vanoni@sun.com " @events_u[stringof(this->thr->t_procp->p_user.u_comm)] = count();" 619338Srafael.vanoni@sun.com "}" 629338Srafael.vanoni@sun.com "" 639338Srafael.vanoni@sun.com "sdt:::callout-start" 649338Srafael.vanoni@sun.com "/(caddr_t)((callout_t *)arg0)->c_func != (caddr_t)&`setrun/" 659338Srafael.vanoni@sun.com "{" 669338Srafael.vanoni@sun.com " @events_k[(caddr_t)((callout_t *)arg0)->c_func] = count();" 679338Srafael.vanoni@sun.com "}" 689338Srafael.vanoni@sun.com "" 699338Srafael.vanoni@sun.com "sdt:::cyclic-start" 709338Srafael.vanoni@sun.com "/(caddr_t)((cyclic_t *)arg0)->cy_handler == (caddr_t)&`clock/" 719338Srafael.vanoni@sun.com "{" 729338Srafael.vanoni@sun.com " @events_k[(caddr_t)((cyclic_t *)arg0)->cy_handler] = count();" 739338Srafael.vanoni@sun.com "}" 749338Srafael.vanoni@sun.com "" 759338Srafael.vanoni@sun.com "fbt::xc_common:entry" 769338Srafael.vanoni@sun.com "{" 779338Srafael.vanoni@sun.com " self->xc_func = arg0;" 789338Srafael.vanoni@sun.com "}" 799338Srafael.vanoni@sun.com "" 809338Srafael.vanoni@sun.com "sysinfo:::xcalls" 819338Srafael.vanoni@sun.com "/pid != $pid/" 829338Srafael.vanoni@sun.com "{" 839338Srafael.vanoni@sun.com " @events_x[execname, self->xc_func] = sum(arg0);" 849338Srafael.vanoni@sun.com "}" 859338Srafael.vanoni@sun.com "" 869338Srafael.vanoni@sun.com "fbt::xc_common:return" 879338Srafael.vanoni@sun.com "/self->xc_func/" 889338Srafael.vanoni@sun.com "{" 899338Srafael.vanoni@sun.com " self->xc_func = 0;" 909338Srafael.vanoni@sun.com "}"; 919338Srafael.vanoni@sun.com 929338Srafael.vanoni@sun.com /* 939338Srafael.vanoni@sun.com * g_dtp_events_v is enabled through the -v option, it includes cyclic events 949338Srafael.vanoni@sun.com * in the report, allowing a complete view of system activity 959338Srafael.vanoni@sun.com */ 969338Srafael.vanoni@sun.com const char *g_dtp_events_v = 979338Srafael.vanoni@sun.com "interrupt-complete" 989338Srafael.vanoni@sun.com "/arg0 != NULL && arg3 !=0/" 999338Srafael.vanoni@sun.com "{" 1009338Srafael.vanoni@sun.com " this->devi = (struct dev_info *)arg0;" 1019338Srafael.vanoni@sun.com " @interrupts[stringof(`devnamesp[this->devi->devi_major].dn_name)," 1029338Srafael.vanoni@sun.com " this->devi->devi_instance] = count();" 1039338Srafael.vanoni@sun.com "}" 1049338Srafael.vanoni@sun.com "" 1059338Srafael.vanoni@sun.com "sdt:::callout-start" 1069338Srafael.vanoni@sun.com "/(caddr_t)((callout_t *)arg0)->c_func == (caddr_t)&`setrun/" 1079338Srafael.vanoni@sun.com "{" 1089338Srafael.vanoni@sun.com " this->thr = (kthread_t *)(((callout_t *)arg0)->c_arg);" 1099338Srafael.vanoni@sun.com " @events_u[stringof(this->thr->t_procp->p_user.u_comm)] = count();" 1109338Srafael.vanoni@sun.com "}" 1119338Srafael.vanoni@sun.com "" 1129338Srafael.vanoni@sun.com "sdt:::callout-start" 1139338Srafael.vanoni@sun.com "/(caddr_t)((callout_t *)arg0)->c_func != (caddr_t)&`setrun/" 1149338Srafael.vanoni@sun.com "{" 1159338Srafael.vanoni@sun.com " @events_k[(caddr_t)((callout_t *)arg0)->c_func] = count();" 1169338Srafael.vanoni@sun.com "}" 1179338Srafael.vanoni@sun.com "" 1189338Srafael.vanoni@sun.com "sdt:::cyclic-start" 1199338Srafael.vanoni@sun.com "/(caddr_t)((cyclic_t *)arg0)->cy_handler != (caddr_t)&`dtrace_state_deadman &&" 1209338Srafael.vanoni@sun.com " (caddr_t)((cyclic_t *)arg0)->cy_handler != (caddr_t)&`dtrace_state_clean/" 1219338Srafael.vanoni@sun.com "{" 1229338Srafael.vanoni@sun.com " @events_k[(caddr_t)((cyclic_t *)arg0)->cy_handler] = count();" 1239338Srafael.vanoni@sun.com "}" 1249338Srafael.vanoni@sun.com "" 1259338Srafael.vanoni@sun.com "fbt::xc_common:entry" 1269338Srafael.vanoni@sun.com "{" 1279338Srafael.vanoni@sun.com " self->xc_func = arg0;" 1289338Srafael.vanoni@sun.com "}" 1299338Srafael.vanoni@sun.com "" 1309338Srafael.vanoni@sun.com "sysinfo:::xcalls" 1319338Srafael.vanoni@sun.com "/pid != $pid/" 1329338Srafael.vanoni@sun.com "{" 1339338Srafael.vanoni@sun.com " @events_x[execname, self->xc_func] = sum(arg0);" 1349338Srafael.vanoni@sun.com "}" 1359338Srafael.vanoni@sun.com "" 1369338Srafael.vanoni@sun.com "fbt::xc_common:return" 1379338Srafael.vanoni@sun.com "/self->xc_func/" 1389338Srafael.vanoni@sun.com "{" 1399338Srafael.vanoni@sun.com " self->xc_func = 0;" 1409338Srafael.vanoni@sun.com "}"; 1419338Srafael.vanoni@sun.com 1429338Srafael.vanoni@sun.com /* 1439338Srafael.vanoni@sun.com * This script is selected through the -c option, it takes the CPU id as 1449338Srafael.vanoni@sun.com * argument and observes activity generated by that CPU 1459338Srafael.vanoni@sun.com */ 1469338Srafael.vanoni@sun.com const char *g_dtp_events_c = 1479338Srafael.vanoni@sun.com "interrupt-complete" 1489338Srafael.vanoni@sun.com "/cpu == $0 &&" 1499338Srafael.vanoni@sun.com " arg0 != NULL && arg3 != 0/" 1509338Srafael.vanoni@sun.com "{" 1519338Srafael.vanoni@sun.com " this->devi = (struct dev_info *)arg0;" 1529338Srafael.vanoni@sun.com " @interrupts[stringof(`devnamesp[this->devi->devi_major].dn_name)," 1539338Srafael.vanoni@sun.com " this->devi->devi_instance] = count();" 1549338Srafael.vanoni@sun.com "}" 1559338Srafael.vanoni@sun.com "" 1569338Srafael.vanoni@sun.com "sdt:::callout-start" 1579338Srafael.vanoni@sun.com "/cpu == $0 &&" 1589338Srafael.vanoni@sun.com " (caddr_t)((callout_t *)arg0)->c_func == (caddr_t)&`setrun/" 1599338Srafael.vanoni@sun.com "{" 1609338Srafael.vanoni@sun.com " this->thr = (kthread_t *)(((callout_t *)arg0)->c_arg);" 1619338Srafael.vanoni@sun.com " @events_u[stringof(this->thr->t_procp->p_user.u_comm)] = count();" 1629338Srafael.vanoni@sun.com "}" 1639338Srafael.vanoni@sun.com "" 1649338Srafael.vanoni@sun.com "sdt:::callout-start" 1659338Srafael.vanoni@sun.com "/cpu == $0 &&" 1669338Srafael.vanoni@sun.com " (caddr_t)((callout_t *)arg0)->c_func != (caddr_t)&`setrun/" 1679338Srafael.vanoni@sun.com "{" 1689338Srafael.vanoni@sun.com " @events_k[(caddr_t)((callout_t *)arg0)->c_func] = count();" 1699338Srafael.vanoni@sun.com "}" 1709338Srafael.vanoni@sun.com "" 1719338Srafael.vanoni@sun.com "sdt:::cyclic-start" 1729338Srafael.vanoni@sun.com "/cpu == $0 &&" 1739338Srafael.vanoni@sun.com " (caddr_t)((cyclic_t *)arg0)->cy_handler == (caddr_t)&`clock/" 1749338Srafael.vanoni@sun.com "{" 1759338Srafael.vanoni@sun.com " @events_k[(caddr_t)((cyclic_t *)arg0)->cy_handler] = count();" 1769338Srafael.vanoni@sun.com "}" 1779338Srafael.vanoni@sun.com "" 1789338Srafael.vanoni@sun.com "fbt::xc_common:entry" 1799338Srafael.vanoni@sun.com "/cpu == $0/" 1809338Srafael.vanoni@sun.com "{" 1819338Srafael.vanoni@sun.com " self->xc_func = arg0;" 1829338Srafael.vanoni@sun.com "}" 1839338Srafael.vanoni@sun.com "" 1849338Srafael.vanoni@sun.com "sysinfo:::xcalls" 1859338Srafael.vanoni@sun.com "/pid != $pid &&" 1869338Srafael.vanoni@sun.com " cpu == $0/" 1879338Srafael.vanoni@sun.com "{" 1889338Srafael.vanoni@sun.com " @events_x[execname, self->xc_func] = count();" 1899338Srafael.vanoni@sun.com "}" 1909338Srafael.vanoni@sun.com "" 1919338Srafael.vanoni@sun.com "fbt::xc_common:return" 1929338Srafael.vanoni@sun.com "/cpu == $0 &&" 1939338Srafael.vanoni@sun.com " self->xc_func/" 1949338Srafael.vanoni@sun.com "{" 1959338Srafael.vanoni@sun.com " self->xc_func = 0;" 1969338Srafael.vanoni@sun.com "}" 1979338Srafael.vanoni@sun.com "" 1989338Srafael.vanoni@sun.com "fbt::xc_common:entry" 1999338Srafael.vanoni@sun.com "/cpu != $0/" 2009338Srafael.vanoni@sun.com "{" 2019338Srafael.vanoni@sun.com " self->xc_func = arg0;" 2029338Srafael.vanoni@sun.com " self->xc_cpu = cpu;" 2039338Srafael.vanoni@sun.com "}" 2049338Srafael.vanoni@sun.com "" 2059338Srafael.vanoni@sun.com "fbt::send_dirint:entry" 2069338Srafael.vanoni@sun.com "/pid != $pid &&" 2079338Srafael.vanoni@sun.com " self->xc_func &&" 2089338Srafael.vanoni@sun.com " arg0 == $0/" 2099338Srafael.vanoni@sun.com "{" 2109338Srafael.vanoni@sun.com " @events_xc[execname, self->xc_func, self->xc_cpu] = count();" 2119338Srafael.vanoni@sun.com " self->xc_func = 0;" 2129338Srafael.vanoni@sun.com " self->xc_cpu = 0;" 2139338Srafael.vanoni@sun.com "}"; 2149338Srafael.vanoni@sun.com 2159338Srafael.vanoni@sun.com /* 2169338Srafael.vanoni@sun.com * i386 platform specific display messages 2179338Srafael.vanoni@sun.com */ 2189711Srafael.vanoni@sun.com const char *g_msg_idle_state = "C-states (idle power)"; 2199338Srafael.vanoni@sun.com const char *g_msg_freq_state = "P-states (frequencies)"; 220*9908Srafael.vanoni@sun.com const char *g_msg_freq_enable = "P - Enable P-states"; 221