Stop wasting time on malloc in snprintf_zstd_header
Profiling zdb -vvvvv on datasets with a lot of zstd blocks, we find ourselves spending quite a lot of time on malloc/free, because we allocate a 16M abd each call, and never free it, so we're leaking 16M per call as well. This seems sub-optimal. So let's just keep the buffer around and reuse it. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Rob Norris <robn@despairlabs.com> Signed-off-by: Rich Ercolani <rincebrain@gmail.com> Closes #15721
This commit is contained in:
parent
3425484eb9
commit
4d4972ed98
|
@ -2360,7 +2360,7 @@ static void
|
||||||
snprintf_zstd_header(spa_t *spa, char *blkbuf, size_t buflen,
|
snprintf_zstd_header(spa_t *spa, char *blkbuf, size_t buflen,
|
||||||
const blkptr_t *bp)
|
const blkptr_t *bp)
|
||||||
{
|
{
|
||||||
abd_t *pabd;
|
static abd_t *pabd = NULL;
|
||||||
void *buf;
|
void *buf;
|
||||||
zio_t *zio;
|
zio_t *zio;
|
||||||
zfs_zstdhdr_t zstd_hdr;
|
zfs_zstdhdr_t zstd_hdr;
|
||||||
|
@ -2391,6 +2391,7 @@ snprintf_zstd_header(spa_t *spa, char *blkbuf, size_t buflen,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!pabd)
|
||||||
pabd = abd_alloc_for_io(SPA_MAXBLOCKSIZE, B_FALSE);
|
pabd = abd_alloc_for_io(SPA_MAXBLOCKSIZE, B_FALSE);
|
||||||
zio = zio_root(spa, NULL, NULL, 0);
|
zio = zio_root(spa, NULL, NULL, 0);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue