"\"dropd\": %.2f, "
"\"squeezd\": %.2f, "
"\"rx_rps\": %.2f, "
- "\"flw_lim\": %.2f}",
+ "\"flw_lim\": %.2f, ",
+ "\"blg_len\": %u}",
cpuno,
S_VALUE(ssnp->processed, ssnc->processed, itv),
S_VALUE(ssnp->dropped, ssnc->dropped, itv),
S_VALUE(ssnp->time_squeeze, ssnc->time_squeeze, itv),
S_VALUE(ssnp->received_rps, ssnc->received_rps, itv),
- S_VALUE(ssnp->flow_limit, ssnc->flow_limit, itv));
+ S_VALUE(ssnp->flow_limit, ssnc->flow_limit, itv),
+ ssnc->backlog_len);
}
printf("\n");
pmiAddMetric("network.softnet.flow_limit",
pmiID(60, 57, 5), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER,
pmiUnits(0, 0, 1, 0, 0, PM_COUNT_ONE));
+
+ pmiAddMetric("network.softnet.backlog_length",
+ pmiID(60, 57, 12), PM_TYPE_U64, PM_INDOM_NULL, PM_SEM_COUNTER,
+ pmiUnits(0, 0, 1, 0, 0, PM_COUNT_ONE));
}
}
else {
pmiAddMetric("network.softnet.percpu.flow_limit",
pmiID(60, 57, 11), PM_TYPE_U64, indom, PM_SEM_COUNTER,
pmiUnits(0, 0, 1, 0, 0, PM_COUNT_ONE));
+
+ pmiAddMetric("network.softnet.percpu.backlog_length",
+ pmiID(60, 57, 13), PM_TYPE_U64, indom, PM_SEM_COUNTER,
+ pmiUnits(0, 0, 1, 0, 0, PM_COUNT_ONE));
}
first = FALSE;
snprintf(buf, sizeof(buf), "%llu", (unsigned long long) ssnc->flow_limit);
pmiPutValue("network.softnet.percpu.flow_limit", cpuno, buf);
+
+ snprintf(buf, sizeof(buf), "%llu", (unsigned long long) ssnc->backlog_len);
+ pmiPutValue("network.softnet.percpu.backlog_length", cpuno, buf);
}
#endif /* HAVE_PCP */
}
printf("%s; %s", timestr, pfield(a->hdr_line, FIRST));
if (DISPLAY_DEBUG_MODE(flags) && i) {
if (ssnc->processed + ssnc->dropped + ssnc->time_squeeze +
- ssnc->received_rps + ssnc->flow_limit == 0) {
+ ssnc->received_rps + ssnc->flow_limit + ssnc->backlog_len == 0) {
/* CPU is considered offline */
cprintf_s(IS_DEBUG, "%s", " [OFF]");
}
pval((unsigned long long) ssnp->received_rps, (unsigned long long) ssnc->received_rps);
printf(" %s", pfield(NULL, 0));
pval((unsigned long long) ssnp->flow_limit, (unsigned long long) ssnc->flow_limit);
+ printf(" %s; %u;", pfield(NULL, 0), ssnc->backlog_len);
printf("\n");
}
}
S_VALUE(ssnp->received_rps, ssnc->received_rps, itv),
NULL);
- render(isdb, pre, pt_newlin,
+ render(isdb, pre, PT_NOFLAG,
"all\tflw_lim/s",
NULL, NULL,
NOVAL,
S_VALUE(ssnp->flow_limit, ssnc->flow_limit, itv),
NULL);
+
+ render(isdb, pre, PT_USEINT | pt_newlin,
+ "all\tblg_len",
+ NULL, NULL,
+ ssnc->backlog_len,
+ DNOVAL,
+ NULL);
}
else {
render(isdb, pre, PT_NOFLAG,
S_VALUE(ssnp->received_rps, ssnc->received_rps, itv),
NULL);
- render(isdb, pre, pt_newlin,
+ render(isdb, pre, PT_NOFLAG,
"cpu%d\tflw_lim/s",
NULL, cons(iv, i - 1, NOVAL),
NOVAL,
S_VALUE(ssnp->flow_limit, ssnc->flow_limit, itv),
NULL);
+
+ render(isdb, pre, PT_USEINT | pt_newlin,
+ "cpu%d\tblg_len",
+ NULL, cons(iv, i - 1, NOVAL),
+ ssnc->backlog_len,
+ DNOVAL,
+ NULL);
}
}
}
* @record_hdr Pointer on record header of current stats sample.
***************************************************************************
*/
-#define SOFT_ARRAY_SZ 5
+#define SOFT_ARRAY_SZ 6
__print_funct_t svg_print_softnet_stats(struct activity *a, int curr, int action, struct svg_parm *svg_p,
unsigned long long itv, struct record_header *record_hdr)
{
struct stats_softnet *ssnc, *ssnp, ssnczero;
- int group[] = {2, 3};
- int g_type[] = {SVG_LINE_GRAPH, SVG_LINE_GRAPH};
+ int group[] = {2, 3, 1};
+ int g_type[] = {SVG_LINE_GRAPH, SVG_LINE_GRAPH, SVG_LINE_GRAPH};
char *title[] = {"Software-based network processing statistics (1)",
- "Software-based network processing statistics (2)"};
+ "Software-based network processing statistics (2)",
+ "Software-based network processing statistics (3)"};
char *g_title[] = {"total/s", "dropd/s",
- "squeezd/s", "rx_rps/s", "flw_lim/s"};
+ "squeezd/s", "rx_rps/s", "flw_lim/s",
+ "~blg_len"};
int g_fields[] = {0, 1, 2, 3, 4};
+ unsigned int local_types_nr[] = {0, 0, 5};
static double *spmin, *spmax;
static char **out;
static int *outsize;
pos = i * SOFT_ARRAY_SZ;
/* Check for min/max values */
- save_extrema(a->gtypes_nr, (void *) ssnc, (void *) ssnp,
+ save_extrema(local_types_nr, (void *) ssnc, (void *) ssnp,
itv, spmin + pos, spmax + pos, g_fields);
+ if (ssnc->backlog_len < *(spmin + pos + 5)) {
+ *(spmin + pos + 5) = ssnc->backlog_len;
+ }
+ if (ssnc->backlog_len > *(spmax + pos + 5)) {
+ *(spmax + pos + 5) = ssnc->backlog_len;
+ }
/* total/s */
lnappend(record_hdr->ust_time - svg_p->ust_time_ref,
lnappend(record_hdr->ust_time - svg_p->ust_time_ref,
S_VALUE(ssnp->flow_limit, ssnc->flow_limit, itv),
out + pos + 4, outsize + pos + 4, restart);
+ /* blg_len */
+ lniappend(record_hdr->ust_time - svg_p->ust_time_ref,
+ (unsigned long long) ssnc->backlog_len,
+ out + pos + 5, outsize + pos + 5, restart);
}
}
"dropd=\"%.2f\" "
"squeezd=\"%.2f\" "
"rx_rps=\"%.2f\" "
- "flw_lim=\"%.2f\"/>",
+ "flw_lim=\"%.2f\" ",
+ "blg_len=\"%u\"/>",
cpuno,
S_VALUE(ssnp->processed, ssnc->processed, itv),
S_VALUE(ssnp->dropped, ssnc->dropped, itv),
S_VALUE(ssnp->time_squeeze, ssnc->time_squeeze, itv),
S_VALUE(ssnp->received_rps, ssnc->received_rps, itv),
- S_VALUE(ssnp->flow_limit, ssnc->flow_limit, itv));
+ S_VALUE(ssnp->flow_limit, ssnc->flow_limit, itv),
+ ssnc->backlog_len);
}
tab--;