Кратко
- Соединение Click обозначает возможный путь передачи пакета вперёд. Оно не является трассой и само не устанавливает, какой конец инициировал конкретную передачу.
- При push источник вызывает следующий элемент вперёд. При pull назначение посылает запрос назад, а полученный пакет всё равно движется по стрелке. Явная
Queueсоединяет эти режимы. - Граф делает обязанности читаемыми, но типы портов, инициализация, состояние очереди, выбор scheduler, завершение устройства и приём остаются разными доказательствами.
Линия разрешала путь, а не рассказывала событие
Click собирает маршрутизатор из небольших элементов. Чтение устройства, проверка заголовка, поиск маршрута, классификация, счёт, хранение и отправка могут быть отдельными блоками. Соединения образуют направленный граф.
В журнальной статье 2000 года Eddie Kohler, Robert Morris, Benjie Chen, John Jannotti и M. Frans Kaashoek называют ребро возможным путём передачи пакета. Ограничение существенно. Наличие ребра не доказывает, что пакет прошёл. Стрелка A–B также не доказывает, что A начал каждый вызов.
Недостающий факт задаёт контракт портов. Граф отвечает, куда может идти пакет; push или pull — откуда вошло управление. Если метрика склеивает эти вопросы, ожидание выходного устройства превращается в предполагаемое бездействие источника, а разрешённая ветка — в якобы исполненную.
Push начинается с прихода
Входное устройство получает пакет без предварительного запроса снизу. Его элемент вызывает следующий push-порт. Управление и пакет идут вперёд, пока пакет не будет обработан, отброшен или сохранён.
Источник распоряжается стартом, но не всеми последствиями. Classifier выбирает другой выход, проверка отклоняет заголовок, ограниченная очередь теряет переполнение. Счётчик приёма не подтверждает передачу на выходе.
Для разбора нужны событие устройства, идентичность активной конфигурации, вызывающий элемент, реальная ветка и результат на каждой значимой границе. Похожие итоговые числа не восстанавливают связь, которую не записали.
Pull начинается со свободного выхода
Передающее устройство просит пакет, когда готово. Элемент назначения инициирует pull, и запрос идёт против стрелки, пока источник не вернёт пакет или пустой ответ.
Диссертация Kohler показывает две временные картины. При push поток управления начинается у приёмника и идёт вперёд. При pull он начинается у передатчика и идёт назад. Пакет всегда идёт вперёд. Одна и та же линия несёт две истории вызова.
Так строится составной scheduler. Он имеет несколько pull-входов и один pull-выход. Получив запрос снизу, выбирает вход и спрашивает его. Расположение показывает владельца решения. Линии не сообщают, кто был выбран в данном событии, какая очередь была пуста и не голодал ли другой источник.
Queue владеет промежутком между часами
В простой конфигурации Queue стоит между принимающей push-частью и передающей pull-частью. Пришедшие пакеты проталкиваются во вход и хранятся FIFO. Когда устройство готово, оно тянет с выхода очереди первый пакет.
Отдельная очередь признаёт, что приход и обслуживание живут по разным часам. Кто-то должен отвечать за интервал. Click даёт этому состоянию имя, порты, вместимость и наблюдаемость.
Квитанция узкая. Успешный enqueue подтверждает принятие данной очередью в памяти при данной конфигурации. Он не гарантирует сохранность после сбоя, максимальную задержку, будущий выбор scheduler, физическую отправку или удалённый приём. Dequeue говорит только об уходе из этой очереди.
FIFO не обещает общей справедливости. Несколько очередей могут сходиться к планировщику, потеря может случиться раньше, уведомления, пакеты и готовность устройства меняют частоту pull. Явная граница улучшает вопрос, но не расширяет ответ без доказательств.
Несовместимое обещание можно отклонить заранее
Работающий порт Click имеет тип push, pull или agnostic. Push соединяется с push, pull с pull. Прямое соединение push–pull незаконно. Agnostic-порт принимает совместимое поведение соседа.
Это минимальная общая спецификация. Независимые авторы создают элементы без постоянно действующего судьи, но обязаны договориться, кто вправе начать следующий обмен. Несогласованность проверяется локально и отклоняется при инициализации.
Опубликованный файл ещё не принят машиной. Работа о SMP Click описывает parse, создание router, попытку initialization и лишь после успеха install и запуск маршрутизации. Коммит, изображение и синтаксический успех — не доказательство активного datapath.
Оптимизированному исполнению нужна родословная
Мелкие элементы повышают гибкость, но добавляют вызовы. Kohler, Morris и Chen применили к конфигурациям техники компиляторов. Инструменты Click специализируют classifiers, удаляют мёртвый код и виртуальные вызовы, проверяют alignment и объединяют определения.
После преобразования логическое ребро не обязано существовать как отдельный машинный вызов. Аудит хранит исходную конфигурацию, порядок трансформаций, результат, build и установленный экземпляр. Первая объясняет обязанности, цепочка доказывает принятие.
Без неё исходный граф ошибочно становится literal trace, либо оптимизированный бинарник — необъяснимым ящиком, хотя он выведен из декларативного описания. Приоритет работающего кода требует доказуемого перехода от правила к запущенной реализации.
У человеческой истории тоже несколько входов
Официальная страница Harvard называет Click проектом Kohler, имя стоит первым в журнальной статье, а MIT-диссертация развивает архитектуру и инструменты. Однако это совместная работа: Morris, Chen, Jannotti и Kaashoek подписывают основную статью; Massimiliano Poletto участвует в отчёте о языке; история репозитория содержит многих последующих авторов.
История одинокого изобретателя повторила бы ту же ошибку: одна стрелка якобы содержит все вызовы. Вклад Kohler точнее виден в методе — небольшие составные обязанности, объявленный инициатор и окончательное доказательство от реально работающей системы.
Источники
- Eddie Kohler — официальная страница Harvard
- Официальный список публикаций
- The Click Modular Router — авторская версия TOCS
- The Click Modular Router — диссертация MIT
- Programming Language Techniques for Modular Router Configurations
- Programming Language Optimizations for Modular Router Configurations
- Flexible Control of Parallelism in a Multiprocessor PC Router
- Click for Measurement
- Официальный репозиторий Click
- Heng Lu — Running-Code Primacy
- Heng Lu — Minimum Initial Specification, Localized Future Decision, and Voluntary Adoption
Обзор для участников
Подробный контекст профиля
Войдите с подходящим уровнем подписки, чтобы открыть полный обзор и примечания к источникам.
Только для Стратегического сообщества
Стратегическое сообщество
Открыто всем читателям. Вступите и войдите, чтобы открыть обзоры профилей.
Вступить в Стратегическое сообществоТолько для Альянса лидеров
Альянс лидеров
Для проверенных владельцев IP-активов и руководителей. Войдите, чтобы открыть обзоры Альянса.
Вступить в Альянс лидеров
