Как работает сходство Windows с многопоточными процессорами?

419
Priyankar Ghosh

Позвольте мне подробно описать наше требование. Мы выполняем какое-то задание, которое требует захвата IP-данных через сетевую карту и последующей обработки полученных данных в режиме реального времени. Обработка захваченных данных может быть выполнена частично или полностью в зависимости от доступности процессора. Но все, что можно сделать, будет сделано в режиме реального времени.

Наша архитектура выглядит примерно так. Мы используем один поток для захвата данных IP с карты NIC. И число потоков создается для обработки захваченных данных в режиме реального времени, и это число может доходить до чего угодно (скажем, 500), которые являются внутренними потоками ЦП.

Вот наши наблюдения: Обратите внимание, что у нас есть один поток для сбора данных IP. Когда мы создаем меньшее количество потоков обработки (скажем, 10) и загружаем центральный процессор на уровне около 95%, абсолютно не возникает проблем в потоках захвата данных IP. Но когда мы создаем огромное количество потоков обработки (скажем, 250) и загружаем ЦП на уровне около 80%, поток захвата не может правильно захватывать данные IP. В последующем, доступность процессора выше, но проблема возникает.

Таким образом, мы решили, что проблема может быть связана с количеством потоков и их планированием (также переключением контекста). Мы подумали о следующем типе распределения ЦП среди потоков. Используя сходство, мы установим 25% ядер для захвата потока и 75% ядер для других потоков обработки.

Для начала мы написали простую программу на четырехъядерном компьютере i7 с HT ON. Предположим, что логическими ядрами являются A1 A2 B1 B2 C1 C2 D1 D2 (реальные ядра - ABCD). Наш пример потока таков, что он потребляет все ресурсы на одном ядре HT. Так что, если я запустил 8 таких потоков на всех 8 логических ядрах, загрузка ЦП показывает 100%. Теперь мы попытались присвоить близость. Если мы создадим 2 ядра и установим сродство к A1 и B1 (это не один поток к A1, а другой поток к B1, это объединенное сродство для двух потоков), то это работает нормально, и загрузка ЦП показывает 25%. Но если мы установим объединенное сходство для A1 и A2 для двух потоков, то будет использовано только 12,5% (диспетчер задач показывает, что используется только одно ядро). Но если мы установим сродство 4 потоков к A1, A2, B1, B2, то загрузка ЦП покажет 50%. Так что вопрос в том, почему второй случай (12,5%) не работает?

1
Там нет разницы. Windows будет относиться к ядру HT точно так же, как к физическому хранилищу. Ваш вопрос, честно говоря, очень запутанный. Много информации, которая действительно не требуется, чтобы задать вопрос, который вы хотите задать. Ramhound 10 лет назад 0
Если вы дадите Windows меньше возможностей, она сделает худший выбор. Вы почти наверняка не должны портить связь с процессором вообще. Планировщик может выполнять работу намного лучше, чем вы, потому что он понимает такие вещи, как повышение тактовой частоты, температуры ядра, требование прерываний или обслуживание оборудования и т. Д. David Schwartz 10 лет назад 2
@Priyankar Ghosh: Почему вы создаете 250 потоков обработки? Ваш четырехъядерный ПК не может работать более 4 одновременно. Если ваши потоки обработки используют ввод-вывод, который переводит их в состояние ожидания, тогда, несомненно, было бы лучше найти способ уменьшить это узкое место. James P 10 лет назад 0

0 ответов на вопрос

Похожие вопросы