When you use UDP, you're seeing the results on the client or in the server ?
iperf uses busy-waiting to implement flow-control in UDP, so basically if you specify an absurd rate transfer, the client will try to deliver at that rate and packets will be dropped. If you do specify a rate consistent with your network bandwith, the resuts will be more accurate. Nevertheless check what the server reports when measuring UDP.

