exo icon indicating copy to clipboard operation
exo copied to clipboard

Replace macmon with mactop for Apple Silicon and TB monitoring

Open metaspartan opened this issue 2 months ago • 3 comments

Updated documentation, dashboard components, and backend utilities to use mactop instead of macmon for hardware monitoring on Apple Silicon. Replaced all references to macmon in code, removed macmon-related files, and added corresponding mactop files and tests. This expands capability for exo to fetch things like RDMA status and thunderbolt data without having to rely on another binary call for e.g. system_profiler etc.

Motivation

Replaces macmon with mactop for hardware monitoring on Apple Silicon, gaining access to improved metrics including Thunderbolt network stats, and RDMA status.

Changes

Replaced macmon with mactop in Python backend (mactop.py, profile.py) Updated metrics model for mactop v2.0.5 JSON format (includes new Thunderbolt/bus data and RDMA status) Renamed macmon_info → mactop_info across dashboard components Updated documentation and packaging (README.md, CONTRIBUTING.md, flake.nix, exo.spec)

Why It Works

mactop provides a superset of macmon's functionality with similar headless JSON output interface.

Test Plan

Manual Testing

Hardware: Mac Studio M1 Ultra 128GB Quick Integration test and pytest test_mactop.py Confirmed frontend dashboard displays correct GPU %, temperature, power, and memory stats

Automated Testing

Added test_mactop.py

metaspartan avatar Jan 04 '26 06:01 metaspartan

cc @AlexCheema @Evanev7

metaspartan avatar Jan 04 '26 06:01 metaspartan

Credit where it is due, this is a full replacement. I do not believe this currently justification for this switch, but I'll talk to the team to see if there are any future gains from it.

Evanev7 avatar Jan 04 '26 17:01 Evanev7

Credit where it is due, this is a full replacement. I do not believe this currently justification for this switch, but I'll talk to the team to see if there are any future gains from it.

Appreciate it. The main reason for the switch is that mactop is a superset of macmon and exposes RDMA status + Thunderbolt/bus data in the same headless JSON output, which lets exo fetch those without extra rdma_status / system_profiler calls. It also improves total-system power reporting (wattage) on Apple Silicon. Thanks!

metaspartan avatar Jan 04 '26 20:01 metaspartan

Thanks a lot for the PR. I'm a big fan of mactop and use it all the time for monitoring my Macs. That being said, as far as exo goes, I'm going to close this for now for the following reasons:

  • macmon works for our simple use case of monitoring Macs (primarily for visual monitoring)
  • macmon is built in rust which will make it easier to embed into exo
  • mactop should be more efficient since it also exposes RDMA status which exo also uses, but macmon hasn't become a bottleneck yet so it feels premature to swap it out for performance reasons

AlexCheema avatar Jan 08 '26 12:01 AlexCheema