         }
     }
 
-    fprintf(stderr, "Running benchmark...\n");
+    fprintf(stderr, "Running benchmark... (pattern=%s)\n", patternString(settings).c_str());
 
     std::vector<double> all;
     for (size_t i = 0; i < queues.size(); ++i)

        results.push_back(t.time.count());
    }
}




static void benchmark(const QueueList& queues, const DmaPtr& buffer, const Settings& settings, size_t blockSize)




static string patternString(const Settings& settings)
{
    switch (settings.pattern)
    {
        case AccessPattern::LINEAR:
            return "linear";

        case AccessPattern::SEQUENTIAL:
            return "sequential";

        case AccessPattern::RANDOM_LINEAR:
            return "random-offset";

        case AccessPattern::RANDOM_CHUNK:
            return "random-chunks";

        case AccessPattern::RANDOM_PAGE:
            return "random-pages";
    }

    throw runtime_error("Unknown access pattern");
}



static size_t createQueues(const Controller& ctrl, Settings& settings, QueueList& queues)
{
    const size_t pageSize = ctrl.info.page_size;
