Skip to content

RPCLoad Tool

This is a hacked up version of hey that, instead of HTTP load, generates RPC load by using the sigsci-module-golang module as well as parts of the rule simulator. The load is generated against a running sigsci-agent.

Usage

First, you need to run a sigaci-agent. If you are just testing RPC performance, then you should minimize the inspection impact on performance and run stanalone without rules:

sigsci-agent --debug-standalone=7 --rpc-address=/tmp/rpcload_bench

Next apply load by running the rpcload tool against the same rpc-address as the agent under test:

go run tools/rpcload/rpcload.go -c 10 -dur 30s /tmp/rpcload_bench

Usage (go run tools/rpcload/rpcload.go):

Usage of rpcload:
  -c int
        Concurrent requests (default 5)
  -client string
        Client IP address (default "1.2.3.4")
  -cpus int
        CPU cores to utilize (default 8)
  -ct string
        Request content type
  -data string
        Request body data
  -dur duration
        Test duration (1m, 90s, etc.)
  -httptest.serve string
        if non-empty, httptest.NewServer serves on this address and blocks
  -m string
        Request method (default "GET")
  -n int
        Number of requests (default 10000000)
  -rps float
        Rate - HTTP transactions per second
  -s int
        Response HTTP status code (default 200)
  -t int
        Timeout in milliseconds (default 100)
  -uri string
        Request uri (default "http://rpcload.sigsci.in/rpcload")

Results

Results will look something like this

HTTP Transaction Summary:
  Total:  30.0062068 secs
  Slowest:  0.0214525 secs
  Fastest:  0.0002746 secs
  Average:  0.0009901 secs
  Requests/sec:  10065.1842572

  Total data:  3020180 bytes
  Size/request:  10 bytes


Details:

  Transactions (302018 avg=0.0009901 secs)
    0.0002746 secs [         1] |
    0.0023924 secs [    301207] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
    0.0045102 secs [       708] |
    0.0066280 secs [        45] |
    0.0087458 secs [        31] |
    0.0108636 secs [        10] |
    0.0129814 secs [         6] |
    0.0150992 secs [         7] |
    0.0172170 secs [         1] |
    0.0193347 secs [         1] |
    0.0214525 secs [         1] |

     10% in 0.0007356 secs
     25% in 0.0008468 secs
     50% in 0.0009533 secs
     75% in 0.0010815 secs
     90% in 0.0012775 secs
     95% in 0.0014523 secs
     99% in 0.0018932 secs
    100% in 0.0214525 secs

  ModuleInit 10 avg=0.0006564 secs
    0.0003835 secs [         1] |■■■■■■■■■■■■■■■■■■■■
    0.0004622 secs [         2] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
    0.0005410 secs [         0] |
    0.0006198 secs [         2] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
    0.0006986 secs [         1] |■■■■■■■■■■■■■■■■■■■■
    0.0007773 secs [         2] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
    0.0008561 secs [         0] |
    0.0009349 secs [         1] |■■■■■■■■■■■■■■■■■■■■
    0.0010136 secs [         0] |
    0.0010924 secs [         0] |
    0.0011712 secs [         1] |■■■■■■■■■■■■■■■■■■■■

     10% in 0.0003835 secs
     25% in 0.0004384 secs
     50% in 0.0006157 secs
     75% in 0.0007082 secs
     90% in 0.0009271 secs
     95% in 0.0011712 secs
     99% in 0.0011712 secs
    100% in 0.0011712 secs

  PreRequest 302018 avg=0.0009685 secs
    0.0002589 secs [         1] |
    0.0023747 secs [    301240] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
    0.0044905 secs [       679] |
    0.0066063 secs [        43] |
    0.0087221 secs [        30] |
    0.0108379 secs [        10] |
    0.0129537 secs [         5] |
    0.0150695 secs [         7] |
    0.0171853 secs [         1] |
    0.0193011 secs [         1] |
    0.0214169 secs [         1] |

     10% in 0.0007166 secs
     25% in 0.0008263 secs
     50% in 0.0009319 secs
     75% in 0.0010593 secs
     90% in 0.0012533 secs
     95% in 0.0014276 secs
     99% in 0.0018623 secs
    100% in 0.0214169 secs

HTTP Status Distribution:
  [200] 302018 responses

WAF Response Distribution:
  [200] 302018 responses