Подтвердить что ты не робот

Контейнер с одним докером, немного превосходящий его хост в производительности процессора: Почему?

Я провел эксперимент, чтобы сравнить производительность процессора контейнера докера с производительностью процессора хоста, на котором он работает.

Случаи

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 раз на двух разных хостах и ​​ каждый, когда кривая производительности контейнера несколько превышала кривую производительности хоста.

Вопрос

Как производительность контейнера выше, чем хост-компьютер, когда контейнер-докер запущен на самом хосте?

Возможная причина: более высокий приоритет процессов докерной группы?

Я предполагаю, что процессы внутри контейнерной группы могут иметь более высокий приоритет процесса, что приводит к повышению производительности программы, запущенной в контейнере, по сравнению с тем, когда программа напрямую запускается на главной машине. Это похоже на возможное объяснение?

4b9b3361

Ответ 1

Благодаря комментариям @miraculixx и @Zboson, которые помогли мне понять, что контейнер не намного превосходит хост. Странные результаты (сюжет, о котором идет речь) были вызваны из-за разных версий компилятора, используемых на хосте и контейнере при выполнении эксперимента. Когда случаи A и B снова запускаются после обновления в ту же версию компилятора как в контейнере, так и в хосте, это следующие результаты:

Без флага оптимизации

введите описание изображения здесь

С флагом оптимизации -O3

введите описание изображения здесь

Наблюдение

Можно заметить, что контейнер имеет такую ​​же или немного меньшую производительность, чем хост; что имеет смысл интуитивно. (Без оптимизации есть несколько несоответствий)

P.S Извинения за вводящий в заблуждение заголовок вопроса. Я не знал, что несоответствие производительности может быть из-за разных версий компилятора до тех пор, пока комментарии не будут опубликованы.