[Zope] Zope's performance on xBSD
Giorgos Verigakis
verigak@algol.vtrip-ltd.com
Fri, 17 Aug 2001 17:45:32 +0300 (EEST)
On Fri, 17 Aug 2001, Chris McDonough wrote:
> Hi Giorgios,
>
> Let me see if I understand the testing methodology and results... You
> generate load using your program, and while the program is running, you
> try to reload the page in a browser.. right?
Yes, that's right
>
> Furthermore, your test results show that on Linux, the time it takes to
> reload the page under any of the tested loads is virtually the same,
> while on BSD, the time that it takes to reload the page appears to be
> related to the load in an O(n^2) way.
That's right again. I haven't produced any graphs to know if it is
O(n^2) but it sure is non-linear.
>
> I don't know the answer, but I just want to restate the findings in
> another way so that you can tell me if I'm misunderstanding them.
Well, apologies if I wasn't very clear...
>
> - C
>
>
> Giorgos Verigakis wrote:
> >
> > Hello, I'm using Zope on FreeBSD and OpenBSD and I've noticed some
> > serious performance issues. Since I hadn't experienced any problems
> > at the past with Linux, I did some benchmarks.
> >
> > I've written a small program that connects to Zope and tries to
> > retrieve a non-existant URL (source code appended). While Linux
> > performed almost linearly depending on the number of hits/sec,
> > FreeBSD and OpenBSD performed exponential.
> >
> > I did the following experiment:
> > I installed a binary distribution of python-1.5.2 (pkg_add or apt-get)
> > and I compiled Zope-2.3.3+HotFix from sources (with wo_pcgi.py).
> > I entered Zope's management screen and expanded all folders. I ran
> > the previous program and after about 1000 hits I reloaded the page
> > and measured the time it gets to finish. The results are below:
> >
> > |---------------------+------------+---------------+-------------+
> > | OS | Hit Rate* | Real hit rate | Reload time |
> > | | (hits/sec) | (hits/sec) | (sec) |
> > |---------------------+------------+---------------+-------------+
> > | | 30 | 20 | 13 |
> > | Linux debian 2.2.19 | 50 | 33 | 16 |
> > | | 100 | 38 | 16 |
> > |---------------------+------------+---------------+-------------+
> > | | 30 | 20 | 10 |
> > | FreeBSD 4.3-Release | 50 | 33 | 23 |
> > | | 100 | 40 | 100 |
> > |---------------------+------------+---------------+-------------+
> > | | 30 | 20 | 10 |
> > | OpenBSD 2.9-Release | 50 | 33 | 15 |
> > | | 100 | 50 | 285 |
> > |---------------------+------------+---------------+-------------+
> > *The hit rate is the one passed as an argument to the program, while
> > real hit rate was calculated according to Zope's log file.
> >
> > All tests were ran on the same computer, a 600MHz Celeron with
> > 192MB RAM
> >
> > These tests were ran using the default Data.fs. When I use a real
> > Data.fs + my products I even get time outs when I try to access
> > the content.
> > Why is there such a difference between the OSs? Do the BSD users of
> > this list experience similar problems?
> >
> > Giorgos Verigakis
> >
> > ------------------ 8< ------------------
> > #include <stdio.h>
> > #include <stdlib.h>
> > #include <unistd.h>
> > #include <sys/types.h>
> > #include <sys/socket.h>
> > #include <netinet/in.h>
> > #include <netdb.h>
> >
> > int main(int argc, char *argv[])
> > {
> > struct sockaddr_in sa;
> > struct hostent *hp;
> > int s;
> > int i, t, len;
> > unsigned long sleeptime;
> > char request[128];
> > char *url="/foo";
> >
> > if (argc != 4) {
> > printf("Usage: %s <host> <port> <rate>\n", argv[0]);
> > printf("rate in hits/sec\n");
> > exit(1);
> > }
> >
> > if ((hp = gethostbyname(argv[1])) == NULL) {
> > printf("error looking up host\n");
> > exit(1);
> > }
> >
> > sprintf(request, "GET %s HTTP/1.0\015\012\015\012", url);
> > len = strlen(request);
> > sleeptime = (1 / atof(argv[3])) * 1000000;
> >
> > bzero(&sa, sizeof(sa));
> > bcopy(hp->h_addr, (char *)&sa.sin_addr, hp->h_length);
> > sa.sin_family = hp->h_addrtype;
> > sa.sin_port = htons(atoi(argv[2]));
> >
> > for (i = 0;; i++) {
> > if (( s= socket(hp->h_addrtype, SOCK_STREAM, 0)) < 0) {
> > printf("Socket error\n");
> > continue;
> > }
> >
> > if (connect(s, (struct sockaddr *) &sa, sizeof sa) < 0) {
> > printf("Connection error\n");
> > close(s);
> > continue;
> > }
> >
> > t = write(s, request, len);
> > printf("i=%d: %d bytes\n", i, t);
> >
> > usleep(sleeptime);
> >
> > close(s);
> > }
> > }
> > ------------------ 8< ------------------
> >
> > _______________________________________________
> > Zope maillist - Zope@zope.org
> > http://lists.zope.org/mailman/listinfo/zope
> > ** No cross posts or HTML encoding! **
> > (Related lists -
> > http://lists.zope.org/mailman/listinfo/zope-announce
> > http://lists.zope.org/mailman/listinfo/zope-dev )
>
>