Date: Sun, 4 Feb 2001 15:55:34 -0800 (PST) From: Matt Dillon <dillon@earth.backplane.com> To: Mikhail Teterin <mi@aldan.algebra.com> Cc: sobomax@FreeBSD.ORG (Maxim Sobolev), dima@unixfreak.org (Dima Dorfman), deischen@FreeBSD.ORG, cvs-committers@FreeBSD.ORG, cvs-all@FreeBSD.ORG Subject: Re: mdconfig config file (was: cvs commit: src/sys/i386/conf GENERI C) Message-ID: <200102042355.f14NtY316991@earth.backplane.com> References: <200102042136.f14LaqU41149@aldan.algebra.com>
next in thread | previous in thread | raw e-mail | index | archive | help
: := My rule for using vfork() is: Does it improve performance in a := noticeable way? The answer, at least for mount_*, is no. If the := answer is no, you should simply use a normal fork(). := := fork() under FreeBSD is not all that expensive. vfork() will be := faster, but unless you are fork/exec'ing a few dozen commands a := second you will never notice the difference. : :I don't get this. Why would you deliberately use a slower method, even :if it is only a little bit slower? Also, someone _may_ be doing this a :few dozen times a second -- what do we know... : : -mi vfork() isn't quite as transparent as most people believe. fork() is more portable. Let me give you an example. #include <stdio.h> #include <unistd.h> void fubar(void) { int x = 0; void fubar2(int); if (vfork() == 0) { execl("barf", "barf", NULL); _exit(0); } fubar2(++x); } Fairly straightforward, right? Well, maybe not if you turn optimization on: apollo:/home/dillon> cc -c x.c -Wall apollo:/home/dillon> cc -c x.c -Wall -O2 x.c: In function `fubar': x.c:8: warning: variable `x' might be clobbered by `longjmp' or `vfork' To be absolutely correct, x should be a volatile int. If you are running vfork() inside a relatively complex procedure, the variables that need to be volatile verses not can change from rev to rev of the compiler, and depend on the optimization options used. The most portable use of vfork() is to encapsulate it in a minimal procedure, and to be extremely careful with what you do inside the child process. Many programs use vfork() improperly. -Matt To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe cvs-all" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200102042355.f14NtY316991>