[CFR] reflect resolv.conf update to running application
Hajimu UMEMOTO
ume at freebsd.org
Sun Aug 21 05:05:28 GMT 2005
Hi,
>>>>> On Sun, 21 Aug 2005 14:04:54 +1000
>>>>> Peter Jeremy <PeterJeremy at optushome.com.au> said:
PeterJeremy> Overall, I think that having applications see changes to /etc/resolv.conf
PeterJeremy> is a good idea.
Thanks.
PeterJeremy> On Sun, 2005-Aug-21 00:37:56 +0100, Robert Watson wrote:
>(1) Has anyone characterized the significant of the cost of doing a stat()
> for every DNS lookup for a significant workload? Does it matter?
PeterJeremy> I wrote a short program to run stat("/etc/resolv.conf") in a loop.
PeterJeremy> On a P-233 running 4.9, I got about 45000 iterations/sec.
PeterJeremy> On a P-120 running 5.4, I got about 10500 iterations/sec.
PeterJeremy> I don't think this matters - especially compared to the overheads
PeterJeremy> involved in sending and receiving the DNS UDP packets. If you are
PeterJeremy> stating the same name frequently, it will be in the name cache so
PeterJeremy> the name lookups are fairly cheap.
Yes, I think a cost for stat() is considerably low than actuall DNS
lookup.
>(2) By reading the configuration file more frequently and more quickly
> after a change, we increase the chances of a race condition in which
> the resolve reads a partially written resolv.conf file during an
> update. Does this happen in practice?
I had care to don't update during the critical path. For example, I
didn't change to use _res_init() in res_send().
I have been using this patch for myself about 3 months without any
problem.
PeterJeremy> This could be more of an issue, though I have no idea whether it
PeterJeremy> really is. The easy work-around is to avoid updates. Instead create
PeterJeremy> /etc/resolv.conf.tmp and rename it.
Yup, I forgot to mention. Our dhclient updates resolv.conf frequently
even when it is not changed. I think it is redundant, and I applied
following patch:
Index: sbin/dhclient/dhclient-script
diff -u sbin/dhclient/dhclient-script.orig sbin/dhclient/dhclient-script
--- sbin/dhclient/dhclient-script.orig Fri Jun 10 12:41:18 2005
+++ sbin/dhclient/dhclient-script Wed Jun 29 06:13:14 2005
@@ -152,6 +152,11 @@
cat /etc/resolv.conf.tail >>/etc/resolv.conf.std
fi
+ if diff /etc/resolv.conf.std /etc/resolv.conf >/dev/null 2>&1; then
+ rm -f /etc/resolv.conf.std
+ return 0
+ fi
+
# In case (e.g. during OpenBSD installs) /etc/resolv.conf
# is a symbolic link, take care to preserve the link and write
# the new data in the correct location.
I wish to commit this, too.
Sincerely,
--
Hajimu UMEMOTO @ Internet Mutual Aid Society Yokohama, Japan
ume at mahoroba.org ume@{,jp.}FreeBSD.org
http://www.imasy.org/~ume/
More information about the freebsd-arch
mailing list