getaddrinfo performance

getaddrinfo performance

am 20.08.2002 19:46:24 von Bill Stoddard

I'm doing some profiling of mod_proxy configured as a gateway (aka reverse
proxy) on AIX. Over 50% of the cycles to handle a request are chewed up in
getaddrinfo() (getaddrinfo is doing memsets on big chunks of storage among
other things).

Here is the call in ap_proxy_http_determine_connection() that wrappers
getaddrinfo.

err = apr_sockaddr_info_get(&uri_addr, apr_pstrdup(c->pool, uri->hostname),
APR_UNSPEC, uri->port, 0, c->pool);


Changing APR_UNSPEC to APR_INET nearly doubles the throughput (140 rps to
265 rps). Replacing getaddrinfo with gethostbyname_r will get the benchmark
to 280 rps. Allan Edwards is reporting significant performance hit on
Windows as well (though not as severe as I'm seeing on AIX). Looks like we
may need a config directive to tell the server to use AF_INET or AF_INETV6.

Bill

Re: getaddrinfo performance

am 20.08.2002 20:00:17 von Ian Holsman

Bill Stoddard wrote:

>I'm doing some profiling of mod_proxy configured as a gateway (aka reverse
>proxy) on AIX. Over 50% of the cycles to handle a request are chewed up in
>getaddrinfo() (getaddrinfo is doing memsets on big chunks of storage among
>other things).
>
the other thing you could look at is caching the results ..
for reverse proxy calls you usually only look at a 5-10 host names and
you could cache the dns respones
for them. This would work extermly well is you have the backend boxes
all behind a single IP

>
>Here is the call in ap_proxy_http_determine_connection() that wrappers
>getaddrinfo.
>
>err = apr_sockaddr_info_get(&uri_addr, apr_pstrdup(c->pool, uri->hostname),
> APR_UNSPEC, uri->port, 0, c->pool);
>
>
>Changing APR_UNSPEC to APR_INET nearly doubles the throughput (140 rps to
>265 rps). Replacing getaddrinfo with gethostbyname_r will get the benchmark
>to 280 rps. Allan Edwards is reporting significant performance hit on
>Windows as well (though not as severe as I'm seeing on AIX). Looks like we
>may need a config directive to tell the server to use AF_INET or AF_INETV6.
>
>Bill
>
>