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.
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