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