Replace macmon with mactop for Apple Silicon and TB monitoring
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
cc @AlexCheema @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.
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!
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