Warn about performance if using TAP-Windows >=9.21.
authorEtienne Dechamps <etienne@edechamps.fr>
Sun, 15 Mar 2015 18:30:39 +0000 (18:30 +0000)
committerEtienne Dechamps <etienne@edechamps.fr>
Sun, 15 Mar 2015 18:37:58 +0000 (18:37 +0000)
Testing has revealed that the newer series of Windows TAP drivers (i.e.
9.0.0.21 and later, also known as NDIS6, tap-windows6) suffer from
serious performance issues in the write path. Write operations seems to
take a very long time to complete, resulting in massive packet loss even
for throughputs as low as 10 Mbit/s.

I've made some attempts to alleviate the problem using parellelism. By
using custom code that allows up to 256 write operations at the same
time the results are much better, but it's still about 2 times worse
than the traditional 9.0.0.9 driver.

We need to investigate more and file a bug against tap-windows6, but in
the mean time, let's inform the user that he might not want to use the
latest drivers.

src/mingw/device.c

index 253b95d..e95878c 100644 (file)
@@ -182,8 +182,16 @@ static bool setup_device(void) {
                DWORD len;
                if(!DeviceIoControl(device_handle, TAP_IOCTL_GET_VERSION, &info, sizeof info, &info, sizeof info, &len, NULL))
                        logger(DEBUG_ALWAYS, LOG_WARNING, "Could not get version information from Windows tap device %s (%s): %s", device, iface, winerror(GetLastError()));
-               else
+               else {
                        logger(DEBUG_ALWAYS, LOG_INFO, "TAP-Windows driver version: %lu.%lu%s", info[0], info[1], info[2] ? " (DEBUG)" : "");
+
+                       /* Warn if using >=9.21. This is because starting from 9.21, TAP-Win32 seems to use a different, less efficient write path. */
+                       if(info[0] == 9 && info[1] >= 21)
+                               logger(DEBUG_ALWAYS, LOG_WARNING,
+                                       "You are using the newer (>= 9.0.0.21, NDIS6) series of TAP-Win32 drivers. "
+                                       "Using these drivers with tinc is not recommanded as it can result in poor performance. "
+                                       "You might want to revert back to 9.0.0.9 instead.");
+               }
        }
 
        /* Get MAC address from tap device */