mirror of
https://git.proxmox.com/git/mirror_zfs
synced 2025-10-24 02:33:08 +00:00
zstd: don't call zstd_mempool_reap if there are no buffers (#16302)
zfs_zstd_cache_reap_now is issued every second.
zstd_mempool_reap checks for both pool existence and buffer count, but
that's still 2 func calls which are trivially avoidable.
With clang it even avoids pushing the stack pointer (but still suffers
the mispredict due to a forward jump, not modified in case someone is
using zstd):
<+0>: cmpq $0x0,0x0(%rip) # <zfs_zstd_cache_reap_now+8>
<+8>: je 0x217de4 <zfs_zstd_cache_reap_now+36>
<+10>: push %rbp
<+11>: mov %rsp,%rbp
<+14>: mov 0x0(%rip),%rdi # <zfs_zstd_cache_reap_now+21>
<+21>: call 0x217df0 <zstd_mempool_reap>
<+26>: mov 0x0(%rip),%rdi # <zfs_zstd_cache_reap_now+33>
<+33>: pop %rbp
<+34>: jmp 0x217df0 <zstd_mempool_reap>
<+36>: ret
Preferably the call would not be made to begin with if zstd is not used,
but this retains all the logic confined to zstd code.
Sponsored by: Rubicon Communications, LLC ("Netgate")
Signed-off-by: Mateusz Guzik <mjguzik@gmail.com>
Reviewed-by: Allan Jude <allan@klarasystems.com>
Reviewed-by: Tony Hutter <hutter2@llnl.gov>
This commit is contained in:
parent
c87cb22ba9
commit
a7fc4c85e3
@ -844,6 +844,13 @@ zstd_mempool_deinit(void)
|
||||
void
|
||||
zfs_zstd_cache_reap_now(void)
|
||||
{
|
||||
|
||||
/*
|
||||
* Short-circuit if there are no buffers to begin with.
|
||||
*/
|
||||
if (ZSTDSTAT(zstd_stat_buffers) == 0)
|
||||
return;
|
||||
|
||||
/*
|
||||
* calling alloc with zero size seeks
|
||||
* and releases old unused objects
|
||||
|
||||
Loading…
Reference in New Issue
Block a user