November 17, 2015

Изоляция ядер в TwinCAT 3.1

В TwinCAT 3 появилась возможность закрепить задачу (Task) за определенным ядром многоядерной системы. В TwinCAT 3.1 появилась новая возможность — изоляция ядра от операционной системы. Это очень полезная функция, особенно для балансировки вычислительной нагрузки.

Обычная ситуация — CX5120 и TwinCAT 2: операционная система Windows и система реального времени TwinCAT выполняются на одном ядре. Приоритет за Твинкатом, а операционной системе отдаются оставшиеся 20% времени процессора. Если Твинкату понадобится меньше, то он поделится с операционной системой.

Теперь возьмем CX5130 с двухъядерным атомом. Ситуация аналогичная — 80% Твинкат, 20% операционная система. Нагрузка распределяется между ядрами средствами операционной системы. Но(!) ситуация резко меняется, если работает TwinCAT 3.1, в котором можно изолировать одно или несколько ядер от операционной системы (но не все). Ну, и конечно же можно закрепить задачу за конкретным ядром: здесь все по прежнему.



Практика


В принципе, на картинке выше можно остановить свой рассказ, но все-таки проверим. Берем трех ядерную систему, изолируем от операционной системы два ядра, оставляя Windows только одно ядро. Как и ожидалось, диспетчер задач Windows показывает, что операционной системе известно только одно процессорное ядро:



Предположим, что операционная система выполняет ряд высокопроизводительных задач. Выделим ей два ядра, а систему реального времени TwinCAT перенесем на выделенное, изолированное ядро.



Операционная система — сама по себе, Твинкат — сам по себе. Тут же обратим внимание на графу CPU Limit — она показывает, что системе реального времени выделено 100% ресурсов ядра. TwinCAT теперь полноценный хозяин всего ядра и будет работать независимо от вычислительной загруженности операционной системы.


Как изолировать ядра?


Можно вспомнить, что процессы в операционной системе закрепляются за ядрами через CPU affinity mask, но здесь этого знать не требуется, достаточно:
  • нажать кнопку "Read from Target", чтобы определить количество ядер целевой системы; 
  • задать сколько ядер оставить операционной системе, а сколько для остального;
  • по окончании нажать "Set on target" и перезагрузить целевую систему.



После распределения ядер (и если Твинкату доступны несколько ядер), можно распределить задачи: высоконагруженные задачи, такие как управление движением NC SAF, на одно ядро, более медленные задачи — на другое:



Презентация на английском языке:

No comments

Post a Comment

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