Я столкнулся с несколько странным явлением, которое я не могу объяснить в отношении использования процессора / ядра. Я запускаю пару контейнеров Docker на машине Ubuntu с запущенным OpenPLC внутри контейнеров. Единственное, что интересно знать об этом, - это то, что когда я повторно развертываю этот ПЛК, он запускает компилятор g ++ для перекомпиляции программы. У меня есть один дополнительный контейнер, который контролирует эти повторные развертывания.
Поэтому, если я повторно разверну свою программу в 4 контейнерах, 4 процесса g ++ появятся и будут работать. Примерно до отметки 4 PLC мой процессор i3-2310M имеет все ядра на 100%. Здесь у меня есть график с количеством контейнеров, в которых я развертываю, и временем, которое требуется для повторного получения данных после их повторного развертывания.
Это средние значения для 5 тестовых прогонов, а полосы погрешностей означают стандартную ошибку. Очевидно, что время должно увеличиваться по мере выполнения большего количества процессов g ++, но то, как оно увеличивается, я не могу объяснить. Я ожидал линейного увеличения.
Эти контейнеры PLC отправляют пакеты Modbus / TCP в управляющий контейнер, и я измеряю время с помощью Wireshark между последним сообщением перед повторным развертыванием и первым сообщением после.
Возможные объяснения этой странной закономерности?
У вашего процессора два ядра. Таким образом, 1 и 2 ПЛК занимают одинаковое количество времени.
Помимо этого, это является довольно линейно. Есть одна строка, которая включает все четные числа (где оба ядра заняты), и одна, которая включает все нечетные (где одно ядро иногда не имеет работы, потому что остается только одно задание).
Эти две линии сходятся, потому что при наличии достаточного количества ПЛК вы можете держать оба ядра занятыми почти все время.