Обычная ситуация — 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, на одно ядро, более медленные задачи — на другое:
Презентация на английском языке: