diff --git a/frameworks/fulmine/app.js b/frameworks/fulmine/app.js index 2dc4b98dd..11cf43c7a 100644 --- a/frameworks/fulmine/app.js +++ b/frameworks/fulmine/app.js @@ -29,6 +29,10 @@ if (cluster.isPrimary) { app.set('etag', false); const SERVER_HDR = { 'server': 'fulmine' }; + // built once: the crud read path spread SERVER_HDR into a new object on every request, which + // is two allocations per read on the busiest route this entry has + const CACHE_HIT_HDR = { 'server': 'fulmine', 'x-cache': 'HIT' }; + const CACHE_MISS_HDR = { 'server': 'fulmine', 'x-cache': 'MISS' }; // Dataset let datasetItems; @@ -60,6 +64,7 @@ if (cluster.isPrimary) { // CRUD cache. The sidecar Redis when the harness provides one: with one process per // core an in-process map would fragment the working set 64 ways and barely ever hit. // The cached value is the serialized body, so a HIT skips re-serialization too. + const CRUD_TTL_MS = 200; let redis; if (process.env.REDIS_URL) { try { @@ -68,7 +73,12 @@ if (cluster.isPrimary) { redis.on('error', () => {}); } catch (e) {} } - const CRUD_TTL_MS = 200; + // @redis/client with its server-assisted client-side cache was measured here and is not worth + // having: crud went from 352k to 211k rps, p99 from 21ms to 44ms, and the CPU this entry used + // *fell* from 4502% to 3237% with no failed request, so the processes were waiting rather than + // working. That is the shape of a bottleneck that moved into Redis: tracking makes it hold an + // invalidation table per key per client and push a message to all sixty-four of them whenever + // one writes, and this test writes on every cache miss. const crudCache = new Map(); const crudGet = (id) => { if (redis) return redis.get('crud:' + id); @@ -86,12 +96,19 @@ if (cluster.isPrimary) { crudCache.delete(id); }; - // one shape for the two body-carrying crud verbs, read the way the other POST routes read + // one shape for the two body-carrying crud verbs, read the way the other POST routes read. + // + // The chunks are kept as buffers and joined at the end rather than added to a string as they + // arrive. Adding them decodes each chunk on its own, so a character whose UTF-8 bytes are split + // across two chunks becomes a replacement character on both sides of the cut. Nothing complains: + // the body still parses, it just no longer says what was sent. Measured against express.json() + // on this shape, the two are the same speed, so the hand-rolled reader is kept only because it + // answers a bad body with the empty 400 the profile expects. function readJsonBody(req, cb) { - let body = ''; - req.on('data', chunk => body += chunk); + const chunks = []; + req.on('data', chunk => chunks.push(chunk)); req.on('end', () => { - try { cb(null, JSON.parse(body)); } catch (e) { cb(e); } + try { cb(null, JSON.parse(Buffer.concat(chunks).toString('utf8'))); } catch (e) { cb(e); } }); } @@ -230,7 +247,7 @@ if (cluster.isPrimary) { try { const cached = await crudGet(id); if (cached) { - return res.set({ ...SERVER_HDR, 'x-cache': 'HIT' }).type('application/json').send(cached); + return res.set(CACHE_HIT_HDR).type('application/json').send(cached); } const result = await pgPool.query({ name: 'crud-read', @@ -240,7 +257,7 @@ if (cluster.isPrimary) { if (result.rows.length === 0) return res.status(404).set(SERVER_HDR).end(); const json = JSON.stringify(itemShape(result.rows[0])); crudSet(id, json); - res.set({ ...SERVER_HDR, 'x-cache': 'MISS' }).type('application/json').send(json); + res.set(CACHE_MISS_HDR).type('application/json').send(json); } catch (e) { res.status(500).set(SERVER_HDR).type('application/json').send('{"error":"query failed"}'); } diff --git a/frameworks/fulmine/package.json b/frameworks/fulmine/package.json index a7b331ac4..183d49a26 100644 --- a/frameworks/fulmine/package.json +++ b/frameworks/fulmine/package.json @@ -2,7 +2,7 @@ "name": "httparena-fulmine", "private": true, "dependencies": { - "fulmine.js": "^5.2.0", + "fulmine.js": "^5.5.0", "pg": "^8.13.0", "pg-native": "^3.8.0", "ioredis": "^5.4.1" diff --git a/site/data/results/fulmine.json b/site/data/results/fulmine.json index 4f93bf977..cb05c2101 100644 --- a/site/data/results/fulmine.json +++ b/site/data/results/fulmine.json @@ -4,71 +4,71 @@ "api-16-1024": { "framework": "fulmine", "language": "JS", - "rps": 123624, - "avg_latency": "6.62ms", - "p99_latency": "44.70ms", - "cpu": "1511.1%", - "memory": "1.9GiB", + "rps": 129658, + "avg_latency": "6.14ms", + "p99_latency": "42.80ms", + "cpu": "1542.9%", + "memory": "1.2GiB", "connections": 1024, "threads": 64, "duration": "5s", "pipeline": 1, - "bandwidth": "630.93MB/s", - "input_bw": "6.96MB/s", - "reconnects": 370838, - "status_2xx": 1854364, + "bandwidth": "661.67MB/s", + "input_bw": "7.30MB/s", + "reconnects": 388853, + "status_2xx": 1944876, "status_3xx": 0, "status_4xx": 0, "status_5xx": 0, - "tpl_baseline": 695264, - "tpl_json": 695518, + "tpl_baseline": 729380, + "tpl_json": 729721, "tpl_db": 0, "tpl_upload": 0, "tpl_static": 0, - "tpl_async_db": 463581 + "tpl_async_db": 485774 }, "api-4-256": { "framework": "fulmine", "language": "JS", - "rps": 35750, - "avg_latency": "6.08ms", - "p99_latency": "30.80ms", - "cpu": "395.0%", - "memory": "500MiB", + "rps": 35639, + "avg_latency": "5.89ms", + "p99_latency": "31.30ms", + "cpu": "393.3%", + "memory": "425MiB", "connections": 256, "threads": 64, "duration": "5s", "pipeline": 1, - "bandwidth": "182.36MB/s", + "bandwidth": "181.83MB/s", "input_bw": "2.01MB/s", - "reconnects": 107272, - "status_2xx": 536260, + "reconnects": 106930, + "status_2xx": 534593, "status_3xx": 0, "status_4xx": 0, "status_5xx": 0, - "tpl_baseline": 201228, - "tpl_json": 201051, + "tpl_baseline": 200532, + "tpl_json": 200430, "tpl_db": 0, "tpl_upload": 0, "tpl_static": 0, - "tpl_async_db": 133981 + "tpl_async_db": 133631 }, "async-db-1024": { "framework": "fulmine", "language": "JS", - "rps": 226950, - "avg_latency": "3.92ms", - "p99_latency": "39.90ms", - "cpu": "5663.1%", - "memory": "6.9GiB", + "rps": 224285, + "avg_latency": "4.05ms", + "p99_latency": "20.00ms", + "cpu": "5942.1%", + "memory": "3.6GiB", "connections": 1024, "threads": 64, "duration": "5s", "pipeline": 1, - "bandwidth": "883.42MB/s", - "input_bw": "15.15MB/s", - "reconnects": 90689, - "status_2xx": 2269507, + "bandwidth": "872.77MB/s", + "input_bw": "14.97MB/s", + "reconnects": 89382, + "status_2xx": 2242851, "status_3xx": 0, "status_4xx": 0, "status_5xx": 0 @@ -76,19 +76,19 @@ "baseline-4096": { "framework": "fulmine", "language": "JS", - "rps": 1210412, + "rps": 1212009, "avg_latency": "3.38ms", - "p99_latency": "5.21ms", - "cpu": "6640.1%", - "memory": "5.9GiB", + "p99_latency": "4.54ms", + "cpu": "6776.3%", + "memory": "2.6GiB", "connections": 4096, "threads": 64, "duration": "5s", "pipeline": 1, - "bandwidth": "211.19MB/s", - "input_bw": "93.50MB/s", + "bandwidth": "211.45MB/s", + "input_bw": "93.62MB/s", "reconnects": 0, - "status_2xx": 6052062, + "status_2xx": 6060046, "status_3xx": 0, "status_4xx": 0, "status_5xx": 0 @@ -96,19 +96,19 @@ "baseline-512": { "framework": "fulmine", "language": "JS", - "rps": 1226235, - "avg_latency": "417us", - "p99_latency": "1.16ms", - "cpu": "6758.6%", - "memory": "5.9GiB", + "rps": 1230527, + "avg_latency": "415us", + "p99_latency": "1.04ms", + "cpu": "6816.6%", + "memory": "2.6GiB", "connections": 512, "threads": 64, "duration": "5s", "pipeline": 1, - "bandwidth": "213.95MB/s", - "input_bw": "94.72MB/s", + "bandwidth": "214.57MB/s", + "input_bw": "95.06MB/s", "reconnects": 0, - "status_2xx": 6131178, + "status_2xx": 6152639, "status_3xx": 0, "status_4xx": 0, "status_5xx": 0 @@ -116,19 +116,19 @@ "crud-4096": { "framework": "fulmine", "language": "JS", - "rps": 352481, - "avg_latency": "11.56ms", - "p99_latency": "21.20ms", - "cpu": "4502.0%", - "memory": "8.1GiB", + "rps": 357460, + "avg_latency": "11.41ms", + "p99_latency": "20.70ms", + "cpu": "4430.6%", + "memory": "8.0GiB", "connections": 4096, "threads": 64, "duration": "5s", "pipeline": 1, - "bandwidth": "138.64MB/s", - "input_bw": "30.25MB/s", - "reconnects": 23825, - "status_2xx": 5287216, + "bandwidth": "141.76MB/s", + "input_bw": "30.68MB/s", + "reconnects": 24824, + "status_2xx": 5361909, "status_3xx": 0, "status_4xx": 0, "status_5xx": 0 @@ -136,18 +136,18 @@ "echo-ws-16384": { "framework": "fulmine", "language": "JS", - "rps": 3568966, + "rps": 3577210, "avg_latency": "4.57ms", - "p99_latency": "9.04ms", - "cpu": "6477.4%", - "memory": "2.4GiB", + "p99_latency": "9.15ms", + "cpu": "6232.0%", + "memory": "2.5GiB", "connections": 16384, "threads": 64, "duration": "5s", "pipeline": 1, - "bandwidth": "24.34MB/s", + "bandwidth": "24.38MB/s", "reconnects": 0, - "status_2xx": 17844833, + "status_2xx": 17886053, "status_3xx": 0, "status_4xx": 0, "status_5xx": 0 @@ -155,18 +155,18 @@ "echo-ws-4096": { "framework": "fulmine", "language": "JS", - "rps": 3767961, - "avg_latency": "1.09ms", - "p99_latency": "2.31ms", - "cpu": "6357.6%", - "memory": "2.3GiB", + "rps": 3768590, + "avg_latency": "1.08ms", + "p99_latency": "2.27ms", + "cpu": "6547.5%", + "memory": "2.4GiB", "connections": 4096, "threads": 64, "duration": "5s", "pipeline": 1, - "bandwidth": "25.15MB/s", + "bandwidth": "25.19MB/s", "reconnects": 0, - "status_2xx": 18839805, + "status_2xx": 18842950, "status_3xx": 0, "status_4xx": 0, "status_5xx": 0 @@ -174,18 +174,18 @@ "echo-ws-512": { "framework": "fulmine", "language": "JS", - "rps": 3732298, + "rps": 3726934, "avg_latency": "136us", - "p99_latency": "348us", - "cpu": "6539.8%", + "p99_latency": "409us", + "cpu": "6467.6%", "memory": "2.3GiB", "connections": 512, "threads": 64, "duration": "5s", "pipeline": 1, - "bandwidth": "24.91MB/s", + "bandwidth": "24.88MB/s", "reconnects": 0, - "status_2xx": 18661491, + "status_2xx": 18634673, "status_3xx": 0, "status_4xx": 0, "status_5xx": 0 @@ -193,18 +193,18 @@ "echo-ws-limited-4096": { "framework": "fulmine", "language": "JS", - "rps": 2558298, - "avg_latency": "1.05ms", - "p99_latency": "2.87ms", - "cpu": "6231.7%", + "rps": 2564958, + "avg_latency": "1.06ms", + "p99_latency": "2.85ms", + "cpu": "6043.9%", "memory": "2.4GiB", "connections": 4096, "threads": 64, "duration": "5s", "pipeline": 1, - "bandwidth": "57.58MB/s", - "reconnects": 1279587, - "status_2xx": 12791493, + "bandwidth": "57.75MB/s", + "reconnects": 1281697, + "status_2xx": 12824793, "status_3xx": 0, "status_4xx": 0, "status_5xx": 0 @@ -212,18 +212,18 @@ "echo-ws-limited-512": { "framework": "fulmine", "language": "JS", - "rps": 2096400, - "avg_latency": "149us", - "p99_latency": "544us", - "cpu": "5614.2%", + "rps": 2089072, + "avg_latency": "147us", + "p99_latency": "531us", + "cpu": "5617.6%", "memory": "2.3GiB", "connections": 512, "threads": 64, "duration": "5s", "pipeline": 1, - "bandwidth": "47.17MB/s", - "reconnects": 1048221, - "status_2xx": 10482002, + "bandwidth": "47.01MB/s", + "reconnects": 1044563, + "status_2xx": 10445364, "status_3xx": 0, "status_4xx": 0, "status_5xx": 0 @@ -231,18 +231,18 @@ "echo-ws-pipeline-16384": { "framework": "fulmine", "language": "JS", - "rps": 23750396, - "avg_latency": "10.88ms", - "p99_latency": "14.90ms", - "cpu": "6374.6%", - "memory": "2.5GiB", + "rps": 23866108, + "avg_latency": "10.79ms", + "p99_latency": "14.60ms", + "cpu": "6339.2%", + "memory": "2.6GiB", "connections": 16384, "threads": 64, "duration": "5s", "pipeline": 16, - "bandwidth": "159.02MB/s", + "bandwidth": "159.80MB/s", "reconnects": 0, - "status_2xx": 118751984, + "status_2xx": 119330544, "status_3xx": 0, "status_4xx": 0, "status_5xx": 0 @@ -250,18 +250,18 @@ "echo-ws-pipeline-4096": { "framework": "fulmine", "language": "JS", - "rps": 24903491, - "avg_latency": "2.63ms", - "p99_latency": "5.29ms", - "cpu": "6608.8%", + "rps": 24928886, + "avg_latency": "2.62ms", + "p99_latency": "5.50ms", + "cpu": "6589.2%", "memory": "2.4GiB", "connections": 4096, "threads": 64, "duration": "5s", "pipeline": 16, - "bandwidth": "166.28MB/s", + "bandwidth": "166.45MB/s", "reconnects": 0, - "status_2xx": 124517456, + "status_2xx": 124644432, "status_3xx": 0, "status_4xx": 0, "status_5xx": 0 @@ -269,18 +269,18 @@ "echo-ws-pipeline-512": { "framework": "fulmine", "language": "JS", - "rps": 24928716, + "rps": 24949417, "avg_latency": "327us", - "p99_latency": "883us", - "cpu": "6811.8%", + "p99_latency": "848us", + "cpu": "6817.8%", "memory": "2.3GiB", "connections": 512, "threads": 64, "duration": "5s", "pipeline": 16, - "bandwidth": "166.38MB/s", + "bandwidth": "166.53MB/s", "reconnects": 0, - "status_2xx": 124643584, + "status_2xx": 124747088, "status_3xx": 0, "status_4xx": 0, "status_5xx": 0 @@ -288,19 +288,19 @@ "json-4096": { "framework": "fulmine", "language": "JS", - "rps": 1112194, - "avg_latency": "3.32ms", - "p99_latency": "10.10ms", - "cpu": "6441.4%", - "memory": "6.4GiB", + "rps": 1141097, + "avg_latency": "3.23ms", + "p99_latency": "9.76ms", + "cpu": "6649.7%", + "memory": "2.6GiB", "connections": 4096, "threads": 64, "duration": "5s", "pipeline": 1, - "bandwidth": "3.84GB/s", - "input_bw": "53.03MB/s", - "reconnects": 221113, - "status_2xx": 5560971, + "bandwidth": "3.94GB/s", + "input_bw": "54.41MB/s", + "reconnects": 226622, + "status_2xx": 5705485, "status_3xx": 0, "status_4xx": 0, "status_5xx": 0 @@ -308,19 +308,19 @@ "json-comp-16384": { "framework": "fulmine", "language": "JS", - "rps": 438511, - "avg_latency": "37.00ms", - "p99_latency": "89.30ms", - "cpu": "6331.1%", - "memory": "10.4GiB", + "rps": 438127, + "avg_latency": "36.98ms", + "p99_latency": "87.60ms", + "cpu": "6312.7%", + "memory": "10.6GiB", "connections": 16384, "threads": 64, "duration": "5s", "pipeline": 1, - "bandwidth": "684.72MB/s", - "input_bw": "32.62MB/s", - "reconnects": 80696, - "status_2xx": 2192558, + "bandwidth": "684.18MB/s", + "input_bw": "32.59MB/s", + "reconnects": 80813, + "status_2xx": 2190635, "status_3xx": 0, "status_4xx": 0, "status_5xx": 0 @@ -328,19 +328,19 @@ "json-comp-4096": { "framework": "fulmine", "language": "JS", - "rps": 428453, - "avg_latency": "9.54ms", - "p99_latency": "32.40ms", - "cpu": "6381.9%", - "memory": "9.1GiB", + "rps": 425219, + "avg_latency": "9.61ms", + "p99_latency": "31.50ms", + "cpu": "6419.6%", + "memory": "9.2GiB", "connections": 4096, "threads": 64, "duration": "5s", "pipeline": 1, - "bandwidth": "669.13MB/s", - "input_bw": "31.87MB/s", - "reconnects": 83941, - "status_2xx": 2142269, + "bandwidth": "663.98MB/s", + "input_bw": "31.63MB/s", + "reconnects": 83547, + "status_2xx": 2126097, "status_3xx": 0, "status_4xx": 0, "status_5xx": 0 @@ -348,19 +348,19 @@ "json-comp-512": { "framework": "fulmine", "language": "JS", - "rps": 426738, - "avg_latency": "1.20ms", - "p99_latency": "8.61ms", - "cpu": "6052.0%", - "memory": "7.7GiB", + "rps": 412239, + "avg_latency": "1.24ms", + "p99_latency": "7.18ms", + "cpu": "6227.9%", + "memory": "8.7GiB", "connections": 512, "threads": 64, "duration": "5s", "pipeline": 1, - "bandwidth": "666.51MB/s", - "input_bw": "31.74MB/s", - "reconnects": 85336, - "status_2xx": 2133693, + "bandwidth": "643.76MB/s", + "input_bw": "30.67MB/s", + "reconnects": 82462, + "status_2xx": 2061195, "status_3xx": 0, "status_4xx": 0, "status_5xx": 0 @@ -368,18 +368,18 @@ "json-tls-4096": { "framework": "fulmine", "language": "JS", - "rps": 1046604, - "avg_latency": "3.89ms", - "p99_latency": "48.53ms", - "cpu": "6583.8%", - "memory": "6.6GiB", + "rps": 1076647, + "avg_latency": "3.77ms", + "p99_latency": "42.11ms", + "cpu": "6586.0%", + "memory": "2.6GiB", "connections": 4096, "threads": 64, "duration": "5s", "pipeline": 1, - "bandwidth": "3.62GB", + "bandwidth": "3.72GB", "reconnects": 0, - "status_2xx": 5337756, + "status_2xx": 5489512, "status_3xx": 0, "status_4xx": 0, "status_5xx": 0 @@ -387,19 +387,19 @@ "limited-conn-4096": { "framework": "fulmine", "language": "JS", - "rps": 1100364, - "avg_latency": "3.71ms", + "rps": 1102548, + "avg_latency": "3.70ms", "p99_latency": "15.50ms", - "cpu": "6633.5%", - "memory": "7.6GiB", + "cpu": "6412.2%", + "memory": "2.7GiB", "connections": 4096, "threads": 64, "duration": "5s", "pipeline": 1, - "bandwidth": "191.99MB/s", - "input_bw": "85.00MB/s", - "reconnects": 549848, - "status_2xx": 5501821, + "bandwidth": "192.37MB/s", + "input_bw": "85.17MB/s", + "reconnects": 549730, + "status_2xx": 5512740, "status_3xx": 0, "status_4xx": 0, "status_5xx": 0 @@ -407,19 +407,19 @@ "limited-conn-512": { "framework": "fulmine", "language": "JS", - "rps": 1033273, - "avg_latency": "485us", - "p99_latency": "2.27ms", - "cpu": "6146.1%", - "memory": "7.5GiB", + "rps": 1032024, + "avg_latency": "486us", + "p99_latency": "2.19ms", + "cpu": "6147.7%", + "memory": "2.6GiB", "connections": 512, "threads": 64, "duration": "5s", "pipeline": 1, - "bandwidth": "180.28MB/s", - "input_bw": "79.82MB/s", - "reconnects": 516640, - "status_2xx": 5166368, + "bandwidth": "180.07MB/s", + "input_bw": "79.72MB/s", + "reconnects": 516022, + "status_2xx": 5160123, "status_3xx": 0, "status_4xx": 0, "status_5xx": 0 @@ -427,18 +427,18 @@ "pipelined-4096": { "framework": "fulmine", "language": "JS", - "rps": 7335952, - "avg_latency": "8.93ms", - "p99_latency": "11.80ms", - "cpu": "6548.7%", - "memory": "6.5GiB", + "rps": 7864864, + "avg_latency": "8.33ms", + "p99_latency": "10.60ms", + "cpu": "6569.7%", + "memory": "2.6GiB", "connections": 4096, "threads": 64, "duration": "5s", "pipeline": 16, - "bandwidth": "1.25GB/s", + "bandwidth": "1.34GB/s", "reconnects": 0, - "status_2xx": 36679760, + "status_2xx": 39324320, "status_3xx": 0, "status_4xx": 0, "status_5xx": 0 @@ -446,18 +446,18 @@ "pipelined-512": { "framework": "fulmine", "language": "JS", - "rps": 7378288, - "avg_latency": "1.11ms", - "p99_latency": "2.77ms", - "cpu": "6565.3%", - "memory": "6.0GiB", + "rps": 7896553, + "avg_latency": "1.04ms", + "p99_latency": "2.69ms", + "cpu": "6584.6%", + "memory": "2.5GiB", "connections": 512, "threads": 64, "duration": "5s", "pipeline": 16, - "bandwidth": "1.26GB/s", + "bandwidth": "1.35GB/s", "reconnects": 0, - "status_2xx": 36891440, + "status_2xx": 39482768, "status_3xx": 0, "status_4xx": 0, "status_5xx": 0 @@ -465,18 +465,18 @@ "static-1024": { "framework": "fulmine", "language": "JS", - "rps": 536370, - "avg_latency": "2.01ms", - "p99_latency": "24.01ms", - "cpu": "6506.6%", - "memory": "7.3GiB", + "rps": 543570, + "avg_latency": "1.98ms", + "p99_latency": "23.95ms", + "cpu": "6509.7%", + "memory": "3.9GiB", "connections": 1024, "threads": 64, "duration": "5s", "pipeline": 1, - "bandwidth": "8.23GB", + "bandwidth": "8.34GB", "reconnects": 0, - "status_2xx": 2735556, + "status_2xx": 2772288, "status_3xx": 0, "status_4xx": 0, "status_5xx": 0 @@ -484,18 +484,18 @@ "static-4096": { "framework": "fulmine", "language": "JS", - "rps": 579762, - "avg_latency": "7.12ms", - "p99_latency": "48.26ms", - "cpu": "6506.1%", - "memory": "7.4GiB", + "rps": 588146, + "avg_latency": "7.00ms", + "p99_latency": "39.41ms", + "cpu": "6545.6%", + "memory": "7.3GiB", "connections": 4096, "threads": 64, "duration": "5s", "pipeline": 1, - "bandwidth": "8.89GB", + "bandwidth": "9.02GB", "reconnects": 0, - "status_2xx": 2956429, + "status_2xx": 2999266, "status_3xx": 0, "status_4xx": 0, "status_5xx": 0 @@ -503,18 +503,18 @@ "static-6800": { "framework": "fulmine", "language": "JS", - "rps": 558317, - "avg_latency": "12.26ms", - "p99_latency": "83.82ms", - "cpu": "6511.6%", - "memory": "8.2GiB", + "rps": 567798, + "avg_latency": "12.10ms", + "p99_latency": "60.03ms", + "cpu": "6487.7%", + "memory": "7.6GiB", "connections": 6800, "threads": 64, "duration": "5s", "pipeline": 1, - "bandwidth": "8.56GB", + "bandwidth": "8.71GB", "reconnects": 0, - "status_2xx": 2848118, + "status_2xx": 2896595, "status_3xx": 0, "status_4xx": 0, "status_5xx": 0 @@ -522,19 +522,19 @@ "upload-256": { "framework": "fulmine", "language": "JS", - "rps": 2137, - "avg_latency": "116.17ms", - "p99_latency": "917.40ms", - "cpu": "6038.0%", + "rps": 2129, + "avg_latency": "116.07ms", + "p99_latency": "922.30ms", + "cpu": "6107.8%", "memory": "7.1GiB", "connections": 256, "threads": 64, "duration": "5s", "pipeline": 1, - "bandwidth": "393.24KB/s", - "input_bw": "16.95GB/s", - "reconnects": 2117, - "status_2xx": 10711, + "bandwidth": "391.83KB/s", + "input_bw": "16.89GB/s", + "reconnects": 2109, + "status_2xx": 10667, "status_3xx": 0, "status_4xx": 0, "status_5xx": 0 @@ -542,19 +542,19 @@ "upload-32": { "framework": "fulmine", "language": "JS", - "rps": 2041, - "avg_latency": "15.64ms", - "p99_latency": "91.70ms", - "cpu": "3071.1%", - "memory": "6.8GiB", + "rps": 2024, + "avg_latency": "15.75ms", + "p99_latency": "94.40ms", + "cpu": "2997.7%", + "memory": "6.6GiB", "connections": 32, "threads": 64, "duration": "5s", "pipeline": 1, - "bandwidth": "375.00KB/s", - "input_bw": "16.19GB/s", - "reconnects": 2040, - "status_2xx": 10205, + "bandwidth": "371.89KB/s", + "input_bw": "16.05GB/s", + "reconnects": 2022, + "status_2xx": 10120, "status_3xx": 0, "status_4xx": 0, "status_5xx": 0