Назад | Перейти на главную страницу

Объяснение линейного увеличения работы ЦП, что приводит к увеличению задержки на два шага

Я столкнулся с несколько странным явлением, которое я не могу объяснить в отношении использования процессора / ядра. Я запускаю пару контейнеров Docker на машине Ubuntu с запущенным OpenPLC внутри контейнеров. Единственное, что интересно знать об этом, - это то, что когда я повторно развертываю этот ПЛК, он запускает компилятор g ++ для перекомпиляции программы. У меня есть один дополнительный контейнер, который контролирует эти повторные развертывания.

Поэтому, если я повторно разверну свою программу в 4 контейнерах, 4 процесса g ++ появятся и будут работать. Примерно до отметки 4 PLC мой процессор i3-2310M имеет все ядра на 100%. Здесь у меня есть график с количеством контейнеров, в которых я развертываю, и временем, которое требуется для повторного получения данных после их повторного развертывания.

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

Эти контейнеры PLC отправляют пакеты Modbus / TCP в управляющий контейнер, и я измеряю время с помощью Wireshark между последним сообщением перед повторным развертыванием и первым сообщением после.

Возможные объяснения этой странной закономерности?

У вашего процессора два ядра. Таким образом, 1 и 2 ПЛК занимают одинаковое количество времени.

Помимо этого, это является довольно линейно. Есть одна строка, которая включает все четные числа (где оба ядра заняты), и одна, которая включает все нечетные (где одно ядро ​​иногда не имеет работы, потому что остается только одно задание).

Эти две линии сходятся, потому что при наличии достаточного количества ПЛК вы можете держать оба ядра занятыми почти все время.