From 0c010ff9fe50b4046b5c7977bafac3e74037f075 Mon Sep 17 00:00:00 2001 From: Etienne Dechamps Date: Sun, 15 Mar 2015 18:30:39 +0000 Subject: [PATCH] Warn about performance if using TAP-Windows >=9.21. 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 | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/mingw/device.c b/src/mingw/device.c index 253b95d1..e95878c6 100644 --- a/src/mingw/device.c +++ b/src/mingw/device.c @@ -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 */ -- 2.20.1