Skip to content

Daemon benchmarks ​

Performance results for the Calagopus daemon, measured against Pterodactyl Wings and Pelican Wings on identical hardware. The daemon is the node agent that runs game servers: it serves the file manager, streams archives, and reports system state. These numbers measure the daemon's own work, not how the game servers it manages perform; the daemon affects those servers only through the CPU and memory it takes from the same node.

For the web panel and its API, see panel benchmarks.

Calagopus WingsPelican WingsPterodactyl Wings
CPU limit

Archive and file work comes first, since those are the operations users wait on. Dots match the bar colours. How this was measured

Archive performance ​

↓ Lower is better - median wall clock for one run.

View this chart's data as a table
SystemCalagopus Wings (ms)Pelican Wings (ms)Pterodactyl Wings (ms)
9900X217.1941.3355.6
EPYC 7443P5446.46538.06195.2
2× E5-2680v28091.17633.18001.3
i5-12500322.21239.81037.0
Altra Q80-304644.85812.46705.7

Where the archive difference comes from

Mostly the deflate implementation: Calagopus uses zlib-ng and splits the work across a small thread pool (api.file_compression_threads), where both Wings builds run pgzip on one thread.

File operations ​

Every task scenario, timed one at a time. Median wall clock, with transfer rate, CPU cost per run and peak memory underneath.

Compression

ScenarioCalagopus WingsPelican WingsPterodactyl Wings
compress 100 MiB tree (tar.gz)30 ms3372 MiB/s68 cpu-ms80 MiB92 ms1087 MiB/s97 cpu-ms25 MiB82 ms1214 MiB/s166 cpu-ms53 MiB
compress 1 GiB tree (tar.gz)217 ms4717 MiB/s568 cpu-ms59 MiB941 ms1088 MiB/s1011 cpu-ms51 MiB356 ms2880 MiB/s878 cpu-ms50 MiB
compress 50k small files tree (tar.gz)199 ms61 MiB/s243 cpu-ms48 MiB382 ms32 MiB/s429 cpu-ms83 MiB245 ms50 MiB/s347 cpu-ms42 MiB
compress 100 MiB tree (zip)55 ms1818 MiB/s102 cpu-ms81 MiBnot supportednot supported

Decompression

ScenarioCalagopus WingsPelican WingsPterodactyl Wings
decompress 100 MiB archive (tar.gz)42 ms2357 MiB/s88 cpu-ms59 MiB109 ms917 MiB/s128 cpu-ms23 MiB111 ms898 MiB/s135 cpu-ms24 MiB
decompress 1 GiB archive (tar.gz)409 ms2501 MiB/s882 cpu-ms47 MiB1,350 ms759 MiB/s1265 cpu-ms24 MiB1,244 ms823 MiB/s1369 cpu-ms24 MiB
decompress 50k small files archive (tar.gz)530 ms23 MiB/s1087 cpu-ms31 MiB1,174 ms10 MiB/s1398 cpu-ms24 MiB1,228 ms10 MiB/s1570 cpu-ms24 MiB
decompress 100 MiB archive (zip)29 ms3387 MiB/s96 cpu-ms38 MiB104 ms962 MiB/s124 cpu-ms24 MiB106 ms943 MiB/s131 cpu-ms26 MiB
decompress 1 GiB archive (zip)249 ms4121 MiB/s887 cpu-ms60 MiB1,365 ms750 MiB/s1273 cpu-ms38 MiB1,352 ms758 MiB/s1349 cpu-ms39 MiB

Deletion

ScenarioCalagopus WingsPelican WingsPterodactyl Wings
delete 100 MiB tree13 ms22 cpu-ms46 MiB26 ms28 cpu-ms23 MiB22 ms21 cpu-ms36 MiB
delete 1 GiB tree113 ms207 cpu-ms30 MiB260 ms274 cpu-ms23 MiB202 ms207 cpu-ms25 MiB
delete 50k small files tree165 ms329 cpu-ms26 MiB460 ms480 cpu-ms23 MiB343 ms354 cpu-ms24 MiB

Transfer

ScenarioCalagopus WingsPelican WingsPterodactyl Wings
upload file (256 MiB)223 ms1146 MiB/s79 cpu-ms30 MiB252 ms1015 MiB/s92 cpu-ms23 MiB233 ms1099 MiB/s82 cpu-ms23 MiB

Large directory listings

ScenarioCalagopus WingsPelican WingsPterodactyl Wings
list directory (5000 entries)8.5 ms18 cpu-ms57 MiB36 ms44 cpu-ms27 MiB44 ms55 cpu-ms30 MiB
list directory (50000 entries)69 ms160 cpu-ms75 MiB349 ms462 cpu-ms95 MiB430 ms609 cpu-ms100 MiB

Memory ​

Resting (idle)

↓ Lower is better - footprint with no traffic, sampled before the run.

View this chart's data as a table
SystemCalagopus Wings (MiB)Pelican Wings (MiB)Pterodactyl Wings (MiB)
9900X10.223.222.8
EPYC 7443P10.211.710.6
2× E5-2680v210.311.010.6
i5-1250010.221.522.3
Altra Q80-3011.113.711.1
Peak while serving

↓ Lower is better - peak footprint while serving this scenario.

View this chart's data as a table
SystemCalagopus Wings (MiB)Pelican Wings (MiB)Pterodactyl Wings (MiB)
9900X21.480.585.1
EPYC 7443P20.576.7106.1
2× E5-2680v221.178.781.0
i5-1250022.281.382.3
Altra Q80-3020.583.184.3

Request scenarios ​

Why this matters on shared hosting

The daemon competes with your game servers for the same CPU. A game server that misses its CPU time drops ticks instead of slowing down gradually, so how cheaply the daemon handles each operation matters more than its peak throughput.

Throughput ​

Requests per second

↑ Higher is better - more requests served per second.

View this chart's data as a table
SystemCalagopus Wings (req/s)Pelican Wings (req/s)Pterodactyl Wings (req/s)
9900X364261.94315.74366.2
EPYC 7443P128312.22032.82106.8
2× E5-2680v280772.61401.21392.5
i5-12500211010.02456.92333.3
Altra Q80-30113544.01840.41825.2

Average latency ​

Mean response time

↓ Lower is better - faster average response.

View this chart's data as a table
SystemCalagopus Wings (ms)Pelican Wings (ms)Pterodactyl Wings (ms)
9900X1.088.587.5
EPYC 7443P3.0187.7180.9
2× E5-2680v24.7271.7274.4
i5-125001.8155.3163.7
Altra Q80-303.4207.6209.5

CPU cost per request ​

CPU time per response

↓ Lower is better - less CPU burned per response, with the idle floor removed.

View this chart's data as a table
SystemCalagopus Wings (cpu-ms)Pelican Wings (cpu-ms)Pterodactyl Wings (cpu-ms)
9900X0.01700.4590.477
EPYC 7443P0.04600.8560.872
2× E5-2680v20.07901.51.6
i5-125000.02000.5830.584
Altra Q80-300.05200.9891.0

Test setup ​

Methodology

All three daemons run from their official :latest Docker images with no configuration beyond initial setup, driven by our open-source benchmarking suite at CPU limits of 1, 2, 4 and 8 CPUs.

Request scenarios hold 384 concurrent connections for 10 seconds after a 1-second warmup and report throughput and latency from a single run. The suite defaults to 32 connections (8 for the 8 MiB download) and this run passed -c 384, so its README figures differ from these. Task scenarios are timed one at a time, 5 times (10 for directory listings) after a warmup run, and report the median. Run-to-run spread is typically 13% and above 23% for a quarter of the cells, so treat task gaps under about 25% as ties. The warmup leaves the files in page cache, so archive and listing tasks compare codecs and serialisation rather than disk reads; on an HDD, a network volume or a cold cache, storage would dominate and the gaps would shrink.

Memory is anon + shmem, excluding page cache and slab. cpu-ms is CPU time per request or task run with the idle floor subtracted, and lower is better.

Daemons tested ​

Calagopus Wings1.2.4
Pelican Wings1.0.0-beta29
Pterodactyl Wings1.13.3

Capability gaps

Where a daemon cannot perform a scenario the suite skips it rather than recording a zero, so these are missing features, not missing measurements.

compress 100 MiB tree (zip) is not supported by Pelican Wings, Pterodactyl Wings

Data ​

Where the numbers come from

Every figure here comes from the suite's JSON reports (pnpm run bench <target> --json), checked into the site repository as one typed file per daemon and system, with each scenario's load profile, sampled CPU and memory, and the suite's notes. The import script rounds to three decimals and drops per-run timings and failure strings. The reports record each daemon's self-reported version, but not the suite commit or image digests.