Skip to main content

Memory Latency Checker (MLC)

Intel Memory Latency Checker (MLC) is a tool used to measure memory latencies and bandwidth and how these memory aspects change with increasing load.

Limitations

Intel MLC is designed primarily for physical hardware systems (vs. for virtual machines). The software will attempt to disable hardware prefetchers while capturing latency measurements. This prefetcher control is exposed through a model-specific registry (MSR) on the physical hardware system. Best results are are produced as such when running on physical hardware systems. The software can be reliably used for virtual machine scenarios for bandwidth measurements. When running MLC on virtual machines, the virtualization layer prevents access to MSRs and thus cannot modify settings for hardware prefetchers. So, latency measurements may not be reliable for comparisons across systems depending upon the settings in the MSRs.

What is Being Measured?

When Intel MLC is launched without any additional parameters, it automatically identifies the system topology and measures the following:

  • A matrix of idle memory latencies for requests originating from each of the sockets and addressed to each of the available sockets (Unit: nano secs)

  • Peak injection memory bandwidth measured (with all accesses to local memory) for requests having varying amounts of reads and writes (each core generating requests as fast as possible).

  • A matrix of memory bandwidth values for requests originating from each of the sockets and addressed to each of the available sockets.

  • Latencies at different bandwidth ranges/points.

  • Latencies between caches in the processor.

Intel MLC also provides command line arguments for fine-grained control over the latencies and bandwidth measurements. The details of parameters are mentioned in the profile documentation.

Workload Metrics

The following metrics are examples of those captured by the Virtual Client when running the MLC workload. The number of Numa Nodes that were on the system was 4 for the below example.

Metric NameExample Value (min)Example Value (max)Example Value (avg)Unit
Local Socket L2->L2 HIT latency56.094.860.22073732718893nanoseconds
Local Socket L2->L2 HITM latency57.385.861.877419354838718nanoseconds
idle-latency_nodes_0_086.9148.594.88018433179724nanoseconds
load_bandwidth_at_delay_0000011414.617013.015006.365437788018MBps
load_bandwidth_at_delay_0000212378.817104.315090.00552995392MBps
load_bandwidth_at_delay_0000812865.717025.415026.367281105991MBps
load_bandwidth_at_delay_0001512496.716962.014963.37788018433MBps
load_bandwidth_at_delay_000509066.911609.511347.43824884793MBps
load_bandwidth_at_delay_001005057.46661.96021.277880184331MBps
load_bandwidth_at_delay_002003137.73667.43513.3760368663599MBps
load_bandwidth_at_delay_003002289.72743.52664.607834101382MBps
load_bandwidth_at_delay_004001825.22257.02188.821198156682MBps
load_bandwidth_at_delay_005001495.11958.71893.6327188940095MBps
load_bandwidth_at_delay_007001096.11614.51546.0290322580646MBps
load_bandwidth_at_delay_010001076.31350.61289.9917050691245MBps
load_bandwidth_at_delay_01300943.21209.31148.1198156682029MBps
load_bandwidth_at_delay_01700808.71096.11034.7843317972352MBps
load_bandwidth_at_delay_02500611.6980.0913.8018433179725MBps
load_bandwidth_at_delay_03500609.2905.8848.7917050691245MBps
load_bandwidth_at_delay_05000572.5856.8795.8792626728111MBps
load_bandwidth_at_delay_09000583.5801.2735.5801843317973MBps
load_bandwidth_at_delay_20000520.9763.9700.148387096774MBps
loaded_latency_at_delay_0000090.27166.66100.97073732718894nanoseconds
loaded_latency_at_delay_0000290.28155.8299.32543778801846nanoseconds
loaded_latency_at_delay_0000890.42153.8699.54096774193546nanoseconds
loaded_latency_at_delay_0001590.22152.9799.6316589861751nanoseconds
loaded_latency_at_delay_0005090.22167.7399.12626728110596nanoseconds
loaded_latency_at_delay_0010090.05137.5797.73838709677418nanoseconds
loaded_latency_at_delay_0020089.54138.5197.65880184331798nanoseconds
loaded_latency_at_delay_0030088.93137.8598.20576036866356nanoseconds
loaded_latency_at_delay_0040088.78135.5197.2936866359447nanoseconds
loaded_latency_at_delay_0050088.78155.4297.23244239631338nanoseconds
loaded_latency_at_delay_0070088.51195.698.01649769585254nanoseconds
loaded_latency_at_delay_0100088.53125.0796.82207373271889nanoseconds
loaded_latency_at_delay_0130088.29133.4496.77861751152074nanoseconds
loaded_latency_at_delay_0170088.33137.9896.8858525345622nanoseconds
loaded_latency_at_delay_0250088.08161.4497.4829953917051nanoseconds
loaded_latency_at_delay_0350088.34141.8596.29304147465438nanoseconds
loaded_latency_at_delay_0500087.7135.4496.10709677419354nanoseconds
loaded_latency_at_delay_0900087.61124.4296.76253456221201nanoseconds
loaded_latency_at_delay_2000087.42129.9396.20557603686638nanoseconds
memory_bandwidth_nodes_0_024155.231461.527718.97695852534MBps
peak_injection_bandwidth_at_1:1 Reads-Writes39615.952091.146210.8534562212MBps
peak_injection_bandwidth_at_2:1 Reads-Writes30999.447359.039572.31612903225MBps
peak_injection_bandwidth_at_3:1 Reads-Writes30875.738271.334344.0460829493MBps
peak_injection_bandwidth_at_ALL Reads24431.731511.127711.27972350231MBps
peak_injection_bandwidth_at_Stream-triad like23221.145475.933316.79677419354MBps