2014-01-30 2 views
2

Ранние маршрутизаторы Cisco, работающие под управлением операционной системы IOS, увеличили скорость обработки пакетов, выполнив переключение пакетов в обработчике прерываний вместо «обычного» процесса операционной системы. Выполнение обработки пакетов в обработчике прерываний гарантировало, что переключение контекста в операционной системе не влияет на обработку пакетов. Насколько я понимаю, обработчик прерываний - это часть программного обеспечения в операционной системе, предназначенная для обработки прерываний. Как понять концепцию переключения пакетов, выполняемую в обработчике прерываний?понимание концепции запуска программы в обработчике прерываний

+0

Существует на самом деле не что-нибудь, чтобы понять - может быть, вам просто нужно прочитать на [прерывающий] (https://en.wikipedia.org/wiki/Interrupt) в целом? –

+0

@Paul R Означает ли это «прерывание переключения» просто, что каждый пакет, полученный интерфейсом маршрутизатора, генерировал прерывание для процессора маршрутизатора и получил немедленное внимание? Этот подход имел преимущество перед обработкой пакетов в ОС, потому что на него не влияет переключение контекста ОС? – Martin

+0

Возможно - я ничего не знаю о том, что Cisco сделала с этими конкретными маршрутизаторами, но это просто звучит как взломать, чтобы уменьшить латентность. –

ответ

1

Использование прерываний предпочтительнее, когда событие требует немедленного внимания операционной системой или программой, которая установила процедуру обслуживания прерываний. Это, в отличие от опроса, где программное обеспечение периодически проверяет, существует ли условие, что указывает на то, что произошло событие. Процедуры обслуживания прерываний обычно не предназначены для самостоятельной работы. Они скорее написаны, чтобы как можно быстрее достичь их конца, чтобы нормальное выполнение могло возобновиться. «нормальное исполнение» означает, что предшествовавшая обработка местоположения и состояния была прервана, когда произошло прерывание. причина в том, что следует избегать того, что повторное прерывание происходит снова, пока его обработчик все еще выполняется, или его можно игнорировать или привести к неправильным результатам или, что еще хуже, к сбою программного обеспечения (сбоям). Так что обычно работает процедура обслуживания прерываний, считывая любые данные, связанные с этим событием, и сохраняя их в очереди, сигнализируя о том, что очередь испытывала мутацию, и настраивая такие вещи, что может произойти другое прерывание, а затем возобновить, восстановив контекст предварительной прерывания. данные в очереди, связанные с этим прерыванием, теперь могут обрабатываться асинхронно, не подвергая риску прерывания.

+0

Спасибо! Тем не менее, я все еще не совсем понимаю, как программа может работать в обработчике прерываний. Cisco IOS поддерживает пересылку пакетов в обработчике прерываний, что означает, что переключение контекста и потенциальное преодоление процесса не влияют на пересылку пакетов. Означает ли это, что, когда пакет прибывает, генерируется прерывание к процессору, а обработчик прерываний не прекращается до тех пор, пока пакет не будет перенаправлен? Например, есть части ядра Linux, которые работают в обработчике прерываний? Могу ли я запускать программы пользовательского пространства Linux в обработчике прерываний? – Martin

+0

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

+0

и обратил внимание на следующую задачу, а не тратил время, ожидая завершения пакета, пока тот же пакет не будет дополнительно обработан в такое же прерывание. Принимая во внимание также, что пакеты от и до разных портов должны обрабатываться параллельно, не зависящие от общего ресурса, такого как обработчик прерываний, пока это не их очередь, это, похоже, создает узкое место, а не ускоряет обработку –

0

Ниже описана процедура для выполнения переключения прерываний уровня:

Посмотрите структуру памяти, чтобы определить адрес следующего узла и исходящий интерфейс.

Переписывать слой 2 (OSI), который также называется переходом MAC, что означает изменение инкапсуляции пакета в соответствии с исходящим интерфейсом.

Поместите пакет в кольцо tx или выходную очередь исходящего интерфейса.

Обновите соответствующие структуры памяти (сбросьте таймеры в кешках, счетчиках обновления и т. Д.).

Прерывание, возникающее при получении пакета из сетевого интерфейса, называется «прерыванием RX». Это прерывание отклоняется только тогда, когда выполняются все вышеперечисленные шаги. Если какой-либо из первых трех шагов выше не может быть выполнен, пакет отправляется на следующий уровень переключения. Если следующий уровень переключения - это переключение процесса, пакет помещается во входную очередь входящего интерфейса для переключения процесса, и прерывание отклоняется. Поскольку прерывания не могут быть прерваны прерываниями одного уровня, и все интерфейсы вызывают прерывания одного уровня, никакой другой пакет не может быть обработан до тех пор, пока текущее прерывание RX не будет уволено.

Различные пути переключения прерываний могут быть организованы в иерархии, начиная с той, которая обеспечивает быстрый поиск того, который обеспечивает самый медленный поиск. Последнее средство, используемое для обработки пакетов, - это всегда переключение процессов. Не все интерфейсы и типы пакетов поддерживаются в каждом пути переключения прерываний. Как правило, только те, которые требуют проверки и изменения, ограниченные заголовком пакета, могут быть переключены с прерываниями. Если перед отправкой необходимо проверить полезную нагрузку пакета, переключение прерываний невозможно. Более конкретные ограничения могут существовать для некоторых путей переключения прерываний. Кроме того, если соединение уровня 2 по исходящему интерфейсу должно быть надежным (то есть оно включает поддержку повторной передачи), пакет не может обрабатываться на уровне прерывания.

Ниже приведены примеры пакетов, которые не могут быть прерываний коммутируемые:

трафика на трафик маршрутизатора (протокола маршрутизации, Простой протокол сетевого управления (SNMP), Telnet, Тривиальный протокол передачи файлов (TFTP), пинг , и так далее). Трафик управления может быть получен и направлен на маршрутизатор. У них есть конкретные связанные с задачей процессы.

OSI Layer 2, ориентированные на соединение инкапсуляции (например, X.25). Некоторые задачи слишком сложны для кодирования на пути переключения прерываний, потому что слишком много инструкций для запуска или требуются таймеры и окна. Некоторые примеры включают такие функции, как шифрование, трансляция локального транспорта (LAT) и Data-Link Switching Plus (DLSW +).

Подробнее здесь: http://www.cisco.com/c/en/us/support/docs/ios-nx-os-software/ios-software-releases-121-mainline/12809-tuning.html

Смежные вопросы