If you say that you get the right speed with Linux but not with Windows, it's safe to rule any hardware or physical problems.
We're running a mix of different 10GB solutions here, some via direct cabling, some via 10GB BASE-T and others over fiber.
Install the latest drivers and make sure they're compatible with Windows 7. Make sure to use the latest version available, and make sure that you're using the NDIS 6.2 copy/build of the driver if you have that option (generally there will be many folders in the driver download, the NDIS 6.2 is the one specifically for Windows 7).
Which build of iperf3 are you using? Make sure it's not a bad build, a poor port, or a cygwin hack. I'm pretty sure these are the ones we use in testing: https://iperf.fr/iperf-download.php#windows
Do you get the same performance no matter which PC is the client and which is the server? iperf3 tests are uni-directional - one PC sends and the other receives. Either switch the -s/-c parameters or tag on a -r parameter to reverse the testing direction.
Did you set the iperf3 window size (it's the -w parameter) - perhaps the different Windows/Linux builds are compiled with different defaults.
Does Windows have jumbo frames enabled? Check the controller properties in Device Manager and make sure frame size is set to 9000 (and use ifconfig on Linux to do the same).
Disable any firewalls on the Windows end as some poorly-written software can do horrible things to your network bandwidth. Disable unused network filters and protocols when right-clicking on the connection and looking at its properties and see if you have any that aren't part of a default Windows install.