]> git.proxmox.com Git - systemd.git/blame - src/bootchart/bootchart.h
Imported Upstream version 219
[systemd.git] / src / bootchart / bootchart.h
CommitLineData
663996b3
MS
1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
3#pragma once
4
5/***
6 This file is part of systemd.
7
14228c0d 8 Copyright (C) 2009-2013 Intel Corporation
663996b3
MS
9
10 Authors:
11 Auke Kok <auke-jan.h.kok@intel.com>
12
13 systemd is free software; you can redistribute it and/or modify it
14 under the terms of the GNU Lesser General Public License as published by
15 the Free Software Foundation; either version 2.1 of the License, or
16 (at your option) any later version.
17
18 systemd is distributed in the hope that it will be useful, but
19 WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21 Lesser General Public License for more details.
22
23 You should have received a copy of the GNU Lesser General Public License
24 along with systemd; If not, see <http://www.gnu.org/licenses/>.
25***/
26
27#include <dirent.h>
28#include <stdbool.h>
29#include "list.h"
30
31#define MAXCPUS 16
32#define MAXPIDS 65535
33
34struct block_stat_struct {
35 /* /proc/vmstat pgpgin & pgpgout */
36 int bi;
37 int bo;
38};
39
40struct cpu_stat_sample_struct {
41 /* /proc/schedstat fields 10 & 11 (after name) */
42 double runtime;
43 double waittime;
44};
45
46/* per process, per sample data we will log */
47struct ps_sched_struct {
48 /* /proc/<n>/schedstat fields 1 & 2 */
49 double runtime;
50 double waittime;
51 int pss;
52 struct list_sample_data *sampledata;
53 struct ps_sched_struct *next;
54 struct ps_sched_struct *prev;
55 struct ps_sched_struct *cross; /* cross pointer */
56 struct ps_struct *ps_new;
57};
58
59struct list_sample_data {
60 double runtime[MAXCPUS];
61 double waittime[MAXCPUS];
62 double sampletime;
63 int entropy_avail;
64 struct block_stat_struct blockstat;
65 LIST_FIELDS(struct list_sample_data, link); /* DLL */
66 int counter;
67};
68
69/* process info */
70struct ps_struct {
71 struct ps_struct *next_ps; /* SLL pointer */
72 struct ps_struct *parent; /* ppid ref */
73 struct ps_struct *children; /* children */
74 struct ps_struct *next; /* siblings */
75
76 /* must match - otherwise it's a new process with same PID */
77 char name[256];
78 int pid;
79 int ppid;
60f067b4 80 char *cgroup;
663996b3
MS
81
82 /* cache fd's */
83 int sched;
84 int schedstat;
85 FILE *smaps;
86
87 /* pointers to first/last seen timestamps */
88 struct ps_sched_struct *first;
89 struct ps_sched_struct *last;
90
91 /* records actual start time, may be way before bootchart runs */
92 double starttime;
93
94 /* record human readable total cpu time */
95 double total;
96
97 /* largest PSS size found */
98 int pss_max;
99
100 /* for drawing connection lines later */
101 double pos_x;
102 double pos_y;
103
104 struct ps_sched_struct *sample;
105};
106
107extern int entropy_avail[];
108
109extern double graph_start;
110extern double log_start;
111extern double sampletime[];
112extern struct ps_struct *ps_first;
113extern struct block_stat_struct blockstat[];
114extern int pscount;
115extern bool arg_relative;
116extern bool arg_filter;
117extern bool arg_show_cmdline;
60f067b4 118extern bool arg_show_cgroup;
663996b3
MS
119extern bool arg_pss;
120extern bool arg_entropy;
e735f4d4 121extern bool arg_percpu;
663996b3
MS
122extern bool initcall;
123extern int samples;
124extern int cpus;
125extern int arg_samples_len;
126extern double arg_hz;
127extern double arg_scale_x;
128extern double arg_scale_y;
129extern int overrun;
130extern double interval;
131
132extern char arg_output_path[PATH_MAX];
133extern char arg_init_path[PATH_MAX];
134
135extern FILE *of;
136extern int sysfd;