Could you try to enable compression on the zvol, or swap on a physical device?
And you may need to check the block size of the ZVOL, swapping is done using 4k blocks. I can't look up the settings on my machine as I am not at home.
The block size was 8k. I never touched it. I guess it’s the default. However, I used to have a few recordsize=8k (and even 4k) file systems due to wide-spread advice. It was a horrible mistake. Later, when I tested it, I could not find a single scenario where a non-128k recordsize was better than the default 128k. I tested it with PostgreSQL, Exim, and various logfiles. I tested it with and without compression.
As for putting the swap on a physical device, I have no interest in it since almost all my production servers are running "in the cloud". Even if I wanted to test it (I don’t), there isn’t a single computer on Earth which fulfills all of these: has a physical drive, has FreeBSD on it, I have access to it, it’s not a production machine.
By the way, many years ago, the main reason why I migrated to FreeBSD was ZFS. The main reason I migrated to ZFS was the checksumming. I would never put swap on a physical drive under FreeBSD. It makes zero sense to have checksums on the disk if the swap is not checksummed. I would compare it to putting ZFS on a physical raid. No, it’s worse. ZFS on a physical raid at least would notice if there was an error.