X-Recipient: archive-cygwin AT delorie DOT com X-SWARE-Spam-Status: No, hits=-0.1 required=5.0 tests=AWL,BAYES_50,FREEMAIL_FROM,SPF_HELO_PASS,T_RP_MATCHES_RCVD,T_TO_NO_BRKTS_FREEMAIL X-Spam-Check-By: sourceware.org To: cygwin AT cygwin DOT com From: Jason Curl Subject: Re: ioctl() on socket fd's take 3 seconds on 1.7.7 Date: Mon, 22 Nov 2010 21:29:05 +0100 Lines: 250 Message-ID: References: <20101115162242 DOT GF17405 AT calimero DOT vinschen DOT de> <4CE8046F DOT 2090106 AT arcor DOT de> <20101122131729 DOT GT18309 AT calimero DOT vinschen DOT de> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.12) Gecko/20101027 Thunderbird/3.1.6 In-Reply-To: <20101122131729.GT18309@calimero.vinschen.de> X-IsSubscribed: yes Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com On 22/11/2010 14:17, Corinna Vinschen wrote: > Can you retry with the next developer snapshot? Are the ioctl calls > still slow? If so, I'm wondering if the GetAdaptersAddresses call is > rather slow if a lot of interfaces exist. Every single ioctl in your > application calls GetAdaptersAddresses twice, like this: > > bool > get_adapters_addresses (PIP_ADAPTER_ADDRESSES *pa_ret, ULONG family) > { > DWORD ret, size = 0; > PIP_ADAPTER_ADDRESSES pa0 = NULL; > > if (!pa_ret) > return ERROR_BUFFER_OVERFLOW > == GetAdaptersAddresses (family, GAA_FLAG_INCLUDE_PREFIX > | GAA_FLAG_INCLUDE_ALL_INTERFACES, > NULL, NULL,&size); > do > { > ret = GetAdaptersAddresses (family, GAA_FLAG_INCLUDE_PREFIX > | GAA_FLAG_INCLUDE_ALL_INTERFACES, > NULL, pa0,&size); > if (ret == ERROR_BUFFER_OVERFLOW > && !(pa0 = (PIP_ADAPTER_ADDRESSES) realloc (pa0, size))) > break; > } > while (ret == ERROR_BUFFER_OVERFLOW); > if (ret != ERROR_SUCCESS) > { > if (pa0) > free (pa0); > *pa_ret = NULL; > return false; > } > *pa_ret = pa0; > return true; > } > It's not this function. I see it called twice after adding my own syscall_printf and it's very quick taking about 7ms. The problem is after the second call to this function from get_xp_ifs() 258 6374960 [main] a 3484 ioctl: fd 3, cmd 80487368 215 6375175 [main] a 3484 get_ifconf: **JC** get_xp_ifs() 1606 6376781 [main] a 3484 get_adapters_addresses: **JC** get_adapters_addresses enter 310 6377091 [main] a 3484 get_adapters_addresses: **JC** call to GetAdaptersAddresses 6361 6383452 [main] a 3484 get_adapters_addresses: **JC** call to GetAdaptersAddresses finished 155 6383607 [main] a 3484 get_adapters_addresses: **JC** call to GetAdaptersAddresses 6615 6390222 [main] a 3484 get_adapters_addresses: **JC** call to GetAdaptersAddresses finished 292 6390514 [main] a 3484 get_adapters_addresses: **JC** get_adapters_addresses leave 3112178 9502692 [main] a 3484 get_ifconf: **JC** 9896336 = get_xp_ifd() The actual delays are caused by SendARP() called from get_xp_ifs(). Interestingly enough, it isn't always slow, only sometimes. 220 107969 [main] a 2808 ioctl: fd 3, cmd 80087364 256 108225 [main] a 2808 fhandler_socket::ioctl: **JC** get_ifconf() 310 108535 [main] a 2808 get_ifconf: **JC** get_xp_ifs() 322 108857 [main] a 2808 get_xp_ifs: **JC** -> A 363 109220 [main] a 2808 get_adapters_addresses: **JC** get_adapters_addresses enter 327 109547 [main] a 2808 get_adapters_addresses: **JC** call to GetAdaptersAddresses 8617 118164 [main] a 2808 get_adapters_addresses: **JC** call to GetAdaptersAddresses finished 194 118358 [main] a 2808 get_adapters_addresses: **JC** call to GetAdaptersAddresses 7119 125477 [main] a 2808 get_adapters_addresses: **JC** call to GetAdaptersAddresses finished 122 125599 [main] a 2808 get_adapters_addresses: **JC** get_adapters_addresses leave 1062 126661 [main] a 2808 get_xp_ifs: **JC** -> cnt=8 235 126896 [main] a 2808 get_xp_ifs: **JC** -> SendARP (D4B7FEA9, 0, 0x28C6FC, 0x28C704 3111331 3238227 [main] a 2808 get_xp_ifs: **JC** -> 67 = SendARP (D4B7FEA9, 0, 0x28C6FC, 0x28C704 (=0)) 459 3238686 [main] a 2808 get_xp_ifs: **JC** -> SendARP (1901A8C0, 0, 0x28C6FC, 0x28C704 276 3238962 [main] a 2808 get_xp_ifs: **JC** -> 0 = SendARP (1901A8C0, 0, 0x28C6FC, 0x28C704 (=6)) 735 3239697 [main] a 2808 get_xp_ifs: **JC** -> SendARP (C1D3FEA9, 0, 0x28C6FC, 0x28C704 351 3240048 [main] a 2808 get_xp_ifs: **JC** -> 0 = SendARP (C1D3FEA9, 0, 0x28C6FC, 0x28C704 (=6)) 283 3240331 [main] a 2808 get_xp_ifs: **JC** -> SendARP (01DFA8C0, 0, 0x28C6FC, 0x28C704 335 3240666 [main] a 2808 get_xp_ifs: **JC** -> 0 = SendARP (01DFA8C0, 0, 0x28C6FC, 0x28C704 (=6)) 264 3240930 [main] a 2808 get_xp_ifs: **JC** -> SendARP (0100007F, 0, 0x28C6FC, 0x28C704 344 3241274 [main] a 2808 get_xp_ifs: **JC** -> 0 = SendARP (0100007F, 0, 0x28C6FC, 0x28C704 (=0)) 311 3241585 [main] a 2808 get_ifconf: **JC** 15466896 = get_xp_ifd() 318 3241903 [main] a 2808 fhandler_socket::ioctl: **JC** 2672756 = get_ifconf(0x80087364, 1628228800) 291 3242194 [main] a 2808 fhandler_socket::ioctl: 0 = ioctl_socket (80087364, 28C8D4) And the interface that is failing: D4B7FEA9 = 169.254.183.212 doesn't appear by a call to "ipconfig /all". I'm guessing that Windows is actually making a network request for this non-existent interface. ./Windows/v5.0/Include/WinError.h:#define ERROR_BAD_NET_NAME 67L ERROR_BAD_NET_NAME "The network name cannot be found. This error is returned on Windows Vista and later when an ARP reply to the SendARP request was not received. This error occurs if the destination IPv4 address could not be reached." I'm not sure where this IP is currently coming from... $ ipconfig /all Windows IP Configuration Host Name . . . . . . . . . . . . : BUGATTI Primary Dns Suffix . . . . . . . : Node Type . . . . . . . . . . . . : Hybrid IP Routing Enabled. . . . . . . . : No WINS Proxy Enabled. . . . . . . . : No DNS Suffix Search List. . . . . . : home.lan Ethernet adapter Bluetooth Network Connection 2: Media State . . . . . . . . . . . : Media disconnected Connection-specific DNS Suffix . : Description . . . . . . . . . . . : Bluetooth Device (Personal Area Network) #2 Physical Address. . . . . . . . . : 00-60-57-1B-21-99 DHCP Enabled. . . . . . . . . . . : Yes Autoconfiguration Enabled . . . . : Yes Ethernet adapter Local Area Connection: Connection-specific DNS Suffix . : home.lan Description . . . . . . . . . . . : Realtek PCIe GBE Family Controller Physical Address. . . . . . . . . : 00-24-1D-71-F6-EC DHCP Enabled. . . . . . . . . . . : Yes Autoconfiguration Enabled . . . . : Yes Link-local IPv6 Address . . . . . : fe80::a825:d675:375a:2a8b%11(Preferred) IPv4 Address. . . . . . . . . . . : 192.168.1.25(Preferred) Subnet Mask . . . . . . . . . . . : 255.255.255.0 Lease Obtained. . . . . . . . . . : 22 November 2010 18:40:02 Lease Expires . . . . . . . . . . : 24 November 2010 18:40:02 Default Gateway . . . . . . . . . : 192.168.1.1 DHCP Server . . . . . . . . . . . : 192.168.1.2 DHCPv6 IAID . . . . . . . . . . . : 234890269 DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-12-4A-50-BB-00-24-1D-71-F6-EC DNS Servers . . . . . . . . . . . : 192.168.1.2 Primary WINS Server . . . . . . . : 192.168.1.2 NetBIOS over Tcpip. . . . . . . . : Enabled Ethernet adapter VMware Network Adapter VMnet1: Connection-specific DNS Suffix . : Description . . . . . . . . . . . : VMware Virtual Ethernet Adapter for VMnet1 Physical Address. . . . . . . . . : 00-50-56-C0-00-01 DHCP Enabled. . . . . . . . . . . : No Autoconfiguration Enabled . . . . : Yes Link-local IPv6 Address . . . . . : fe80::fc13:bcfb:6f71:d3c1%23(Preferred) Autoconfiguration IPv4 Address. . : 169.254.211.193(Preferred) Subnet Mask . . . . . . . . . . . : 255.255.0.0 Default Gateway . . . . . . . . . : DHCPv6 IAID . . . . . . . . . . . : 570445910 DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-12-4A-50-BB-00-24-1D-71-F6-EC DNS Servers . . . . . . . . . . . : fec0:0:0:ffff::1%1 fec0:0:0:ffff::2%1 fec0:0:0:ffff::3%1 NetBIOS over Tcpip. . . . . . . . : Enabled Ethernet adapter VMware Network Adapter VMnet8: Connection-specific DNS Suffix . : Description . . . . . . . . . . . : VMware Virtual Ethernet Adapter for VMnet8 Physical Address. . . . . . . . . : 00-50-56-C0-00-08 DHCP Enabled. . . . . . . . . . . : No Autoconfiguration Enabled . . . . : Yes Link-local IPv6 Address . . . . . : fe80::c98c:6ec5:7b0b:cf51%24(Preferred) IPv4 Address. . . . . . . . . . . : 192.168.223.1(Preferred) Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : DHCPv6 IAID . . . . . . . . . . . : 587223126 DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-12-4A-50-BB-00-24-1D-71-F6-EC DNS Servers . . . . . . . . . . . : fec0:0:0:ffff::1%1 fec0:0:0:ffff::2%1 fec0:0:0:ffff::3%1 NetBIOS over Tcpip. . . . . . . . : Enabled Tunnel adapter isatap.home.lan: Media State . . . . . . . . . . . : Media disconnected Connection-specific DNS Suffix . : home.lan Description . . . . . . . . . . . : Microsoft ISATAP Adapter Physical Address. . . . . . . . . : 00-00-00-00-00-00-00-E0 DHCP Enabled. . . . . . . . . . . : No Autoconfiguration Enabled . . . . : Yes Tunnel adapter Local Area Connection* 11: Media State . . . . . . . . . . . : Media disconnected Connection-specific DNS Suffix . : Description . . . . . . . . . . . : Teredo Tunneling Pseudo-Interface Physical Address. . . . . . . . . : 00-00-00-00-00-00-00-E0 DHCP Enabled. . . . . . . . . . . : No Autoconfiguration Enabled . . . . : Yes Tunnel adapter isatap.{7E5203E8-97DE-4822-9A2E-380BD258D97E}: Media State . . . . . . . . . . . : Media disconnected Connection-specific DNS Suffix . : Description . . . . . . . . . . . : Microsoft ISATAP Adapter #2 Physical Address. . . . . . . . . : 00-00-00-00-00-00-00-E0 DHCP Enabled. . . . . . . . . . . : No Autoconfiguration Enabled . . . . : Yes Tunnel adapter isatap.{A045DC0F-A979-49B3-954C-D0678365FF26}: Media State . . . . . . . . . . . : Media disconnected Connection-specific DNS Suffix . : Description . . . . . . . . . . . : Microsoft ISATAP Adapter #3 Physical Address. . . . . . . . . : 00-00-00-00-00-00-00-E0 DHCP Enabled. . . . . . . . . . . : No Autoconfiguration Enabled . . . . : Yes Tunnel adapter isatap.{8424F604-4FAE-4541-9D8E-7B0A583A0956}: Media State . . . . . . . . . . . : Media disconnected Connection-specific DNS Suffix . : Description . . . . . . . . . . . : Microsoft ISATAP Adapter #5 Physical Address. . . . . . . . . : 00-00-00-00-00-00-00-E0 DHCP Enabled. . . . . . . . . . . : No Autoconfiguration Enabled . . . . : Yes -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple