Performance, while it's working, I've found to be generally good. But there are clear ceilings to the method that you hit when trying to use it heavily.
I never saw any issues when I used it to forward ports for myself. But the moment I tried to use it for production for a small service it falls on it's face regularly unless I baby it.
Without that you wouldn't have any performance at all, in that case. If you're using public IPs you simply don't need it, because no NAT is involved.
Machine A -> public IP Machine B -> behind NAT
You can always SSH from Machine B to Machine A and expose any local Machine B port to the internet as a port on Machine A. The feature is called GatewayPorts and is a standard SSH feature (at least in OpenSSH). It does not require installing anything other than SSH on Machine A (or even Machine B, unless you want a script to re-establish the tunnel upon disconnect).