xxxx/xx/xx: Version 10.1.2 - Sebastien Godard (sysstat <at> orange.fr)
* New field added to sar -u and mpstat: %gnice (time spent
running a niced guest).
+ * New field added to sar -r: kbdirty (amount of memory waiting
+ to get written back to disk).
* [Peter Schiffer]: systemd support added.
* [Peter Schiffer]: Sysstat init script updated to make it
more conforming to LSB.
.f_xml_print = xml_print_memory_stats,
.f_json_print = json_print_memory_stats,
.hdr_line = "frmpg/s;bufpg/s;campg/s|"
- "kbmemfree;kbmemused;%memused;kbbuffers;kbcached;kbcommit;%commit;kbactive;kbinact|"
+ "kbmemfree;kbmemused;%memused;kbbuffers;kbcached;kbcommit;%commit;kbactive;kbinact;kbdirty|"
"kbswpfree;kbswpused;%swpused;kbswpcad;%swpcad",
.name = "A_MEMORY",
#endif
"\"commit\": %lu, "
"\"commit-percent\": %.2f, "
"\"active\": %lu, "
- "\"inactive\": %lu",
+ "\"inactive\": %lu, "
+ "\"dirty\": %lu",
smc->frmkb,
smc->tlmkb - smc->frmkb,
smc->tlmkb ?
SP_VALUE(0, smc->comkb, smc->tlmkb + smc->tlskb) :
0.0,
smc->activekb,
- smc->inactkb);
+ smc->inactkb,
+ smc->dirtykb);
}
if (DISPLAY_SWAP(a->opt_flags)) {
Amount of inactive memory in kilobytes (memory which has been less recently
used. It is more eligible to be reclaimed for other purposes).
.RE
+
+.B kbdirty
+.RS
+Amount of memory in kilobytes waiting to get written back to the disk.
+.RE
.RE
.IP -S
Report swap space utilization statistics.
avg_camkb = 0,
avg_comkb = 0,
avg_activekb = 0,
- avg_inactkb = 0;
+ avg_inactkb = 0,
+ avg_dirtykb = 0;
static unsigned long long
avg_frskb = 0,
avg_tlskb = 0,
if (DISPLAY_MEM_AMT(a->opt_flags)) {
if (dis) {
printf("\n%-11s kbmemfree kbmemused %%memused kbbuffers kbcached"
- " kbcommit %%commit kbactive kbinact\n", timestamp[!curr]);
+ " kbcommit %%commit kbactive kbinact kbdirty\n", timestamp[!curr]);
}
if (!dispavg) {
/* Display instantaneous values */
- printf("%-11s %9lu %9lu %6.2f %9lu %9lu %9lu %7.2f %9lu %9lu\n",
+ printf("%-11s %9lu %9lu %6.2f %9lu %9lu %9lu %7.2f %9lu %9lu %9lu\n",
timestamp[curr],
smc->frmkb,
smc->tlmkb - smc->frmkb,
(smc->tlmkb + smc->tlskb) ?
SP_VALUE(0, smc->comkb, smc->tlmkb + smc->tlskb) : 0.0,
smc->activekb,
- smc->inactkb);
+ smc->inactkb,
+ smc->dirtykb);
/*
* Will be used to compute the average.
avg_comkb += smc->comkb;
avg_activekb += smc->activekb;
avg_inactkb += smc->inactkb;
+ avg_dirtykb += smc->dirtykb;
}
else {
/* Display average values */
- printf("%-11s %9.0f %9.0f %6.2f %9.0f %9.0f %9.0f %7.2f %9.0f %9.0f\n",
+ printf("%-11s %9.0f %9.0f %6.2f %9.0f %9.0f %9.0f %7.2f %9.0f %9.0f %9.0f\n",
timestamp[curr],
(double) avg_frmkb / avg_count,
(double) smc->tlmkb - ((double) avg_frmkb / avg_count),
SP_VALUE(0.0, (double) (avg_comkb / avg_count),
smc->tlmkb + smc->tlskb) : 0.0,
(double) avg_activekb / avg_count,
- (double) avg_inactkb / avg_count);
+ (double) avg_inactkb / avg_count,
+ (double) avg_dirtykb / avg_count);
/* Reset average counters */
avg_frmkb = avg_bufkb = avg_camkb = avg_comkb = 0;
- avg_activekb = avg_inactkb = 0;
+ avg_activekb = avg_inactkb = avg_dirtykb = 0;
}
}
/* Read the amount of free swap memory in kB */
sscanf(line + 9, "%lu", &st_memory->frskb);
}
+ else if (!strncmp(line, "Dirty:", 6)) {
+ /* Read the amount of dirty memory in kB */
+ sscanf(line + 6, "%lu", &st_memory->dirtykb);
+ }
else if (!strncmp(line, "Committed_AS:", 13)) {
/* Read the amount of commited memory in kB */
sscanf(line + 13, "%lu", &st_memory->comkb);
unsigned long comkb __attribute__ ((aligned (8)));
unsigned long activekb __attribute__ ((aligned (8)));
unsigned long inactkb __attribute__ ((aligned (8)));
+ unsigned long dirtykb __attribute__ ((aligned (8)));
};
#define STATS_MEMORY_SIZE (sizeof(struct stats_memory))
"-\tkbactive", NULL, NULL,
smc->activekb, DNOVAL, NULL);
- render(isdb, pre, PT_USEINT | pt_newlin,
+ render(isdb, pre, PT_USEINT,
"-\tkbinact", NULL, NULL,
smc->inactkb, DNOVAL, NULL);
+
+ render(isdb, pre, PT_USEINT | pt_newlin,
+ "-\tkbdirty", NULL, NULL,
+ smc->dirtykb, DNOVAL, NULL);
}
if (DISPLAY_SWAP(a->opt_flags)) {
bwrtn CDATA #REQUIRED
>
-<!ELEMENT memory (memfree, memused, memused-percent, buffers, cached, commit, commit-percent, active, inactive, swpfree, swpused, swpused-percent, swpcad, swpcad-percent, frmpg, bufpg, campg)>
+<!ELEMENT memory (memfree, memused, memused-percent, buffers, cached, commit, commit-percent, active, inactive, dirty, swpfree, swpused, swpused-percent, swpcad, swpcad-percent, frmpg, bufpg, campg)>
<!ATTLIST memory
per CDATA #REQUIRED
unit CDATA #REQUIRED
<!ELEMENT inactive (#PCDATA)>
+<!ELEMENT dirty (#PCDATA)>
+
<!ELEMENT swpfree (#PCDATA)>
<!ELEMENT swpused (#PCDATA)>
<xs:element name="commit-percent" type="hundredth-type"></xs:element>
<xs:element name="active" type="xs:nonNegativeInteger"></xs:element>
<xs:element name="inactive" type="xs:nonNegativeInteger"></xs:element>
+ <xs:element name="dirty" type="xs:nonNegativeInteger"></xs:element>
<xs:element name="swpfree" type="xs:nonNegativeInteger"></xs:element>
<xs:element name="swpused" type="xs:nonNegativeInteger"></xs:element>
<xs:element name="swpused-percent" type="hundredth-type"></xs:element>
xprintf(tab, "<active>%lu</active>",
smc->activekb);
- xprintf(tab--, "<inactive>%lu</inactive>",
+ xprintf(tab, "<inactive>%lu</inactive>",
smc->inactkb);
+
+ xprintf(tab--, "<dirty>%lu</dirty>",
+ smc->dirtykb);
}
if (DISPLAY_SWAP(a->opt_flags)) {