July 26, 2016

Вебинар. Оптимизация нагрузки многоядерных систем TwinCAT 3

30 июня Кнут Гётель провел вебинар на тему оптимизации нагрузки многоядерных систем в TwinCAT 3 (TwinCAT 3 | Optimised utilisation of multi-core features). Большая часть нюансов многозадачности в TwinCAT 3 уже рассматривалась, поэтому далее только крошки.


Как обстоят дела в TwinCAT 2:
  • Рантайм может исполнятся только на одном ядре.
  • Рантайм работает только в 32-х разрядных системах.
  • Выбор ядра на котором будет выполняться рантайм производится через реестр (можно считать, что 98% пользователей об этом не знает).

Однако, большинство современных процессоров (в том числе и ARM) уже хотя бы с двумя ядрами (плюс интеловский гипертрединг, дающий в два раза больше). Мегагерцы растут медленнее, чем количество ядер. Интел грезит (или грозит) приблизительно 128-256 ядер на систему уже в ближайшее время. Нужно куда-то бежать и что-то с этим делать.

Как обстоят дела в TwinCAT 3:
  • Отзывчивость (Latency) меньше одной микросекунды (на тестовом Intel Core i5).
  • Настраиваемый уровень предупреждений превышения уровня отзывчивости: если вероятен сильный джиттер (jitter, дрожание, отклонение) — можно задать уровень паники. Будет вылезать мутная табличка, что на этапе наладки скрасит скудность средств отладки производительности.
  • Вроде бы гарантируют не превышение отведенного времени для TwinCAT. Вероятно, в случае, когда TwinCAT нагружен чересчур сильно, он перестанет отнимать время у бедного Windows. И по косвенным результатам, этому уже есть подтверждения.


Нюансы многоядерности


Задачи цифрового управления движением NC SAF и NC SVB должны быть закреплены за одним ядром. Для CNC такого ограничения нет.

Для запуска TwinCAT и Windows на одном и том же ядре в 64-х разрядной системе необходима поддержка процессором VT-x технологии. Во всех остальных случаях (AMD, старые процессоры, виртуальные машины и т. п.), придется запускать TwinCAT на отдельном ядре. Причем для TwinCAT, ядро нужно изолировать от Windows, т. е. уделить TwinCAT 100% процессорного времени.

Гипертрединг рекомендуется выключить т. к. псевдо-полу-ядра очень тесно взаимодействуют в плане блоков процессора, кеша, памяти и прочих устройств в единственном числе (физически — это по прежнему одно ядро, поэтому возможно нарушение синхронизации).


Взаимодействие ПЛК-модулей


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

1. Маппинг данных между операционными образами.
  • Доступно для всех языков.
  • Гарантируется целостность данных.
  • Передача выполняется синхронно с тактами задачи (пульс задачи, task pulse).

2. Указатель на область данных.
  • Не гарантирует целостности данных.
  • Прямой синхронный доступ из программы (данные никуда не копируются, прямой доступ к ним).

3. Вызов методов через интерфейс.
  • Прямой, синхронный доступ.
  • Не гарантируется целостность данных

4. Протокол ADS.
  • Асинхронный и событийный способы доступа.
  • Клиент-сервер.
  • Вертикальное и горизонтальное применение для обмена данными.
  • Доступен обмен между ядрами.
  • Доступен обмен по локальной/глобальной сети (например, через TCP/IP).
  • Целостность данных — гарантируется.

No comments

Post a Comment

Note: Only a member of this blog may post a comment.