Repository navigation
Releases
v0.3.1
ps5-exporter v0.3.0
Added
- Power per rail.
ps5_power_rail_watts,_voltsand_amperesfor the 8 rails ofsceKernelGetSocPowerConsumption, andps5_power_watts, their sum (the SoC and its memory; not checked against a wall meter). Rail 0 is the GPU core. - Clocks.
ps5_soc_clock_hertz(26 domains; 20 is the GPU) andps5_cpu_core_clock_hertz. - The running game and its FPS.
ps5_game_info{title_id}andps5_fps, from the display's flip counter. - Memory and devices. Swap, wired memory and page tables; address, MAC and MTU per network interface; USB and disc drive power.
- Scrape timing.
ps5_exporter_scrape_secondsandps5_exporter_collect_seconds{group}. - Grafana. Panels for power (total and GPU), FPS, GPU and memory clocks, and power per rail.
- A version marker in the ELF file (
PS5EXPORTER_VER:0.3.0).
Changed
- CPU usage comes from the idle threads, per logical CPU (16).
- Getters beyond the SDK's own samples are looked up on first use. A function a firmware does not export now costs only its metric, instead of stopping the payload at load.
Fixed
- CPU usage was always empty:
sceKernelGetCpuUsageAllanswers0x80020016on 13.60. ps5_soc_power_wattswas never published. It is replaced by the rails;ps5_soc_power_raw_valuestays, deprecated, for readers of 0.2.0.
Notes
- Tested on one console: PS5 Pro (CFI-7121), firmware 13.60. Other firmware: likely, not verified.
- Tools that read only the first word of the power call (shown as "SoC power") show rail 0, the GPU core.
- Thanks to drakmor/ps5-hwinfo (power layout, clocks, CPU load), erickdavestech/ps5-hud-dualsense-overlay (telemetry notes), Common FPS for PS5 (the flip counter) and phantomptr/ps5upload (the call's buffer size).
Files
ps5-exporter.elf: the payload.ps5-exporter-grafana-dashboard.json: the dashboard.SHA256SUMS: checksums.
v0.2.0
Fixed
- Buffer overflow when ShadowMount reported more games than fitted in the
output buffer: the append helpers counted what they would have written
instead of what they did, so the length ran past the capacity and the
next collector wrote outside the buffer. All output now goes through one
append-only buffer that cannot overflow, confirmed by a test with 900
games under AddressSanitizer. - Per-core CPU usage printed the wrong value because the core index was
missing from the format arguments. - A slow client could hold the single-threaded server indefinitely: reading
a request and writing a response now have wall-clock deadlines. - An unusable listening socket (which suspending and resuming the console
can cause) made the accept loop spin forever instead of rebinding. - JSON parsing read past the end of the response on truncated escapes and
shorttrue/falsevalues. - Per-process metrics were missing on firmware 13.60: its process records
are 1096 bytes while the SDK header describes 1088, so the record size
now comes from the kernel instead of the header.
Changed
ps5_fan_duty_percentandps5_cpu_usage_percentare now
ps5_fan_duty_ratioandps5_cpu_usage_ratio(0 to 1, the Prometheus
convention).ps5_fan_duty_rawis gone,ps5_soc_power_rawis now
ps5_soc_power_raw_value.ps5_cpu_usage_rationo longer carries acore="all"sample: an
aggregate inside the same family makessum()double-count. Useavg().- Process metrics are aggregated per executable name instead of per pid,
which keeps the number of time series bounded. Adds
ps5_process_instances. - The ShadowMount game list is cached for five minutes and all its calls
share a four second budget, so a scrape stays inside Prometheus' timeout. /quitonly answers on loopback.- The version now comes from the Makefile, so the binary and the release
tag cannot disagree.
Added
- Dashboard: the game library table now joins the per-title state onto the
info metric, so names, platform and source show up; panels for metrics
firmware 13.60 refuses say so instead of "No data". ps5_filesystem_free_bytes,ps5_exporter_collector_success,
ps5_shadowmount_games_cache_age_seconds,ps5_process_record_bytes,
ps5_process_instances.make test: host tests with sanitizers, no console needed.
Added
- Fan speed (
ps5_fan_duty_percent, raw 0..1024 scale from the kernel). - Per-core CPU usage and the average (
ps5_cpu_usage_percent{core}). - SoC power draw and the lifetime counters: hours powered on and power
cycles since new. - Dashboard: SoC power and lifetime panels; the fan and CPU panels now have
data. - All SoC temperature sensors the kernel answers for (not only 0..3).
- Direct memory pool size and largest free block.
- Per-process CPU time and resident memory from the process table, checked
againstki_structsizeso a different kernel layout only drops them. - Dashboard: fan, CPU usage, top processes by CPU and by memory, direct
memory panels (fan and CPU usage fill in once the exporter reports them). make probe: development build with a/probe/<name>endpoint for
working out undocumented kernel calls on hardware (not in releases).
Install: load ps5-exporter.elf with Payload Manager (add it to the autoload list) or send it to elfldr. Metrics on port 9100. Import ps5-exporter-grafana-dashboard.json in Grafana.
Verified on a CFI-7121, firmware 13.60: temperatures (17 sensors), fan speed, filesystems, direct memory, per-process CPU and memory, and the ShadowMountPlus storage and game list all work. Per-core CPU usage, SoC power and the lifetime counters are refused for payloads on this firmware; those metrics are left out and ps5_exporter_collector_success reports 0 for them rather than publishing guessed values.
v0.1.1
Added
- Grafana dashboard (
grafana/ps5-exporter.json). ps5_infogets afirmwarelabel from the kernel version;system_version
(the spoofable user-space value) stays alongside it.
Install: load ps5-exporter.elf with Payload Manager (add it to the autoload list) or send it to elfldr. Metrics on port 9100. Import grafana/ps5-exporter.json in Grafana.
v0.1.0
Added
- Prometheus exporter payload serving
/metricson port 9100. - Temperatures (CPU, SoC sensors), CPU frequency, uptime, boot time, model
and system version, filesystems, process count. - ShadowMountPlus integration over its local JSON API: version, storage
overview, game list with mounted/installed/source state. /healthand/quitendpoints, a start-up notification with the port,
and the port configurable by argument orEXPORTER_PORT.
Install: load ps5-exporter.elf with Payload Manager (add it to the autoload list) or send it to elfldr. Metrics on port 9100.