machine, host info etc., ~~~~~~~~~~~~~~~~~~~~~~~~ All tests were run on the same machine using the 127.0.0.1:8080 output:: $python -c "from distutils import util; print util.get_platform()" linux-i686 $ python Python 2.5 (r25:51908, Dec 24 2006, 12:31:41) [GCC 4.1.2 20060928 (prerelease) (Ubuntu 4.1.1-13ubuntu5)] on linux2 Type "help", "copyright", "credits" or "license" for more information. $ cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 15 model : 4 model name : Intel(R) Pentium(R) D CPU 3.00GHz stepping : 4 cpu MHz : 2800.000 cache size : 1024 KB physical id : 0 siblings : 1 core id : 255 cpu cores : 1 fdiv_bug : no hlt_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level : 5 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm constant_tsc pni monitor ds_cpl est cid cx16 xtpr bogomips : 6029.28 processor : 1 vendor_id : GenuineIntel cpu family : 15 model : 4 model name : Intel(R) Pentium(R) D CPU 3.00GHz stepping : 4 cpu MHz : 2800.000 cache size : 1024 KB physical id : 1 siblings : 1 core id : 255 cpu cores : 1 fdiv_bug : no hlt_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level : 5 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm constant_tsc pni monitor ds_cpl est cid cx16 xtpr bogomips : 6021.92 $ uname -a Linux lem 2.6.17-10-generic #2 SMP Tue Dec 5 22:28:26 UTC 2006 i686 GNU/Linux PROFILE: asynwsgi-clientbench ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ $ nice -n 20 asynwsgi-clientbench --profile-server -C 3 -n 2000 http://localhost:8080/:: THREADED CLIENT ALL AGGREGATED completed: 6000; refused: 0 REQUEST RATE: 3672.5932/s read rate: 317658.4975/s upload rate: 0.0000/s BEST THREAD ID: 0x48cbf450 completed: 2000; refused: 0 request rate: 1725.1285/s read rate: 150153.4574/s upload rate: 0.0000/s Note: T = max(all complete) - min(all start) listening: minimum report interval: 3.00 ... closing ... 3.867403 EL,ELT,EC:3,2100,543 ... closing ... 3.400838 EL,ELT,EC:3,2435,716 ... closing ... 2.936416 EL,ELT,EC:3,3048,1038 CONNECTION id(instance): 0xb7c8fd4c connection type: connection fd: 0x00000003 connection state: accepting readable(1), writeable(1) Sun Feb 11 17:25:12 2007 asynwsgi.cprofile 248296 function calls (239182 primitive calls) in 5.870 CPU seconds Ordered by: cumulative time ncalls tottime percall cumtime percall filename:lineno(function) 1 0.000 0.000 5.870 5.870 :1() 1 0.005 0.005 5.870 5.870 dispatcher.py:112(iterate) 1067 0.067 0.000 5.864 0.005 dispatcher.py:16(poll_dispatcher) 1067 4.280 0.004 4.280 0.004 {built-in method poll} 2297 0.014 0.000 1.481 0.001 wsgiconnection.py:51(fd_event) 11411/2297 0.049 0.000 1.467 0.001 {method 'send' of 'generator' objects} 2300 0.182 0.000 1.452 0.001 wsgiconnection.py:66(fd_event_wsgi_completer) 3038 0.093 0.000 0.370 0.000 wsgisupport.py:283(process_message_headers) 3038 0.135 0.000 0.328 0.000 wsgisupport.py:186(consider_request_line) 9120 0.141 0.000 0.217 0.000 wsgisupport.py:21(wsgi_completer) 2251 0.051 0.000 0.177 0.000 socketapi.py:229(flushwritequeue) 3038 0.090 0.000 0.161 0.000 wsgisupport.py:402(consume_headers) 6070 0.104 0.000 0.104 0.000 {method 'send' of '_socket.socket' objects} 3038 0.032 0.000 0.082 0.000 urlparse.py:148(urlparse) 3038 0.051 0.000 0.065 0.000 wsgisupport.py:586(format_date_time) 3038 0.031 0.000 0.051 0.000 urllib.py:1143(unquote) 3044 0.032 0.000 0.045 0.000 requestheaderapi.py:108(yield_request_line) 5335 0.044 0.000 0.044 0.000 {method 'recv' of '_socket.socket' objects} 21634 0.041 0.000 0.041 0.000 {method 'get' of 'dict' objects} 15190 0.041 0.000 0.041 0.000 {method 'split' of 'str' objects} 3044 0.020 0.000 0.028 0.000 requestheaderapi.py:194(yield_message_header_data) 15185 0.027 0.000 0.027 0.000 {len} 3038 0.018 0.000 0.026 0.000 urlparse.py:180(urlsplit) 3038 0.016 0.000 0.025 0.000 server.py:67(wsgi_simple) 3038 0.015 0.000 0.024 0.000 urlparse.py:136(__new__) 12152 0.024 0.000 0.024 0.000 {method 'strip' of 'str' objects} 9114 0.021 0.000 0.021 0.000 {method 'replace' of 'str' objects} 9114 0.019 0.000 0.019 0.000 {method 'join' of 'str' objects} 9114 0.018 0.000 0.018 0.000 {method 'lower' of 'str' objects} 9114 0.017 0.000 0.017 0.000 {method 'pop' of 'dict' objects} 6079 0.016 0.000 0.016 0.000 {isinstance} 6077 0.015 0.000 0.015 0.000 {method 'find' of 'str' objects} 3038 0.014 0.000 0.014 0.000 {time.gmtime} 3038 0.014 0.000 0.014 0.000 {built-in method split} 6076 0.013 0.000 0.013 0.000 {method 'startswith' of 'str' objects} 3038 0.012 0.000 0.012 0.000 {hasattr} 6076 0.011 0.000 0.011 0.000 {method 'append' of 'collections.deque' objects} 3038 0.011 0.000 0.011 0.000 {time.time} 6070 0.011 0.000 0.011 0.000 {method 'popleft' of 'collections.deque' objects} 3038 0.009 0.000 0.009 0.000 wsgisupport.py:54(start_response) 3039 0.009 0.000 0.009 0.000 {built-in method __new__ of type object at 0x8144620} 3038 0.008 0.000 0.008 0.000 {min} 3401 0.008 0.000 0.008 0.000 {built-in method register} 2334 0.007 0.000 0.007 0.000 socketapi.py:206(readable) 3038 0.007 0.000 0.007 0.000 {method 'extend' of 'list' objects} 3038 0.006 0.000 0.006 0.000 {method 'upper' of 'str' objects} 3038 0.006 0.000 0.006 0.000 {iter} 2334 0.005 0.000 0.005 0.000 socketapi.py:218(writeable) 1067 0.002 0.000 0.002 0.000 {method 'keys' of 'dict' objects} 1067 0.002 0.000 0.002 0.000 socketapi.py:152(readable) 1067 0.002 0.000 0.002 0.000 {method 'iteritems' of 'dict' objects} 1067 0.002 0.000 0.002 0.000 socketapi.py:154(writeable) 3 0.000 0.000 0.001 0.000 socketapi.py:146(fd_event) 3 0.000 0.000 0.001 0.000 servicemodels.py:51(server_accept) 3 0.000 0.000 0.001 0.000 socketapi.py:62(server_accept) 1 0.000 0.000 0.001 0.001 server.py:153(first_dispatch) 1 0.000 0.000 0.001 0.001 servicemodels.py:36(listen) 1 0.000 0.000 0.001 0.001 socketapi.py:14(listen_tcp) 3 0.000 0.000 0.000 0.000 servicemodels.py:63(accepted_socket) 3 0.000 0.000 0.000 0.000 servicemodels.py:168(connection_factory) 1 0.000 0.000 0.000 0.000 :1(bind) 3 0.000 0.000 0.000 0.000 wsgiconnection.py:40(close) 3 0.000 0.000 0.000 0.000 socket.py:169(accept) 4 0.000 0.000 0.000 0.000 socket.py:154(__init__) 3 0.000 0.000 0.000 0.000 socketapi.py:202(close) 3 0.000 0.000 0.000 0.000 servicemodels.py:74(_client_socket_closer) 3 0.000 0.000 0.000 0.000 servicemodels.py:136(_fd_hard_closer) 98 0.000 0.000 0.000 0.000 {built-in method unregister} 3 0.000 0.000 0.000 0.000 socket.py:161(close) 42 0.000 0.000 0.000 0.000 {setattr} 3 0.000 0.000 0.000 0.000 {method 'close' of '_socket.socket' objects} 3 0.000 0.000 0.000 0.000 {method 'accept' of '_socket.socket' objects} 3 0.000 0.000 0.000 0.000 wsgiconnection.py:29(__init__) 24 0.000 0.000 0.000 0.000 {getattr} 3 0.000 0.000 0.000 0.000 socketapi.py:184(__init__) 4 0.000 0.000 0.000 0.000 :1(setblocking) 1 0.000 0.000 0.000 0.000 urlparse.py:124(__new__) 1 0.000 0.000 0.000 0.000 :1(getsockopt) 1 0.000 0.000 0.000 0.000 servicemodels.py:165(__init__) 1 0.000 0.000 0.000 0.000 :1(listen) 4 0.000 0.000 0.000 0.000 :1(fileno) 1 0.000 0.000 0.000 0.000 :1(setsockopt) 1 0.000 0.000 0.000 0.000 socketapi.py:142(__init__) 1 0.000 0.000 0.000 0.000 servicemodels.py:28(__init__) 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects} AB2 bench ~~~~~~~~~ $ nice -n 20 /usr/sbin/ab2 -c 1000 -n 32000 -k http://localhost:8080/:: This is ApacheBench, Version 2.0.41-dev <$Revision: 1.141 $> apache-2.0 Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/ Benchmarking localhost (be patient) Completed 3200 requests Completed 6400 requests Completed 9600 requests Completed 12800 requests Completed 16000 requests Completed 19200 requests Completed 22400 requests Completed 25600 requests Completed 28800 requests Finished 32000 requests Server Software: ASYNWSGI/0.4dev2-r338-branch-service-api Server Hostname: localhost Server Port: 8080 Document Path: / Document Length: 19 bytes Concurrency Level: 1000 Time taken for tests: 14.343225 seconds Complete requests: 32000 Failed requests: 0 Write errors: 0 Keep-Alive requests: 32000 Total transferred: 6272526 bytes HTML transferred: 608494 bytes Requests per second: 2231.02 [#/sec] (mean) Time per request: 448.226 [ms] (mean) Time per request: 0.448 [ms] (mean, across all concurrent requests) Transfer rate: 427.03 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 19 360.6 0 9012 Processing: 2 77 256.0 63 4922 Waiting: 0 34 258.2 20 4922 Total: 8 97 574.0 63 13905 Percentage of the requests served within a certain time (ms) 50% 63 66% 68 75% 71 80% 72 90% 80 95% 85 98% 91 99% 92 100% 13905 (longest request)