2 * activity.c: Define system activities available for sar/sadc.
3 * (C) 1999-2010 by Sebastien GODARD (sysstat <at> orange.fr)
5 ***************************************************************************
6 * This program is free software; you can redistribute it and/or modify it *
7 * under the terms of the GNU General Public License as published by the *
8 * Free Software Foundation; either version 2 of the License, or (at your *
9 * option) any later version. *
11 * This program is distributed in the hope that it will be useful, but *
12 * WITHOUT ANY WARRANTY; without the implied warranty of MERCHANTABILITY *
13 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License *
16 * You should have received a copy of the GNU General Public License along *
17 * with this program; if not, write to the Free Software Foundation, Inc., *
18 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
19 ***************************************************************************
33 #include "rndr_stats.h"
34 #include "xml_stats.h"
38 ***************************************************************************
39 * Definitions of system activities.
40 * See sa.h file for activity structure definition.
41 ***************************************************************************
45 * Bitmaps needed by activities.
46 * Remember to allocate them before use!
50 struct act_bitmap cpu_bitmap = {
55 /* Interrupts bitmap */
56 struct act_bitmap irq_bitmap = {
64 * This is the only activity which *must* be collected by sadc
65 * so that uptime can be filled.
67 struct activity cpu_act = {
69 .options = AO_COLLECTED + AO_REMANENT + AO_GLOBAL_ITV + AO_MULTIPLE_OUTPUTS,
70 .magic = ACTIVITY_MAGIC_BASE,
72 .f_count = wrap_get_cpu_nr,
74 .f_read = wrap_read_stat_cpu,
77 .f_print = print_cpu_stats,
78 .f_print_avg = print_cpu_stats,
81 .f_render = render_cpu_stats,
82 .f_xml_print = xml_print_cpu_stats,
83 .hdr_line = "CPU;%user;%nice;%system;%iowait;%steal;%idle|"
84 "CPU;%usr;%nice;%sys;%iowait;%steal;%irq;%soft;%guest;%idle",
89 .fsize = STATS_CPU_SIZE,
90 .msize = STATS_CPU_SIZE,
91 .opt_flags = AO_F_CPU_DEF,
92 .buf = {NULL, NULL, NULL},
96 /* Process (task) creation and context switch activity */
97 struct activity pcsw_act = {
99 .options = AO_COLLECTED,
100 .magic = ACTIVITY_MAGIC_BASE,
104 .f_read = wrap_read_stat_pcsw,
107 .f_print = print_pcsw_stats,
108 .f_print_avg = print_pcsw_stats,
111 .f_render = render_pcsw_stats,
112 .f_xml_print = xml_print_pcsw_stats,
113 .hdr_line = "proc/s;cswch/s",
118 .fsize = STATS_PCSW_SIZE,
119 .msize = STATS_PCSW_SIZE,
121 .buf = {NULL, NULL, NULL},
125 /* Interrupts statistics */
126 struct activity irq_act = {
129 .magic = ACTIVITY_MAGIC_BASE,
131 .f_count = wrap_get_irq_nr,
133 .f_read = wrap_read_stat_irq,
136 .f_print = print_irq_stats,
137 .f_print_avg = print_irq_stats,
140 .f_render = render_irq_stats,
141 .f_xml_print = xml_print_irq_stats,
142 .hdr_line = "INTR;intr/s",
147 .fsize = STATS_IRQ_SIZE,
148 .msize = STATS_IRQ_SIZE,
150 .buf = {NULL, NULL, NULL},
151 .bitmap = &irq_bitmap
154 /* Swapping activity */
155 struct activity swap_act = {
157 .options = AO_COLLECTED,
158 .magic = ACTIVITY_MAGIC_BASE,
162 .f_read = wrap_read_swap,
165 .f_print = print_swap_stats,
166 .f_print_avg = print_swap_stats,
169 .f_render = render_swap_stats,
170 .f_xml_print = xml_print_swap_stats,
171 .hdr_line = "pswpin/s;pswpout/s",
176 .fsize = STATS_SWAP_SIZE,
177 .msize = STATS_SWAP_SIZE,
179 .buf = {NULL, NULL, NULL},
183 /* Paging activity */
184 struct activity paging_act = {
186 .options = AO_COLLECTED,
187 .magic = ACTIVITY_MAGIC_BASE,
191 .f_read = wrap_read_paging,
194 .f_print = print_paging_stats,
195 .f_print_avg = print_paging_stats,
198 .f_render = render_paging_stats,
199 .f_xml_print = xml_print_paging_stats,
200 .hdr_line = "pgpgin/s;pgpgout/s;fault/s;majflt/s;"
201 "pgfree/s;pgscank/s;pgscand/s;pgsteal/s;%vmeff",
206 .fsize = STATS_PAGING_SIZE,
207 .msize = STATS_PAGING_SIZE,
209 .buf = {NULL, NULL, NULL},
213 /* I/O and transfer rate activity */
214 struct activity io_act = {
216 .options = AO_COLLECTED,
217 .magic = ACTIVITY_MAGIC_BASE,
221 .f_read = wrap_read_io,
224 .f_print = print_io_stats,
225 .f_print_avg = print_io_stats,
228 .f_render = render_io_stats,
229 .f_xml_print = xml_print_io_stats,
230 .hdr_line = "tps;rtps;wtps;bread/s;bwrtn/s",
235 .fsize = STATS_IO_SIZE,
236 .msize = STATS_IO_SIZE,
238 .buf = {NULL, NULL, NULL},
242 /* Memory and swap space utilization activity */
243 struct activity memory_act = {
245 .options = AO_COLLECTED + AO_MULTIPLE_OUTPUTS,
246 .magic = ACTIVITY_MAGIC_BASE,
250 .f_read = wrap_read_meminfo,
253 .f_print = print_memory_stats,
254 .f_print_avg = print_avg_memory_stats,
257 .f_render = render_memory_stats,
258 .f_xml_print = xml_print_memory_stats,
259 .hdr_line = "frmpg/s;bufpg/s;campg/s|"
260 "kbmemfree;kbmemused;%memused;kbbuffers;kbcached;kbcommit;%commit|"
261 "kbswpfree;kbswpused;%swpused;kbswpcad;%swpcad",
266 .fsize = STATS_MEMORY_SIZE,
267 .msize = STATS_MEMORY_SIZE,
269 .buf = {NULL, NULL, NULL},
273 /* Kernel tables activity */
274 struct activity ktables_act = {
276 .options = AO_COLLECTED,
277 .magic = ACTIVITY_MAGIC_BASE,
281 .f_read = wrap_read_kernel_tables,
284 .f_print = print_ktables_stats,
285 .f_print_avg = print_avg_ktables_stats,
288 .f_render = render_ktables_stats,
289 .f_xml_print = xml_print_ktables_stats,
290 .hdr_line = "dentunusd;file-nr;inode-nr;pty-nr",
295 .fsize = STATS_KTABLES_SIZE,
296 .msize = STATS_KTABLES_SIZE,
298 .buf = {NULL, NULL, NULL},
302 /* Queue and load activity */
303 struct activity queue_act = {
305 .options = AO_COLLECTED,
306 .magic = ACTIVITY_MAGIC_BASE,
310 .f_read = wrap_read_loadavg,
313 .f_print = print_queue_stats,
314 .f_print_avg = print_avg_queue_stats,
317 .f_render = render_queue_stats,
318 .f_xml_print = xml_print_queue_stats,
319 .hdr_line = "runq-sz;plist-sz;ldavg-1;ldavg-5;ldavg-15",
324 .fsize = STATS_QUEUE_SIZE,
325 .msize = STATS_QUEUE_SIZE,
327 .buf = {NULL, NULL, NULL},
331 /* Serial lines activity */
332 struct activity serial_act = {
334 .options = AO_COLLECTED,
335 .magic = ACTIVITY_MAGIC_BASE,
337 .f_count = wrap_get_serial_nr,
339 .f_read = wrap_read_tty_driver_serial,
342 .f_print = print_serial_stats,
343 .f_print_avg = print_serial_stats,
346 .f_render = render_serial_stats,
347 .f_xml_print = xml_print_serial_stats,
348 .hdr_line = "TTY;rcvin/s;txmtin/s;framerr/s;prtyerr/s;brk/s;ovrun/s",
353 .fsize = STATS_SERIAL_SIZE,
354 .msize = STATS_SERIAL_SIZE,
356 .buf = {NULL, NULL, NULL},
360 /* Block devices activity */
361 struct activity disk_act = {
364 .magic = ACTIVITY_MAGIC_BASE,
366 .f_count = wrap_get_disk_nr,
368 .f_read = wrap_read_disk,
371 .f_print = print_disk_stats,
372 .f_print_avg = print_disk_stats,
375 .f_render = render_disk_stats,
376 .f_xml_print = xml_print_disk_stats,
377 .hdr_line = "DEV;tps;rd_sec/s;wr_sec/s;avgrq-sz;avgqu-sz;await;svctm;%util",
382 .fsize = STATS_DISK_SIZE,
383 .msize = STATS_DISK_SIZE,
385 .buf = {NULL, NULL, NULL},
389 /* Network interfaces activity */
390 struct activity net_dev_act = {
392 .options = AO_COLLECTED,
393 .magic = ACTIVITY_MAGIC_BASE,
395 .f_count = wrap_get_iface_nr,
397 .f_read = wrap_read_net_dev,
400 .f_print = print_net_dev_stats,
401 .f_print_avg = print_net_dev_stats,
404 .f_render = render_net_dev_stats,
405 .f_xml_print = xml_print_net_dev_stats,
406 .hdr_line = "IFACE;rxpck/s;txpck/s;rxkB/s;txkB/s;rxcmp/s;txcmp/s;rxmcst/s",
411 .fsize = STATS_NET_DEV_SIZE,
412 .msize = STATS_NET_DEV_SIZE,
414 .buf = {NULL, NULL, NULL},
418 /* Network interfaces activity */
419 struct activity net_edev_act = {
421 .options = AO_COLLECTED,
422 .magic = ACTIVITY_MAGIC_BASE,
424 .f_count = wrap_get_iface_nr,
426 .f_read = wrap_read_net_edev,
429 .f_print = print_net_edev_stats,
430 .f_print_avg = print_net_edev_stats,
433 .f_render = render_net_edev_stats,
434 .f_xml_print = xml_print_net_edev_stats,
435 .hdr_line = "IFACE;rxerr/s;txerr/s;coll/s;rxdrop/s;txdrop/s;"
436 "txcarr/s;rxfram/s;rxfifo/s;txfifo/s",
437 .name = "A_NET_EDEV",
441 .fsize = STATS_NET_EDEV_SIZE,
442 .msize = STATS_NET_EDEV_SIZE,
444 .buf = {NULL, NULL, NULL},
448 /* NFS client activity */
449 struct activity net_nfs_act = {
451 .options = AO_COLLECTED,
452 .magic = ACTIVITY_MAGIC_BASE,
456 .f_read = wrap_read_net_nfs,
459 .f_print = print_net_nfs_stats,
460 .f_print_avg = print_net_nfs_stats,
463 .f_render = render_net_nfs_stats,
464 .f_xml_print = xml_print_net_nfs_stats,
465 .hdr_line = "call/s;retrans/s;read/s;write/s;access/s;getatt/s",
470 .fsize = STATS_NET_NFS_SIZE,
471 .msize = STATS_NET_NFS_SIZE,
473 .buf = {NULL, NULL, NULL},
477 /* NFS server activity */
478 struct activity net_nfsd_act = {
480 .options = AO_COLLECTED,
481 .magic = ACTIVITY_MAGIC_BASE,
485 .f_read = wrap_read_net_nfsd,
488 .f_print = print_net_nfsd_stats,
489 .f_print_avg = print_net_nfsd_stats,
492 .f_render = render_net_nfsd_stats,
493 .f_xml_print = xml_print_net_nfsd_stats,
494 .hdr_line = "scall/s;badcall/s;packet/s;udp/s;tcp/s;hit/s;miss/s;"
495 "sread/s;swrite/s;saccess/s;sgetatt/s",
496 .name = "A_NET_NFSD",
500 .fsize = STATS_NET_NFSD_SIZE,
501 .msize = STATS_NET_NFSD_SIZE,
503 .buf = {NULL, NULL, NULL},
507 /* Network sockets activity */
508 struct activity net_sock_act = {
510 .options = AO_COLLECTED,
511 .magic = ACTIVITY_MAGIC_BASE,
515 .f_read = wrap_read_net_sock,
518 .f_print = print_net_sock_stats,
519 .f_print_avg = print_avg_net_sock_stats,
522 .f_render = render_net_sock_stats,
523 .f_xml_print = xml_print_net_sock_stats,
524 .hdr_line = "totsck;tcpsck;udpsck;rawsck;ip-frag;tcp-tw",
525 .name = "A_NET_SOCK",
529 .fsize = STATS_NET_SOCK_SIZE,
530 .msize = STATS_NET_SOCK_SIZE,
532 .buf = {NULL, NULL, NULL},
536 /* IP network traffic activity */
537 struct activity net_ip_act = {
540 .magic = ACTIVITY_MAGIC_BASE,
544 .f_read = wrap_read_net_ip,
547 .f_print = print_net_ip_stats,
548 .f_print_avg = print_net_ip_stats,
551 .f_render = render_net_ip_stats,
552 .f_xml_print = xml_print_net_ip_stats,
553 .hdr_line = "irec/s;fwddgm/s;idel/s;orq/s;asmrq/s;asmok/s;fragok/s;fragcrt/s",
558 .fsize = STATS_NET_IP_SIZE,
559 .msize = STATS_NET_IP_SIZE,
561 .buf = {NULL, NULL, NULL},
565 /* IP network traffic (errors) activity */
566 struct activity net_eip_act = {
569 .magic = ACTIVITY_MAGIC_BASE,
573 .f_read = wrap_read_net_eip,
576 .f_print = print_net_eip_stats,
577 .f_print_avg = print_net_eip_stats,
580 .f_render = render_net_eip_stats,
581 .f_xml_print = xml_print_net_eip_stats,
582 .hdr_line = "ihdrerr/s;iadrerr/s;iukwnpr/s;idisc/s;odisc/s;onort/s;asmf/s;fragf/s",
587 .fsize = STATS_NET_EIP_SIZE,
588 .msize = STATS_NET_EIP_SIZE,
590 .buf = {NULL, NULL, NULL},
594 /* ICMP network traffic activity */
595 struct activity net_icmp_act = {
598 .magic = ACTIVITY_MAGIC_BASE,
602 .f_read = wrap_read_net_icmp,
605 .f_print = print_net_icmp_stats,
606 .f_print_avg = print_net_icmp_stats,
609 .f_render = render_net_icmp_stats,
610 .f_xml_print = xml_print_net_icmp_stats,
611 .hdr_line = "imsg/s;omsg/s;iech/s;iechr/s;oech/s;oechr/s;itm/s;itmr/s;otm/s;"
612 "otmr/s;iadrmk/s;iadrmkr/s;oadrmk/s;oadrmkr/s",
613 .name = "A_NET_ICMP",
617 .fsize = STATS_NET_ICMP_SIZE,
618 .msize = STATS_NET_ICMP_SIZE,
620 .buf = {NULL, NULL, NULL},
624 /* ICMP network traffic (errors) activity */
625 struct activity net_eicmp_act = {
628 .magic = ACTIVITY_MAGIC_BASE,
632 .f_read = wrap_read_net_eicmp,
635 .f_print = print_net_eicmp_stats,
636 .f_print_avg = print_net_eicmp_stats,
639 .f_render = render_net_eicmp_stats,
640 .f_xml_print = xml_print_net_eicmp_stats,
641 .hdr_line = "ierr/s;oerr/s;idstunr/s;odstunr/s;itmex/s;otmex/s;"
642 "iparmpb/s;oparmpb/s;isrcq/s;osrcq/s;iredir/s;oredir/s",
643 .name = "A_NET_EICMP",
647 .fsize = STATS_NET_EICMP_SIZE,
648 .msize = STATS_NET_EICMP_SIZE,
650 .buf = {NULL, NULL, NULL},
654 /* TCP network traffic activity */
655 struct activity net_tcp_act = {
658 .magic = ACTIVITY_MAGIC_BASE,
662 .f_read = wrap_read_net_tcp,
665 .f_print = print_net_tcp_stats,
666 .f_print_avg = print_net_tcp_stats,
669 .f_render = render_net_tcp_stats,
670 .f_xml_print = xml_print_net_tcp_stats,
671 .hdr_line = "active/s;passive/s;iseg/s;oseg/s",
676 .fsize = STATS_NET_TCP_SIZE,
677 .msize = STATS_NET_TCP_SIZE,
679 .buf = {NULL, NULL, NULL},
683 /* TCP network traffic (errors) activity */
684 struct activity net_etcp_act = {
687 .magic = ACTIVITY_MAGIC_BASE,
691 .f_read = wrap_read_net_etcp,
694 .f_print = print_net_etcp_stats,
695 .f_print_avg = print_net_etcp_stats,
698 .f_render = render_net_etcp_stats,
699 .f_xml_print = xml_print_net_etcp_stats,
700 .hdr_line = "atmptf/s;estres/s;retrans/s;isegerr/s;orsts/s",
701 .name = "A_NET_ETCP",
705 .fsize = STATS_NET_ETCP_SIZE,
706 .msize = STATS_NET_ETCP_SIZE,
708 .buf = {NULL, NULL, NULL},
712 /* UDP network traffic activity */
713 struct activity net_udp_act = {
716 .magic = ACTIVITY_MAGIC_BASE,
720 .f_read = wrap_read_net_udp,
723 .f_print = print_net_udp_stats,
724 .f_print_avg = print_net_udp_stats,
727 .f_render = render_net_udp_stats,
728 .f_xml_print = xml_print_net_udp_stats,
729 .hdr_line = "idgm/s;odgm/s;noport/s;idgmerr/s",
734 .fsize = STATS_NET_UDP_SIZE,
735 .msize = STATS_NET_UDP_SIZE,
737 .buf = {NULL, NULL, NULL},
741 /* IPv6 sockets activity */
742 struct activity net_sock6_act = {
745 .magic = ACTIVITY_MAGIC_BASE,
749 .f_read = wrap_read_net_sock6,
752 .f_print = print_net_sock6_stats,
753 .f_print_avg = print_avg_net_sock6_stats,
756 .f_render = render_net_sock6_stats,
757 .f_xml_print = xml_print_net_sock6_stats,
758 .hdr_line = "tcp6sck;udp6sck;raw6sck;ip6-frag",
759 .name = "A_NET_SOCK6",
763 .fsize = STATS_NET_SOCK6_SIZE,
764 .msize = STATS_NET_SOCK6_SIZE,
766 .buf = {NULL, NULL, NULL},
770 /* IPv6 network traffic activity */
771 struct activity net_ip6_act = {
774 .magic = ACTIVITY_MAGIC_BASE,
778 .f_read = wrap_read_net_ip6,
781 .f_print = print_net_ip6_stats,
782 .f_print_avg = print_net_ip6_stats,
785 .f_render = render_net_ip6_stats,
786 .f_xml_print = xml_print_net_ip6_stats,
787 .hdr_line = "irec6/s;fwddgm6/s;idel6/s;orq6/s;asmrq6/s;asmok6/s;"
788 "imcpck6/s;omcpck6/s;fragok6/s;fragcr6/s",
793 .fsize = STATS_NET_IP6_SIZE,
794 .msize = STATS_NET_IP6_SIZE,
796 .buf = {NULL, NULL, NULL},
800 /* IPv6 network traffic (errors) activity */
801 struct activity net_eip6_act = {
804 .magic = ACTIVITY_MAGIC_BASE,
808 .f_read = wrap_read_net_eip6,
811 .f_print = print_net_eip6_stats,
812 .f_print_avg = print_net_eip6_stats,
815 .f_render = render_net_eip6_stats,
816 .f_xml_print = xml_print_net_eip6_stats,
817 .hdr_line = "ihdrer6/s;iadrer6/s;iukwnp6/s;i2big6/s;idisc6/s;odisc6/s;"
818 "inort6/s;onort6/s;asmf6/s;fragf6/s;itrpck6/s",
819 .name = "A_NET_EIP6",
823 .fsize = STATS_NET_EIP6_SIZE,
824 .msize = STATS_NET_EIP6_SIZE,
826 .buf = {NULL, NULL, NULL},
830 /* ICMPv6 network traffic activity */
831 struct activity net_icmp6_act = {
834 .magic = ACTIVITY_MAGIC_BASE,
838 .f_read = wrap_read_net_icmp6,
841 .f_print = print_net_icmp6_stats,
842 .f_print_avg = print_net_icmp6_stats,
845 .f_render = render_net_icmp6_stats,
846 .f_xml_print = xml_print_net_icmp6_stats,
847 .hdr_line = "imsg6/s;omsg6/s;iech6/s;iechr6/s;oechr6/s;igmbq6/s;igmbr6/s;ogmbr6/s;"
848 "igmbrd6/s;ogmbrd6/s;irtsol6/s;ortsol6/s;irtad6/s;inbsol6/s;onbsol6/s;"
850 .name = "A_NET_ICMP6",
854 .fsize = STATS_NET_ICMP6_SIZE,
855 .msize = STATS_NET_ICMP6_SIZE,
857 .buf = {NULL, NULL, NULL},
861 /* ICMPv6 network traffic (errors) activity */
862 struct activity net_eicmp6_act = {
865 .magic = ACTIVITY_MAGIC_BASE,
869 .f_read = wrap_read_net_eicmp6,
872 .f_print = print_net_eicmp6_stats,
873 .f_print_avg = print_net_eicmp6_stats,
876 .f_render = render_net_eicmp6_stats,
877 .f_xml_print = xml_print_net_eicmp6_stats,
878 .hdr_line = "ierr6/s;idtunr6/s;odtunr6/s;itmex6/s;otmex6/s;"
879 "iprmpb6/s;oprmpb6/s;iredir6/s;oredir6/s;ipck2b6/s;opck2b6/s",
880 .name = "A_NET_EICMP6",
884 .fsize = STATS_NET_EICMP6_SIZE,
885 .msize = STATS_NET_EICMP6_SIZE,
887 .buf = {NULL, NULL, NULL},
891 /* UDPv6 network traffic activity */
892 struct activity net_udp6_act = {
894 .options = AO_CLOSE_MARKUP,
895 .magic = ACTIVITY_MAGIC_BASE,
899 .f_read = wrap_read_net_udp6,
902 .f_print = print_net_udp6_stats,
903 .f_print_avg = print_net_udp6_stats,
906 .f_render = render_net_udp6_stats,
907 .f_xml_print = xml_print_net_udp6_stats,
908 .hdr_line = "idgm6/s;odgm6/s;noport6/s;idgmer6/s",
909 .name = "A_NET_UDP6",
913 .fsize = STATS_NET_UDP6_SIZE,
914 .msize = STATS_NET_UDP6_SIZE,
916 .buf = {NULL, NULL, NULL},
921 struct activity pwr_cpufreq_act = {
924 .magic = ACTIVITY_MAGIC_BASE,
926 .f_count = wrap_get_cpu_nr,
928 .f_read = wrap_read_cpuinfo,
931 .f_print = print_pwr_cpufreq_stats,
932 .f_print_avg = print_avg_pwr_cpufreq_stats,
935 .f_render = render_pwr_cpufreq_stats,
936 .f_xml_print = xml_print_pwr_cpufreq_stats,
937 .hdr_line = "CPU;MHz",
938 .name = "A_PWR_CPUFREQ",
942 .fsize = STATS_PWR_CPUFREQ_SIZE,
943 .msize = STATS_PWR_CPUFREQ_SIZE,
945 .buf = {NULL, NULL, NULL},
946 .bitmap = &cpu_bitmap
950 struct activity pwr_fan_act = {
953 .magic = ACTIVITY_MAGIC_BASE,
955 .f_count = wrap_get_fan_nr,
957 .f_read = wrap_read_fan,
960 .f_print = print_pwr_fan_stats,
961 .f_print_avg = print_avg_pwr_fan_stats,
964 .f_render = render_pwr_fan_stats,
965 .f_xml_print = xml_print_pwr_fan_stats,
966 .hdr_line = "device;FAN;rpm;drpm",
971 .fsize = STATS_PWR_FAN_SIZE,
972 .msize = STATS_PWR_FAN_SIZE,
974 .buf = {NULL, NULL, NULL},
979 struct activity pwr_temp_act = {
982 .magic = ACTIVITY_MAGIC_BASE,
984 .f_count = wrap_get_temp_nr,
986 .f_read = wrap_read_temp,
989 .f_print = print_pwr_temp_stats,
990 .f_print_avg = print_avg_pwr_temp_stats,
993 .f_render = render_pwr_temp_stats,
994 .f_xml_print = xml_print_pwr_temp_stats,
995 .hdr_line = "device;TEMP;degC;%temp",
996 .name = "A_PWR_TEMP",
1000 .fsize = STATS_PWR_TEMP_SIZE,
1001 .msize = STATS_PWR_TEMP_SIZE,
1003 .buf = {NULL, NULL, NULL},
1007 /* Voltage inputs */
1008 struct activity pwr_in_act = {
1011 .magic = ACTIVITY_MAGIC_BASE,
1013 .f_count = wrap_get_in_nr,
1015 .f_read = wrap_read_in,
1018 .f_print = print_pwr_in_stats,
1019 .f_print_avg = print_avg_pwr_in_stats,
1022 .f_render = render_pwr_in_stats,
1023 .f_xml_print = xml_print_pwr_in_stats,
1024 .hdr_line = "device;IN;inV;%in",
1029 .fsize = STATS_PWR_IN_SIZE,
1030 .msize = STATS_PWR_IN_SIZE,
1032 .buf = {NULL, NULL, NULL},
1036 /* Hugepages activity */
1037 struct activity huge_act = {
1039 .options = AO_COLLECTED,
1040 .magic = ACTIVITY_MAGIC_BASE,
1044 .f_read = wrap_read_meminfo_huge,
1047 .f_print = print_huge_stats,
1048 .f_print_avg = print_avg_huge_stats,
1051 .f_render = render_huge_stats,
1052 .f_xml_print = xml_print_huge_stats,
1053 .hdr_line = "kbhugfree;kbhugused;%hugused",
1058 .fsize = STATS_HUGE_SIZE,
1059 .msize = STATS_HUGE_SIZE,
1061 .buf = {NULL, NULL, NULL},
1065 /* CPU weighted frequency */
1066 struct activity pwr_wghfreq_act = {
1067 .id = A_PWR_WGHFREQ,
1068 .options = AO_CLOSE_MARKUP,
1069 .magic = ACTIVITY_MAGIC_BASE,
1071 .f_count = wrap_get_cpu_nr,
1072 .f_count2 = wrap_get_freq_nr,
1073 .f_read = wrap_read_time_in_state,
1076 .f_print = print_pwr_wghfreq_stats,
1077 .f_print_avg = print_pwr_wghfreq_stats,
1080 .f_render = render_pwr_wghfreq_stats,
1081 .f_xml_print = xml_print_pwr_wghfreq_stats,
1082 .hdr_line = "CPU;wghMHz",
1083 .name = "A_PWR_WGHFREQ",
1087 .fsize = STATS_PWR_WGHFREQ_SIZE,
1088 .msize = STATS_PWR_WGHFREQ_SIZE,
1090 .buf = {NULL, NULL, NULL},
1091 .bitmap = &cpu_bitmap
1096 * Array of activities.
1098 struct activity *act[NR_ACT] = {