MINOR: compression: report zlib memory usage
Show the memory usage and the max memory available for zlib.
The value stored is now the memory used instead of the remaining
available memory.
diff --git a/src/cfgparse.c b/src/cfgparse.c
index d4b3d91..1fe2708 100644
--- a/src/cfgparse.c
+++ b/src/cfgparse.c
@@ -885,7 +885,7 @@
err_code |= ERR_ALERT | ERR_FATAL;
goto out;
}
- global.maxzlibmem = atol(args[1]);
+ global.maxzlibmem = atol(args[1]) * 1024L * 1024L;
}
else if (!strcmp(args[0], "ulimit-n")) {
if (global.rlimit_nofile != 0) {
diff --git a/src/compression.c b/src/compression.c
index c1e1afd..1df0f57 100644
--- a/src/compression.c
+++ b/src/compression.c
@@ -47,7 +47,7 @@
static struct pool_head *zlib_pool_head = NULL;
static struct pool_head *zlib_pool_pending_buf = NULL;
-static long long zlib_memory_available = -1;
+long zlib_used_memory = 0;
#endif
@@ -301,10 +301,7 @@
#ifdef USE_ZLIB
z_stream *strm;
- if (global.maxzlibmem > 0 && zlib_memory_available < 0)
- zlib_memory_available = global.maxzlibmem * 1024 * 1024; /* Megabytes to bytes */
-
- if (global.maxzlibmem > 0 && zlib_memory_available < sizeof(struct comp_ctx))
+ if (global.maxzlibmem > 0 && (global.maxzlibmem - zlib_used_memory) < sizeof(struct comp_ctx))
return -1;
#endif
@@ -315,7 +312,7 @@
if (*comp_ctx == NULL)
return -1;
#ifdef USE_ZLIB
- zlib_memory_available -= sizeof(struct comp_ctx);
+ zlib_used_memory += sizeof(struct comp_ctx);
strm = &(*comp_ctx)->strm;
strm->zalloc = alloc_zlib;
@@ -337,9 +334,8 @@
*comp_ctx = NULL;
#ifdef USE_ZLIB
- zlib_memory_available += sizeof(struct comp_ctx);
+ zlib_used_memory -= sizeof(struct comp_ctx);
#endif
-
return 0;
}
@@ -380,7 +376,6 @@
return 0;
}
-
int identity_reset(struct comp_ctx *comp_ctx)
{
return 0;
@@ -406,10 +401,8 @@
static char round = 0; /* order in deflateInit2 */
void *buf = NULL;
- if (global.maxzlibmem > 0 && zlib_memory_available < items * size){
- buf = NULL;
+ if (global.maxzlibmem > 0 && (global.maxzlibmem - zlib_used_memory) < (long)(items * size))
goto end;
- }
switch (round) {
case 0:
@@ -442,8 +435,8 @@
ctx->zlib_pending_buf = buf = pool_alloc2(zlib_pool_pending_buf);
break;
}
- if (buf != NULL && global.maxzlibmem > 0)
- zlib_memory_available -= items * size;
+ if (buf != NULL)
+ zlib_used_memory += items * size;
end:
@@ -474,8 +467,7 @@
pool = zlib_pool_pending_buf;
pool_free2(pool, ptr);
- if (global.maxzlibmem > 0)
- zlib_memory_available += pool->size;
+ zlib_used_memory -= pool->size;
}
/**************************
diff --git a/src/dumpstats.c b/src/dumpstats.c
index 32825b0..2a07140 100644
--- a/src/dumpstats.c
+++ b/src/dumpstats.c
@@ -42,6 +42,7 @@
#include <proto/backend.h>
#include <proto/channel.h>
#include <proto/checks.h>
+#include <proto/compression.h>
#include <proto/dumpstats.h>
#include <proto/fd.h>
#include <proto/freq_ctr.h>
@@ -1747,6 +1748,10 @@
"CompressBpsIn: %u\n"
"CompressBpsOut: %u\n"
"CompressBpsRateLim: %u\n"
+#ifdef USE_ZLIB
+ "ZlibMemUsage: %ld\n"
+ "MaxZlibMemUsage: %ld\n"
+#endif
"Tasks: %d\n"
"Run_queue: %d\n"
"Idle_pct: %d\n"
@@ -1765,6 +1770,9 @@
read_freq_ctr(&global.conn_per_sec), global.cps_lim, global.cps_max,
read_freq_ctr(&global.comp_bps_in), read_freq_ctr(&global.comp_bps_out),
global.comp_rate_lim,
+#ifdef USE_ZLIB
+ zlib_used_memory, global.maxzlibmem,
+#endif
nb_tasks_cur, run_queue_cur, idle_pct,
global.node, global.desc?global.desc:""
);