Re: [Nethttpd-plex] Poor performance on FreeBSD 8.2

Gerd Stolpmann <[email protected]> Tue, 05 Jul 2011 01:09:45 +0200
Newsgroups gmane.comp.lang.ocaml.lib.net.devel
Message-ID <1309820985.22800.2505.camel@thinkpad>
Am Montag, den 04.07.2011, 18:13 -0300 schrieb Matías Giovannini:
> Stéphane,
> 
> Thank you for your reply. I miscopied the configuration. That was a
> test I made to see if semaphores were having an impact on throughput,
> which I found they didn't. The FreeBSD kernel has the sem module
> compiled in.

Sempahores are not used in this context.

Gerd

> 
> 
> I'll try to test the bytecode version to see if there's any
> difference.
> 
> 
> The final configuration from an unmodified 3.3.3 tarball is:
> 
> 
> Welcome to Ocamlnet version 3.3.3
> Checking operating system... FreeBSD
> 
> 
> *** Note that you might need to load the 'sem' kernel
> *** module to make semaphores work: kldload sem
> 
> 
> Checking for findlib... found
> Checking multi-threading support... posix (ok)
> Checking word size... 64 bit
> Checking endianess... little
> Checking for GPROF... found
> Checking for PCRE... found
> Checking whether Ocaml has Printexc.register_printer... found
> Checking whether Ocaml has fancy page tables... found
> Checking for POSIX shared memory... found
> Checking for POSIX semaphores... found
> Checking for POSIX fadvise... not found
> Checking for POSIX fallocate... not found
> Checking for POSIX memalign... found
> Checking for POSIX pthread... found
> Checking for syslog... found
> Checking for POSIX functions like openat... found
> Checking for fchdir... found
> Checking for fdopendir... found
> Checking for GPROF... found
> Checking for win32... no
> Checking for camlzip... found
> 
> 
> Effective options:
>     -enable-pcre
>     -disable-gtk
>     -disable-gtk2
>     -disable-tcl
>     -disable-ssl
>     -enable-zip
>     -disable-crypto
>     -disable-apache
>     -with-nethttpd
>     -without-rpc-auth-dh
>     -bindir /usr/local/bin
>     -datadir /usr/local/lib/ocaml/site-lib/netstring
> 
> 
> Writing Makefile.conf
> 
> 
> Please check Makefile.conf.
> 
> 
> The test harness is an OCaml-cURL script:
> 
> 
> let xml = "<?xml version='1.0' encoding='utf-8'?>\r\n\
> <soapenv:Envelope xmlns:soapenv=
> \"http://schemas.xmlsoap.org/soap/envelope/\"\
> ><soapenv:Body\
> ></soapenv:Body\
> ></soapenv:Envelope>" (* '"' *)
> 
> 
> let make_post url =
> let curl = new Curl.handle in
> curl#set_writefunction String.length; (* ignore result *)
> curl#set_verbose false;
> curl#set_post true;
> curl#set_httpheader [
> "Content-Type: text/xml; charset=\"UTF-8\"";
> "SOAPAction: \"\"";
> ];
> curl#set_postfields xml;
> curl#set_postfieldsize (String.length xml);
> curl#set_url url;
> curl
> 
> 
> let make_get url =
> let curl = new Curl.handle in
> curl#set_writefunction String.length; (* ignore result *)
> curl#set_verbose false;
> curl#set_post false;
> curl#set_url url;
> curl
> 
> 
> let run_test ?(verbose=false) count curl =
> let n_ok = ref 0
> and time = ref 0. in
> let lap = Unix.gettimeofday () in
> for i = 1 to count do
> curl#perform;
> if curl#get_httpcode = 200 then incr n_ok;
> time := !time +. curl#get_totaltime
> done;
> let lap = Unix.gettimeofday () -. lap in
> if verbose then Printf.printf "Total time: %.3f s (%.2f req/s)\ncURL
>  time: %.3f s (%.2f req/s)\nsuccesses: %d/%d\n"
> lap (float count /. lap)
> !time (float count /. !time)
> !n_ok count
> 
> 
> let main () =
> let verbose  = ref false
> and count    = ref 100
> and method_  = ref make_post
> and url      = ref None in
> let set_url s = match !url with
> | None  -> url := Some s
> | Some _ -> raise (Arg.Bad "URL already specified")
> in
> let set_method s = match s with
> | "p" | "post" -> method_ := make_post
> | "g" | "get"  -> method_ := make_get
> | _ -> assert false
> in
> let usage = "usage: " ^ (Filename.basename Sys.executable_name) ^
> " [options] <url>" in
> let opt_list = Arg.align [
> "-m", Arg.Symbol (["g";"get";"p";"post"], set_method), "  Method
> (default \"post\")";
> "-n", Arg.Set_int count,                Printf.sprintf "  Test count
> (default %d)"  !count;
> "-v", Arg.Set     verbose,                             "  Verbose
> output";
> ] in
> Arg.parse opt_list set_url usage;
> try
> let url = match !url with
> | None   -> raise (Arg.Bad "Must specify URL")
> | Some s -> s
> and verbose = !verbose in
> Curl.global_init Curl.CURLINIT_GLOBALALL;
> let curl = !method_ url in
> run_test ~verbose !count curl;
> curl#cleanup;
> Curl.global_cleanup ();
> exit 0
> with Sys_error msg  -> prerr_endline msg; exit 1
> | Arg.Bad msg       -> prerr_endline msg; exit 2
> | Curl.CurlException (Curl.CURLE_COULDNT_CONNECT, _, _) ->
> Printf.eprintf "Can't connect to host\n";
> exit 1
> | Curl.CurlException (_, code, message) ->
> Printf.eprintf "cURL error %d: %s\n" code message;
> exit 1
> | e -> prerr_endline ("Unexpected error: " ^ Printexc.to_string e);
> exit 1
> 
> 
> let () = main ()
> 
> 
> 
> On Mon, Jul 4, 2011 at 5:56 PM, Stéphane Legrand <[email protected]>
> wrote:
>         Hello,
>         
>         I did the following tests on my configuration :
>         
>          FreeBSD 8.2-STABLE
>          Intel Celeron D CPU 3.33GHz (32 bits)
>          1 GB
>         
>         
>         - Native netplex with output in gnome terminal, 127.0.0.1 :
>         
>         siege -c 1 -t 60S -b 'http://127.0.0.1:4444/'
>         
>         Transactions:                  14752 hits
>         Availability:                 100.00 %
>         Elapsed time:                  59.13 secs
>         Data transferred:              31.40 MB
>         Response time:                  0.00 secs
>         Transaction rate:             249.47 trans/sec
>         Throughput:                     0.53 MB/sec
>         Concurrency:                    0.78
>         Successful transactions:       14752
>         Failed transactions:               0
>         Longest transaction:            0.15
>         Shortest transaction:           0.00
>         
>         
>         - Native netplex with output in gnome terminal, localhost :
>         
>         siege -c 1 -t 60S -b 'http://localhost:4444/'
>         
>         Transactions:                  10554 hits
>         Availability:                 100.00 %
>         Elapsed time:                  59.67 secs
>         Data transferred:              22.47 MB
>         Response time:                  0.00 secs
>         Transaction rate:             176.87 trans/sec
>         Throughput:                     0.38 MB/sec
>         Concurrency:                    0.85
>         Successful transactions:       10554
>         Failed transactions:               0
>         Longest transaction:            0.09
>         Shortest transaction:           0.00
>         
>         
>         - Bytecode netplex with output in gnome terminal, 127.0.0.1 :
>         
>         siege -c 1 -t 60S -b 'http://127.0.0.1:4444/'
>         
>         Transactions:                   6343 hits
>         Availability:                 100.00 %
>         Elapsed time:                  59.72 secs
>         Data transferred:              13.50 MB
>         Response time:                  0.01 secs
>         Transaction rate:             106.21 trans/sec
>         Throughput:                     0.23 MB/sec
>         Concurrency:                    0.99
>         Successful transactions:        6343
>         Failed transactions:               0
>         Longest transaction:            0.15
>         Shortest transaction:           0.00
>         
>         
>         - Bytecode netplex with output in gnome terminal, localhost :
>         
>         siege -c 1 -t 60S -b 'http://localhost:4444/'
>         
>         Transactions:                   6204 hits
>         Availability:                 100.00 %
>         Elapsed time:                  59.56 secs
>         Data transferred:              13.21 MB
>         Response time:                  0.01 secs
>         Transaction rate:             104.16 trans/sec
>         Throughput:                     0.22 MB/sec
>         Concurrency:                    0.99
>         Successful transactions:        6204
>         Failed transactions:               0
>         Longest transaction:            0.14
>         Shortest transaction:           0.00
>         
>         
>         As you can see, the minimum is 104 req/sec. Can you please
>         specify your
>         test where you get 10 req/sec ? If i can, i will try to run it
>         on my
>         computer.
>         
>         And here is my output of configure. POSIX semaphores are
>         found, i do
>         have the sem kernel module loaded before to run configure. I
>         don't know
>         if it could explain the slowness you see ?
>         
>         
>         Welcome to Ocamlnet version 3.3.3
>         Checking operating system... FreeBSD
>         
>         *** Note that you might need to load the 'sem' kernel
>         *** module to make semaphores work: kldload sem
>         
>         Checking for findlib... found
>         Checking multi-threading support... posix (ok)
>         
>         Checking word size... 32 bit
>         Checking endianess... little
>         Checking for GPROF... found
>         Checking for PCRE... found
>         Checking whether Ocaml has Printexc.register_printer... found
>         Checking whether Ocaml has fancy page tables... found
>         Checking for POSIX shared memory... found
>         
>         Checking for POSIX semaphores... found
>         Checking for POSIX fadvise... not found
>         Checking for POSIX fallocate... not found
>         Checking for POSIX memalign... found
>         Checking for POSIX pthread... found
>         Checking for syslog... found
>         
>         Checking for POSIX functions like openat... found
>         Checking for fchdir... found
>         Checking for fdopendir... found
>         Checking for GPROF... found
>         Checking for win32... no
>         
>         Checking for cryptokit... found
>         
>         
>         
>         Regards,
>         Stéphane.
>         
>         Le lundi 04 juillet 2011 à 12:16 -0300, Matías Giovannini a
>         écrit :
>         
>         > Hello,
>         >
>         >
>         > I'm stymied about a huge discrepancy in performance for
>         Nethttpd-plex
>         > on FreeBSD 8.2, compared to Mac OS X 10.6.8.
>         >
>         >
>         > Testing with a OCaml-cURL client making purely sequential
>         GET requests
>         > on the loopback interface in a loop against
>         > examples/nethttpd/netplex.ml I get > 900 req/sec on Mac OS X
>         10.6.8
>         > (MacBook, Intel Core 2 Duo 2.0 GHz, 2 GB RAM) compared to
>         aprox. 10
>         > req/sec on FreeBSD 8.2 (Quad-core amd64, 8 GB RAM).
>         >
>         >
>         > Looking at the configuration results, I tried manually
>         disabled POSIX
>         > semaphores and *at functions on FreeBSD to see if that had
>         any impact,
>         > to no avail.
>         >
>         >
>         > Testing against a very simple HTTP/1.0 "server" that just
>         accepts and
>         > prints a zero-length 200 OK response I get double throughput
>         on
>         > FreeBSD compared to Mac OS X (6800 req/s vs. 3300 req/s), so
>         I can
>         > rule out networking stack differences.
>         >
>         >
>         > I'd really appreciate any guidance on this issue.
>         >
>         >
>         > The output of configure on FreeBSD is as follows:
>         >
>         >
>         > Welcome to Ocamlnet version 3.3.3
>         > Checking operating system... FreeBSD
>         >
>         >
>         > *** Note that you might need to load the 'sem' kernel
>         > *** module to make semaphores work: kldload sem
>         >
>         >
>         > Checking for findlib... found
>         > Checking multi-threading support... posix (ok)
>         > Checking word size... 64 bit
>         > Checking endianess... little
>         > Checking for GPROF... found
>         > Checking for PCRE... found
>         > Checking whether Ocaml has Printexc.register_printer...
>         found
>         > Checking whether Ocaml has fancy page tables... found
>         > Checking for POSIX shared memory... found
>         > Checking for POSIX semaphores... not found
>         > Checking for POSIX fadvise... not found
>         > Checking for POSIX fallocate... not found
>         > Checking for POSIX memalign... found
>         > Checking for POSIX pthread... found
>         > Checking for syslog... found
>         > Checking for POSIX functions like openat... not found (or
>         incomplete)
>         > Checking for fchdir... found
>         > Checking for fdopendir... found
>         > Checking for GPROF... found
>         > Checking for win32... no
>         > Checking for camlzip... found
>         >
>         >
>         > Effective options:
>         >     -enable-pcre
>         >     -disable-gtk
>         >     -disable-gtk2
>         >     -disable-tcl
>         >     -disable-ssl
>         >     -enable-zip
>         >     -disable-crypto
>         >     -disable-apache
>         >     -with-nethttpd
>         >     -without-rpc-auth-dh
>         >     -bindir /usr/local/bin
>         >     -datadir /usr/local/lib/ocaml/site-lib/netstring
>         >
>         >
>         > Writing Makefile.conf
>         
>         
>         
>         
>         
>         
>         ------------------------------------------------------------------------------
>         All of the data generated in your IT infrastructure is
>         seriously valuable.
>         Why? It contains a definitive record of application
>         performance, security
>         threats, fraudulent activity, and more. Splunk takes this data
>         and makes
>         sense of it. IT sense. And common sense.
>         http://p.sf.net/sfu/splunk-d2d-c2
>         _______________________________________________
>         Ocamlnet-devel mailing list
>         [email protected]
>         https://lists.sourceforge.net/lists/listinfo/ocamlnet-devel
> 
> 
> ------------------------------------------------------------------------------
> All of the data generated in your IT infrastructure is seriously valuable.
> Why? It contains a definitive record of application performance, security 
> threats, fraudulent activity, and more. Splunk takes this data and makes 
> sense of it. IT sense. And common sense.
> http://p.sf.net/sfu/splunk-d2d-c2
> _______________________________________________ Ocamlnet-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ocamlnet-devel


-- 
------------------------------------------------------------
Gerd Stolpmann, Bad Nauheimer Str.3, 64289 Darmstadt,Germany 
[email protected]          http://www.gerd-stolpmann.de
Phone: +49-6151-153855                  Fax: +49-6151-997714
------------------------------------------------------------


------------------------------------------------------------------------------
All of the data generated in your IT infrastructure is seriously valuable.
Why? It contains a definitive record of application performance, security 
threats, fraudulent activity, and more. Splunk takes this data and makes 
sense of it. IT sense. And common sense.
http://p.sf.net/sfu/splunk-d2d-c2
_______________________________________________
Ocamlnet-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ocamlnet-devel