diff options
Diffstat (limited to 'users/multi/pkgs/htop/zfs-arc-stats/0002-Support-ZFS-ARC-stats-on-FreeBSD.patch')
-rw-r--r-- | users/multi/pkgs/htop/zfs-arc-stats/0002-Support-ZFS-ARC-stats-on-FreeBSD.patch | 438 |
1 files changed, 0 insertions, 438 deletions
diff --git a/users/multi/pkgs/htop/zfs-arc-stats/0002-Support-ZFS-ARC-stats-on-FreeBSD.patch b/users/multi/pkgs/htop/zfs-arc-stats/0002-Support-ZFS-ARC-stats-on-FreeBSD.patch deleted file mode 100644 index 0bc362adeeb0..000000000000 --- a/users/multi/pkgs/htop/zfs-arc-stats/0002-Support-ZFS-ARC-stats-on-FreeBSD.patch +++ /dev/null @@ -1,438 +0,0 @@ -From a93edde1a21e533472b5d443002032260b5bd066 Mon Sep 17 00:00:00 2001 -From: Ross Williams <ross@ross-williams.net> -Date: Sat, 6 Jul 2019 04:27:49 +0000 -Subject: [PATCH 2/9] Support ZFS ARC stats on FreeBSD - -New meter displays same ARC stats as FreeBSD top(1). -Can be extended to other platforms that support ZFS. - -Pulling kstat.zfs.misc.arcstats.c_max as the meter -total, so the meter has a meaningful value to work -up to. - -The Text meter displays, first, the maximum -ARC size (Meter.total), then second, the total -ARC used, using the difference between Meter.maxItems -and Meter.curItems to "hide" the used value from the -Bar and Graph drawing functions by using an index -in Meter.values[] that is beyond curItems - 1, but -less than maxItems - 1. ---- - CRT.c | 35 ++++++++++++++++ - CRT.h | 5 +++ - Makefile.am | 10 ++++- - freebsd/FreeBSDProcessList.c | 48 ++++++++++++++++++++- - freebsd/FreeBSDProcessList.h | 6 +++ - freebsd/Platform.c | 19 +++++++++ - freebsd/Platform.h | 2 + - zfs/ZfsArcMeter.c | 81 ++++++++++++++++++++++++++++++++++++ - zfs/ZfsArcMeter.h | 18 ++++++++ - 9 files changed, 220 insertions(+), 4 deletions(-) - create mode 100644 zfs/ZfsArcMeter.c - create mode 100644 zfs/ZfsArcMeter.h - -diff --git a/CRT.c b/CRT.c -index ca9a10d..b9017aa 100644 ---- a/CRT.c -+++ b/CRT.c -@@ -128,6 +128,11 @@ typedef enum ColorElements_ { - CPU_SOFTIRQ, - CPU_STEAL, - CPU_GUEST, -+ ZFS_MFU, -+ ZFS_MRU, -+ ZFS_ANON, -+ ZFS_HEADER, -+ ZFS_OTHER, - LAST_COLORELEMENT - } ColorElements; - -@@ -232,6 +237,11 @@ int CRT_colorSchemes[LAST_COLORSCHEME][LAST_COLORELEMENT] = { - [CPU_SOFTIRQ] = ColorPair(Magenta,Black), - [CPU_STEAL] = ColorPair(Cyan,Black), - [CPU_GUEST] = ColorPair(Cyan,Black), -+ [ZFS_MFU] = ColorPair(Blue,Black), -+ [ZFS_MRU] = ColorPair(Yellow,Black), -+ [ZFS_ANON] = ColorPair(Magenta,Black), -+ [ZFS_HEADER] = ColorPair(Cyan,Black), -+ [ZFS_OTHER] = ColorPair(Magenta,Black), - }, - [COLORSCHEME_MONOCHROME] = { - [RESET_COLOR] = A_NORMAL, -@@ -291,6 +301,11 @@ int CRT_colorSchemes[LAST_COLORSCHEME][LAST_COLORELEMENT] = { - [CPU_SOFTIRQ] = A_BOLD, - [CPU_STEAL] = A_REVERSE, - [CPU_GUEST] = A_REVERSE, -+ [ZFS_MFU] = A_NORMAL, -+ [ZFS_MRU] = A_NORMAL, -+ [ZFS_ANON] = A_DIM, -+ [ZFS_HEADER] = A_BOLD, -+ [ZFS_OTHER] = A_DIM, - }, - [COLORSCHEME_BLACKONWHITE] = { - [RESET_COLOR] = ColorPair(Black,White), -@@ -350,6 +365,11 @@ int CRT_colorSchemes[LAST_COLORSCHEME][LAST_COLORELEMENT] = { - [CPU_SOFTIRQ] = ColorPair(Blue,White), - [CPU_STEAL] = ColorPair(Cyan,White), - [CPU_GUEST] = ColorPair(Cyan,White), -+ [ZFS_MFU] = ColorPair(Cyan,White), -+ [ZFS_MRU] = ColorPair(Yellow,White), -+ [ZFS_ANON] = ColorPair(Magenta,White), -+ [ZFS_HEADER] = ColorPair(Yellow,White), -+ [ZFS_OTHER] = ColorPair(Magenta,White), - }, - [COLORSCHEME_LIGHTTERMINAL] = { - [RESET_COLOR] = ColorPair(Black,Black), -@@ -409,6 +429,11 @@ int CRT_colorSchemes[LAST_COLORSCHEME][LAST_COLORELEMENT] = { - [CPU_SOFTIRQ] = ColorPair(Blue,Black), - [CPU_STEAL] = ColorPair(Black,Black), - [CPU_GUEST] = ColorPair(Black,Black), -+ [ZFS_MFU] = ColorPair(Cyan,Black), -+ [ZFS_MRU] = ColorPair(Yellow,Black), -+ [ZFS_ANON] = A_BOLD | ColorPair(Magenta,Black), -+ [ZFS_HEADER] = ColorPair(Black,Black), -+ [ZFS_OTHER] = A_BOLD | ColorPair(Magenta,Black), - }, - [COLORSCHEME_MIDNIGHT] = { - [RESET_COLOR] = ColorPair(White,Blue), -@@ -468,6 +493,11 @@ int CRT_colorSchemes[LAST_COLORSCHEME][LAST_COLORELEMENT] = { - [CPU_SOFTIRQ] = ColorPair(Black,Blue), - [CPU_STEAL] = ColorPair(White,Blue), - [CPU_GUEST] = ColorPair(White,Blue), -+ [ZFS_MFU] = A_BOLD | ColorPair(White,Blue), -+ [ZFS_MRU] = A_BOLD | ColorPair(Yellow,Blue), -+ [ZFS_ANON] = A_BOLD | ColorPair(Magenta,Blue), -+ [ZFS_HEADER] = A_BOLD | ColorPair(Yellow,Blue), -+ [ZFS_OTHER] = A_BOLD | ColorPair(Magenta,Blue), - }, - [COLORSCHEME_BLACKNIGHT] = { - [RESET_COLOR] = ColorPair(Cyan,Black), -@@ -527,6 +557,11 @@ int CRT_colorSchemes[LAST_COLORSCHEME][LAST_COLORELEMENT] = { - [CPU_SOFTIRQ] = ColorPair(Blue,Black), - [CPU_STEAL] = ColorPair(Cyan,Black), - [CPU_GUEST] = ColorPair(Cyan,Black), -+ [ZFS_MFU] = ColorPair(Blue,Black), -+ [ZFS_MRU] = ColorPair(Yellow,Black), -+ [ZFS_ANON] = ColorPair(Magenta,Black), -+ [ZFS_HEADER] = ColorPair(Yellow,Black), -+ [ZFS_OTHER] = ColorPair(Magenta,Black), - }, - [COLORSCHEME_BROKENGRAY] = { 0 } // dynamically generated. - }; -diff --git a/CRT.h b/CRT.h -index 933fe06..2275349 100644 ---- a/CRT.h -+++ b/CRT.h -@@ -116,6 +116,11 @@ typedef enum ColorElements_ { - CPU_SOFTIRQ, - CPU_STEAL, - CPU_GUEST, -+ ZFS_MFU, -+ ZFS_MRU, -+ ZFS_ANON, -+ ZFS_HEADER, -+ ZFS_OTHER, - LAST_COLORELEMENT - } ColorElements; - -diff --git a/Makefile.am b/Makefile.am -index 7d19600..ad23d19 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -36,6 +36,10 @@ TasksMeter.h UptimeMeter.h TraceScreen.h UsersTable.h Vector.h Process.h \ - AffinityPanel.h HostnameMeter.h OpenFilesScreen.h Affinity.h IncSet.h Action.h \ - EnvScreen.h InfoScreen.h XAlloc.h - -+zfs_platform_sources = zfs/ZfsArcMeter.c -+ -+zfs_platform_headers = zfs/ZfsArcMeter.h -+ - all_platform_headers = - - # Linux -@@ -68,13 +72,15 @@ freebsd_platform_headers = \ - freebsd/FreeBSDProcessList.h \ - freebsd/FreeBSDProcess.h \ - freebsd/FreeBSDCRT.h \ -- freebsd/Battery.h -+ freebsd/Battery.h \ -+ $(zfs_platform_headers) - - all_platform_headers += $(freebsd_platform_headers) - - if HTOP_FREEBSD - myhtopplatsources = freebsd/Platform.c freebsd/FreeBSDProcessList.c \ --freebsd/FreeBSDProcess.c freebsd/FreeBSDCRT.c freebsd/Battery.c -+freebsd/FreeBSDProcess.c freebsd/FreeBSDCRT.c freebsd/Battery.c \ -+$(zfs_platform_sources) - - myhtopplatheaders = $(freebsd_platform_headers) - endif -diff --git a/freebsd/FreeBSDProcessList.c b/freebsd/FreeBSDProcessList.c -index 26019b6..94cbaa1 100644 ---- a/freebsd/FreeBSDProcessList.c -+++ b/freebsd/FreeBSDProcessList.c -@@ -53,6 +53,12 @@ typedef struct FreeBSDProcessList_ { - unsigned long long int memFree; - unsigned long long int memZfsArc; - -+ unsigned long long int zfsArcMax; -+ unsigned long long int zfsArcMFU; -+ unsigned long long int zfsArcMRU; -+ unsigned long long int zFsArcAnon; -+ unsigned long long int zFsArcHeader; -+ unsigned long long int zFsArcOther; - - CPUData* cpus; - -@@ -81,6 +87,12 @@ static int MIB_vm_stats_vm_v_free_count[4]; - static int MIB_vfs_bufspace[2]; - - static int MIB_kstat_zfs_misc_arcstats_size[5]; -+static int MIB_vfs_zfs_arc_max[3]; -+static int MIB_kstat_zfs_misc_arcstats_mfu_size[5]; -+static int MIB_kstat_zfs_misc_arcstats_mru_size[5]; -+static int MIB_kstat_zfs_misc_arcstats_anon_size[5]; -+static int MIB_kstat_zfs_misc_arcstats_hdr_size[5]; -+static int MIB_kstat_zfs_misc_arcstats_other_size[5]; - - static int MIB_kern_cp_time[2]; - static int MIB_kern_cp_times[2]; -@@ -123,6 +135,16 @@ ProcessList* ProcessList_new(UsersTable* usersTable, Hashtable* pidWhiteList, ui - NULL, 0) == 0 && fpl->memZfsArc != 0) { - len = 5; sysctlnametomib("kstat.zfs.misc.arcstats.size", MIB_kstat_zfs_misc_arcstats_size, &len); - fpl->zfsArcEnabled = 1; -+ -+ len = 3; -+ sysctlnametomib("vfs.zfs.arc_max", MIB_vfs_zfs_arc_max, &len); -+ -+ len = 5; -+ sysctlnametomib("kstat.zfs.misc.arcstats.mfu_size", MIB_kstat_zfs_misc_arcstats_mfu_size, &len); -+ sysctlnametomib("kstat.zfs.misc.arcstats.mru_size", MIB_kstat_zfs_misc_arcstats_mru_size, &len); -+ sysctlnametomib("kstat.zfs.misc.arcstats.anon_size", MIB_kstat_zfs_misc_arcstats_anon_size, &len); -+ sysctlnametomib("kstat.zfs.misc.arcstats.hdr_size", MIB_kstat_zfs_misc_arcstats_hdr_size, &len); -+ sysctlnametomib("kstat.zfs.misc.arcstats.other_size", MIB_kstat_zfs_misc_arcstats_other_size, &len); - } else { - fpl->zfsArcEnabled = 0; - } -@@ -323,8 +345,30 @@ static inline void FreeBSDProcessList_scanMemoryInfo(ProcessList* pl) { - fpl->memZfsArc /= 1024; - fpl->memWire -= fpl->memZfsArc; - pl->cachedMem += fpl->memZfsArc; -- // maybe when we learn how to make custom memory meter -- // we could do custom arc breakdown? -+ -+ len = sizeof(fpl->zfsArcMax); -+ sysctl(MIB_vfs_zfs_arc_max, 3, &(fpl->zfsArcMax), &len , NULL, 0); -+ fpl->zfsArcMax /= 1024; -+ -+ len = sizeof(fpl->zfsArcMFU); -+ sysctl(MIB_kstat_zfs_misc_arcstats_mfu_size, 5, &(fpl->zfsArcMFU), &len , NULL, 0); -+ fpl->zfsArcMFU /= 1024; -+ -+ len = sizeof(fpl->zfsArcMRU); -+ sysctl(MIB_kstat_zfs_misc_arcstats_mru_size, 5, &(fpl->zfsArcMRU), &len , NULL, 0); -+ fpl->zfsArcMRU /= 1024; -+ -+ len = sizeof(fpl->zfsArcAnon); -+ sysctl(MIB_kstat_zfs_misc_arcstats_anon_size, 5, &(fpl->zfsArcAnon), &len , NULL, 0); -+ fpl->zfsArcAnon /= 1024; -+ -+ len = sizeof(fpl->zfsArcHeader); -+ sysctl(MIB_kstat_zfs_misc_arcstats_hdr_size, 5, &(fpl->zfsArcHeader), &len , NULL, 0); -+ fpl->zfsArcHeader /= 1024; -+ -+ len = sizeof(fpl->zfsArcOther); -+ sysctl(MIB_kstat_zfs_misc_arcstats_other_size, 5, &(fpl->zfsArcOther), &len , NULL, 0); -+ fpl->zfsArcOther /= 1024; - } - - pl->usedMem = fpl->memActive + fpl->memWire; -diff --git a/freebsd/FreeBSDProcessList.h b/freebsd/FreeBSDProcessList.h -index af343fb..cf96a70 100644 ---- a/freebsd/FreeBSDProcessList.h -+++ b/freebsd/FreeBSDProcessList.h -@@ -42,6 +42,12 @@ typedef struct FreeBSDProcessList_ { - unsigned long long int memFree; - unsigned long long int memZfsArc; - -+ unsigned long long int zfsArcMax; -+ unsigned long long int zfsArcMFU; -+ unsigned long long int zfsArcMRU; -+ unsigned long long int zfsArcAnon; -+ unsigned long long int zfsArcHeader; -+ unsigned long long int zfsArcOther; - - CPUData* cpus; - -diff --git a/freebsd/Platform.c b/freebsd/Platform.c -index 5dd6ca4..d8d2ed0 100644 ---- a/freebsd/Platform.c -+++ b/freebsd/Platform.c -@@ -15,6 +15,7 @@ in the source distribution for its full text. - #include "UptimeMeter.h" - #include "ClockMeter.h" - #include "HostnameMeter.h" -+#include "zfs/ZfsArcMeter.h" - #include "FreeBSDProcess.h" - #include "FreeBSDProcessList.h" - -@@ -104,6 +105,7 @@ MeterClass* Platform_meterTypes[] = { - &LeftCPUs2Meter_class, - &RightCPUs2Meter_class, - &BlankMeter_class, -+ &ZfsArcMeter_class, - NULL - }; - -@@ -197,6 +199,23 @@ void Platform_setSwapValues(Meter* this) { - this->values[0] = pl->usedSwap; - } - -+void Platform_setZfsArcValues(Meter* this) { -+ FreeBSDProcessList* fpl = (FreeBSDProcessList*) this->pl; -+ -+ this->total = fpl->zfsArcMax; -+ this->values[0] = fpl->zfsArcMFU; -+ this->values[1] = fpl->zfsArcMRU; -+ this->values[2] = fpl->zfsArcAnon; -+ this->values[3] = fpl->zfsArcHeader; -+ this->values[4] = fpl->zfsArcOther; -+ -+ // "Hide" the last value so it can -+ // only be accessed by index and is not -+ // displayed by the Bar or Graph style -+ Meter_setItems(this, 5); -+ this->values[5] = fpl->memZfsArc; -+} -+ - void Platform_setTasksValues(Meter* this) { - // TODO - } -diff --git a/freebsd/Platform.h b/freebsd/Platform.h -index 1735e7e..3dc7ebf 100644 ---- a/freebsd/Platform.h -+++ b/freebsd/Platform.h -@@ -44,6 +44,8 @@ void Platform_setMemoryValues(Meter* this); - - void Platform_setSwapValues(Meter* this); - -+void Platform_setZfsArcValues(Meter* this); -+ - void Platform_setTasksValues(Meter* this); - - char* Platform_getProcessEnv(pid_t pid); -diff --git a/zfs/ZfsArcMeter.c b/zfs/ZfsArcMeter.c -new file mode 100644 -index 0000000..e12c46e ---- /dev/null -+++ b/zfs/ZfsArcMeter.c -@@ -0,0 +1,81 @@ -+/* -+htop - ZfsArcMeter.c -+(C) 2004-2011 Hisham H. Muhammad -+Released under the GNU GPL, see the COPYING file -+in the source distribution for its full text. -+*/ -+ -+#include "ZfsArcMeter.h" -+ -+#include "CRT.h" -+#include "Platform.h" -+ -+#include <stdlib.h> -+#include <string.h> -+#include <math.h> -+#include <sys/param.h> -+#include <assert.h> -+ -+/*{ -+#include "Meter.h" -+}*/ -+ -+int ZfsArcMeter_attributes[] = { -+ ZFS_MFU, ZFS_MRU, ZFS_ANON, ZFS_HEADER, ZFS_OTHER -+}; -+ -+static void ZfsArcMeter_updateValues(Meter* this, char* buffer, int size) { -+ int written; -+ Platform_setZfsArcValues(this); -+ -+ written = Meter_humanUnit(buffer, this->values[5], size); -+ buffer += written; -+ if ((size -= written) > 0) { -+ *buffer++ = '/'; -+ size--; -+ Meter_humanUnit(buffer, this->total, size); -+ } -+} -+ -+static void ZfsArcMeter_display(Object* cast, RichString* out) { -+ char buffer[50]; -+ Meter* this = (Meter*)cast; -+ -+ RichString_write(out, CRT_colors[METER_TEXT], ":"); -+ Meter_humanUnit(buffer, this->total, 50); -+ RichString_append(out, CRT_colors[METER_VALUE], buffer); -+ Meter_humanUnit(buffer, this->values[5], 50); -+ RichString_append(out, CRT_colors[METER_TEXT], " Used:"); -+ RichString_append(out, CRT_colors[METER_VALUE], buffer); -+ Meter_humanUnit(buffer, this->values[0], 50); -+ RichString_append(out, CRT_colors[METER_TEXT], " MFU:"); -+ RichString_append(out, CRT_colors[ZFS_MFU], buffer); -+ Meter_humanUnit(buffer, this->values[1], 50); -+ RichString_append(out, CRT_colors[METER_TEXT], " MRU:"); -+ RichString_append(out, CRT_colors[ZFS_MRU], buffer); -+ Meter_humanUnit(buffer, this->values[2], 50); -+ RichString_append(out, CRT_colors[METER_TEXT], " Anon:"); -+ RichString_append(out, CRT_colors[ZFS_ANON], buffer); -+ Meter_humanUnit(buffer, this->values[3], 50); -+ RichString_append(out, CRT_colors[METER_TEXT], " Hdr:"); -+ RichString_append(out, CRT_colors[ZFS_HEADER], buffer); -+ Meter_humanUnit(buffer, this->values[4], 50); -+ RichString_append(out, CRT_colors[METER_TEXT], " Oth:"); -+ RichString_append(out, CRT_colors[ZFS_OTHER], buffer); -+} -+ -+MeterClass ZfsArcMeter_class = { -+ .super = { -+ .extends = Class(Meter), -+ .delete = Meter_delete, -+ .display = ZfsArcMeter_display, -+ }, -+ .updateValues = ZfsArcMeter_updateValues, -+ .defaultMode = TEXT_METERMODE, -+ .maxItems = 6, -+ .total = 100.0, -+ .attributes = ZfsArcMeter_attributes, -+ .name = "ZFSARC", -+ .uiName = "ZFS ARC", -+ .caption = "ARC" -+}; -diff --git a/zfs/ZfsArcMeter.h b/zfs/ZfsArcMeter.h -new file mode 100644 -index 0000000..b89be22 ---- /dev/null -+++ b/zfs/ZfsArcMeter.h -@@ -0,0 +1,18 @@ -+/* Do not edit this file. It was automatically generated. */ -+ -+#ifndef HEADER_ZfsArcMeter -+#define HEADER_ZfsArcMeter -+/* -+htop - ZfsArcMeter.h -+(C) 2004-2011 Hisham H. Muhammad -+Released under the GNU GPL, see the COPYING file -+in the source distribution for its full text. -+*/ -+ -+#include "Meter.h" -+ -+extern int ZfsArcMeter_attributes[]; -+ -+extern MeterClass ZfsArcMeter_class; -+ -+#endif --- -2.20.1 - |