TL; DR - наличие / proc / irq / 24 / smp_affinity указывает на то, что ваша Linux система SMP поддерживает сходство. Текст IO-API C является типом контроллера прерываний (типичный P C), и он NOT указывает, что система может обрабатывать привязки. В системах ARM GI C обычно является контроллером прерываний, хотя некоторые прерывания могут быть направлены на «субконтроллер».
По крайней мере, основная линия - , поддерживающая некоторые сходства согласно Kconfig . Тем не менее, я не уверен, что вы пытаетесь сделать. Прерывание может выполняться только на одном процессоре, поскольку только один процессор может удалить данные с NI C. Если конкретный процессор выполняет сетевой код, а остальные используются для других целей, сходство имеет смысл.
Данные на этом ядре, вероятно, не будут в кеше, поскольку буферы NI C, вероятно, являются DMA и не кэшируется Итак, я не совсем уверен, чего бы вы достигли или как вы ожидаете, что прерывания будут работать на всех четырех процессорах? Если у вас есть четыре интерфейса NI C, вы можете привязать каждый к ЦП. Это может быть полезно для проблем энергопотребления.
В частности, для вашего случая четырех процессоров маска сходства 0xf отключит любое сходство, и это случай по умолчанию. Вы можете cat /proc/irq/24/smp_affinity
увидеть, что сходство установлено. Кроме того, наличие этого файла будет означать, что ваша Linux SMP-система поддерживает сходство. Текст IO-API C - это тип контроллера прерываний (типичный P C), и он NOT указывает, что система может обрабатывать сходства.
Смотрите также:
NOTE Эта часть носит умозрительный характер и NOT работает с любыми известными мне картами.
Основная часть, которую вы хотите, обычно невозможна. Регистры NI C являются единым ресурсом. Существует несколько регистров, и они имеют общие последовательности для чтения и записи регистров для выполнения операции. Если два процессора записывают (или даже читают) регистр одновременно, то это сильно перемешает NI C. Часто процессор не вовлечен в прерывание, и только некоторому механизму DMA нужно сообщить о следующем буфере в прерывании.
Для того, что вы хотите использовать, вам понадобится NI C с несколькими регистрационными «банками», которые могут использоваться независимо. Например, просто прочитать банки пакетов READ / WRITE легко. Однако может быть несколько банков для написания разных пакетов, и тогда карте придется управлять тем, как их сериализовать. Кроме того, карта может выполнять некоторую проверку пакетов и прерывать разные процессоры на основе фиксированных значений пакетов. Ie, порт и IP. Это сопоставление пакетов будет генерировать разные источники прерываний, и разные ЦП могут обрабатывать разные совпадения.
Это позволит вам направлять разные траффиксы сокетов c на конкретный ЦП, используя один NI C.
Проблема в том, что сделать эту карту аппаратно будет невероятно сложно по сравнению с существующими картами. Это было бы дороже и потребовало бы больше энергии для работы.
Если это стандартное аппаратное обеспечение NI C, вращение ЦП не дает выигрыша, если исходный ЦП не занят. Если есть активность вне сети, лучше оставить другие ЦП в покое, чтобы кеш можно было использовать для другой рабочей нагрузки (код / данные). Таким образом, в большинстве случаев лучше всего сохранять прерывание на фиксированном процессоре, если оно не занято, и тогда он может пинг-понг между несколькими процессорами. Почти никогда не будет полезно запускать прерывание на всех процессорах.