Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 31 Oct 2020 19:07:32 +0000 (UTC)
From:      Mateusz Guzik <mjg@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r367229 - in head/sys/contrib/openzfs: include/sys/zstd module/zstd
Message-ID:  <202010311907.09VJ7WcY036325@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mjg
Date: Sat Oct 31 19:07:32 2020
New Revision: 367229
URL: https://svnweb.freebsd.org/changeset/base/367229

Log:
  zfs: zstd: track allocator statistics
  
  This applies:
  commit c4ede65bdfca11b532403620bbf0d6e33f0c1c1d
  Author: Mateusz Guzik <mjguzik@gmail.com>
  Date:   Fri Oct 30 23:26:10 2020 +0100
  
      zstd: track allocator statistics
  
      Note that this only tracks sizes as requested by the caller.
      Actual allocated space will almost always be bigger (e.g., rounded up to
      the next power of 2 or page size). Additionally the allocated buffer may
      be holding other areas hostage. Nonetheless, this is a starting point
      for tracking memory usage in zstd.
  
  from openzfs

Modified:
  head/sys/contrib/openzfs/include/sys/zstd/zstd.h
  head/sys/contrib/openzfs/module/zstd/zfs_zstd.c

Modified: head/sys/contrib/openzfs/include/sys/zstd/zstd.h
==============================================================================
--- head/sys/contrib/openzfs/include/sys/zstd/zstd.h	Sat Oct 31 18:42:03 2020	(r367228)
+++ head/sys/contrib/openzfs/include/sys/zstd/zstd.h	Sat Oct 31 19:07:32 2020	(r367229)
@@ -75,9 +75,11 @@ typedef struct zfs_zstd_header {
  * kstat helper macros
  */
 #define	ZSTDSTAT(stat)		(zstd_stats.stat.value.ui64)
-#define	ZSTDSTAT_INCR(stat, val) \
+#define	ZSTDSTAT_ADD(stat, val) \
 	atomic_add_64(&zstd_stats.stat.value.ui64, (val))
-#define	ZSTDSTAT_BUMP(stat)	ZSTDSTAT_INCR(stat, 1)
+#define	ZSTDSTAT_SUB(stat, val) \
+	atomic_sub_64(&zstd_stats.stat.value.ui64, (val))
+#define	ZSTDSTAT_BUMP(stat)	ZSTDSTAT_ADD(stat, 1)
 
 /* (de)init for user space / kernel emulation */
 int zstd_init(void);

Modified: head/sys/contrib/openzfs/module/zstd/zfs_zstd.c
==============================================================================
--- head/sys/contrib/openzfs/module/zstd/zfs_zstd.c	Sat Oct 31 18:42:03 2020	(r367228)
+++ head/sys/contrib/openzfs/module/zstd/zfs_zstd.c	Sat Oct 31 19:07:32 2020	(r367229)
@@ -62,6 +62,8 @@ typedef struct zstd_stats {
 	kstat_named_t	zstd_stat_dec_header_inval;
 	kstat_named_t	zstd_stat_com_fail;
 	kstat_named_t	zstd_stat_dec_fail;
+	kstat_named_t	zstd_stat_buffers;
+	kstat_named_t	zstd_stat_size;
 } zstd_stats_t;
 
 static zstd_stats_t zstd_stats = {
@@ -74,6 +76,8 @@ static zstd_stats_t zstd_stats = {
 	{ "decompress_header_invalid",	KSTAT_DATA_UINT64 },
 	{ "compress_failed",		KSTAT_DATA_UINT64 },
 	{ "decompress_failed",		KSTAT_DATA_UINT64 },
+	{ "buffers",			KSTAT_DATA_UINT64 },
+	{ "size",			KSTAT_DATA_UINT64 },
 };
 
 /* Enums describing the allocator type specified by kmem_type in zstd_kmem */
@@ -248,6 +252,8 @@ zstd_mempool_alloc(struct zstd_pool *zstd_mempool, siz
 			/* Free memory if unused object older than 2 minutes */
 			if (pool->mem && gethrestime_sec() > pool->timeout) {
 				vmem_free(pool->mem, pool->size);
+				ZSTDSTAT_SUB(zstd_stat_buffers, 1);
+				ZSTDSTAT_SUB(zstd_stat_size, pool->size);
 				pool->mem = NULL;
 				pool->size = 0;
 				pool->timeout = 0;
@@ -275,12 +281,13 @@ zstd_mempool_alloc(struct zstd_pool *zstd_mempool, siz
 			/* Object is free, try to allocate new one */
 			if (!pool->mem) {
 				mem = vmem_alloc(size, KM_SLEEP);
-				pool->mem = mem;
-
-				if (pool->mem) {
+				if (mem) {
+					ZSTDSTAT_ADD(zstd_stat_buffers, 1);
+					ZSTDSTAT_ADD(zstd_stat_size, size);
+					pool->mem = mem;
+					pool->size = size;
 					/* Keep track for later release */
 					mem->pool = pool;
-					pool->size = size;
 					mem->kmem_type = ZSTD_KMEM_POOL;
 					mem->kmem_size = size;
 				}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202010311907.09VJ7WcY036325>