Causing a process switch to test a theory.
Matthew Hagerty
matthew at digitalstratum.com
Mon Mar 21 07:05:15 PST 2005
Steve Watt wrote:
>In <423DE326.9000203 at digitalstratum.com>,
> matthew at digitalstratum.com wrote:
>
>
>>Knowing if Apache could possibly write interleaved logs when writing to
>>a pipe is critical to a program I'm developing which receives log
>>entries from Apache via a pipe.
>>
>>
>
>That's another layer of indirection, though. If all of the children
>have separate pipes to the parent, and then the parent logs to your
>program, all should be fine.
>
>But at the kernel level, yes, writes longer than PIPE_BUF might get
>interleaved. The longer the write, the higher the probability, so
>for your test, if you can generate, say, 10K writes over and over,
>you can probably trip it.
>
>
>
That's an interesting idea about each child having a pipe open back to
the parent, but I don't think that's what is happening. I'm pretty sure
each child has the logging pipe open directly. Here is an fstat:
There is a grouping like this for each Apache child process that's runing:
genie httpd 61320 root / 2 drwxr-xr-x 512 r
genie httpd 61320 wd / 2 drwxr-xr-x 512 r
genie httpd 61320 text /usr 5110792 -rwxr-xr-x 9766440 r
genie httpd 61320 0 /dev 8 crw-rw-rw- null r
genie httpd 61320 1 /dev 8 crw-rw-rw- null w
genie httpd 61320 2 /usr 5110968 -rw-r--r-- 494192 w
genie httpd 61320 15 /usr 5110968 -rw-r--r-- 494192 w
genie httpd 61320 16 /usr 5110969 -rw-r--r-- 451616 w
genie httpd 61320 17 /usr 5110981 -rw-r--r-- 1056219 w
genie httpd 61320 18 /usr 5111084 -rw-r--r-- 3886425 w
genie httpd 61320 19* internet stream tcp c5d1e2d0
genie httpd 61320 20 /usr 5111178 prw-rw-rw- 0 w
genie httpd 61320 21 /usr 5111178 prw-rw-rw- 0 w
genie httpd 61320 22 /usr 5111178 prw-rw-rw- 0 w
genie httpd 61320 23 /usr 5111178 prw-rw-rw- 0 w
genie httpd 61320 24 /usr 5110835 -rw-r--r-- 573236 w
My pipe listener (fd 0), which each child has open 4 times on fd 20 - 23:
root pglogd 519 root / 2 drwxr-xr-x 512 r
root pglogd 519 wd / 2 drwxr-xr-x 512 r
root pglogd 519 text /usr 8528219 -rwxr-xr-x 22793 r
root pglogd 519 0 /usr 5111178 prw-rw-rw- 0 rw
root pglogd 519 1 /usr 5111198 -rw-r--r-- 0 r
root pglogd 519 2 /usr 5111198 -rw-r--r-- 0 w
root pglogd 519 3* local stream c5dcb7a8 <-> c5dcb71c
Matthew
More information about the freebsd-hackers
mailing list