Использование четырех процессорной системы

Эта машина должна была использоваться для управления роботом с двумя руками, с семью сочленениями каждая. Вы наверное можете представить себе такую систему, и предположить насколько качественным должно быть ее управление. Чтобы можно было точно ею управлять процессоры должны были быть не меньше 1000 MGz. Компьютер должен был протоколировать свою работу на жесткий диск, работать с сетью (используя TCP/IP) с высокой скоростью и выполнять еще несколько задач.

Когда мы испытывали эту систему на однопроцессорном системном блоке результаты были плохие (нам не хватало мощности процессора 1000 MGz). Оптимизировав алгоритм для выполнения параллельной обработки данных мы перешли на двухпроцессорную систему. Результаты улучшились, но мощности процессора все равно не хватало. После этого мы поставили четырехпроцессорную систему, только тогда остались довольны результатом.

Прерывания

Одной из наших задач была оценка влияния прерываний на общую производительность. К счастью, все поступающие прерывания обрабатываются первым процессором (определяется в установках ядра). В случае, если два ядра, запущенных на различных процессорах одновременно возьмутся за обработку прерываний, они могут заблокировать друг друга. Это не говорит о том, что остальные процессоры полностью защищены. Что случится, если один поток, работающий на втором процессоре, получит уведомление о входе в обработчик прерывания и отошлет данные ядру на первом процессор? Это может повлиять на время отклика системы. С другой стороны, большая часть обрабатываемых потоками прерываний работает на первом процессоре.

Привязка к процессору

Привязка к процессору (affinity) это возможность запустить поток так, что бы он не был перенесен с процессора на другой процессор, где выполняет его процесс. В будущем вам скорее всего придется столкнуться с этим.

Тесты показали прирост производительности, если два потока были привязаны к второму и третьему процессорам. Оба потока выполнялись с приоритетом 63. Так как это самый высокий приоритет в системе, мы были уверены, что ни один другой поток не сможет повлиять на тестирование. В действительности, нам очень хотелось отдать процессор в полное распоряжение одного потока, т.е. реализовать что-то вроде эксклюзивного режима. Мы могли измерить количество «промахов» в стеке, появляющихся из-за других потоков, пока высокоприоритетные потоки были заблокированы в состоянии приема. Эти тесты проводились на очень ранней бета-версии Neutrino 2.1. Вполне возможно, что сейчас нам бы не пришлось делать привязку потоков к процессорам.