2013-03-12 01:47:58 +04:00
/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
# pragma once
2013-02-13 03:14:15 +04:00
/***
2013-03-12 01:47:58 +04:00
This file is part of systemd .
2013-02-13 03:14:15 +04:00
Copyright ( C ) 2009 - 2013 Intel Coproration
Authors :
Auke Kok < auke - jan . h . kok @ intel . com >
systemd is free software ; you can redistribute it and / or modify it
under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation ; either version 2.1 of the License , or
( at your option ) any later version .
systemd is distributed in the hope that it will be useful , but
WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
Lesser General Public License for more details .
You should have received a copy of the GNU Lesser General Public License
along with systemd ; If not , see < http : //www.gnu.org/licenses/>.
2013-03-12 01:47:58 +04:00
* * */
2012-10-18 03:01:12 +04:00
# include <dirent.h>
2013-02-15 00:32:49 +04:00
# include <stdbool.h>
2012-10-18 03:01:12 +04:00
# define MAXCPUS 16
# define MAXPIDS 65535
# define MAXSAMPLES 8192
struct block_stat_struct {
2013-01-10 01:38:03 +04:00
/* /proc/vmstat pgpgin & pgpgout */
int bi ;
int bo ;
2012-10-18 03:01:12 +04:00
} ;
struct cpu_stat_sample_struct {
2013-01-10 01:38:03 +04:00
/* /proc/schedstat fields 10 & 11 (after name) */
double runtime ;
double waittime ;
2012-10-18 03:01:12 +04:00
} ;
struct cpu_stat_struct {
2013-01-10 01:38:03 +04:00
/* per cpu array */
struct cpu_stat_sample_struct sample [ MAXSAMPLES ] ;
2012-10-18 03:01:12 +04:00
} ;
/* per process, per sample data we will log */
struct ps_sched_struct {
2013-01-10 01:38:03 +04:00
/* /proc/<n>/schedstat fields 1 & 2 */
double runtime ;
double waittime ;
int pss ;
2012-10-18 03:01:12 +04:00
} ;
/* process info */
struct ps_struct {
2013-01-10 01:38:03 +04:00
struct ps_struct * next_ps ; /* SLL pointer */
struct ps_struct * parent ; /* ppid ref */
struct ps_struct * children ; /* children */
struct ps_struct * next ; /* siblings */
2012-10-18 03:01:12 +04:00
2013-01-10 01:38:03 +04:00
/* must match - otherwise it's a new process with same PID */
2013-03-07 11:52:54 +04:00
char name [ 256 ] ;
2013-01-10 01:38:03 +04:00
int pid ;
int ppid ;
2012-10-18 03:01:12 +04:00
2013-01-10 01:38:03 +04:00
/* cache fd's */
int sched ;
int schedstat ;
FILE * smaps ;
2012-10-18 03:01:12 +04:00
2013-01-10 01:38:03 +04:00
/* index to first/last seen timestamps */
int first ;
int last ;
2012-10-18 03:01:12 +04:00
2013-01-10 01:38:03 +04:00
/* records actual start time, may be way before bootchart runs */
double starttime ;
2012-10-18 03:01:12 +04:00
2013-01-10 01:38:03 +04:00
/* record human readable total cpu time */
double total ;
2012-10-18 03:01:12 +04:00
2013-01-10 01:38:03 +04:00
/* largest PSS size found */
int pss_max ;
2012-10-18 03:01:12 +04:00
2013-01-10 01:38:03 +04:00
/* for drawing connection lines later */
double pos_x ;
double pos_y ;
2012-10-18 03:01:12 +04:00
2013-01-10 01:38:03 +04:00
struct ps_sched_struct * sample ;
2012-10-18 03:01:12 +04:00
} ;
extern int entropy_avail [ ] ;
extern double graph_start ;
extern double log_start ;
extern double sampletime [ ] ;
extern struct ps_struct * ps_first ;
extern struct block_stat_struct blockstat [ ] ;
extern struct cpu_stat_struct cpustat [ ] ;
extern int pscount ;
2013-03-12 01:47:58 +04:00
extern bool arg_relative ;
extern bool arg_filter ;
extern bool arg_show_cmdline ;
extern bool arg_pss ;
extern bool arg_entropy ;
2013-02-15 00:32:49 +04:00
extern bool initcall ;
2012-10-18 03:01:12 +04:00
extern int samples ;
extern int cpus ;
2013-03-12 01:47:58 +04:00
extern int arg_samples_len ;
extern double arg_hz ;
extern double arg_scale_x ;
extern double arg_scale_y ;
2012-10-18 03:01:12 +04:00
extern int overrun ;
extern double interval ;
2013-03-12 01:47:58 +04:00
extern char arg_output_path [ PATH_MAX ] ;
extern char arg_init_path [ PATH_MAX ] ;
2012-10-18 03:01:12 +04:00
extern FILE * of ;
2013-02-14 14:26:05 +04:00
extern int sysfd ;