Appearance
Mintrix performance
How Mintrix behaves with a large installation: 50,000 devices, 500 channels and a week's programme guide. Measured on 2026-10-22 against a staging build of Mintrix, the code of the first release after 0.5.2, run the way an installed server runs it.
One 10-core server
~420req/s
Box requests, mixed as boxes send them
Comfortable on one server
20kdevices
Peak and power-cut recovery together
Tested
50kdevices
5,000 subscribers, 500 channels, a week of guide
Requests refused or failed
0failed
At 1, 10 and 50 requests at once
In short
What set-top boxes ask of Mintrix at evening peak, and after a power cut, against what one 10-core server handled:
10,000devices✓Comfortable4,000 boxes open at peak
100req/s
evening peak · 24%
150req/s
after a power cut · 36%
420 req/s
20,000devices!Fine, little headroom8,000 boxes open at peak
200req/s
evening peak · 48%
295req/s
after a power cut · 70%
420 req/s
50,000devices✕Over capacity20,000 boxes open at peak
500req/s
evening peak · 119%
735req/s
after a power cut · 175%
420 req/s
Evening peakPower-cut recovery on topOne 10-core server (420 req/s)
The numbers as a table
| Devices | Evening peak | After a power cut | Share of one 10-core server (~420 req/s) |
|---|---|---|---|
| 10,000 | ~100 req/s | ~150 req/s | Comfortable: a quarter to a third |
| 20,000 | ~200 req/s | ~300 req/s | Fine: half, three quarters while boxes come back |
| 50,000 | ~500 req/s | ~730 req/s | Over capacity: plan more processor cores, or a longer ping interval (see below) |
The panel stays fast at all three sizes: with 50,000 devices, its lists, searches and dashboard answered within 70–270 ms, even on the slower emulated setup.
How these numbers were measured
The test ran on one Apple M1 Pro (10 cores) with Docker Desktop, with the database and the load generator on the same machine. Mintrix's release images are built for x86-64 servers, so the Mac first ran them emulated, which is 2.5 to 3 times slower; the same code was then run natively for the server figures. Use the tables to compare requests with each other, and measure your own server for exact capacity.
Test data
All made up, in a separate installation, with Ministra switched off so nothing reached a real portal.
| Resellers | 20 |
| Subscribers | 5,000 |
| Devices (5% switched off, expiries spread over a year either side of today) | 50,000 |
| Channels, each with a stream | 500 |
| Programme guide (a programme every 30 minutes, 3 days back to 4 ahead) | 168,000 programmes |
Channels were tested two ways: first every channel as a base channel, then the way operators sell them, through TV packages:
| Plan | Packages | Channels the box gets |
|---|---|---|
| Basic | 20 base channels + Basic | 220 |
| Basic + Sports | + Sports | 280 |
| Basic + Movies | + Movies, Kids (optional, not switched on) | 300 |
| Premium | the whole catalogue | 500 |
The panel
One request at a time, as an administrator: the time from request to answer, median of six.
Device list, first page
Device list, sorted by expiry
Resellers
Subscriber list
Device list, 50 per page
Channels
Device list, page 1,000
Adding a device
Renewing a device
Searching devices
Dashboard overview
Searching devices and the dashboard are faster from the next release (see Improved after this test).
The numbers as a table
| Request | Median |
|---|---|
| Device list, first page | 67 ms |
| Device list, 50 per page | 81 ms |
| Device list, sorted by expiry | 77 ms |
| Device list, page 1,000 | 87 ms |
| Subscriber list, and searching it | 80–90 ms |
| Resellers, channels, the navigation's counts | 77–83 ms |
| Adding a device, renewing one | 88–92 ms |
| Searching devices (by name, subscriber or MAC) | 182–188 ms |
| Dashboard overview | 268 ms |
The panel allows each user 60 requests a minute, so it was measured one request at a time, not under load.
The box API
What Mintrix's own MAG interface asks for, from one box, ten at once and fifty at once. Median time, and requests per second.
Channels sold through packages
| Request | 1 at a time | 10 at once | 50 at once |
|---|---|---|---|
| Categories | 31 ms | 50–61 ms · 131–162/s | 288 ms · 140/s |
| Channel list, 50 per page | 37 ms | 50–73 ms · 111–165/s | 319 ms · 136/s |
| Now and next, 20 channels | 58 ms | 81–112 ms · 73–88/s | 458 ms · 99/s |
| One channel's guide, 6 hours | 36 ms | 57–73 ms · 107–145/s | 333 ms · 142/s |
| Play link | 40–69 ms (4 at once) |
Ranges are the four plans. No request failed.
What it shows
Packages cost nothing noticeable
A box on Basic (220 channels), Basic + Sports, Basic + Movies or Premium (all 500) gets its lists within a few milliseconds of the others. Finding a box's channels through its packages takes under 1 ms in the database; Premium, which holds the whole catalogue, skips that and is the fastest.
- Up to ten boxes at once, the median answer stays under about 115 ms (95% under 150 ms), even here.
- At fifty at once, answers slow to 300–450 ms and throughput levels off at about 100–160 requests a second. The limit is the emulated PHP's processor time, not the database.
- Now and next is the most expensive request, as it reads the guide of 20 channels at once. Boxes ask for it when a programme ends, not on a timer.
Running natively
The same requests on the same data, with Mintrix running natively instead of emulated (20 PHP workers, as in the release image):
Ping
Channel list, 50 per page
Now and next, 20 channels
Ping
Channel list, 50 per page
Now and next, 20 channels
Native is 2.5 to 3 times faster; servers run Mintrix natively.
The numbers as a table
| Request | 1 at a time | 10 at once | 50 at once |
|---|---|---|---|
| Ping (every open box, once a minute) | 14 ms | 25 ms · 372/s | 91 ms · 491/s |
| Channel list, 50 per page | 17 ms | 32 ms · 280/s | 120 ms · 388/s |
| Now and next, 20 channels | 21 ms | 38 ms · 246/s | 159 ms · 292/s |
Mixed the way boxes ask (two thirds pings), that is about 420 requests a second from one 10-core machine.
What it means for your installation
How much traffic boxes make
While Mintrix's interface is open on a box, it asks Mintrix:
| How often | Requests a minute | |
|---|---|---|
| Ping (the box is online) | Every 60 seconds, set by Mintrix | 1 |
| Switching channel: the play link and the channel's now and next | About every 5 minutes | 0.4 |
| Now and next for the channels in view | When a programme ends, about every 30 minutes | 0.03 |
| Browsing the channel list | Now and then | 0.1 |
| Per open box | about 1.5 |
At evening peak, about 40% of devices are open. After a power cut, the boxes that were on come back within about ten minutes, each signing in and loading its lists (about 7 requests) on top of the peak.
| Devices | Open at peak | Peak | Power cut on top | Total |
|---|---|---|---|---|
| 10,000 | 4,000 | 100/s | 50/s | 150/s |
| 20,000 | 8,000 | 200/s | 95/s | 295/s |
| 50,000 | 20,000 | 500/s | 235/s | 735/s |
What to expect
- Up to about 20,000 devices, one server like the one tested carries the boxes with room to spare. After a power cut, answers slow for a few minutes, but no box is refused.
- Around 50,000 devices, the evening peak alone is more than one 10-core server delivered. Plan for more processor cores, which needs more PHP workers than the 20 the release image runs, or a longer ping interval: pings are two thirds of the traffic, so pinging every 2 minutes instead of every minute lowers the peak from 500 to about 340 requests a second.
- The database is not the limit. Even at 50 requests at once, the box API's queries took a few milliseconds; the time goes to PHP.
- Boxes behind one public address share its limit. The box API allows 300 requests a minute per address and action, to keep out floods. A hotel, a building network or a provider that puts many customers behind one public IP address (carrier-grade NAT) can reach that with about 300 open boxes, all pinging once a minute.
Improved after this test
The test found three things that grow with the number of devices or programmes. They are faster from the next release on. Measured on the same data, in the database:
Searching devices4.2× faster
Dashboard's device figures40% faster
Now and next, 20 channels2.8× faster
Each pair on its own scale.
The numbers as a table
| Before | After | |
|---|---|---|
| Searching devices, with their subscriber's name and phone | 135 ms | 33 ms |
| The dashboard's device figures | 92 ms | 56 ms |
| Now and next for 20 channels | 5.3 ms | 1.9 ms |
- Searching devices found matching subscribers once for every device; it now finds them once per search.
- The dashboard counted several figures by reading every device; new indexes let the database count them without.
- The guide read every past programme of a channel to find the one on now; it now reads only the last day's.
Not measured
- Ministra. It was switched off, so adding and renewing devices here do not include Ministra's time; in real use they wait for Ministra too. For Ministra's own capacity, see Performance and capacity.
- An x86-64 server. The native figures come from an Apple M1 Pro; a server with similar cores performs in the same range, but measure yours for exact capacity.
- The release's web server. Natively, Mintrix ran on PHP's built-in server and kept its rate limits in files instead of Redis; the release image runs it behind its own web server, with Redis.
- More than one Mintrix server, and more than 50,000 devices.
- The traffic model. How often boxes switch channels and browse is an estimate; your viewers may differ. Pings, the largest part, are exact.