Я провел эксперимент, чтобы сравнить производительность процессора контейнера докера с производительностью процессора хоста, на котором он работает.
Случаи
A: программа Benchmark запускается на хост-компьютере (Intel i5, 2,6 ГГц, 2 процессора, 2 ядра)
B: программа Benchmark запускается на контейнере Docker, работающем на том же хост-компьютере.
(Ограничение ресурсов не выполняется для контейнера в B. i.e. Контейнер имеет все 1024 cpu-доли для себя. Ни один другой контейнер не запущен)
Программа тестирования: численная интеграция
Числовая интеграция: это стандартный пример массовой параллельной программы. Выполняется стандартная численная интеграция примерная программа, написанная на С++ с использованием OpenMP lib (которая уже проверена на корректность). Программа запускается 11 раз, меняя количество доступных потоков в программе с 1-11. Эти 11 прогонов выполняются для каждого случая A и B. Таким образом, выполнено 22 прогона 11 для хоста и 11 для контейнера.
Ось X: количество потоков, доступных в программе
Ось Y: указывает на производительность, которая обратна времени (вычисляется путем умножения инверсии времени на запуск программы с константой).
Наблюдение
Контейнер докеров, запущенный на хосте, немного превосходит хост-машину. Этот эксперимент повторялся 4-5 раз на двух разных хостах и каждый, когда кривая производительности контейнера несколько превышала кривую производительности хоста.
Вопрос
Как производительность контейнера выше, чем хост-компьютер, когда контейнер-докер запущен на самом хосте?
Возможная причина: более высокий приоритет процессов докерной группы?
Я предполагаю, что процессы внутри контейнерной группы могут иметь более высокий приоритет процесса, что приводит к повышению производительности программы, запущенной в контейнере, по сравнению с тем, когда программа напрямую запускается на главной машине. Это похоже на возможное объяснение?