Skip to content

[uv] Feedback about the performance #98

@fukamachi

Description

@fukamachi

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

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions