Oak Performance II: Benchmarking Oak's HTTP server: Raw Data ============================================================ (Accompanying the blog post at https://oaklang.org/posts/http-perf/) Hammer script ------------- No server 6718req/s latency = 142.016µs (89-50004µs) 6724req/s latency = 141.704µs (87-53741µs) 6451req/s latency = 147.831µs (87-69941µs) 6611req/s latency = 143.96µs (89-31676µs) 6750req/s latency = 141.156µs (92-50222µs) 6742req/s latency = 141.548µs (91-55399µs) 6692req/s latency = 142.431µs (88-56517µs) 6339req/s latency = 150.287µs (87-54367µs) 6696req/s latency = 142.459µs (91-53376µs) 6405req/s latency = 149.098µs (90-55074µs) 7060req/s latency = 134.778µs (86-13571µs) 6782req/s latency = 140.211µs (94-2599µs) 5669req/s latency = 168.235µs (100-111634µs) 6658req/s latency = 142.789µs (95-717µs) 6095req/s latency = 157.027µs (88-99329µs) 6506req/s latency = 146.804µs (82-56791µs) Basic 3915req/s latency = 247.494µs (156-1143µs) 3808req/s latency = 254.986µs (156-1165µs) 3770req/s latency = 257.244µs (157-938µs) 3838req/s latency = 252.967µs (175-1002µs) 3861req/s latency = 251.656µs (160-916µs) 3830req/s latency = 253.388µs (165-968µs) 3952req/s latency = 245.748µs (171-790µs) 3866req/s latency = 251.421µs (169-1877µs) 3907req/s latency = 248.386µs (155-1094µs) 3963req/s latency = 245.039µs (166-839µs) 3711req/s latency = 261.403µs (172-900µs) 3924req/s latency = 247.317µs (163-1257µs) 3915req/s latency = 248.265µs (167-899µs) 3639req/s latency = 267.36µs (174-966µs) 3955req/s latency = 245.494µs (161-878µs) 3867req/s latency = 250.832µs (170-889µs) 3940req/s latency = 246.453µs (165-957µs) 3973req/s latency = 244.34µs (165-886µs) HTTP 1055req/s latency = 941.264µs (535-2250µs) 1064req/s latency = 932.992µs (574-2195µs) 1087req/s latency = 914.024µs (528-1617µs) 1091req/s latency = 910.304µs (555-1599µs) 1101req/s latency = 902.554µs (484-1719µs) 1086req/s latency = 913.787µs (542-1687µs) 1097req/s latency = 905.321µs (552-1735µs) 1088req/s latency = 913.132µs (529-1912µs) 1055req/s latency = 940.867µs (518-1675µs) 1088req/s latency = 913.01µs (545-1757µs) 1079req/s latency = 920.238µs (597-1637µs) 1092req/s latency = 908.966µs (532-1638µs) 1097req/s latency = 905.257µs (561-1763µs) 1096req/s latency = 906.088µs (558-1594µs) 1091req/s latency = 910.042µs (538-1807µs) 1082req/s latency = 917.211µs (538-1739µs) 1059req/s latency = 937.285µs (508-3655µs) 1037req/s latency = 957.048µs (553-2076µs) App 227req/s latency = 4384.724µs (3139-5838µs) 227req/s latency = 4384.276µs (3096-5589µs) 229req/s latency = 4338.252µs (2987-5435µs) 229req/s latency = 4342.978µs (3015-5363µs) 230req/s latency = 4333.286µs (2725-5280µs) 230req/s latency = 4325.749µs (2939-5490µs) 230req/s latency = 4335.377µs (3106-5568µs) 227req/s latency = 4378.838µs (3033-6405µs) 228req/s latency = 4371.026µs (3428-5043µs) 228req/s latency = 4368.926µs (3142-5423µs) 228req/s latency = 4357.096µs (2920-5607µs) 228req/s latency = 4360.162µs (3094-6196µs) 227req/s latency = 4393.237µs (3109-5545µs) 228req/s latency = 4374.812µs (2993-5667µs) 227req/s latency = 4380.697µs (3140-5361µs) 228req/s latency = 4364.956µs (3172-5892µs) 228req/s latency = 4369.389µs (3002-6638µs) 226req/s latency = 4406.96µs (2708-6286µs) Node.js 5720req/s latency = 167.236µs (91-1440µs) 5606req/s latency = 170.438µs (104-778µs) 5069req/s latency = 189.5µs (103-781µs) 5252req/s latency = 182.766µs (105-961µs) 5548req/s latency = 172.269µs (103-888µs) 5767req/s latency = 165.568µs (109-711µs) 5806req/s latency = 164.599µs (102-889µs) 5790req/s latency = 165.127µs (96-880µs) 5720req/s latency = 167.256µs (104-804µs) 5787req/s latency = 165.291µs (100-886µs) 5530req/s latency = 173.798µs (99-922µs) 5679req/s latency = 168.301µs (104-795µs) 5141req/s latency = 185.956µs (101-907µs) 5682req/s latency = 168.234µs (102-843µs) 5133req/s latency = 187.77µs (98-824µs) 5560req/s latency = 172.255µs (94-824µs) 5787req/s latency = 165.252µs (105-996µs) 5687req/s latency = 168.913µs (100-17281µs) 5716req/s latency = 167.027µs (106-766µs) 5703req/s latency = 167.408µs (103-1027µs) Autocannon ---------- Basic Running 30s test @ http://localhost:9090 100 connections ┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬───────┐ │ Stat │ 2.5% │ 50% │ 97.5% │ 99% │ Avg │ Stdev │ Max │ ├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼───────┤ │ Latency │ 5 ms │ 6 ms │ 7 ms │ 8 ms │ 5.66 ms │ 1.05 ms │ 39 ms │ └─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴───────┘ ┌───────────┬─────────┬─────────┬─────────┬─────────┬─────────┬────────┬─────────┐ │ Stat │ 1% │ 2.5% │ 50% │ 97.5% │ Avg │ Stdev │ Min │ ├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┼─────────┤ │ Req/Sec │ 14295 │ 14295 │ 16215 │ 16591 │ 16029.2 │ 549.29 │ 14293 │ ├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼────────┼─────────┤ │ Bytes/Sec │ 1.46 MB │ 1.46 MB │ 1.65 MB │ 1.69 MB │ 1.63 MB │ 56 kB │ 1.46 MB │ └───────────┴─────────┴─────────┴─────────┴─────────┴─────────┴────────┴─────────┘ Req/Bytes counts sampled once per second. # of samples: 30 481k requests in 30.04s, 49 MB read HTTP Running 30s test @ http://localhost:9090 100 connections ┌─────────┬───────┬───────┬───────┬───────┬──────────┬─────────┬───────┐ │ Stat │ 2.5% │ 50% │ 97.5% │ 99% │ Avg │ Stdev │ Max │ ├─────────┼───────┼───────┼───────┼───────┼──────────┼─────────┼───────┤ │ Latency │ 31 ms │ 32 ms │ 35 ms │ 35 ms │ 32.32 ms │ 0.83 ms │ 47 ms │ └─────────┴───────┴───────┴───────┴───────┴──────────┴─────────┴───────┘ ┌───────────┬────────┬────────┬────────┬────────┬─────────┬─────────┬────────┐ │ Stat │ 1% │ 2.5% │ 50% │ 97.5% │ Avg │ Stdev │ Min │ ├───────────┼────────┼────────┼────────┼────────┼─────────┼─────────┼────────┤ │ Req/Sec │ 2983 │ 2983 │ 3055 │ 3079 │ 3048.27 │ 26.92 │ 2982 │ ├───────────┼────────┼────────┼────────┼────────┼─────────┼─────────┼────────┤ │ Bytes/Sec │ 426 kB │ 426 kB │ 437 kB │ 440 kB │ 436 kB │ 3.83 kB │ 426 kB │ └───────────┴────────┴────────┴────────┴────────┴─────────┴─────────┴────────┘ Req/Bytes counts sampled once per second. # of samples: 30 92k requests in 30.04s, 13.1 MB read App Running 30s test @ http://localhost:9898 100 connections ┌─────────┬────────┬────────┬────────┬────────┬───────────┬─────────┬────────┐ │ Stat │ 2.5% │ 50% │ 97.5% │ 99% │ Avg │ Stdev │ Max │ ├─────────┼────────┼────────┼────────┼────────┼───────────┼─────────┼────────┤ │ Latency │ 145 ms │ 149 ms │ 156 ms │ 160 ms │ 149.13 ms │ 5.31 ms │ 239 ms │ └─────────┴────────┴────────┴────────┴────────┴───────────┴─────────┴────────┘ ┌───────────┬─────────┬─────────┬─────────┬─────────┬────────┬────────┬─────────┐ │ Stat │ 1% │ 2.5% │ 50% │ 97.5% │ Avg │ Stdev │ Min │ ├───────────┼─────────┼─────────┼─────────┼─────────┼────────┼────────┼─────────┤ │ Req/Sec │ 599 │ 599 │ 675 │ 697 │ 666.64 │ 25.97 │ 599 │ ├───────────┼─────────┼─────────┼─────────┼─────────┼────────┼────────┼─────────┤ │ Bytes/Sec │ 17.1 MB │ 17.1 MB │ 19.3 MB │ 19.9 MB │ 19 MB │ 742 kB │ 17.1 MB │ └───────────┴─────────┴─────────┴─────────┴─────────┴────────┴────────┴─────────┘ Req/Bytes counts sampled once per second. # of samples: 30 Node.js Running 30s test @ http://localhost:9090 100 connections ┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬───────┐ │ Stat │ 2.5% │ 50% │ 97.5% │ 99% │ Avg │ Stdev │ Max │ ├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼───────┤ │ Latency │ 2 ms │ 3 ms │ 6 ms │ 6 ms │ 3.12 ms │ 1.21 ms │ 38 ms │ └─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴───────┘ ┌───────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐ │ Stat │ 1% │ 2.5% │ 50% │ 97.5% │ Avg │ Stdev │ Min │ ├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ │ Req/Sec │ 22495 │ 22495 │ 28159 │ 28655 │ 27878.4 │ 1086.24 │ 22489 │ ├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ │ Bytes/Sec │ 3.78 MB │ 3.78 MB │ 4.73 MB │ 4.81 MB │ 4.68 MB │ 183 kB │ 3.78 MB │ └───────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┘ Req/Bytes counts sampled once per second. # of samples: 30 836k requests in 30.07s, 140 MB read