Per @HoneyBadger, the sVDEV reservation for small files vs. metadata can be adjusted via the zfs_special_class_metadata_reserve_pct
parameter. I have never used it.
I’d look into adjusting your dataset recordsize to minimize metadata needs. Per @winnielinnie, there is very little loss re: larger record sizes if zstd, lz4, etc. compression are enabled. It really helps squash metadata needs down. 1M is good for images, archives, videos, and other “large” files, smaller recordsizes (including the 128kB default) are better suited for VMs, databases, and like workloads.
By bundling many little files into archives (aka sparsebundles on the Mac), increasing the recordsize, enabling zstd compression, etc. I was able to reduce my pool metadata needs to about 0.08%. See the sVDEV resource I helped co-author for more details.