Skip to content

Commit 50687fa

Browse files
authored
Merge pull request #566 from MDA2AV/reso577
udpate results
2 parents 91dc5ba + 722ecf7 commit 50687fa

65 files changed

Lines changed: 6278 additions & 3058 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

frameworks/flask/gunicorn_conf.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,9 @@
1313
workers = _WRK_COUNT
1414
keepalive = 120
1515
loglevel = 'critical'
16-
accesslog = "-"
16+
accesslog = None
1717
errorlog = "-"
18+
disable_redirect_access_to_syslog = True
1819
pidfile = "gunicorn.pid"
1920
worker_class = "sync"
2021

frameworks/flask/gunicorn_conf_ssl.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,9 @@
1313
workers = _WRK_COUNT
1414
keepalive = 120
1515
loglevel = 'critical'
16-
accesslog = "-"
16+
accesslog = None
1717
errorlog = "-"
18+
disable_redirect_access_to_syslog = True
1819
pidfile = "gunicorn_ssl.pid"
1920
worker_class = "sync"
2021

site/content/docs/scoring/composite-score.md

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -111,9 +111,11 @@ CPU efficiency was intentionally dropped: a framework that leaves CPU on the tab
111111
For each profile, compute the efficiency ratio for every framework:
112112

113113
```
114-
memEfficiency = rps / memoryMB
114+
memEfficiency = sqrt(rps) / memoryMB
115115
```
116116

117+
Why `sqrt(rps)` instead of `rps`? A plain `rps / MB` ratio double-counts throughput: high-rps frameworks would win both `rpsScore` *and* `memScore` because `rps` dominates the ratio. Taking the square root dampens rps to log-scale — it still matters (a dead framework shouldn't win "efficiency"), but memory can now actually move the needle.
118+
117119
Normalize against the best efficiency in that profile:
118120

119121
```
@@ -130,19 +132,19 @@ With the toggle on, per-profile scores range 0–150 (up to 100 from throughput,
130132

131133
### Example
132134

133-
| Framework | RPS | Mem (MB) | rps/MB |
135+
| Framework | RPS | Mem (MB) | sqrt(rps)/MB |
134136
|---|---|---|---|
135-
| A | 500,000 | 50 | 10,000 |
136-
| B | 100,000 | 20 | 5,000 |
137+
| A | 500,000 | 50 | 14.14 |
138+
| B | 100,000 | 20 | 15.81 |
137139

138140
- RPS scores: A = 100, B = 20
139-
- Memory efficiency scores: A = 100 (best), B = 50
141+
- Memory efficiency scores: A = 89.4, B = 100 (best)
140142

141143
With the memory toggle on:
142-
- A: `100 + 0.5 × 100 = 150.0`
143-
- B: `20 + 0.5 × 50 = 45.0`
144+
- A: `100 + 0.5 × 89.4 = 144.7`
145+
- B: `20 + 0.5 × 100 = 70.0`
144146

145-
A leads on both axes and pulls the maximum bonus; B picks up a partial bonus for its lower absolute memory footprint but its 5× throughput deficit still dominates.
147+
B actually wins the memory term despite A's 5× throughput advantage, because `sqrt(rps)` only gives A a √5 ≈ 2.24× boost in the numerator — not enough to beat B's 2.5× memory savings. A still wins overall thanks to its raw throughput lead, but B's lean memory footprint is now rewarded meaningfully instead of being drowned out.
146148

147149
## Engine-level implementations
148150

site/data/api-16-1024.json

Lines changed: 62 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,32 @@
152152
"tpl_static": 0,
153153
"tpl_async_db": 333101
154154
},
155+
{
156+
"framework": "fastapi",
157+
"language": "Python",
158+
"rps": 18677,
159+
"avg_latency": "54.63ms",
160+
"p99_latency": "190.40ms",
161+
"cpu": "1585.1%",
162+
"memory": "1.5GiB",
163+
"connections": 1024,
164+
"threads": 64,
165+
"duration": "5s",
166+
"pipeline": 1,
167+
"bandwidth": "95.74MB/s",
168+
"input_bw": "1.05MB/s",
169+
"reconnects": 55832,
170+
"status_2xx": 280158,
171+
"status_3xx": 0,
172+
"status_4xx": 0,
173+
"status_5xx": 0,
174+
"tpl_baseline": 104850,
175+
"tpl_json": 104941,
176+
"tpl_db": 0,
177+
"tpl_upload": 0,
178+
"tpl_static": 0,
179+
"tpl_async_db": 70367
180+
},
155181
{
156182
"framework": "fastpysgi-asgi",
157183
"language": "Python",
@@ -204,6 +230,32 @@
204230
"tpl_static": 0,
205231
"tpl_async_db": 208403
206232
},
233+
{
234+
"framework": "flask",
235+
"language": "Python",
236+
"rps": 17096,
237+
"avg_latency": "59.63ms",
238+
"p99_latency": "64.10ms",
239+
"cpu": "1501.4%",
240+
"memory": "916MiB",
241+
"connections": 1024,
242+
"threads": 64,
243+
"duration": "5s",
244+
"pipeline": 1,
245+
"bandwidth": "87.25MB/s",
246+
"input_bw": "985.02KB/s",
247+
"reconnects": 256454,
248+
"status_2xx": 256445,
249+
"status_3xx": 0,
250+
"status_4xx": 0,
251+
"status_5xx": 0,
252+
"tpl_baseline": 96111,
253+
"tpl_json": 96224,
254+
"tpl_db": 0,
255+
"tpl_upload": 0,
256+
"tpl_static": 0,
257+
"tpl_async_db": 64109
258+
},
207259
{
208260
"framework": "frankenphp-trueasync",
209261
"language": "PHP",
@@ -516,28 +568,28 @@
516568
{
517569
"framework": "ring-http-exchange",
518570
"language": "Clojure",
519-
"rps": 74549,
571+
"rps": 74450,
520572
"avg_latency": "13.59ms",
521-
"p99_latency": "308.50ms",
522-
"cpu": "1570.0%",
523-
"memory": "5.2GiB",
573+
"p99_latency": "69.20ms",
574+
"cpu": "1445.9%",
575+
"memory": "4.4GiB",
524576
"connections": 1024,
525577
"threads": 64,
526578
"duration": "5s",
527579
"pipeline": 1,
528-
"bandwidth": "377.91MB/s",
580+
"bandwidth": "376.37MB/s",
529581
"input_bw": "4.19MB/s",
530-
"reconnects": 223418,
531-
"status_2xx": 1118236,
582+
"reconnects": 223419,
583+
"status_2xx": 1116762,
532584
"status_3xx": 0,
533585
"status_4xx": 0,
534586
"status_5xx": 0,
535-
"tpl_baseline": 416836,
536-
"tpl_json": 420907,
587+
"tpl_baseline": 418263,
588+
"tpl_json": 419115,
537589
"tpl_db": 0,
538590
"tpl_upload": 0,
539591
"tpl_static": 0,
540-
"tpl_async_db": 280490
592+
"tpl_async_db": 279382
541593
},
542594
{
543595
"framework": "roda",

site/data/api-4-256.json

Lines changed: 64 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,32 @@
152152
"tpl_static": 0,
153153
"tpl_async_db": 138968
154154
},
155+
{
156+
"framework": "fastapi",
157+
"language": "Python",
158+
"rps": 7634,
159+
"avg_latency": "33.51ms",
160+
"p99_latency": "116.40ms",
161+
"cpu": "399.8%",
162+
"memory": "495MiB",
163+
"connections": 256,
164+
"threads": 64,
165+
"duration": "5s",
166+
"pipeline": 1,
167+
"bandwidth": "39.13MB/s",
168+
"input_bw": "439.85KB/s",
169+
"reconnects": 22896,
170+
"status_2xx": 114523,
171+
"status_3xx": 0,
172+
"status_4xx": 0,
173+
"status_5xx": 0,
174+
"tpl_baseline": 42884,
175+
"tpl_json": 42988,
176+
"tpl_db": 0,
177+
"tpl_upload": 0,
178+
"tpl_static": 0,
179+
"tpl_async_db": 28651
180+
},
155181
{
156182
"framework": "fastpysgi-asgi",
157183
"language": "Python",
@@ -204,6 +230,32 @@
204230
"tpl_static": 0,
205231
"tpl_async_db": 73673
206232
},
233+
{
234+
"framework": "flask",
235+
"language": "Python",
236+
"rps": 6328,
237+
"avg_latency": "40.32ms",
238+
"p99_latency": "64.00ms",
239+
"cpu": "366.7%",
240+
"memory": "268MiB",
241+
"connections": 256,
242+
"threads": 64,
243+
"duration": "5s",
244+
"pipeline": 1,
245+
"bandwidth": "32.29MB/s",
246+
"input_bw": "364.60KB/s",
247+
"reconnects": 94931,
248+
"status_2xx": 94932,
249+
"status_3xx": 0,
250+
"status_4xx": 0,
251+
"status_5xx": 0,
252+
"tpl_baseline": 35597,
253+
"tpl_json": 35620,
254+
"tpl_db": 0,
255+
"tpl_upload": 0,
256+
"tpl_static": 0,
257+
"tpl_async_db": 23715
258+
},
207259
{
208260
"framework": "frankenphp-trueasync",
209261
"language": "PHP",
@@ -516,28 +568,28 @@
516568
{
517569
"framework": "ring-http-exchange",
518570
"language": "Clojure",
519-
"rps": 31785,
520-
"avg_latency": "7.93ms",
521-
"p99_latency": "118.10ms",
522-
"cpu": "393.4%",
523-
"memory": "1.6GiB",
571+
"rps": 32506,
572+
"avg_latency": "7.49ms",
573+
"p99_latency": "28.60ms",
574+
"cpu": "385.3%",
575+
"memory": "874MiB",
524576
"connections": 256,
525577
"threads": 64,
526578
"duration": "5s",
527579
"pipeline": 1,
528-
"bandwidth": "160.66MB/s",
529-
"input_bw": "1.79MB/s",
530-
"reconnects": 95316,
531-
"status_2xx": 476775,
580+
"bandwidth": "164.22MB/s",
581+
"input_bw": "1.83MB/s",
582+
"reconnects": 97568,
583+
"status_2xx": 487594,
532584
"status_3xx": 0,
533585
"status_4xx": 0,
534586
"status_5xx": 0,
535-
"tpl_baseline": 178603,
536-
"tpl_json": 178540,
587+
"tpl_baseline": 182840,
588+
"tpl_json": 182943,
537589
"tpl_db": 0,
538590
"tpl_upload": 0,
539591
"tpl_static": 0,
540-
"tpl_async_db": 119632
592+
"tpl_async_db": 121808
541593
},
542594
{
543595
"framework": "roda",

site/data/async-db-1024.json

Lines changed: 49 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,26 @@
116116
"status_4xx": 0,
117117
"status_5xx": 0
118118
},
119+
{
120+
"framework": "fastapi",
121+
"language": "Python",
122+
"rps": 54572,
123+
"avg_latency": "18.66ms",
124+
"p99_latency": "152.90ms",
125+
"cpu": "6230.0%",
126+
"memory": "5.0GiB",
127+
"connections": 1024,
128+
"threads": 64,
129+
"duration": "5s",
130+
"pipeline": 1,
131+
"bandwidth": "205.07MB/s",
132+
"input_bw": "3.64MB/s",
133+
"reconnects": 21345,
134+
"status_2xx": 545720,
135+
"status_3xx": 0,
136+
"status_4xx": 0,
137+
"status_5xx": 0
138+
},
119139
{
120140
"framework": "fastpysgi-asgi",
121141
"language": "Python",
@@ -156,6 +176,26 @@
156176
"status_4xx": 0,
157177
"status_5xx": 0
158178
},
179+
{
180+
"framework": "flask",
181+
"language": "Python",
182+
"rps": 42384,
183+
"avg_latency": "23.88ms",
184+
"p99_latency": "25.70ms",
185+
"cpu": "5346.6%",
186+
"memory": "3.3GiB",
187+
"connections": 1024,
188+
"threads": 64,
189+
"duration": "5s",
190+
"pipeline": 1,
191+
"bandwidth": "163.19MB/s",
192+
"input_bw": "2.83MB/s",
193+
"reconnects": 423841,
194+
"status_2xx": 423842,
195+
"status_3xx": 0,
196+
"status_4xx": 0,
197+
"status_5xx": 0
198+
},
159199
{
160200
"framework": "Fletch",
161201
"language": "Dart",
@@ -416,19 +456,19 @@
416456
{
417457
"framework": "ring-http-exchange",
418458
"language": "Clojure",
419-
"rps": 69314,
420-
"avg_latency": "14.55ms",
421-
"p99_latency": "84.10ms",
422-
"cpu": "6126.6%",
423-
"memory": "13.1GiB",
459+
"rps": 70611,
460+
"avg_latency": "14.14ms",
461+
"p99_latency": "133.40ms",
462+
"cpu": "6348.1%",
463+
"memory": "20.3GiB",
424464
"connections": 1024,
425465
"threads": 64,
426466
"duration": "5s",
427467
"pipeline": 1,
428-
"bandwidth": "266.01MB/s",
429-
"input_bw": "4.63MB/s",
430-
"reconnects": 27495,
431-
"status_2xx": 693145,
468+
"bandwidth": "271.02MB/s",
469+
"input_bw": "4.71MB/s",
470+
"reconnects": 27854,
471+
"status_2xx": 706119,
432472
"status_3xx": 0,
433473
"status_4xx": 0,
434474
"status_5xx": 0

0 commit comments

Comments
 (0)