-
Notifications
You must be signed in to change notification settings - Fork 41
Open
Description
Actually, this is not an issue, just a feedback. You can close this whenever you want.
I ran Woo with libuv-backed cl-async and profiled it.
1. Loading Woo
(ql:quickload :woo)
NOTE: Woo requires the latest fast-http.
2. Profiling
(sb-profile:profile "WOO" "WOO.RESPONSE" "LIBUV" "CL-ASYNC" "CL-ASYNC-BASE")
3. Starting a server
(woo:run (lambda (env) (declare (ignore env)) '(200 () ("Hello"))) :use-thread nil)
It will be started at http://127.0.0.1:5000/.
4. wrk
Send HTTP requests 10 sec by wrk.
$ wrk -c 15 -t 5 -d 10 http://127.0.0.1:5000
Running 10s test @ http://127.0.0.1:5000
5 threads and 15 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 5.87ms 1.50ms 26.21ms 96.73%
Req/Sec 539.87 100.97 692.00 50.99%
25914 requests in 10.00s, 2.62MB read
Requests/sec: 2590.98
Transfer/sec: 268.21KB
5. See the report
Here's the report. Is writing part the current bottleneck?
> (sb-profile:report)
seconds | gc | consed | calls | sec/call | name
-------------------------------------------------------------
1.085 | 0.000 | 32 | 155,562 | 0.000007 | LIBUV:UV-WRITE
0.729 | 0.000 | 55,280,176 | 181,502 | 0.000004 | LIBUV:ALLOC-UV-BUF
0.485 | 0.000 | 608 | 155,562 | 0.000003 | CL-ASYNC::WRITE-TO-UVSTREAM
0.196 | 0.000 | 336 | 155,590 | 0.000001 | CL-ASYNC::CHECK-SOCKET-OPEN
0.121 | 0.000 | 0 | 1,607,640 | 0.000000 | CL-ASYNC-BASE:EVENT-BASE-DATA-REGISTRY
0.114 | 0.000 | 224 | 155,562 | 0.000001 | CL-ASYNC::TCP-WRITE-CB
0.104 | 0.000 | 0 | 155,562 | 0.000001 | LIBUV:ALLOC-REQ
0.103 | 0.000 | 9,724,432 | 25,927 | 0.000004 | WOO::PARSE-HOST-HEADER
0.089 | 0.021 | 40,968,672 | 25,943 | 0.000003 | WOO::SETUP-PARSER
0.082 | 0.000 | 9,412,992 | 25,927 | 0.000003 | WOO::HANDLE-REQUEST
0.071 | 0.000 | 0 | 155,562 | 0.000000 | LIBUV:FREE-UV-BUF
0.047 | 0.000 | 0 | 674,236 | 0.000000 | CL-ASYNC-BASE:EVENT-BASE-FUNCTION-REGISTRY
0.036 | 0.000 | 0 | 155,578 | 0.000000 | CL-ASYNC:SOCKET-C
0.035 | 0.000 | 0 | 155,562 | 0.000000 | LIBUV:FREE-REQ
0.022 | 0.000 | 0 | 155,578 | 0.000000 | CL-ASYNC::SOCKET-CLOSING
0.021 | 0.000 | 2,616,592 | 28 | 0.000750 | WOO::EVENT-CB
0.020 | 0.000 | 0 | 155,590 | 0.000000 | CL-ASYNC:SOCKET-CLOSED
0.017 | 0.000 | 0 | 155,562 | 0.000000 | CL-ASYNC::SOCKET-CONNECTED
0.016 | 0.000 | 0 | 25,940 | 0.000001 | CL-ASYNC::TCP-ALLOC-CB
0.012 | 0.000 | 0 | 181,519 | 0.000000 | CL-ASYNC-BASE:EVENT-BASE-CATCH-APP-ERRORS
0.008 | 0.000 | 0 | 25,943 | 0.000000 | (SETF CL-ASYNC:SOCKET-DATA)
0.006 | 0.000 | 0 | 25,940 | 0.000000 | CL-ASYNC::SOCKET-DRAIN-READ-BUFFER
0.004 | 0.000 | 0 | 25,940 | 0.000000 | LIBUV:UV-BUF-READ
0.002 | 0.000 | 196,240 | 28 | 0.000060 | CL-ASYNC::EVENT-HANDLER
0.001 | 0.000 | 0 | 2 | 0.000500 | CL-ASYNC::TCP-SERVER-CLOSED
0.001 | 0.000 | 0 | 1 | 0.000989 | CL-ASYNC:TCP-SERVER
0.001 | 0.000 | 295,312 | 142 | 0.000007 | LIBUV:ERRVAL
0.001 | 0.000 | 0 | 17 | 0.000055 | CL-ASYNC::TCP-CLOSE-CB
0.001 | 0.000 | 0 | 25,927 | 0.000000 | WOO::HTTP-VERSION-KEYWORD
0.000 | 0.000 | 0 | 25,927 | 0.000000 | WOO::HANDLE-RESPONSE
0.000 | 0.000 | 8,413,744 | 25,927 | 0.000000 | WOO::HANDLE-NORMAL-RESPONSE
0.000 | 0.000 | 9,723,824 | 25,927 | 0.000000 | WOO::READ-CB
0.000 | 0.000 | 0 | 16 | 0.000000 | WOO::CONNECT-CB
0.000 | 0.000 | 0 | 1 | 0.000000 | WOO:RUN
0.000 | 0.028 | 131,123,168 | 25,927 | 0.000000 | WOO.RESPONSE:WRITE-RESPONSE-HEADERS
0.000 | 0.000 | 0 | 18 | 0.000000 | LIBUV::HANDLE-TO-VAL
0.000 | 0.000 | 0 | 1 | 0.000000 | LIBUV::HANDLE-FROM-VAL
0.000 | 0.000 | 0 | 2 | 0.000000 | LIBUV:UV-LOOP-CLOSE
0.000 | 0.000 | 0 | 1 | 0.000000 | LIBUV:HANDLE-TYPE
0.000 | 0.000 | 0 | 17 | 0.000000 | LIBUV:UV-READ-STOP
0.000 | 0.000 | 0 | 1 | 0.000000 | LIBUV:UV-IP-4-ADDR
0.000 | 0.000 | 1,536 | 18 | 0.000000 | LIBUV:UV-CLOSE
0.000 | 0.000 | 0 | 18 | 0.000000 | LIBUV:FREE-HANDLE
0.000 | 0.000 | 0 | 1 | 0.000000 | LIBUV:UV-TIMER-START
0.000 | 0.000 | 0 | 28 | 0.000000 | LIBUV:UV-ERR-NAME
0.000 | 0.000 | 0 | 1 | 0.000000 | LIBUV:UV-STOP
0.000 | 0.000 | 0 | 1 | 0.000000 | LIBUV:UV-WALK
0.000 | 0.000 | 0 | 18 | 0.000000 | LIBUV:ALLOC-HANDLE
0.000 | 0.000 | 0 | 16 | 0.000000 | LIBUV:UV-ACCEPT
0.000 | 0.000 | 0 | 1 | 0.000000 | LIBUV:UV-TIMER-INIT
0.000 | 0.000 | 0 | 1 | 0.000000 | LIBUV:UV-LOOP-INIT
0.000 | 0.000 | 0 | 16 | 0.000000 | LIBUV:UV-READ-START
0.000 | 0.000 | 0 | 1 | 0.000000 | LIBUV:UV-LISTEN
0.000 | 0.000 | 7,274,000 | 3 | 0.000000 | LIBUV:UV-RUN
0.000 | 0.000 | 0 | 1 | 0.000000 | LIBUV:UV-TCP-BIND
0.000 | 0.000 | 0 | 1 | 0.000000 | LIBUV:UV-LOOP-SIZE
0.000 | 0.000 | 0 | 1 | 0.000000 | LIBUV:UV-TIMER-STOP
0.000 | 0.000 | 0 | 1 | 0.000000 | LIBUV:UV-IS-CLOSING
0.000 | 0.000 | 0 | 17 | 0.000000 | LIBUV:UV-TCP-INIT
0.000 | 0.000 | 0 | 2 | 0.000000 | CL-ASYNC::PROCESS-EVENT-LOOP-EXIT-CALLBACKS
0.000 | 0.000 | 0 | 16 | 0.000000 | CL-ASYNC::INIT-INCOMING-SOCKET
0.000 | 0.000 | 0 | 2 | 0.000000 | CL-ASYNC::CHECK-EVENT-UNFREED
0.000 | 0.000 | 544 | 17 | 0.000000 | CL-ASYNC::DO-CLOSE-TCP
0.000 | 0.000 | 0 | 1 | 0.000000 | (SETF CL-ASYNC::TCP-SERVER-CLOSED)
0.000 | 0.000 | 0 | 1 | 0.000000 | CL-ASYNC::TIMER-CB
0.000 | 0.000 | 0 | 16 | 0.000000 | CL-ASYNC::SOCKET-DIRECTION
0.000 | 0.000 | 0 | 1 | 0.000000 | CL-ASYNC::LOOP-EXIT-WALK-CB
0.000 | 0.000 | 0 | 2 | 0.000000 | CL-ASYNC::DO-CLOSE-LOOP
0.000 | 0.000 | 0 | 2 | 0.000000 | CL-ASYNC::CHECK-EVENT-LOOP-RUNNING
0.000 | 0.000 | 0 | 1 | 0.000000 | CL-ASYNC::TCP-SERVER-C
0.000 | 0.000 | 3,601,088 | 25,940 | 0.000000 | CL-ASYNC::TCP-READ-CB
0.000 | 0.000 | 0 | 1 | 0.000000 | CL-ASYNC::TIMER-CLOSE-CB
0.000 | 0.000 | 0 | 16 | 0.000000 | CL-ASYNC::TCP-SERVER-STREAM
0.000 | 0.000 | 0 | 16 | 0.000000 | CL-ASYNC::TCP-ACCEPT-CB
0.000 | 0.000 | 0 | 16 | 0.000000 | (SETF CL-ASYNC::SOCKET-CLOSING)
0.000 | 0.000 | 0 | 2 | 0.000000 | CL-ASYNC:EVENT-FREED
0.000 | 0.000 | 0 | 1 | 0.000000 | (SETF CL-ASYNC:EVENT-FREED)
0.000 | 0.000 | 0 | 1 | 0.000000 | CL-ASYNC:START-EVENT-LOOP
0.000 | 0.000 | 0 | 1 | 0.000000 | CL-ASYNC:ADD-EVENT
0.000 | 0.000 | 0 | 16 | 0.000000 | (SETF CL-ASYNC:SOCKET-CLOSED)
0.000 | 0.000 | 0 | 1 | 0.000000 | CL-ASYNC:CLOSE-TCP-SERVER
0.000 | 0.000 | 0 | 25,927 | 0.000000 | CL-ASYNC:SOCKET-DATA
0.000 | 0.000 | 0 | 155,562 | 0.000000 | CL-ASYNC:WRITE-SOCKET-DATA
0.000 | 0.000 | 0 | 1 | 0.000000 | CL-ASYNC:ADD-EVENT-LOOP-EXIT-CALLBACK
0.000 | 0.000 | 0 | 2 | 0.000000 | CL-ASYNC:EVENT-C
0.000 | 0.000 | 0 | 1 | 0.000000 | CL-ASYNC:FREE-EVENT
0.000 | 0.000 | 0 | 1 | 0.000000 | CL-ASYNC:DELAY
0.000 | 0.000 | 0 | 28 | 0.000000 | CL-ASYNC:CLOSE-SOCKET
0.000 | 0.000 | 0 | 1 | 0.000000 | CL-ASYNC:EVENT-FREED-P
0.000 | 0.000 | 0 | 16 | 0.000000 | CL-ASYNC-BASE:EVENT-BASE-NUM-CONNECTIONS-IN
0.000 | 0.000 | 0 | 16 | 0.000000 | (SETF CL-ASYNC-BASE:EVENT-BASE-NUM-CONNECTIONS-IN)
0.000 | 0.000 | 0 | 1 | 0.000000 | CL-ASYNC-BASE:EVENT-BASE-DEFAULT-EVENT-HANDLER
0.000 | 0.000 | 0 | 2 | 0.000000 | CL-ASYNC-BASE:EVENT-BASE-ID
0.000 | 0.000 | 0 | 24 | 0.000000 | CL-ASYNC-BASE:EVENT-BASE-C
0.000 | 0.000 | 0 | 3 | 0.000000 | CL-ASYNC-BASE:EVENT-BASE-EXIT-FUNCTIONS
0.000 | 0.000 | 32,752 | 3 | 0.000000 | (SETF CL-ASYNC-BASE:EVENT-BASE-EXIT-FUNCTIONS)
0.000 | 0.000 | 0 | 1 | 0.000000 | (SETF CL-ASYNC-BASE:EVENT-BASE-FUNCTION-REGISTRY)
0.000 | 0.000 | 0 | 1 | 0.000000 | (SETF CL-ASYNC-BASE:EVENT-BASE-DATA-REGISTRY)
-------------------------------------------------------------
3.426 | 0.049 | 278,666,272 | 4,875,443 | | Total
estimated total profiling overhead: 5.17 seconds
overhead estimation parameters:
8.000001e-9s/call, 1.0599999e-6s total profiling, 4.e-7s internal profiling
Metadata
Metadata
Assignees
Labels
No labels