perfmonger 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +15 -0
  2. data/.dir-locals.el +2 -0
  3. data/.gitignore +4 -0
  4. data/.rspec +1 -0
  5. data/.travis.yml +12 -0
  6. data/COPYING +674 -0
  7. data/Gemfile +5 -0
  8. data/HOWTO.md +15 -0
  9. data/NEWS +115 -0
  10. data/README.md +61 -0
  11. data/Rakefile +8 -0
  12. data/bin/perfmonger +6 -0
  13. data/data/NOTICE +8 -0
  14. data/data/Twitter_Bootstrap_LICENSE.txt +176 -0
  15. data/data/assets/css/bootstrap-responsive.css +1109 -0
  16. data/data/assets/css/bootstrap.css +6167 -0
  17. data/data/assets/css/perfmonger.css +17 -0
  18. data/data/assets/dashboard.erb +319 -0
  19. data/data/assets/img/glyphicons-halflings-white.png +0 -0
  20. data/data/assets/img/glyphicons-halflings.png +0 -0
  21. data/data/assets/js/bootstrap.js +2280 -0
  22. data/data/assets/js/bootstrap.min.js +6 -0
  23. data/data/assets/js/canvasjs.js +9042 -0
  24. data/data/assets/js/canvasjs.min.js +271 -0
  25. data/data/sysstat.ioconf +268 -0
  26. data/ext/perfmonger/extconf.rb +19 -0
  27. data/ext/perfmonger/perfmonger.h +58 -0
  28. data/ext/perfmonger/perfmonger_record.c +754 -0
  29. data/ext/perfmonger/sysstat/common.c +627 -0
  30. data/ext/perfmonger/sysstat/common.h +207 -0
  31. data/ext/perfmonger/sysstat/ioconf.c +515 -0
  32. data/ext/perfmonger/sysstat/ioconf.h +84 -0
  33. data/ext/perfmonger/sysstat/iostat.c +1100 -0
  34. data/ext/perfmonger/sysstat/iostat.h +121 -0
  35. data/ext/perfmonger/sysstat/libsysstat.h +19 -0
  36. data/ext/perfmonger/sysstat/mpstat.c +953 -0
  37. data/ext/perfmonger/sysstat/mpstat.h +79 -0
  38. data/ext/perfmonger/sysstat/rd_stats.c +2388 -0
  39. data/ext/perfmonger/sysstat/rd_stats.h +651 -0
  40. data/ext/perfmonger/sysstat/sysconfig.h +13 -0
  41. data/lib/perfmonger/cli.rb +115 -0
  42. data/lib/perfmonger/command/base_command.rb +39 -0
  43. data/lib/perfmonger/command/fingerprint.rb +453 -0
  44. data/lib/perfmonger/command/plot.rb +429 -0
  45. data/lib/perfmonger/command/record.rb +32 -0
  46. data/lib/perfmonger/command/record_option.rb +149 -0
  47. data/lib/perfmonger/command/server.rb +294 -0
  48. data/lib/perfmonger/command/stat.rb +60 -0
  49. data/lib/perfmonger/command/stat_option.rb +29 -0
  50. data/lib/perfmonger/command/summary.rb +402 -0
  51. data/lib/perfmonger/config.rb +6 -0
  52. data/lib/perfmonger/version.rb +5 -0
  53. data/lib/perfmonger.rb +12 -0
  54. data/misc/release-howto.txt +17 -0
  55. data/misc/sample-cpu.png +0 -0
  56. data/misc/sample-read-iops.png +0 -0
  57. data/perfmonger.gemspec +44 -0
  58. data/test/run-test.sh +39 -0
  59. data/test/spec/bin_spec.rb +37 -0
  60. data/test/spec/data/2devices.expected +42 -0
  61. data/test/spec/data/2devices.output +42 -0
  62. data/test/spec/spec_helper.rb +20 -0
  63. data/test/spec/summary_spec.rb +193 -0
  64. data/test/test-perfmonger.c +145 -0
  65. data/test/test.h +9 -0
  66. 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