cURL / Mailing Lists / curl-library / Single Mail

curl-library

Re: CURLOPT_INTERFACE performance problem

From: Daniel Stenberg <daniel_at_haxx.se>
Date: Fri, 9 May 2003 09:50:58 +0200 (CEST)

On Thu, 8 May 2003, Avery Fay wrote:

> In my libcurl program, I use CURLOPT_INTERFACE with an IP string
> ("172.16.0.100"). Originally, I thought the the poor performance when using
> CURLOPT_INTERFACE was inherent in the way Linux implements IP aliases.
> However, I noticed that every time I run my program modprobe's are being
> run for the address and these are generally causing the poor performance.
> The modprobe's are caused by the call to if2ip (and subsequent ioctl I
> believe which spawns a modprobe from the kernel). If I comment out if2ip,
> my performance problems go away. I'm not quite sure what the correct
> solution to this problem would be, but possibly attempting to detect
> whether to string passed to curl_easy_setopt is a ip or interface or host.
> Even better, separate CURLOPT_INTERFACE into CURLOPT_INTERFACE and
> CURLOPT_IP or somewhere along those lines.
>
> BTW, the performance impact is significant (15 times slower in terms of
> connections per second).

Whoa!

I can understand you want this fixed, it is certainly annoying and I surely
had no idea it could have such an impact. Well, I guess you learn something
new every day! ;-)

Instead of your suggested new option, I would rather just check for an IP
address first before testing for network interfaces, and thus keep the
current functionality but skip the penalty you experience.

Does this patch fix your problems?

--- connect.c 1 May 2003 13:37:05 -0000 1.54
+++ connect.c 9 May 2003 07:47:34 -0000
@@ -213,7 +213,11 @@
     char myhost[256] = "";
     in_addr_t in;

- if(Curl_if2ip(data->set.device, myhost, sizeof(myhost))) {
+ /* First check if the given name is an IP address */
+ in=inet_addr(data->set.device);
+
+ if((in == INADDR_NONE) &&
+ Curl_if2ip(data->set.device, myhost, sizeof(myhost))) {
       /*
        * We now have the numerical IPv4-style x.y.z.w in the 'myhost' buffer
        */

-- 
 Daniel Stenberg -- curl, cURL, Curl, CURL. Groks URLs.
-------------------------------------------------------
Enterprise Linux Forum Conference & Expo, June 4-6, 2003, Santa Clara
The only event dedicated to issues related to Linux enterprise solutions
www.enterpriselinuxforum.com
Received on 2003-05-09