Estimating I/O Memory Bandwidth

  • Subject:Estimating I/O Memory Bandwidth
  • Type:Diploma Thesis
  • Date:28.12.2016
  • Supervisor:

    Prof. Dr. Frank Bellosa

    Marius Hillenbrand

  • Graduand:Jos Ewert
  • Links:PDF
  • Abstract

    On multicore systems, the memory bandwidth is an important shared resource. However there is no direct way to measure the memory bandwidth. With this lack of data, the scheduler cannot make decisions that take this resource into account. This leads to an unfair distribution of the memory bandwidth and consequently
    suboptimal performance.
    There is research into measuring application’s direct memory bandwidth usage, however these systems cannot measure the memory bandwidth a process uses indirectly via the IO devices. Hence, the OS lacks a way to measure IO memory bandwidth to gain a complete view of a process’s memory bandwidth consumption.
    In this thesis I demonstrate how with extended accounting in the operating system and data from the hardware’s performance counters the OS can estimate a process’s IO memory bandwidth. I show that data from current state-of-the-art performance counters can provide precise data about the total IO memory bandwidth. Furthermore, I illustrate why the current accounting in the Linux kernel is insufficient to calculate the IO memory bandwidth for each process’s devices.
    To extend the OS to provide IO memory bandwidth accounting, I first identify the two groups of devices that the system should track, network and storage devices. I explain how they differ and how to add accounting to both groups. I present a system that combines this accounting with data from performance counters to estimate the IO memory bandwidth for each process.
    I validate the system’s accuracy and determine that in most cases there is no significant performance penalty. In the worst case it has a 16% performance penalty.


     author = {Jos Ewert},
     title = {Estimating I/O Memory Bandwidth},
     type = {Master Thesis},
     year = 2016,
     month = dec # "28",
     school = {Operating Systems Group, Karlsruhe Institute of Technology (KIT), Germany}