Skip to content
Victor Xirau Guardans edited this page Sep 29, 2026 · 5 revisions
  1. Which architectures are supported?

    Mess currently supports x86-64 (Intel/AMD), ARM64 (AArch64), PowerPC (ppc64le), and RISC-V (rv64gcv). See Architecture Support for full details.

    GPU Support: Mess is actively being ported to GPUs. For now, GPU support is available via the original Mess codebase in our GPU Repository.

  2. Does Mess support running on Windows or macOS?

    Yes! Mess supports Linux, macOS, and Windows.

    • Linux: Fully supported, including all benchmark and profiling features.
    • macOS: Supported, using native Apple facilities for measurement on Apple Silicon. Some options like memory-node binding are unavailable, but core benchmarking is supported.
    • Windows: Supported via a native CMake build. Performance profiling requires administrator privileges and may need additional tools (AMD uProf, Intel VTune, or Intel PCM) depending on your processor. Some options like memory-node binding are unavailable, but core benchmarking is supported.

    See the Installation guide for details on platform-specific features and requirements.

  3. Why do I get a "Permission denied" error when running?

    This usually happens because the system locks access to hardware performance counters for security. You can temporarily allow access by running echo 0 | sudo tee /proc/sys/kernel/perf_event_paranoid or permanently by adding kernel.perf_event_paranoid = 0 to /etc/sysctl.conf on Linux.

  4. Can I run Mess without root privileges?

    On Linux, you do not need root as long as perf_event_paranoid allows user access (<= 2). Changing system-wide settings like CPU frequency scaling or dropping caches still requires sudo. On macOS, Mess accesses IOReport without root privileges. On Windows, you need to run Mess as an administrator.

  5. Are measurement files saved by default?

    Yes. CPU and GPU runs save raw bandwidth and latency measurements under measuring/ (or --folder=DIR) by default, so they can be plotted later. Use --no-profile to discard the temporary measurement files after the run. The benchmark and hardware-counter measurements still run normally.

  6. Can I use LIKWID instead of perf?

    Yes! You can force the use of LIKWID by adding the --measurer=likwid flag. Make sure likwid-perfctr is installed and in your PATH.

    HBM Systems: On systems with High Bandwidth Memory, the versions of perf we have tested do not correctly map the CAS_COUNT events we use to the HBM registers. Instead, they map them to the MBOX counters, which report 0 when using HBM. LIKWID correctly accesses the HBM counters, which is why it is recommended for these systems. We expect this to be fixed in future perf versions.

  7. Can I use Intel VTune as the measurer?

    Yes. You can force VTune by adding --measurer=vtune to mess, or --backend vtune to mess-profiler. The vtune binary must be installed and available in your PATH.

    VTune has significantly higher interval-sampling overhead than perf or likwid, because each sample launches a VTune collection.

  8. How is the "Memory Bandwidth" actually measured?

    We use hardware performance counters that directly track memory controller activity. The specific counters depend on your system architecture:

    • CAS_COUNT events: On systems with memory controllers that support it (most x86 servers), we use CAS_COUNT_RD and CAS_COUNT_WR to measure DRAM read and write transactions issued by the memory controller
    • UPI/QPI FLITS: For cross-socket bandwidth when accessing remote memory, we use UPI FLITS TXL/RXL counters to track inter-socket traffic
    • Platform-specific counters: On systems like NVIDIA Grace, we use the platform-specific counters documented by the vendor (e.g., cmem_rd_data, cmem_wr_total_bytes)
    • DRAM request counters: On some AMD platforms that don't differentiate reads from writes, we use available DRAM request counters to measure total bandwidth
    • Apple Memory Controller (AMC) counters: On Apple Silicon devices, we rely on AMC counters to measure memory traffic. The framework that measures these counters is IOReport.

    We do not estimate bandwidth from the code; we measure actual hardware activity at the memory controller level.

  9. I found a bug or have a feature request, where do I report it?

    Please open an issue on our GitHub Repository or send us an email at mess@bsc.es.

Clone this wiki locally