Я обнаружил серьезные ограничения в коде, который пишу.
Я пытаюсь сделать так, чтобы мой код работал на машине smp xeon с 24 аппаратными потоками максимально эффективно.
Для такой задачи я использую commoncpp
оболочки вокруг собственных потоков и сокетов posix, а также библиотеку libev для обнаружения событий чтения в дескрипторах файлов сокетов.Цель, которую я хочу получить, состоит в том, чтобы не допустить потери данных на соединениях через сокет UDP, которые должны занимать около 600 Мбит / с данных каждое.
Я обнаружил, что установив более двух соединений, я получил потерянные данные.
Я также обнаружил, что пять потоков (по одному на соединение) не очень хорошо сбалансированы / распределены по ядрам процессора ... при этом я хочу сказать, что работают только два ядра, а остальные 22 оставлены отдельно друг от друга неиспользованными.
Конечно (я не могу это скрыть). Я - фиктивный разработчик smp, который действительно нуждается в некоторой помощи при попытке установить «аппаратные потоки».
Я буду так рад понять,есть какая-то возможность / функция posix для форсирования аппаратных потоков или какое-то руководство (для чайников вроде меня :)), которое объясняет, как использовать ядра процессора для специальных нужд.
Как вы, возможно, поняли, яхотел бы иметь одно выделенное ядро процессора на соединение.
Спасибо всем!