LinuxProcess.h 5.39 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
/* Do not edit this file. It was automatically generated. */

#ifndef HEADER_LinuxProcess
#define HEADER_LinuxProcess
/*
htop - LinuxProcess.h
(C) 2014 Hisham H. Muhammad
Released under the GNU GPL, see the COPYING file
in the source distribution for its full text.
*/


13
14
#include "PerfCounter.h"

15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#define PROCESS_FLAG_LINUX_IOPRIO   0x0100L
#define PROCESS_FLAG_LINUX_OPENVZ   0x0200L
#define PROCESS_FLAG_LINUX_VSERVER  0x0400L
#define PROCESS_FLAG_LINUX_CGROUP   0x0800L
#define PROCESS_FLAG_LINUX_OOM      0x1000L

#define PROCESS_FLAG_LINUX_HPC       0xff0000L
#define PROCESS_FLAG_LINUX_HPC_CYCLE 0x10000L
#define PROCESS_FLAG_LINUX_HPC_INSN  0x20000L
#define PROCESS_FLAG_LINUX_HPC_MISS  0x40000L
#define PROCESS_FLAG_LINUX_HPC_BMISS 0x80000L

#define PROCESS_FLAG_LINUX_HPC_L1DR   0x100000L
#define PROCESS_FLAG_LINUX_HPC_L1DW   0x200000L
#define PROCESS_FLAG_LINUX_HPC_L1DRM  0x400000L
#define PROCESS_FLAG_LINUX_HPC_L1DWM  0x800000L
31

32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
typedef enum UnsupportedProcessFields {
   FLAGS = 9,
   ITREALVALUE = 20,
   VSIZE = 22,
   RSS = 23,
   RLIM = 24,
   STARTCODE = 25,
   ENDCODE = 26,
   STARTSTACK = 27,
   KSTKESP = 28,
   KSTKEIP = 29,
   SIGNAL = 30,
   BLOCKED = 31,
   SSIGIGNORE = 32,
   SIGCATCH = 33,
   WCHAN = 34,
   NSWAP = 35,
   CNSWAP = 36,
   EXIT_SIGNAL = 37,
} UnsupportedProcessField;

53
typedef enum LinuxProcessFields {
54
55
56
57
58
59
60
61
62
63
64
   CMINFLT = 11,
   CMAJFLT = 13,
   UTIME = 14,
   STIME = 15,
   CUTIME = 16,
   CSTIME = 17,
   M_SHARE = 41,
   M_TRS = 42,
   M_DRS = 43,
   M_LRS = 44,
   M_DT = 45,
65
   #ifdef HAVE_OPENVZ
66
67
   CTID = 100,
   VPID = 101,
68
69
   #endif
   #ifdef HAVE_VSERVER
70
   VXID = 102,
71
72
   #endif
   #ifdef HAVE_TASKSTATS
73
74
75
76
77
78
79
80
81
82
   RCHAR = 103,
   WCHAR = 104,
   SYSCR = 105,
   SYSCW = 106,
   RBYTES = 107,
   WBYTES = 108,
   CNCLWB = 109,
   IO_READ_RATE = 110,
   IO_WRITE_RATE = 111,
   IO_RATE = 112,
83
84
   #endif
   #ifdef HAVE_CGROUP
85
   CGROUP = 113,
86
   #endif
87
88
   OOM = 114,
   IO_PRIORITY = 115,
89
90
91
92
93
   #ifdef HAVE_DELAYACCT
   PERCENT_CPU_DELAY = 116,
   PERCENT_IO_DELAY = 117,
   PERCENT_SWAP_DELAY = 118,
   #endif
94
95
   #ifdef HAVE_PERFCOUNTERS
   IPC = 119,
96
97
98
99
100
101
102
103
   MCYCLE = 120,
   MINSTR = 121,
   PERCENT_MISS = 122,
   PERCENT_BMISS = 123,
   L1DREADS = 124,
   L1DRMISSES = 125,
   L1DWRITES = 126,
   L1DWMISSES = 127,
104
   #endif
105
   LAST_PROCESSFIELD = 128,
106
107
} LinuxProcessField;

108
109
110
111
#include "IOPriority.h"

typedef struct LinuxProcess_ {
   Process super;
112
   bool isKernelThread;
113
   IOPriority ioPriority;
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
   unsigned long int cminflt;
   unsigned long int cmajflt;
   unsigned long long int utime;
   unsigned long long int stime;
   unsigned long long int cutime;
   unsigned long long int cstime;
   long m_share;
   long m_trs;
   long m_drs;
   long m_lrs;
   long m_dt;
   #ifdef HAVE_TASKSTATS
   unsigned long long io_rchar;
   unsigned long long io_wchar;
   unsigned long long io_syscr;
   unsigned long long io_syscw;
   unsigned long long io_read_bytes;
   unsigned long long io_write_bytes;
   unsigned long long io_cancelled_write_bytes;
   unsigned long long io_rate_read_time;
   unsigned long long io_rate_write_time;   
   double io_rate_read_bps;
   double io_rate_write_bps;
   #endif
   #ifdef HAVE_OPENVZ
   unsigned int ctid;
   unsigned int vpid;
   #endif
   #ifdef HAVE_VSERVER
   unsigned int vxid;
   #endif
   #ifdef HAVE_CGROUP
   char* cgroup;
   #endif
   unsigned int oom;
Hisham's avatar
Hisham committed
149
   char* ttyDevice;
150
151
152
153
154
155
156
157
158
   #ifdef HAVE_DELAYACCT
   unsigned long long int delay_read_time;
   unsigned long long cpu_delay_total;
   unsigned long long blkio_delay_total;
   unsigned long long swapin_delay_total;
   float cpu_delay_percent;
   float blkio_delay_percent;
   float swapin_delay_percent;
   #endif
159
160
161
   #ifdef HAVE_PERFCOUNTERS
   PerfCounter* cycleCounter;
   PerfCounter* insnCounter;
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
   PerfCounter* missCounter;
   PerfCounter* brCounter;
   PerfCounter* l1drCounter;
   PerfCounter* l1drmCounter;
   PerfCounter* l1dwCounter;
   PerfCounter* l1dwmCounter;
   float ipc;
   float mcycle;
   float minstr;
   float pMiss;
   float pBMiss;
   float l1dr;
   float l1drm;
   float l1dw;
   float l1dwm;
177
   #endif
178
179
} LinuxProcess;

180
#ifndef Process_isKernelThread
181
#define Process_isKernelThread(_process) (((LinuxProcess*)(_process))->isKernelThread)
182
183
184
185
186
#endif

#ifndef Process_isUserlandThread
#define Process_isUserlandThread(_process) (_process->pid != _process->tgid)
#endif
187
188


189
190
extern ProcessFieldData Process_fields[];

191
extern ProcessPidColumn Process_pidColumns[];
192

193
194
extern ProcessClass LinuxProcess_class;

195
196
LinuxProcess* LinuxProcess_new(Settings* settings);

197
void Process_delete(Object* cast);
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212

/*
[1] Note that before kernel 2.6.26 a process that has not asked for
an io priority formally uses "none" as scheduling class, but the
io scheduler will treat such processes as if it were in the best
effort class. The priority within the best effort class will  be
dynamically  derived  from  the  cpu  nice level of the process:
extern io_priority;
*/
#define LinuxProcess_effectiveIOPriority(p_) (IOPriority_class(p_->ioPriority) == IOPRIO_CLASS_NONE ? IOPriority_tuple(IOPRIO_CLASS_BE, (p_->super.nice + 20) / 5) : p_->ioPriority)

IOPriority LinuxProcess_updateIOPriority(LinuxProcess* this);

bool LinuxProcess_setIOPriority(LinuxProcess* this, IOPriority ioprio);

213
214
#if HAVE_DELAYACCT || HAVE_PERFCOUNTERS

215
216
#endif

217
void LinuxProcess_writeField(Process* this, RichString* str, ProcessField field);
218

219
220
#define COMPARE_FIELD(_f) return (p2->_f > p1->_f ? 1 : -1)

221
222
long LinuxProcess_compare(const void* v1, const void* v2);

223
224
bool Process_isThread(Process* this);

225
#endif