About

MESMERIC is a main memory emulator supporting a gap between read/write latencies. It can emulate various read/write latencies of the main memory of a computer. It enables us to investigate the impact of emerging memory devices on application performance. It is a software program running on an ordinary DRAM-equipped machine. It is easy to setup.

For details, please refer to the below paper.

Availability

It is released under the below license. It is the MIT License. See the GitHub repository.

Copyright (c) 2020 National Institute of Advanced Industrial Science and Technology (AIST)

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:

The above copyright notice and this permission notice (including the next
paragraph) shall be included in all copies or substantial portions of the
Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

Usage

Prerequisite

Build

make

Command Line

sudo ./mes [ options ] <read latency (ns)> <write latency (ns)> [ <read latency (ns)> <write latency (ns)> [...] ]

Options:
-t <target path>
   The path of a target application program to be executed on the emulator.
-a <target arg>
   The argument given to the target application program.
   Multiple -a options are accepted.
-i <interval>
   The interval time in msec to read performance counters.
   The default value is 20 msec.
-c <cpu set>
   The mask of CPU cores reserved for the emulator.
   All the CPU cores are reserved.
-p <pebs sampling period>
   The sampling period of PEBS used for hybrid memory emulation.
-l <latency>
   The real access latency of DRAM observed on the host machine.
   The default value is 86.7 ns.
-w <weight>
   The weight of a cache miss penalty observed on the host machine,
   i.e., the ratio of the access latency of a LLC miss to that of a LLC hit.
   The default value is 4.2.
-f <frequency>
   The CPU frequency in MHz.
   If not specified, the value in /proc/cpuinfo is used.
-o
   The one-shot mode.
   The emulator exits when the target application given in the -t option exits.

Example:
sudo ./mes -t your_app_path 400 800
=> Execute your application, emulating a memory region of 400-ns read
   and 800-ns write latency.

sudo ./mes -t your_app_path -l 86.7 -w 4.2 400 800
=> Execute your application in the same manner as the above example.
   Explicitly specify the DRAM latency and the weight of a cache miss
   penalty of your host machine.

sudo ./mes -t your_app_path -l 86.7 -w 4.2 400 800 100 100
=> Emulate a hybrid memory system composed of 2 memory regions;
   a memory region has 400-ns read and 800-ns write latency
   and another memory region has 100-ns read/write latency.

The emulator provides an API for a target application in order to support multi-threaded applications and hybrid memory emulation.

Contributors

Contact

Copyright

Copyright (c) 2020 National Institute of Advanced Industrial Science and Technology (AIST), Japan