mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-21 18:26:47 +03:00
do a cyclic seek for unused memory objects in pool
In non regular use cases allocated memory might stay persistent in memory pool. This small patch checks every minute if there are old objects which can be released from memory pool. Right now with regular use, the pool is checked for old objects on each allocation attempt from this pool. so basically polling by its use. Now consider what happens if someone writes a lot of files and stops use of the volume or even unmounts it. So the code will no longer check if objects can be released from the pool. Already allocated objects will still stay in pool cache. this is no big issue for common use. But someone discovered this issue while doing tests. personally i know this behavior and I'm aware of it. Its no big issue. just a enhancement Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Kjeld Schouten-Lebbing <kjeld@schouten-lebbing.nl> Signed-off-by: Sebastian Gottschall <s.gottschall@dd-wrt.com> Closes #10938 Closes #10969
This commit is contained in:
committed by
GitHub
parent
c0bd2e0fe2
commit
8a171ccd92
+16
-2
@@ -238,7 +238,7 @@ zstd_mempool_alloc(struct zstd_pool *zstd_mempool, size_t size)
|
||||
* Check if objects fits the size, if so we take it and
|
||||
* update the timestamp.
|
||||
*/
|
||||
if (!mem && pool->mem && size <= pool->size) {
|
||||
if (size && !mem && pool->mem && size <= pool->size) {
|
||||
pool->timeout = gethrestime_sec() +
|
||||
ZSTD_POOL_TIMEOUT;
|
||||
mem = pool->mem;
|
||||
@@ -257,7 +257,7 @@ zstd_mempool_alloc(struct zstd_pool *zstd_mempool, size_t size)
|
||||
}
|
||||
}
|
||||
|
||||
if (mem) {
|
||||
if (!size || mem) {
|
||||
return (mem);
|
||||
}
|
||||
|
||||
@@ -688,6 +688,19 @@ zstd_mempool_deinit(void)
|
||||
zstd_mempool_cctx = NULL;
|
||||
}
|
||||
|
||||
/* release unused memory from pool */
|
||||
|
||||
void
|
||||
zfs_zstd_cache_reap_now(void)
|
||||
{
|
||||
/*
|
||||
* calling alloc with zero size seeks
|
||||
* and releases old unused objects
|
||||
*/
|
||||
zstd_mempool_alloc(zstd_mempool_cctx, 0);
|
||||
zstd_mempool_alloc(zstd_mempool_dctx, 0);
|
||||
}
|
||||
|
||||
extern int __init
|
||||
zstd_init(void)
|
||||
{
|
||||
@@ -735,4 +748,5 @@ ZFS_MODULE_VERSION(ZSTD_VERSION_STRING);
|
||||
EXPORT_SYMBOL(zfs_zstd_compress);
|
||||
EXPORT_SYMBOL(zfs_zstd_decompress_level);
|
||||
EXPORT_SYMBOL(zfs_zstd_decompress);
|
||||
EXPORT_SYMBOL(zfs_zstd_cache_reap_now);
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user