Skip to content

Commit

Permalink
SVG: Add SVG output for hugepages utilization statistics
Browse files Browse the repository at this point in the history
These graphs correspond to the output of "sar -H".

Signed-off-by: Sebastien GODARD <[email protected]>
  • Loading branch information
sysstat committed Apr 16, 2016
1 parent 38deac6 commit 942632b
Show file tree
Hide file tree
Showing 3 changed files with 92 additions and 1 deletion.
3 changes: 2 additions & 1 deletion activity.c
Original file line number Diff line number Diff line change
Expand Up @@ -1201,9 +1201,10 @@ struct activity huge_act = {
.f_render = render_huge_stats,
.f_xml_print = xml_print_huge_stats,
.f_json_print = json_print_huge_stats,
.f_svg_print = svg_print_huge_stats,
.hdr_line = "kbhugfree;kbhugused;%hugused",
.name = "A_HUGE",
.g_nr = 0,
.g_nr = 2,
#endif
.nr = 1,
.nr2 = 1,
Expand Down
87 changes: 87 additions & 0 deletions svg_stats.c
Original file line number Diff line number Diff line change
Expand Up @@ -2165,3 +2165,90 @@ __print_funct_t svg_print_pwr_temp_stats(struct activity *a, int curr, int actio
free_graphs(out, outsize, spmin, spmax);
}
}

/*
***************************************************************************
* Display huge pages statistics in SVG.
*
* IN:
* @a Activity structure with statistics.
* @curr Index in array for current sample statistics.
* @action Action expected from current function.
* @svg_p SVG specific parameters: Current graph number (.@graph_no),
* flag indicating that a restart record has been previously
* found (.@restart) and a pointer on a record header structure
* (.@record_hdr) containing the first stats sample.
* @itv Interval of time in jiffies (only with F_MAIN action).
* @record_hdr Pointer on record header of current stats sample.
***************************************************************************
*/
__print_funct_t svg_print_huge_stats(struct activity *a, int curr, int action, struct svg_parm *svg_p,
unsigned long long itv, struct record_header *record_hdr)
{
struct stats_huge
*smc = (struct stats_huge *) a->buf[curr];
int group1[] = {2};
int group2[] = {1};
char *title1[] = {"Huge pages utilization (1)"};
char *title2[] = {"Huge pages utilization (2)"};
char *g1_title[] = {"~kbhugfree", "~kbhugused"};
char *g2_title[] = {"%hugused"};
static double *spmin, *spmax;
static char **out;
static int *outsize;
double tval;

if (action & F_BEGIN) {
/*
* Allocate arrays that will contain the graphs data
* and the min/max values.
*/
out = allocate_graph_lines(3, &outsize, &spmin, &spmax);
}

if (action & F_MAIN) {
/* Check for min/max values */
save_extrema(0, 1, 0, (void *) a->buf[curr], NULL,
itv, spmin, spmax);

if (smc->tlhkb - smc->frhkb < *(spmin + 1)) {
*(spmin + 1) = smc->tlhkb - smc->frhkb;
}
if (smc->tlhkb - smc->frhkb > *(spmax + 1)) {
*(spmax + 1) = smc->tlhkb - smc->frhkb;
}
tval = smc->tlhkb ? SP_VALUE(smc->frhkb, smc->tlhkb, smc->tlhkb) : 0.0;
if (tval < *(spmin + 2)) {
*(spmin + 2) = tval;
}
if (tval > *(spmax + 2)) {
*(spmax + 2) = tval;
}

/* kbhugfree */
lniappend(record_hdr->ust_time - svg_p->record_hdr->ust_time,
(unsigned long) smc->frhkb,
out, outsize, svg_p->restart);
/* hugused */
lniappend(record_hdr->ust_time - svg_p->record_hdr->ust_time,
(unsigned long) smc->tlhkb - smc->frhkb,
out + 1, outsize + 1, svg_p->restart);
/* %hugused */
brappend(record_hdr->ust_time - svg_p->record_hdr->ust_time,
0.0, tval,
out + 2, outsize + 2, svg_p->dt);
}

if (action & F_END) {
draw_activity_graphs(1, SVG_LINE_GRAPH,
title1, g1_title, NULL, group1,
spmin, spmax, out, outsize, svg_p, record_hdr);
draw_activity_graphs(1, SVG_BAR_GRAPH,
title2, g2_title, NULL, group2,
spmin + 2, spmax + 2, out + 2, outsize + 2,
svg_p, record_hdr);

/* Free remaining structures */
free_graphs(out, outsize, spmin, spmax);
}
}
3 changes: 3 additions & 0 deletions svg_stats.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,5 +50,8 @@ __print_funct_t svg_print_pwr_fan_stats
__print_funct_t svg_print_pwr_temp_stats
(struct activity *, int, int, struct svg_parm *, unsigned long long,
struct record_header *);
__print_funct_t svg_print_huge_stats
(struct activity *, int, int, struct svg_parm *, unsigned long long,
struct record_header *);

#endif /* _SVG_STATS_H */

0 comments on commit 942632b

Please sign in to comment.