From: Andrew Morton <andrewm@uow.edu.au>
To: dean gaudet <dean-list-linux-kernel@arctic.org>
Cc: kumon@flab.fujitsu.co.jp, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] Re: Negative scalability by removal of lock_kernel()?(Was:Strange performance behavior of 2.4.0-test9)
Date: Sat, 04 Nov 2000 16:08:29 +1100 [thread overview]
Message-ID: <3A0399CD.8B080698@uow.edu.au> (raw)
In-Reply-To: <39FD8D0B.B6C0C772@uow.edu.au> <Pine.LNX.4.21.0010301518290.18636-100000@twinlark.arctic.org>
dean gaudet wrote:
>
> On Tue, 31 Oct 2000, Andrew Morton wrote:
>
> > Dean, it looks like the same problem will occur with flock()-based
> > serialisation. Does Apache/Linux ever use that option?
>
> from apache/src/include/ap_config.h in the linux section there's
> this:
>
> /* flock is faster ... but hasn't been tested on 1.x systems */
> /* PR#3531 indicates flock() may not be stable, probably depends on
> * kernel version. Go back to using fcntl, but provide a way for
> * folks to tweak their Configuration to get flock.
> */
> #ifndef USE_FLOCK_SERIALIZED_ACCEPT
> #define USE_FCNTL_SERIALIZED_ACCEPT
> #endif
>
> so you should be able to -DUSE_FLOCK_SERIALIZED_ACCEPT to try it.
>
Dean,
neither flock() nor fcntl() serialisation are effective
on linux 2.2 or linux 2.4. This is because the file
locking code still wakes up _all_ waiters. In my testing
with fcntl serialisation I have seen a single Apache
instance get woken and put back to sleep 1,500 times
before the poor thing actually got to service a request.
For kernel 2.2 I recommend that Apache consider using
sysv semaphores for serialisation. They use wake-one.
For kernel 2.4 I recommend that Apache use unserialised
accept.
This means that you'll need to make a runtime decision
on whether to use unserialised, serialised with sysv or
serialised with fcntl (if sysv IPC isn't installed).
In my testing I launched 3, 10, 30 or 150 Apache instances and then used
httperf --num-conns=2000 --num-calls=1 --uri=/index.html
to open, use and close 2000 connections.
Here are the (terrible) results on 2.4 SMP with fcntl
serialisation:
fcntl accept, 3 servers, vanilla: 938.0 req/s
fcntl accept, 30 servers, vanilla: 697.1 req/s
fcntl accept, 150 servers, vanilla: 99.9 req/s (sic)
2.4 SMP with no serialisation:
unserialised accept, 3 servers, vanilla: 1049.0 req/s
unserialised accept, 10 servers, vanilla: 968.8 req/s
unserialised accept, 30 servers, vanilla: 1040.2 req/s
unserialised accept, 150 servers, vanilla: 1091.4 req/s
2.4 SMP with no serialisation and my patch to the
wakeup and waitqueue code:
unserialised accept, 3 servers, task_exclusive: 1117.4 req/s
unserialised accept, 10 servers, task_exclusive: 1118.6 req/s
unserialised accept, 30 servers, task_exclusive: 1105.6 req/s
unserialised accept, 150 servers, task_exclusive: 1077.1 req/s
2.4 SMP with sysv semaphore serialisation:
sysvsem accept, 3 servers: 1001.2 req/s
sysvsem accept, 10 servers: 1061.0 req/s
sysvsem accept, 30 servers: 1021.2 req/s
sysvsem accept, 150 servers: 943.6 req/s
2.2.14 SMP with fcntl serialisation:
fcntl accept, 3 servers: 1053.8 req/s
fcntl accept, 10 servers: 996.2 req/s
fcntl accept, 30 servers: 934.3 req/s
fcntl accept, 150 servers: 141.4 req/s (sic)
2.2.14 SMP with no serialisation:
unserialised accept, 3 servers: 1039.9 req/s
unserialised accept, 10 servers: 983.1 req/s
unserialised accept, 30 servers: 775.7 req/s
unserialised accept, 150 servers: 220.7 req/s (sic)
2.2.14 SMP with sysv sem serialisation:
sysv accept, 3 servers: 932.2 req/s
sysv accept, 10 servers: 910.6 req/s
sysv accept, 30 servers: 1026.6 req/s
sysv accept, 150 servers: 927.2 req/s
Note that the first test (2.4 with fcntl serialisation) was
with an unpatched 2.4.0-test10-pre5. Once the simple
flock.patch is applied, the performance with 150 servers
doubles. But it's still sucky. The flock.patch change
is effective in increasing scalability wiht a large number
of CPUs, not a large number of httpd's.
Here's the silly patch I used to turn on sysv sem serialisation
in Apache. There's probably a better way than this :)
--- apache_1.3.14.orig/src/main/http_main.c Fri Sep 29 00:32:36 2000
+++ apache_1.3.14/src/main/http_main.c Sat Nov 4 15:01:41 2000
@@ -172,6 +172,13 @@
#include "explain.h"
+/* AKPM */
+#if 1
+#define NEED_UNION_SEMUN
+#define USE_SYSVSEM_SERIALIZED_ACCEPT
+#define USE_FCNTL_SERIALIZED_ACCEPT
+#endif
+
#if !defined(max)
#define max(a,b) (a > b ? a : b)
#endif
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/
next prev parent reply other threads:[~2000-11-04 5:09 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <200010250736.QAA12373@asami.proc.flab.fujitsu.co.jp>
[not found] ` <Pine.LNX.4.21.0010251242050.943-100000@duckman.distro.conectiva>
[not found] ` <200010260138.KAA17028@asami.proc.flab.fujitsu.co.jp>
[not found] ` <200010261405.XAA19135@asami.proc.flab.fujitsu.co.jp>
2000-10-27 6:24 ` Negative scalability by removal of lock_kernel()? (Was: Strange performance behavior of 2.4.0-test9) kumon
2000-10-27 6:32 ` Negative scalability by removal of lock_kernel()?(Was: " Jeff V. Merkey
2000-10-27 7:13 ` Alexander Viro
2000-10-27 7:46 ` Andi Kleen
2000-10-27 10:23 ` Andrew Morton
2000-10-27 10:25 ` Andi Kleen
2000-10-27 12:57 ` [PATCH] " kumon
2000-10-28 15:46 ` Andrew Morton
2000-10-28 15:58 ` Andi Kleen
2000-10-28 16:05 ` Jeff Garzik
2000-10-28 16:20 ` [PATCH] Re: Negative scalability by removal of lock_kernel()?(Was: Alan Cox
2000-10-29 19:45 ` dean gaudet
2000-10-30 6:29 ` Andi Kleen
2000-10-30 15:28 ` Andrea Arcangeli
2000-10-30 16:36 ` Rik van Riel
2000-10-30 18:02 ` Andrea Arcangeli
2000-10-28 16:46 ` [PATCH] Re: Negative scalability by removal of lock_kernel()?(Was: Strange performance behavior of 2.4.0-test9) Andrew Morton
2000-10-30 9:27 ` kumon
2000-10-30 15:00 ` Andrew Morton
2000-10-30 23:24 ` dean gaudet
2000-11-04 5:08 ` Andrew Morton [this message]
2000-11-04 6:23 ` [PATCH] Re: Negative scalability by removal of lock_kernel()?(Was:Strange " Linus Torvalds
2000-11-04 10:54 ` [PATCH] Re: Negative scalability by removal of Alan Cox
2000-11-04 17:22 ` Linus Torvalds
2000-11-05 16:22 ` Andrea Arcangeli
2000-11-05 20:21 ` dean gaudet
2000-11-05 22:43 ` Alan Cox
2000-11-04 20:03 ` [PATCH] Re: Negative scalability by removal of lock_kernel()?(Was:Strange performance behavior of 2.4.0-test9) dean gaudet
2000-11-04 20:42 ` [PATCH] Re: Negative scalability by removal of lock_kernel()?(Was:Strange Alan Cox
2000-11-04 20:11 ` [PATCH] Re: Negative scalability by removal of lock_kernel()?(Was:Strange performance behavior of 2.4.0-test9) dean gaudet
2000-11-04 20:43 ` [PATCH] Re: Negative scalability by removal of lock_kernel()?(Was:Strange Alan Cox
2000-11-05 4:52 ` dean gaudet
2000-10-31 15:36 ` [PATCH] Re: Negative scalability by removal of lock_kernel()?(Was: Strange performance behavior of 2.4.0-test9) Andrew Morton
2000-11-01 1:02 ` kumon
2000-11-02 11:09 ` kumon
2000-11-02 12:50 ` kumon
2000-11-04 5:07 ` Andrew Morton
2000-10-27 8:17 ` Jeff V. Merkey
2000-10-27 10:11 ` kumon
2000-11-04 5:55 ` Preemptive scheduling of woken-up processes kumon
2000-11-05 4:19 [PATCH] Re: Negative scalability by removal of lock_kernel()?(Was:Strange performance behavior of 2.4.0-test9) Dave Wagner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3A0399CD.8B080698@uow.edu.au \
--to=andrewm@uow.edu.au \
--cc=dean-list-linux-kernel@arctic.org \
--cc=kumon@flab.fujitsu.co.jp \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox