[Alan DID not say this:]
> > There is a large perception of CORBA being slow, but for the most part it
> > is unjustified.  

Really?  I have that same perception but I can't claim that I've measured it.
On the other hand, I have measured the overhead of straight UDP, TCP, and
Sun RPC ping/pong tests and you can find the code for that in any version
of lmbench.  It should be a 5 minute task for someone who groks corba to
do the same thing using the same framework.  If someone wants to do it,
I'll guide them through the lmbench stuff.  It's pretty trivial, start 
with this as a guide:
/*
 * tcp_xact.c - simple TCP transaction latency test
 *
 * Three programs in one -
 *      server usage:   tcp_xact -s
 *      client usage:   tcp_xact hostname
 *      shutdown:       tcp_xact -hostname
 *
 * Copyright (c) 1994 Larry McVoy.  Distributed under the FSF GPL with
 * additional restriction that results may published only if
 * (1) the benchmark is unmodified, and
 * (2) the version in the sccsid below is included in the report.
 * Support for this development by Sun Microsystems is gratefully acknowledged.
 */
char    *id = "$Id$\n";

#include "bench.h"

void    client_main(int ac, char **av);
void    doserver(int sock);
void    doclient(int sock);
void    server_main(int ac, char **av);
void    doserver(int sock);

int
main(int ac, char **av)
{
        if (ac != 2) {
                fprintf(stderr, "Usage: %s -s OR %s [-]serverhost\n",
                    av[0], av[0]);
                exit(1);
        }
        if (!strcmp(av[1], "-s")) {
                if (fork() == 0) {
                        server_main(ac, av);
                }
                exit(0);
        } else {
                client_main(ac, av);
        }
        return(0);
}

void
client_main(int ac, char **av)
{
        int     sock;
        char    *server;
        char    buf[100];

        if (ac != 2) {
                fprintf(stderr, "usage: %s host\n", av[0]);
                exit(1);
        }
        server = av[1][0] == '-' ? &av[1][1] : av[1];
        sock = tcp_connect(server, TCP_XACT, SOCKOPT_NONE);

        /*
         * Stop server code.
         */
        if (av[1][0] == '-') {
                close(sock);
                exit(0);
        }

        BENCH(doclient(sock), MEDIUM);
        sprintf(buf, "TCP latency using %s", av[1]);
        micro(buf, get_n());
        exit(0);
        /* NOTREACHED */
}

void
doclient(int sock)
{
        char    c;

        write(sock, &c, 1);
        read(sock, &c, 1);
}

void
child()
{
        wait(0);
        signal(SIGCHLD, child);
}

void
server_main(int ac, char **av)
{
        int     newsock, sock;

        if (ac != 2) {
                fprintf(stderr, "usage: %s -s\n", av[0]);
                exit(1);
        }
        GO_AWAY;
        signal(SIGCHLD, child);
        sock = tcp_server(TCP_XACT, SOCKOPT_NONE);
        for (;;) {
                newsock = tcp_accept(sock, SOCKOPT_NONE);
                switch (fork()) {
                    case -1:
                        perror("fork");
                        break;
                    case 0:
                        doserver(newsock);
                        exit(0);
                    default:
                        close(newsock);
                        break;
                }
        }
        /* NOTREACHED */
}

void
doserver(int sock)
{
        char    c;
        int     n = 0;

        while (read(sock, &c, 1) == 1) {
                write(sock, &c, 1);
                n++;
        }

        /*
         * A connection with no data means shut down.
         */
        if (n == 0) {
                tcp_done(TCP_XACT);
                kill(getppid(), SIGTERM);
                exit(0);
        }
}
-- 
---
Larry McVoy              lm at bitmover.com           http://www.bitmover.com/lm 
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/

Reply via email to