perfmonger 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +15 -0
- data/.dir-locals.el +2 -0
- data/.gitignore +4 -0
- data/.rspec +1 -0
- data/.travis.yml +12 -0
- data/COPYING +674 -0
- data/Gemfile +5 -0
- data/HOWTO.md +15 -0
- data/NEWS +115 -0
- data/README.md +61 -0
- data/Rakefile +8 -0
- data/bin/perfmonger +6 -0
- data/data/NOTICE +8 -0
- data/data/Twitter_Bootstrap_LICENSE.txt +176 -0
- data/data/assets/css/bootstrap-responsive.css +1109 -0
- data/data/assets/css/bootstrap.css +6167 -0
- data/data/assets/css/perfmonger.css +17 -0
- data/data/assets/dashboard.erb +319 -0
- data/data/assets/img/glyphicons-halflings-white.png +0 -0
- data/data/assets/img/glyphicons-halflings.png +0 -0
- data/data/assets/js/bootstrap.js +2280 -0
- data/data/assets/js/bootstrap.min.js +6 -0
- data/data/assets/js/canvasjs.js +9042 -0
- data/data/assets/js/canvasjs.min.js +271 -0
- data/data/sysstat.ioconf +268 -0
- data/ext/perfmonger/extconf.rb +19 -0
- data/ext/perfmonger/perfmonger.h +58 -0
- data/ext/perfmonger/perfmonger_record.c +754 -0
- data/ext/perfmonger/sysstat/common.c +627 -0
- data/ext/perfmonger/sysstat/common.h +207 -0
- data/ext/perfmonger/sysstat/ioconf.c +515 -0
- data/ext/perfmonger/sysstat/ioconf.h +84 -0
- data/ext/perfmonger/sysstat/iostat.c +1100 -0
- data/ext/perfmonger/sysstat/iostat.h +121 -0
- data/ext/perfmonger/sysstat/libsysstat.h +19 -0
- data/ext/perfmonger/sysstat/mpstat.c +953 -0
- data/ext/perfmonger/sysstat/mpstat.h +79 -0
- data/ext/perfmonger/sysstat/rd_stats.c +2388 -0
- data/ext/perfmonger/sysstat/rd_stats.h +651 -0
- data/ext/perfmonger/sysstat/sysconfig.h +13 -0
- data/lib/perfmonger/cli.rb +115 -0
- data/lib/perfmonger/command/base_command.rb +39 -0
- data/lib/perfmonger/command/fingerprint.rb +453 -0
- data/lib/perfmonger/command/plot.rb +429 -0
- data/lib/perfmonger/command/record.rb +32 -0
- data/lib/perfmonger/command/record_option.rb +149 -0
- data/lib/perfmonger/command/server.rb +294 -0
- data/lib/perfmonger/command/stat.rb +60 -0
- data/lib/perfmonger/command/stat_option.rb +29 -0
- data/lib/perfmonger/command/summary.rb +402 -0
- data/lib/perfmonger/config.rb +6 -0
- data/lib/perfmonger/version.rb +5 -0
- data/lib/perfmonger.rb +12 -0
- data/misc/release-howto.txt +17 -0
- data/misc/sample-cpu.png +0 -0
- data/misc/sample-read-iops.png +0 -0
- data/perfmonger.gemspec +44 -0
- data/test/run-test.sh +39 -0
- data/test/spec/bin_spec.rb +37 -0
- data/test/spec/data/2devices.expected +42 -0
- data/test/spec/data/2devices.output +42 -0
- data/test/spec/spec_helper.rb +20 -0
- data/test/spec/summary_spec.rb +193 -0
- data/test/test-perfmonger.c +145 -0
- data/test/test.h +9 -0
- metadata +154 -0
data/data/sysstat.ioconf
ADDED
@@ -0,0 +1,268 @@
|
|
1
|
+
#
|
2
|
+
# sysstat.ioconf
|
3
|
+
#
|
4
|
+
# Copyright (C) 2004, Red Hat, Inc.
|
5
|
+
#
|
6
|
+
# Maintained by Sebastien Godard (sysstat [at] orange.fr)
|
7
|
+
#
|
8
|
+
# This file gives iostat and sadc a clue about how to find whole
|
9
|
+
# disk devices in /proc/partitions and /proc/diskstats
|
10
|
+
# Authoritative source is: linux/Documentation/devices.txt
|
11
|
+
#
|
12
|
+
# line format, general record:
|
13
|
+
# major:name:ctrlpre:ctrlno:devfmt:devcnt:partpre:partcnt:description
|
14
|
+
#
|
15
|
+
# major: major # for device
|
16
|
+
# name: base of device name
|
17
|
+
# ctrlpre: string to use in generating controller designators
|
18
|
+
# eg: the c in c0d2p6, decimal formatting implied
|
19
|
+
# '*' means none or irrelevant
|
20
|
+
# ctrlno: which controller of this type is this
|
21
|
+
# devfmt: type of device naming convention
|
22
|
+
# a: alpha: xxa, xxb, ... xxaa, xxab, ... xxzz
|
23
|
+
# x: exception... record contains a specific name
|
24
|
+
# for a specific minor #, stored in the devcnt field
|
25
|
+
# %string: string to use in generating drive designators,
|
26
|
+
# eg: the 'd' in c0d2p6 , decimal formatting implied
|
27
|
+
# d: no special translations (decimal formatting)
|
28
|
+
# devcnt: how many whole devs per major number
|
29
|
+
# partpre: appended to whole dev before part designator
|
30
|
+
# eg. the p in c0d2p6, decimal formatting implied
|
31
|
+
# '*' means none
|
32
|
+
# partcnt: number of partitions per volume
|
33
|
+
# or minor # for exception records
|
34
|
+
# description: informative text
|
35
|
+
#
|
36
|
+
# line format, indirect record:
|
37
|
+
# major:base_major:ctrlno[:[desc]]
|
38
|
+
#
|
39
|
+
# major: major number of the device
|
40
|
+
# base_major: major number of the template for this type,
|
41
|
+
# 0 for not supported
|
42
|
+
# ctrlno: controller number of this type
|
43
|
+
# desc: controller-specific description
|
44
|
+
# if absent the desc from base_major will be
|
45
|
+
# used in sprintf( buf, desc, ctrlno )
|
46
|
+
|
47
|
+
|
48
|
+
1:ram:*:0:d:256:*:1:RAM disks (ram0..ram255)
|
49
|
+
1:initrd:x:250:d:256:*:1:Initial RAM Disk (initrd)
|
50
|
+
|
51
|
+
#2:0:0:Floppy Devices
|
52
|
+
2:fd:*:0:d:4:*:1:Floppy Devices fd0,fd1,fd2,fd3
|
53
|
+
|
54
|
+
3:hd:*:0:a:2:*:64:IDE - Controller %d
|
55
|
+
22:3:1:
|
56
|
+
33:3:2:
|
57
|
+
34:3:3:
|
58
|
+
56:3:4:
|
59
|
+
57:3:5:
|
60
|
+
88:3:6:
|
61
|
+
89:3:7:
|
62
|
+
90:3:8:
|
63
|
+
91:3:9:
|
64
|
+
|
65
|
+
#4:0:0:NODEV
|
66
|
+
#5:0:0:NODEV
|
67
|
+
#6:0:0:NODEV
|
68
|
+
7:loop:*:0:d:256:*:1:Loop Devices
|
69
|
+
|
70
|
+
8:sd:*:0:a:16:*:16:SCSI - Controller %d
|
71
|
+
65:8:1:
|
72
|
+
66:8:2:
|
73
|
+
67:8:3:
|
74
|
+
68:8:4:
|
75
|
+
69:8:5:
|
76
|
+
70:8:6:
|
77
|
+
71:8:7:
|
78
|
+
128:8:8:
|
79
|
+
129:8:9:
|
80
|
+
130:8:10:
|
81
|
+
131:8:11:
|
82
|
+
132:8:12:
|
83
|
+
133:8:13:
|
84
|
+
134:8:14:
|
85
|
+
135:8:15:
|
86
|
+
|
87
|
+
9:md:*:0:d:256:*:1:Metadisk (Software RAID) devices (md0..md255)
|
88
|
+
|
89
|
+
#10:0:0:NODEV
|
90
|
+
|
91
|
+
#11:sr:*:0:d:256:*:1:CDROM - CDROM (sr0..sr255) (deprecated)
|
92
|
+
11:scd:*:0:d:256:*:1:CDROM - CDROM (scd0..scd255)
|
93
|
+
|
94
|
+
#12:0:0:MSCDEX CD-ROM Callback
|
95
|
+
|
96
|
+
13:xd:*:0:a:2:*:64:8-bit MFM/RLL/IDE controller (xda, xdb)
|
97
|
+
|
98
|
+
#14:0:0:BIOS Hard Drive Callback
|
99
|
+
#15:0:0:CDROM - Sony CDU-31A/CDU-33A
|
100
|
+
#16:0:0:CDROM - Goldstar
|
101
|
+
#17:0:0:CDROM - Optics Storage
|
102
|
+
#18:0:0:CDROM - Sanyo
|
103
|
+
|
104
|
+
19:double:*:0:d:256:*:1:Compressed Disk (double0..double255)
|
105
|
+
|
106
|
+
#20:0:0:CDROM - Hitachi
|
107
|
+
|
108
|
+
21:mfm:*:0:a:2:*:64:Acorn MFM Hard Drive (mfma, mfmb)
|
109
|
+
|
110
|
+
# 22: see IDE, dev 3
|
111
|
+
|
112
|
+
#23:0:0:CDROM - Mistumi Proprietary
|
113
|
+
#24:0:0:CDROM - Sony CDU-535
|
114
|
+
#25:0:0:CDROM - Matsushita (Panasonic/Soundblaster) #1
|
115
|
+
#26:0:1:CDROM - Matsushita (Panasonic/Soundblaster) #2
|
116
|
+
#27:0:2:CDROM - Matsushita (Panasonic/Soundblaster) #3
|
117
|
+
#28:0:3:CDROM - Matsushita (Panasonic/Soundblaster) #4
|
118
|
+
# 28:0:0:! ACSI (Atari) Disk Not Supported
|
119
|
+
#29:0:0:CDROM - Aztech/Orchid/Okano/Wearnes
|
120
|
+
#30:0:0:CDROM - Philips LMS CM-205
|
121
|
+
#31:0:0:ROM/flash Memory Card
|
122
|
+
#32:0:0:CDROM - Phillips LMS CM-206
|
123
|
+
|
124
|
+
# 33: See IDE, dev 3
|
125
|
+
# 34: See IDE, dev 3
|
126
|
+
|
127
|
+
#35:0:0:Slow Memory RAM Disk
|
128
|
+
|
129
|
+
36:ed:*:0:a:2:*:64:MCA ESDI Hard Disk (eda, edb)
|
130
|
+
|
131
|
+
#37:0:0:Zorro II Ram Disk
|
132
|
+
#38:0:0:Reserved For Linux/AP+
|
133
|
+
#39:0:0:Reserved For Linux/AP+
|
134
|
+
#40:0:0:Syquest EZ135 Parallel Port Drive
|
135
|
+
#41:0:0:CDROM - MicroSolutions Parallel Port BackPack
|
136
|
+
#42:0:0:For DEMO Use Only
|
137
|
+
|
138
|
+
43:nb:*:0:d:256:*:1:Network Block devices (nb0..nb255)
|
139
|
+
44:ftl:*:0:a:16:*:16:Flash Translation Layer (ftla..ftlp)
|
140
|
+
45:pd:*:0:a:4:*:16:Parallel Port IDE (pda..pdd)
|
141
|
+
|
142
|
+
#46:0:0:CDROM - Parallel Port ATAPI
|
143
|
+
|
144
|
+
47:pf:*:0:d:256:*:1:Parallel Port ATAPI Disk Devices (pf0..pf255)
|
145
|
+
|
146
|
+
48:rd:/c:0:%d:32:p:8:Mylex DAC960 RAID, Controller %d
|
147
|
+
49:48:1:
|
148
|
+
50:48:2:
|
149
|
+
51:48:3:
|
150
|
+
52:48:4:
|
151
|
+
53:48:5:
|
152
|
+
54:48:6:
|
153
|
+
55:48:7:
|
154
|
+
136:48:8:
|
155
|
+
137:48:9:
|
156
|
+
138:48:10:
|
157
|
+
139:48:11:
|
158
|
+
140:48:12:
|
159
|
+
141:48:13:
|
160
|
+
142:48:14:
|
161
|
+
143:48:15:
|
162
|
+
|
163
|
+
# 56, 57: see IDE, dev 3:
|
164
|
+
|
165
|
+
58:lvm:*:0:d:256:*:1:Logical Volume Manager (lvm0..lvm255)
|
166
|
+
|
167
|
+
#59:0:0:PDA Filesystem Device
|
168
|
+
#60:0:0:Local/Experimental Use
|
169
|
+
#61:0:0:Local/Experimental Use
|
170
|
+
#62:0:0:Local/Experimental Use
|
171
|
+
#63:0:0:Local/Experimental Use
|
172
|
+
#64:0:0:NODEV
|
173
|
+
|
174
|
+
# 65..71: See SCSI, dev 8:
|
175
|
+
|
176
|
+
72:ida/:c:0:%d:16:p:16:Compaq Intelligent Drive Array - Controller %d
|
177
|
+
73:72:1:
|
178
|
+
74:72:2:
|
179
|
+
75:72:3:
|
180
|
+
76:72:4:
|
181
|
+
77:72:5:
|
182
|
+
78:72:6:
|
183
|
+
79:72:7:
|
184
|
+
|
185
|
+
80:i2o/hd:*:0:a:16:*:16:I2O Disk - Controller %d
|
186
|
+
81:80:1:
|
187
|
+
82:80:2:
|
188
|
+
83:80:3:
|
189
|
+
84:80:4:
|
190
|
+
85:80:5:
|
191
|
+
86:80:6:
|
192
|
+
87:80:7:
|
193
|
+
|
194
|
+
# 88..91: see IDE, dev 3:
|
195
|
+
|
196
|
+
#92:0:0:PPDD Encrypted Disk
|
197
|
+
#93:0:0:NAND Flash Translation Layer not supported
|
198
|
+
|
199
|
+
94:dasd:*:0:a:64:*:4:IBM S/390 DASD Block Storage (dasda, dasdb, ...)
|
200
|
+
|
201
|
+
#95:0:0:IBM S/390 VM/ESA Minidisk
|
202
|
+
#96:0:0:NODEV
|
203
|
+
#97:0:0:CD/DVD packed writing devices not supported
|
204
|
+
|
205
|
+
98:ubd:*:0:d:256:*:1:User-mode Virtual Block Devices (ubd0..ubd256)
|
206
|
+
|
207
|
+
#99:0:0:JavaStation Flash Disk
|
208
|
+
#100:0:0:NODEV
|
209
|
+
|
210
|
+
101:amiraid/ar:*:0:d:16:p:16:AMI HyperDisk RAID (amiraid/ar0 - amiraid/ar15)
|
211
|
+
|
212
|
+
#102:0:0:Compressed Block Device
|
213
|
+
#103:0:0:Audit Block Device
|
214
|
+
|
215
|
+
104:cciss:/c:0:%d:16:p:16:HP SA 5xxx/6xxx (cciss) Controller %d
|
216
|
+
105:104:1:
|
217
|
+
106:104:2:
|
218
|
+
107:104:3:
|
219
|
+
108:104:4:
|
220
|
+
109:104:5:
|
221
|
+
110:104:6:
|
222
|
+
111:104:7:
|
223
|
+
|
224
|
+
112:iseries/vd:*:0:a:32:*:8:IBM iSeries Virtual Disk (.../vda - .../vdaf)
|
225
|
+
|
226
|
+
#113:0:0:CDROM - IBM iSeries Virtual
|
227
|
+
|
228
|
+
# 114..159 NODEV
|
229
|
+
|
230
|
+
120:emcpower:*:0:a:16:*:16:EMC PowerPath Unit %d
|
231
|
+
|
232
|
+
#160:sx8/:*:0:d:8:p:32:Promise SATA SX8 Unit %d
|
233
|
+
#161:160:1:
|
234
|
+
160:carmel/:*:0:d:8:p:32:Carmel 8-port SATA Disks (carmel/0 - carmel/7)
|
235
|
+
161:160:1:
|
236
|
+
|
237
|
+
# 162..198 UNUSED
|
238
|
+
|
239
|
+
180:ub:*:0:a:32:p:8:USB block devices
|
240
|
+
|
241
|
+
#199:0:0:Veritas Volume Manager (VxVM) Volumes
|
242
|
+
#200:0:0:NODEV
|
243
|
+
#201:0:0:Veritas VxVM Dynamic Multipathing Driver
|
244
|
+
|
245
|
+
202:xvd:*:0:a:16:p:16:Xen Virtual Block Device
|
246
|
+
|
247
|
+
# 203..230: UNUSED
|
248
|
+
|
249
|
+
232:emcpower:*:0:a:16:*:16:EMC PowerPath Unit %d
|
250
|
+
233:232:1:
|
251
|
+
234:232:2:
|
252
|
+
235:232:3:
|
253
|
+
236:232:4:
|
254
|
+
237:232:5:
|
255
|
+
238:232:6:
|
256
|
+
239:232:7:
|
257
|
+
240:232:8:
|
258
|
+
241:232:9:
|
259
|
+
242:232:10:
|
260
|
+
243:232:11:
|
261
|
+
244:232:12:
|
262
|
+
245:232:13:
|
263
|
+
246:232:14:
|
264
|
+
247:232:15:
|
265
|
+
|
266
|
+
# 240..254: LOCAL/Experimental
|
267
|
+
# 255: reserved for big dev_t expansion
|
268
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# coding: utf-8
|
3
|
+
|
4
|
+
require 'mkmf'
|
5
|
+
|
6
|
+
$objs = ["perfmonger_record.o", "sysstat/common.o", "sysstat/ioconf.o", "sysstat/iostat.o", "sysstat/mpstat.o", "sysstat/rd_stats.o"]
|
7
|
+
|
8
|
+
$cleanfiles += ["perfmonger_record.o", "sysstat/common.o", "sysstat/ioconf.o", "sysstat/iostat.o", "sysstat/mpstat.o", "sysstat/rd_stats.o"]
|
9
|
+
|
10
|
+
create_makefile 'perfmonger/perfmonger_record'
|
11
|
+
|
12
|
+
mk = open('Makefile').read
|
13
|
+
|
14
|
+
mk.gsub!(/^LDSHARED = .*$/, "LDSHARED = $(CC)")
|
15
|
+
mk.gsub!(/^DLLIB = .*$/, "DLLIB = $(TARGET)")
|
16
|
+
|
17
|
+
open('Makefile', 'w') do |f|
|
18
|
+
f.write(mk)
|
19
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
/* -*- indent-tabs-mode: nil -*- */
|
2
|
+
|
3
|
+
#ifndef PERFMONGER_H
|
4
|
+
#define PERFMONGER_H
|
5
|
+
|
6
|
+
#include <unistd.h>
|
7
|
+
#include <stdio.h>
|
8
|
+
#include <stdlib.h>
|
9
|
+
#include <stdarg.h>
|
10
|
+
#include <string.h>
|
11
|
+
#include <math.h>
|
12
|
+
#include <ctype.h>
|
13
|
+
#include <limits.h>
|
14
|
+
#include <stdbool.h>
|
15
|
+
#include <pthread.h>
|
16
|
+
#include <sys/socket.h>
|
17
|
+
#include <netinet/in.h>
|
18
|
+
#include <arpa/inet.h>
|
19
|
+
#include <sys/time.h>
|
20
|
+
#include <signal.h>
|
21
|
+
|
22
|
+
#include "sysstat/libsysstat.h"
|
23
|
+
|
24
|
+
|
25
|
+
typedef struct {
|
26
|
+
// switches
|
27
|
+
bool report_cpu;
|
28
|
+
bool report_io;
|
29
|
+
bool report_ctxsw;
|
30
|
+
|
31
|
+
// device nr and list
|
32
|
+
int nr_dev;
|
33
|
+
char **dev_list;
|
34
|
+
bool all_devices;
|
35
|
+
|
36
|
+
// OUTPUT FILE
|
37
|
+
FILE *output;
|
38
|
+
|
39
|
+
// data collection interval
|
40
|
+
double interval;
|
41
|
+
bool interval_backoff;
|
42
|
+
|
43
|
+
double start_delay;
|
44
|
+
|
45
|
+
double timeout;
|
46
|
+
|
47
|
+
bool verbose;
|
48
|
+
} option_t;
|
49
|
+
|
50
|
+
int parse_args(int argc, char **argv, option_t *opt);
|
51
|
+
void print_help(void);
|
52
|
+
void init_subsystem(option_t *opt);
|
53
|
+
void destroy_subsystem(option_t *opt);
|
54
|
+
|
55
|
+
void collector_loop(option_t *opt);
|
56
|
+
void output_stat(option_t *opt, int curr);
|
57
|
+
|
58
|
+
#endif
|