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
@@ -0,0 +1,121 @@
|
|
1
|
+
/*
|
2
|
+
* iostat: report CPU and I/O statistics
|
3
|
+
* (C) 1999-2010 by Sebastien Godard (sysstat <at> orange.fr)
|
4
|
+
*/
|
5
|
+
|
6
|
+
#ifndef _IOSTAT_H
|
7
|
+
#define _IOSTAT_H
|
8
|
+
|
9
|
+
#include "common.h"
|
10
|
+
|
11
|
+
/* I_: iostat - D_: Display - F_: Flag */
|
12
|
+
#define I_D_CPU 0x00001
|
13
|
+
#define I_D_DISK 0x00002
|
14
|
+
#define I_D_TIMESTAMP 0x00004
|
15
|
+
#define I_D_EXTENDED 0x00008
|
16
|
+
#define I_D_PART_ALL 0x00010
|
17
|
+
#define I_D_KILOBYTES 0x00020
|
18
|
+
#define I_F_HAS_SYSFS 0x00040
|
19
|
+
#define I_D_DEBUG 0x00080
|
20
|
+
#define I_D_UNFILTERED 0x00100
|
21
|
+
#define I_D_MEGABYTES 0x00200
|
22
|
+
#define I_D_PARTITIONS 0x00400
|
23
|
+
#define I_F_HAS_DISKSTATS 0x00800
|
24
|
+
/* Unused 0x01000 */
|
25
|
+
/* Unused 0x02000 */
|
26
|
+
/* Unused 0x04000 */
|
27
|
+
/* Unused 0x08000 */
|
28
|
+
#define I_D_DEVMAP_NAME 0x10000
|
29
|
+
#define I_D_ISO 0x20000
|
30
|
+
/* Unused 0x40000 */
|
31
|
+
#define I_D_ZERO_OMIT 0x80000
|
32
|
+
|
33
|
+
#define DISPLAY_CPU(m) (((m) & I_D_CPU) == I_D_CPU)
|
34
|
+
#define DISPLAY_DISK(m) (((m) & I_D_DISK) == I_D_DISK)
|
35
|
+
#define DISPLAY_TIMESTAMP(m) (((m) & I_D_TIMESTAMP) == I_D_TIMESTAMP)
|
36
|
+
#define DISPLAY_EXTENDED(m) (((m) & I_D_EXTENDED) == I_D_EXTENDED)
|
37
|
+
#define DISPLAY_PART_ALL(m) (((m) & I_D_PART_ALL) == I_D_PART_ALL)
|
38
|
+
#define DISPLAY_KILOBYTES(m) (((m) & I_D_KILOBYTES) == I_D_KILOBYTES)
|
39
|
+
#define DISPLAY_MEGABYTES(m) (((m) & I_D_MEGABYTES) == I_D_MEGABYTES)
|
40
|
+
#define HAS_SYSFS(m) (((m) & I_F_HAS_SYSFS) == I_F_HAS_SYSFS)
|
41
|
+
#define DISPLAY_DEBUG(m) (((m) & I_D_DEBUG) == I_D_DEBUG)
|
42
|
+
#define DISPLAY_UNFILTERED(m) (((m) & I_D_UNFILTERED) == I_D_UNFILTERED)
|
43
|
+
#define DISPLAY_PARTITIONS(m) (((m) & I_D_PARTITIONS) == I_D_PARTITIONS)
|
44
|
+
#define HAS_DISKSTATS(m) (((m) & I_F_HAS_DISKSTATS) == I_F_HAS_DISKSTATS)
|
45
|
+
#define DISPLAY_DEVMAP_NAME(m) (((m) & I_D_DEVMAP_NAME) == I_D_DEVMAP_NAME)
|
46
|
+
#define DISPLAY_ISO(m) (((m) & I_D_ISO) == I_D_ISO)
|
47
|
+
#define DISPLAY_ZERO_OMIT(m) (((m) & I_D_ZERO_OMIT) == I_D_ZERO_OMIT)
|
48
|
+
|
49
|
+
/* Preallocation constats */
|
50
|
+
#define NR_DEV_PREALLOC 4
|
51
|
+
#define NR_DISK_PREALLOC 3
|
52
|
+
|
53
|
+
/* Environment variable */
|
54
|
+
#define ENV_POSIXLY_CORRECT "POSIXLY_CORRECT"
|
55
|
+
|
56
|
+
/*
|
57
|
+
* Structures for I/O stats.
|
58
|
+
* The number of structures allocated corresponds to the number of devices
|
59
|
+
* present in the system, plus a preallocation number to handle those
|
60
|
+
* that can be registered dynamically.
|
61
|
+
* The number of devices is found by using /sys filesystem (if mounted),
|
62
|
+
* or the number of "disk_io:" entries in /proc/stat (2.4 kernels),
|
63
|
+
* else the default value is 4 (for old kernels, which maintained stats
|
64
|
+
* for the first four devices in /proc/stat).
|
65
|
+
* For each io_stats structure allocated corresponds a io_hdr_stats structure.
|
66
|
+
* A io_stats structure is considered as unused or "free" (containing no stats
|
67
|
+
* for a particular device) if the 'major' field of the io_hdr_stats
|
68
|
+
* structure is set to 0.
|
69
|
+
*/
|
70
|
+
struct io_stats {
|
71
|
+
/* # of sectors read */
|
72
|
+
unsigned long long rd_sectors __attribute__ ((aligned (8)));
|
73
|
+
/* # of sectors written */
|
74
|
+
unsigned long long wr_sectors __attribute__ ((packed));
|
75
|
+
/* # of read operations issued to the device */
|
76
|
+
unsigned long rd_ios __attribute__ ((packed));
|
77
|
+
/* # of read requests merged */
|
78
|
+
unsigned long rd_merges __attribute__ ((packed));
|
79
|
+
/* Time of read requests in queue */
|
80
|
+
unsigned long rd_ticks __attribute__ ((packed));
|
81
|
+
/* # of write operations issued to the device */
|
82
|
+
unsigned long wr_ios __attribute__ ((packed));
|
83
|
+
/* # of write requests merged */
|
84
|
+
unsigned long wr_merges __attribute__ ((packed));
|
85
|
+
/* Time of write requests in queue */
|
86
|
+
unsigned long wr_ticks __attribute__ ((packed));
|
87
|
+
/* # of I/Os in progress */
|
88
|
+
unsigned long ios_pgr __attribute__ ((packed));
|
89
|
+
/* # of ticks total (for this device) for I/O */
|
90
|
+
unsigned long tot_ticks __attribute__ ((packed));
|
91
|
+
/* # of ticks requests spent in queue */
|
92
|
+
unsigned long rq_ticks __attribute__ ((packed));
|
93
|
+
/* # of I/O done since last reboot */
|
94
|
+
unsigned long dk_drive __attribute__ ((packed));
|
95
|
+
/* # of blocks read */
|
96
|
+
unsigned long dk_drive_rblk __attribute__ ((packed));
|
97
|
+
/* # of blocks written */
|
98
|
+
unsigned long dk_drive_wblk __attribute__ ((packed));
|
99
|
+
};
|
100
|
+
|
101
|
+
#define IO_STATS_SIZE (sizeof(struct io_stats))
|
102
|
+
|
103
|
+
struct io_hdr_stats {
|
104
|
+
unsigned int active __attribute__ ((aligned (4)));
|
105
|
+
unsigned int used __attribute__ ((packed));
|
106
|
+
char name[MAX_NAME_LEN];
|
107
|
+
};
|
108
|
+
|
109
|
+
#define IO_HDR_STATS_SIZE (sizeof(struct io_hdr_stats))
|
110
|
+
|
111
|
+
/* List of devices entered on the command line */
|
112
|
+
struct io_dlist {
|
113
|
+
/* Indicate whether its partitions are to be displayed or not */
|
114
|
+
int disp_part __attribute__ ((aligned (4)));
|
115
|
+
/* Device name */
|
116
|
+
char dev_name[MAX_NAME_LEN];
|
117
|
+
};
|
118
|
+
|
119
|
+
#define IO_DLIST_SIZE (sizeof(struct io_dlist))
|
120
|
+
|
121
|
+
#endif /* _IOSTAT_H */
|
@@ -0,0 +1,19 @@
|
|
1
|
+
#ifndef LIBIOSTAT_H
|
2
|
+
#define LIBIOSTAT_H
|
3
|
+
|
4
|
+
#include "iostat.h"
|
5
|
+
#include "mpstat.h"
|
6
|
+
|
7
|
+
void salloc_dev_list(int list_len);
|
8
|
+
void get_HZ(void);
|
9
|
+
void io_sys_init(void);
|
10
|
+
void io_sys_free(void);
|
11
|
+
void sfree_dev_list(void);
|
12
|
+
int update_dev_list(int *dlist_idx, char *device_name);
|
13
|
+
void read_diskstats_stat(int curr);
|
14
|
+
|
15
|
+
/* mpstat.c */
|
16
|
+
void read_interrupts_stat(char *file, struct stats_irqcpu *st_ic[], int ic_nr, int curr);
|
17
|
+
void salloc_mp_struct(int nr_cpus);
|
18
|
+
|
19
|
+
#endif
|