Appearance
Performance and capacity
How much set-top box traffic Ministra handles, and what it costs to route that traffic through Mintrix. Measured on 2026-10-10 with simulated MAG boxes against Ministra's box API (load.php).
Ministra ceiling
~160req/s
Box API, all paths limited by Ministra itself
Gateway cost per call
+14ms
Through the Mintrix gateway, light load
Idle boxes at the ceiling
~19kboxes
One watchdog poll every 120 s; ~10k comfortable
Reboot storm
~20boots/s
5,000 boxes back in about 4–5 minutes
In short
What set-top boxes ask of Ministra at evening peak, and after a power cut, against the most Ministra handled in this test:
10,000devices!Fine, little headroom4,000 boxes open at peak
67req/s
evening peak · 42%
147req/s
after a power cut · 92%
160 req/s
20,000devices✕Over capacity8,000 boxes open at peak
133req/s
evening peak · 83%
293req/s
after a power cut · 183%
160 req/s
50,000devices✕Over capacity20,000 boxes open at peak
333req/s
evening peak · 208%
733req/s
after a power cut · 458%
160 req/s
Evening peakPower-cut recovery on topMinistra on the test machine (160 req/s)
The numbers as a table
| Devices | Evening peak | After a power cut | Share of Ministra's ceiling here (~160 req/s) |
|---|---|---|---|
| 10,000 | ~67 req/s | ~147 req/s | Fine: under half at peak, close to the ceiling while boxes come back |
| 20,000 | ~133 req/s | ~293 req/s | The peak fits with little room; after a power cut Ministra is overloaded until the boxes are back |
| 50,000 | ~333 req/s | ~733 req/s | Over capacity: the peak alone is twice the ceiling (see below) |
Ministra is the part that runs out first: it topped out at about 160 requests a second whichever way the boxes reached it, and routing them through Mintrix does not lower that. Mintrix's own box API carried about 420 requests a second in its test.
These are relative numbers
The test ran on one Apple M2 Max (12 cores) with Docker Desktop, which is slower than a Linux server, and the test portal was lighter than a real one. Use the comparison between paths as is, and the sizing as a starting point; for your own capacity, run the same test on your server.
What was compared
Three ways for a box to reach Ministra:
AAgent pass-throughRecommended default
BoxMintrix agentMinistra
- Boxes use the Mintrix domain
- The gateway never sees the traffic
- No measurable cost
BMintrix gatewayOnly with a reason
BoxMintrix agentGatewayMinistra
- Mintrix can check or change every request
- +14 ms per call, a quarter to a third less throughput at light load
- TV stops when Mintrix is down
CHybridFor box-level control
BoxMintrix agentGateway for handshake and get_profileMinistra
- The agent picks the calls by their action parameter
- Mintrix can refuse a box at sign-in
- Everything else passes straight through
Video never passes through Mintrix in any of these: create_link hands the box a stream URL on the streaming server, and the box plays from there.
Results
Every simulated box has its own MAC (300 active devices) and signs in with an administrator's debug key, so Ministra serves it like a real box.
- Boot storm: each box runs a boot session again and again, back to back:
handshake,get_profile,get_localization,get_genres,get_all_channels,get_ordered_listand the EPG. This is the load after a power cut. - Idle boxes: each box only sends the watchdog poll (
get_events), again and again, to find the limit. A real idle box sends one every 120 seconds.
Ministra directlyAgent pass-throughMintrix gatewayrequests per second, higher is better
1 box
Direct37 req/s
Agent37 req/s
Gateway24 req/s
10 boxes
Direct143 req/s
Agent150 req/s
Gateway107 req/s
50 boxes
Direct138 req/s
Agent134 req/s
Gateway124 req/s
100 boxes
Direct108 req/s
Agent101 req/s
Gateway126 req/s
What it shows
Ministra is the limit
Ministra tops out at about 140–175 requests per second here, whichever path is used. Past that it slows down for everyone, and the slowest requests take 7–20 seconds.
- The agent pass-through costs nothing. At normal load it matches direct access. Overloaded, its median is slightly slower but its slowest requests are much faster.
- The Mintrix gateway adds about 14 ms per call when load is light: about 100 ms per box boot, which nobody notices.
- Overloaded, the gateway does better than direct access. The gateway runs 20 workers, so no more than 20 requests reach Ministra at once. Ministra stays efficient and the 20-second waits disappear. Capping Ministra's own Apache workers gives the same protection without the gateway.
Per call, one box booting
| Call | Ministra directly | Through the gateway | Added |
|---|---|---|---|
handshake | 20 ms | 34 ms | +14 ms |
get_profile | 54 ms | 69 ms | +15 ms |
get_localization | 19 ms | 34 ms | +15 ms |
get_genres | 21 ms | 36 ms | +15 ms |
get_all_channels | 22 ms | 36 ms | +14 ms |
get_ordered_list | 22 ms | 36 ms | +14 ms |
| EPG | 24 ms | 38 ms | +14 ms |
get_profile is the most expensive call: it reads and updates the device.
All numbers
Median response time, with the slowest 1% (p99) in brackets. No run had errors.
Boot storm
| Boxes | Ministra directly | Agent pass-through | Mintrix gateway |
|---|---|---|---|
| 1 | 37 req/s · 22 ms (71 ms) | 37 req/s · 22 ms (64 ms) | 24 req/s · 36 ms (79 ms) |
| 10 | 143 req/s · 56 ms (164 ms) | 150 req/s · 55 ms (153 ms) | 107 req/s · 78 ms (211 ms) |
| 50 | 138 req/s · 283 ms (3.2 s) | 134 req/s · 303 ms (1.0 s) | 124 req/s · 342 ms (858 ms) |
| 100 | 108 req/s · 695 ms (7.1 s) | 101 req/s · 813 ms (2.6 s) | 126 req/s · 677 ms (1.6 s) |
Idle boxes
| Boxes | Ministra directly | Agent pass-through | Mintrix gateway |
|---|---|---|---|
| 50 | 173 req/s · 283 ms (446 ms) | 178 req/s · 279 ms (412 ms) | 161 req/s · 297 ms (451 ms) |
| 200 | 139 req/s · 958 ms (20.9 s) | 127 req/s · 1.5 s (2.4 s) | 154 req/s · 1.2 s (1.8 s) |
Sizing
| Situation | Load | On the test machine |
|---|---|---|
| Idle boxes | One watchdog poll per box every 120 s: 10,000 boxes ≈ 83 req/s | About 19,000 boxes at the limit, 10,000 comfortably |
| Reboot storm | About 7 calls per boot here, 10–15 on a real box | About 20 boots per second: 1,000 boxes back in a minute, 5,000 in 4–5 minutes |
| Through the gateway | 15–18 boots per second | Plan for a quarter less during reboot storms |
Plan for the reboot storm, not the idle load
Idle boxes are a light, steady load. After a power cut every box boots at once, and that is where Ministra runs out of room first.
How much traffic boxes make
While a box is on, it asks Ministra:
| How often | Requests a minute | |
|---|---|---|
Watchdog poll (get_events) | Every 120 seconds | 0.5 |
| Switching channel: the play link and the channel's EPG | About every 5 minutes | 0.4 |
| Browsing the channel list and the guide | Now and then | 0.1 |
| Per open box | about 1 |
At evening peak, about 40% of devices are open. After a power cut, the boxes that were on boot again within about ten minutes, about 12 calls each, on top of the peak.
| Devices | Open at peak | Peak | Power cut on top | Total |
|---|---|---|---|---|
| 10,000 | 4,000 | 67/s | 80/s | 147/s |
| 20,000 | 8,000 | 133/s | 160/s | 293/s |
| 50,000 | 20,000 | 333/s | 400/s | 733/s |
What to expect
- Up to about 10,000 devices, one Ministra like the one tested carries the evening peak with room to spare. After a power cut it runs close to its ceiling for a few minutes, and boxes take a little longer to start.
- Around 20,000 devices, the evening peak fits with little room, but a power cut does not: Ministra is overloaded until the boxes are back, and without a cap its slowest requests take 7–20 seconds. Cap Ministra's Apache workers, or let boxes reach it through the Mintrix gateway, which kept the slowest requests under 2 seconds when this test overloaded Ministra.
- Around 50,000 devices, the evening peak alone is about twice what Ministra handled here. Plan more processor cores for Ministra, on a server of its own, and measure it with the test below before moving boxes over.
- A real portal is heavier than the test portal, with token checks, full channel lists and EPG, so expect these limits to come somewhat lower.
Limits of this test
- Lighter than a real portal. The debug key skips the per-request token check, and the test devices see one channel with no EPG, so responses are small. Expect somewhat lower numbers with a full channel list.
- Channel changes not measured.
create_linkneeds a channel with temporary links set up; the test portal had none. - One machine. Ministra and Mintrix shared the same 12 cores. On separate servers, Mintrix adds a network hop but no longer competes with Ministra for CPU.
- The traffic model. The watchdog interval is exact; how often viewers switch channels and browse is an estimate, and your viewers may differ.
Run it on your server
The test script needs Python 3 and nothing else: stb-bench.py.
- In the Ministra admin panel, open Administrators and copy an administrator's debug key.
- List the MACs of some active devices, one per line, in
macs.txt. - Run a scenario for 20 seconds:
sh
python3 stb-bench.py http://<ministra>/stalker_portal/server/load.php \
--boxes 50 --seconds 20 --mode boot \
--debug-key <debug key> --macs macs.txt --label direct--mode idle sends only watchdog polls. Point the URL at your proxy instead to measure that path.
Not on a busy portal
The test pushes Ministra to its limit, so real boxes slow down while it runs. It may also update the test devices' last-seen data. Run it on a test portal or in a quiet hour.