svn commit: r318449 - in stable/11: contrib/top usr.bin/top
Allan Jude
allanjude at FreeBSD.org
Thu May 18 13:19:09 UTC 2017
Author: allanjude
Date: Thu May 18 13:19:07 2017
New Revision: 318449
URL: https://svnweb.freebsd.org/changeset/base/318449
Log:
MFC r315435:
Add ZFS compressed ARC stats to top(1)
MFC r316314:
top(1) read the wrong amount of data from sysctl
MFC r318448:
Explain the new fields in top(1) related to ZFS compressed ARC
Remove the laundry field during the merge, does not exist in stable/11
Modified:
stable/11/contrib/top/display.c
stable/11/contrib/top/display.h
stable/11/contrib/top/layout.h
stable/11/contrib/top/machine.h
stable/11/contrib/top/top.c
stable/11/usr.bin/top/machine.c
stable/11/usr.bin/top/top.local.1
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/contrib/top/display.c
==============================================================================
--- stable/11/contrib/top/display.c Thu May 18 12:55:07 2017 (r318448)
+++ stable/11/contrib/top/display.c Thu May 18 13:19:07 2017 (r318449)
@@ -69,6 +69,7 @@ static char **procstate_names;
static char **cpustate_names;
static char **memory_names;
static char **arc_names;
+static char **carc_names;
static char **swap_names;
static int num_procstates;
@@ -105,6 +106,8 @@ int x_mem = 5;
int y_mem = 3;
int x_arc = 5;
int y_arc = 4;
+int x_carc = 5;
+int y_carc = 5;
int x_swap = 6;
int y_swap = 4;
int y_message = 5;
@@ -222,6 +225,7 @@ struct statics *statics;
lmemory = (int *)malloc(num_memory * sizeof(int));
arc_names = statics->arc_names;
+ carc_names = statics->carc_names;
/* calculate starting columns where needed */
cpustate_total_length = 0;
@@ -684,6 +688,47 @@ int *stats;
line_update(arc_buffer, new, x_arc, y_arc);
}
+
+/*
+ * *_carc(stats) - print "Compressed ARC: " followed by the summary string
+ *
+ * Assumptions: cursor is on "lastline"
+ * for i_carc ONLY: cursor is on the previous line
+ */
+char carc_buffer[MAX_COLS];
+
+void
+i_carc(stats)
+
+int *stats;
+
+{
+ if (carc_names == NULL)
+ return;
+
+ fputs("\n ", stdout);
+ lastline++;
+
+ /* format and print the memory summary */
+ summary_format(carc_buffer, stats, carc_names);
+ fputs(carc_buffer, stdout);
+}
+
+void
+u_carc(stats)
+
+int *stats;
+
+{
+ static char new[MAX_COLS];
+
+ if (carc_names == NULL)
+ return;
+
+ /* format the new line */
+ summary_format(new, stats, carc_names);
+ line_update(carc_buffer, new, x_carc, y_carc);
+}
/*
* *_swap(stats) - print "Swap: " followed by the swap summary string
@@ -1174,6 +1219,7 @@ register char **names;
register int num;
register char *thisname;
register int useM = No;
+ char rbuf[6];
/* format each number followed by its string */
p = str;
@@ -1194,6 +1240,14 @@ register char **names;
/* skip over the K, since it was included by format_k */
p = strecpy(p, thisname+1);
}
+ /* is this number a ratio? */
+ else if (thisname[0] == ':')
+ {
+ (void) snprintf(rbuf, sizeof(rbuf), "%.2f",
+ (float)*(numbers - 2) / (float)num);
+ p = strecpy(p, rbuf);
+ p = strecpy(p, thisname);
+ }
else
{
p = strecpy(p, itoa(num));
Modified: stable/11/contrib/top/display.h
==============================================================================
--- stable/11/contrib/top/display.h Thu May 18 12:55:07 2017 (r318448)
+++ stable/11/contrib/top/display.h Thu May 18 13:19:07 2017 (r318449)
@@ -16,6 +16,7 @@ char *cpustates_tag(void);
void display_header(int t);
int display_init(struct statics *statics);
void i_arc(int *stats);
+void i_carc(int *stats);
void i_cpustates(int *states);
void i_loadave(int mpid, double *avenrun);
void i_memory(int *stats);
@@ -29,6 +30,7 @@ void new_message();
int readline(char *buffer, int size, int numeric);
char *trim_header(char *text);
void u_arc(int *stats);
+void u_carc(int *stats);
void u_cpustates(int *states);
void u_endscreen(int hi);
void u_header(char *text);
Modified: stable/11/contrib/top/layout.h
==============================================================================
--- stable/11/contrib/top/layout.h Thu May 18 12:55:07 2017 (r318448)
+++ stable/11/contrib/top/layout.h Thu May 18 13:19:07 2017 (r318449)
@@ -21,6 +21,8 @@ extern int x_mem; /* 5 */
extern int y_mem; /* 3 */
extern int x_arc; /* 5 */
extern int y_arc; /* 4 */
+extern int x_carc; /* 5 */
+extern int y_carc; /* 5 */
extern int x_swap; /* 6 */
extern int y_swap; /* 4 */
extern int y_message; /* 5 */
Modified: stable/11/contrib/top/machine.h
==============================================================================
--- stable/11/contrib/top/machine.h Thu May 18 12:55:07 2017 (r318448)
+++ stable/11/contrib/top/machine.h Thu May 18 13:19:07 2017 (r318449)
@@ -21,6 +21,7 @@ struct statics
char **cpustate_names;
char **memory_names;
char **arc_names;
+ char **carc_names;
char **swap_names;
#ifdef ORDER
char **order_names;
@@ -48,6 +49,7 @@ struct system_info
int *cpustates;
int *memory;
int *arc;
+ int *carc;
int *swap;
struct timeval boottime;
int ncpus;
Modified: stable/11/contrib/top/top.c
==============================================================================
--- stable/11/contrib/top/top.c Thu May 18 12:55:07 2017 (r318448)
+++ stable/11/contrib/top/top.c Thu May 18 13:19:07 2017 (r318449)
@@ -125,6 +125,7 @@ void (*d_procstates)() = i_procstates;
void (*d_cpustates)() = i_cpustates;
void (*d_memory)() = i_memory;
void (*d_arc)() = i_arc;
+void (*d_carc)() = i_carc;
void (*d_swap)() = i_swap;
void (*d_message)() = i_message;
void (*d_header)() = i_header;
@@ -658,6 +659,7 @@ restart:
/* display memory stats */
(*d_memory)(system_info.memory);
(*d_arc)(system_info.arc);
+ (*d_carc)(system_info.carc);
/* display swap stats */
(*d_swap)(system_info.swap);
@@ -724,6 +726,7 @@ restart:
d_cpustates = u_cpustates;
d_memory = u_memory;
d_arc = u_arc;
+ d_carc = u_carc;
d_swap = u_swap;
d_message = u_message;
d_header = u_header;
@@ -1190,6 +1193,7 @@ reset_display()
d_cpustates = i_cpustates;
d_memory = i_memory;
d_arc = i_arc;
+ d_carc = i_carc;
d_swap = i_swap;
d_message = i_message;
d_header = i_header;
Modified: stable/11/usr.bin/top/machine.c
==============================================================================
--- stable/11/usr.bin/top/machine.c Thu May 18 12:55:07 2017 (r318448)
+++ stable/11/usr.bin/top/machine.c Thu May 18 13:19:07 2017 (r318449)
@@ -188,6 +188,12 @@ char *arcnames[] = {
NULL
};
+int carc_stats[5];
+char *carcnames[] = {
+ "K Compressed, ", "K Uncompressed, ", ":1 Ratio, ", "K Overhead",
+ NULL
+};
+
int swap_stats[7];
char *swapnames[] = {
"K Total, ", "K Used, ", "K Free, ", "% Inuse, ", "K In, ", "K Out",
@@ -223,6 +229,7 @@ static long total_majflt;
/* these are for getting the memory statistics */
static int arc_enabled;
+static int carc_enabled;
static int pageshift; /* log base 2 of the pagesize */
/* define pagetok in terms of pageshift */
@@ -283,16 +290,18 @@ update_layout(void)
y_mem = 3;
y_arc = 4;
- y_swap = 4 + arc_enabled;
- y_idlecursor = 5 + arc_enabled;
- y_message = 5 + arc_enabled;
- y_header = 6 + arc_enabled;
- y_procs = 7 + arc_enabled;
- Header_lines = 7 + arc_enabled;
+ y_carc = 5;
+ y_swap = 4 + arc_enabled + carc_enabled;
+ y_idlecursor = 5 + arc_enabled + carc_enabled;
+ y_message = 5 + arc_enabled + carc_enabled;
+ y_header = 6 + arc_enabled + carc_enabled;
+ y_procs = 7 + arc_enabled + carc_enabled;
+ Header_lines = 7 + arc_enabled + carc_enabled;
if (pcpu_stats) {
y_mem += ncpus - 1;
y_arc += ncpus - 1;
+ y_carc += ncpus - 1;
y_swap += ncpus - 1;
y_idlecursor += ncpus - 1;
y_message += ncpus - 1;
@@ -307,6 +316,7 @@ machine_init(struct statics *statics, ch
{
int i, j, empty, pagesize;
uint64_t arc_size;
+ boolean_t carc_en;
size_t size;
struct passwd *pw;
@@ -318,6 +328,10 @@ machine_init(struct statics *statics, ch
size != sizeof(smpmode))
smpmode = 0;
+ size = sizeof(carc_en);
+ if (sysctlbyname("vfs.zfs.compressed_arc_enabled", &carc_en, &size,
+ NULL, 0) == 0 && carc_en == 1)
+ carc_enabled = 1;
size = sizeof(arc_size);
if (sysctlbyname("kstat.zfs.misc.arcstats.size", &arc_size, &size,
NULL, 0) == 0 && arc_size != 0)
@@ -368,6 +382,10 @@ machine_init(struct statics *statics, ch
statics->arc_names = arcnames;
else
statics->arc_names = NULL;
+ if (carc_enabled)
+ statics->carc_names = carcnames;
+ else
+ statics->carc_names = NULL;
statics->swap_names = swapnames;
#ifdef ORDER
statics->order_names = ordernames;
@@ -559,6 +577,16 @@ get_system_info(struct system_info *si)
arc_stats[5] = arc_stat >> 10;
si->arc = arc_stats;
}
+ if (carc_enabled) {
+ GETSYSCTL("kstat.zfs.misc.arcstats.compressed_size", arc_stat);
+ carc_stats[0] = arc_stat >> 10;
+ GETSYSCTL("kstat.zfs.misc.arcstats.uncompressed_size", arc_stat);
+ carc_stats[1] = arc_stat >> 10;
+ carc_stats[2] = arc_stats[0]; /* ARC Total */
+ GETSYSCTL("kstat.zfs.misc.arcstats.overhead_size", arc_stat);
+ carc_stats[3] = arc_stat >> 10;
+ si->carc = carc_stats;
+ }
/* set arrays and strings */
if (pcpu_stats) {
Modified: stable/11/usr.bin/top/top.local.1
==============================================================================
--- stable/11/usr.bin/top/top.local.1 Thu May 18 12:55:07 2017 (r318448)
+++ stable/11/usr.bin/top/top.local.1 Thu May 18 13:19:07 2017 (r318449)
@@ -2,9 +2,10 @@
.SH "FreeBSD NOTES"
.SH DESCRIPTION OF MEMORY
-Mem: 9220K Active, 1M Inact, 3284K Wired, 1M Cache, 2M Buf, 1320K Free
-ARC: 2048K Total, 342K MRU, 760K MFU, 272K Anon, 232K Header, 442K Other
-Swap: 91M Total, 79M Free, 13% Inuse, 80K In, 104K Out
+Mem: 61M Active, 86M Inact, 22G Wired, 1M Cache, 2M Buf, 102G Free
+ARC: 15G Total, 9303M MFU, 6155M MRU, 1464K Anon, 98M Header, 35M Other
+ 15G Compressed, 27G Uncompressed, 1.75:1 Ratio, 174M Overhead
+Swap: 4096M Total, 532M Free, 13% Inuse, 80K In, 104K Out
.TP
.B K:
Kilobyte
@@ -55,8 +56,20 @@ number of ARC bytes holding in flight da
.B Header:
number of ARC bytes holding headers
.TP
-.B Other
+.B Other:
miscellaneous ARC bytes
+.TP
+.B Compressed:
+bytes of memory used by ARC caches
+.TP
+.B Uncompressed:
+bytes of data stored in ARC caches before compression
+.TP
+.B Ratio:
+ratio of uncompressed data to total ARC size
+.TP
+.B Overhead:
+amount of overhead from ARC compression
.SS Swap Stats
.TP
.B Total:
More information about the svn-src-stable-11
mailing list