Предлагаю продолжить тему, начатую в предыдущей статье (https://habr.com/ru/post/489068/). Если в ней по сути предавались мечтаниям по типу, как будет все хорошо (или плохо — зависит от типа личности) когда в году 20ХХ наступит технологическая сингулярность и цифровое бессмертие, то в этой и последующих статьях попытаюсь сделать все возможное для того что бы счастливое будущее (сингулярность) наступила быстрее, а именно создать вычислительную парадигму для процессора пятого поколения (помните было там пару строк про это).
Воспользуюсь «авторским правом» и назову создаваемую вычислительную парадигму «Rutel».
Попробуем разобраться: а есть ли вообще необходимость в чем-то радикально новом, или может старичка фон Неймана можно «подшаманить» и хватит? Японцы как раз на этом погорели: пока они пытались сделать новую архитектуру и параллельный процессор, технологии производства обычных последовательных процессоров улучшились. Улучшились настолько, что были достигнуты все ожидаемые для параллельного процессора параметры на обычном последовательном.
Вероятность повторения подобного сценария в настоящее время невелика по многим причинам:
У разработчиков вычислительной техники нет идей, кроме банального увеличения числа ядер в вычислительной системе. Думаю, такой подход не является продуктивным для систем, в самой основе которых нет понятия «параллельности вычислений». Да и логическое (последовательное) мышление человека (программиста) тоже параллельностью не блещет.
Учитывая обозначенные проблемы, давайте определим требования, выдвигаемые в настоящее время к перспективным вычислительным системам:
Создание любого устройства производится в ответ на какую-либо потребность. Современная вычислительная техника была создана в ответ на потребность в больших объемах научных и инженерных вычислений. В настоящее время основное использование вычислительной техники — «обсчет», «оживление» различных виртуальных моделей, часть из них — упрощенные модели объектов из реального физического мира, другие вообще полностью виртуальны и при этом взаимодействуют с внешним миром посредством различных интерфейсов.
Перенос личности человека в такую систему тоже является современной потребностью.
Вычислительная парадигма фон Неймана по своей сути представляет собой продвинутый и достаточно мощный, но все же калькулятор. В основе современной вычислительной техники лежит «подражание» логическому мышлению человека (обратите внимание: только логическому мышлению, а не строению мозга целиком), а оно не предназначено моделирования окружающего мира. Логическое мышление человека является высокоуровневым психическим процессом и принципиально последовательно. Задумайтесь над словосочетанием: язык программирования. Язык программирования, основа взаимодействия с вычислительной системой логически связан с частью тела человека и наследует многие его особенности.
Как пример, попробуйте одновременно проговорить две фразы. Да и полноценно слушать одновременно двух человек (особенно с похожими голосами) не получается.
В качестве основной задачи, следует принять задачу поддержание или «оживление» объектов виртуального мира. Виртуального мира, содержащего в себе как модели объектов из реального мира вкупе со связями (через различные датчики и манипуляторы), так и модели, не имеющие аналогов в нем. «Новую вычислительную парадигму», в пределе, следует рассматривать не как очередной инструмент решения очередных задач, а как набор дополнительных измерений для нашего физического мира. Хочу заметить, человек (в целом) и является биологической системой, решающей ровно такую же задачу, соответственно для переноса личности человека потребуется система с таким же или большим функционалом.
Естественно, начинать необходимо с постулирования свойств виртуального пространства. Сегодняшняя вычислительная техника представлена одномерным пространством (бесконечное адресное пространство). Но этого недостаточно для моделирования трехмерного (+ время) мира, что постоянно порождает проблемы, требующие «костылей» для своего решения.
Приведу примеры проблем, присущих современной вычислительной парадигме:
Эти примеры только для понимания, что большинство больших проблем заложены в самой основе вычислительной парадигмы, в самых простых элементах-«кирпичиках». Эти «кирпичики» в какой-то момент не пожелают складываться в единую структуру и все «здание» рушится.
Постулаты (будут пополняться, а потом сводиться к нескольким базовым):
Если совсем кратко, то виртуальное пространство представляет собой многомерную пену из соприкасающихся между собой пузырей.
Данные постулаты позволят создавать любые системы (наборы взаимодействующих объектов) из реального (физического) или виртуального мира. Пример: доступ по адресу через объект «память» с использованием измерения «адрес» и таких адресных пространств может быть любое число. У адресуемых объектов появляются дополнительные измерения, соответствующие различным адресным пространствам. Объектов «память» в виде физических объектов может и не существовать (чисто виртуальная модель).
Важный момент: в постулатах не указывается место расположения объектов, наличие и устройство памяти, даже понятия адресного пространства нет (уж тем более единого). Все что можно сказать, это потенциальное наличие пространства («пузыря»), убедиться в наличии самого пузыря можно только по наличию «контакта». Внутри «пузыря» все что можно «пронумеровать», так это точки контакта. Если контактов нет, то это полностью независимые и теоретически никак не влияющие друг на друга системы, но при этом все они находятся в исходном «пузыре» и в будущем могут начать взаимодействовать.
Для задачи переноса личности, цифровой мозг будет выглядеть примерно как один общий пузырь, включающий 100 миллиардов пузырьков, которые содержат объект, эмулирующий нейрон или объект связи с биологическим мозгом. Визуально можно даже представить вытягивания (деформация проекции «пузырька» в трехмерном пространстве) нитей (аксонов дендритов) к местам контактов.
Внимание
Все идеи и алгоритмы, описываемые в данной статье, являются результатом моей независимой и полностью самостоятельной интеллектуальной деятельности. Как автор, разрешаю свободно использовать, изменять, дополнять все идеи и алгоритмы любому человеку или организации в любых типах проектов при обязательном указании моего авторства.
Для современной парадигмы реализовать пространство, как одномерное кольцо достаточно просто: адрес, данные для «записи»-«чтения» и сигналы «читать»-«писать». Для парадигмы с многомерным «пузырем» требуется создать систему связи «всех со всеми» (в пределе), конечно в реальности такое невозможно. Связность большинства объектов будет происходить через узлы посредники. Распределение «дальности связи» будет иметь «нормальный тип», чем меньше расстояние между узлами, тем большее число таких связей (логика и здравый смысл диктуют необходимость пометить взаимодействующие объекты как можно ближе друг к другу). Основой системы связи с узлами посредниками, является алгоритм мультиплексирования (разделения) канала связи между несколькими источниками.
Вначале лучше дать упрощенное объяснение принципа работы алгоритма мультиплексирования физического канала связи.
Передаваемые данные можно представить как «россыпь» бусин (каждая бусина уникальна и последовательность менять нельзя), которые нужно передать по трубке диаметром равным диаметру бусины. Если источник бусин один, то проблемы доступа к «телекоммуникационной трубе» нет, она в монопольном владении. Если источников бусин много, то они могут сталкиваться на входе в «трубку», да еще и на выходе бусины нужно разделить по отдельным бункерам.
Предлагаемый алгоритм (на примере бус) выглядит так:
Если в момент времени, когда необходимо помещать бусину в трубку, бусина еще не была передана по входящей трубке и бункер пуст, то чтобы обеспечить однозначность работы алгоритма сортировки, нужно вместо нее поместить специальную «пустую» бусину. На приемной стороне пустая бусина не будет помещена в бункер, а просто отбросится.
Далее будет текст, ориентированный на специалистов в области телекоммуникаций.
Из-за желания охватить все аспекты телекоммуникационной парадигмы, текст получился несколько сумбурным и раздутым. Что требует вдумчивого чтения, возможны неточности терминов и логические ошибки (буду благодарен за поправки).
Есть проблема с трудностью восприятия текста, хочется дополнить описание картинками, но умения красиво рисовать у меня нет. Если кто то хочет взвалить на себя такую нагрузку, буду очень признателен. В ответ могу предложить только пометку об авторстве на каждом рисунке.
Современное состояние сетей передачи данных.
Современные сети передачи данных рассчитаны на относительно небольшую интенсивность соединений (количество каналов или отдельных сообщений) и при этом предъявляются ослабленные одновременные требования к стабильности времени, скорости доставки, времени создания виртуального канала, времени задействования резервного пути передачи данных и максимального процента утилизации пропускной способности физического канала. Сеть передачи данных построенная по таким принципам критически не соответствует требованиям выдвигаемым новой вычислительной парадигмой. Для понимания масштаба ожидаемого увеличения трафика и требований к скорости можно взять объем и скорость передаваемых через стек процессора данных и связанных с ними данных в памяти (через стек чаще всего передают указатели) и умножить на число вычислительных ядер типичного суперкомпьютера. Данные требования и будут нижней планкой требований к сети передачи данных.
Распределенная вычислительная система представляет собой большое число взаимосвязанных (участвующих в совместных вычислениях) вычислительных модулей (блоков), которые порождают, в общем случае, большое число кратковременных соединений. Соединения требуют большую скорость передачи в сочетании с малой, стабильной задержкой и гарантией доставки.
Выдвигаемые требования к сети передачи данных со стороны перспективной (распределенной) вычислительной системы, от выполнения которых ультимативно зависит производительность всей системы.
В идеале, для коммуникационной системы требуется наличие непосредственной связи каждого компонента системы с каждым, но в реальности такое невозможно и приходится производить передачу данных через промежуточные узлы. В каждом узле такой сети находится коммутатор, связанный с несколькими такими же узлами, с использованием разделяемых (на виртуальные каналы) магистралей связи. Основой такой коммуникационной системы являются алгоритмы мультиплексирования (разделения) физического канала на большое число виртуальных и передачи данных между виртуальными каналами в различных физических каналах.
Используемые (основные) в настоящее время алгоритмы (синхронная иерархия и пакетная система передачи данных) такого разделения (мультиплексирования) физического канала критически не удовлетворяют выдвигаемым требованиям.
Каналы, создаваемые методами синхронной иерархии (SDH) имеют отличные показатели по стабильности скорости передачи, отсутствию коллизий, влиянию утилизации канала на эти параметры. При этом задержка передачи оставляет желать лучшего (оперирует достаточно большими по размеру контейнерами) и нет гибкости в параметрах создаваемых каналов. Для оптимальной работы вычислительной сети требуются времена задержки (то есть времени передачи данных), которые должны определяться двумя параметрами: физическим расстоянием (длина кабеля) и быть пропорциональными затребованной скорости передачи данных. Коммутаторы должны иметь возможность одновременно поддерживать большое число виртуальных каналов (до миллионов одновременно) при постоянном времени коммутации. Кроме того, каналы (SHD) не обладают достаточной гибкостью по скорости создаваемых каналов, а по времени создания виртуального канала вообще печальная картина (нужны времена сопоставимые с временем задержки передачи).
Использование пакетной коммутации вообще не имеет смысла (при использовании в каноническом виде), не исполняется вообще ни одно требование (для достаточно большой вычислительной системы). Время создания канала частично исполняется только на стороне передатчика, работа с большим числом возможных маршрутов в реальном масштабе времени не предусмотрена, таблицу для всех вариантов соединений не построишь (слишком большой размер и расходы на администрирование). Гарантированная задержка для пакетной передачи данных невозможна принципиально. Регулирование скорости передачи данных и гарантированный доступ возможны только посредством резервирования пропускной способности, что невозможно при большом числе виртуальных каналов. Потери данных (коллизии) принципиально присутствуют в пакетной передаче (для реальных значений буферов в коммутаторе). Все проблемы пакетной передачи данных в значительной степени обостряются при приближении к максимуму физической пропускной способности канала.
Вывод: Для оптимальной работы распределенной вычислительной системы необходима новая парадигма построения системы передачи данных.
Основой системы передачи данных является способ (алгоритм) разделения одного физического канала на требуемое число виртуальных и максимально синхронных для построение сквозного виртуального канала между приемником и передатчиком. По результатам предварительного анализа ситуации наиболее оптимальным является SDH алгоритм. Для преодоления минусов, присущих SDH, необходимо произвести «редизайн» данной системы. Алгоритм SDH в значительной степени является продолжателем идей, заложенных в PDH, которая выросла из систем стационарной телефонии. Для распределенной вычислительной системы наличие кадра длительностью 125 мкс, как и разбиение на много одинаковых по производительности каналов (да и иерархия со сквозной синхронизацией тоже), является абсолютно бессмысленным ограничением (для телефонии все это было основой основ). Для вычислительной системы «ТЗ» для самого нижнего уровня системы передачи данных будет таким:
Разбить исходный поток на заданное число виртуальных каналов передачи данных, с заданной скоростью передачи для каждого канала.
Обеспечить перекладывание полезной нагрузки из входящего канала в исходящий, используя буфер данных с размером стремящимся к одному символу.
Явного требования на наличие кадра постоянного или переменного размера нет и желательно его не вводить, даже как средства определения промежутка времени, в пределах которого список виртуальных каналов (на которые разбит физический канал) постоянен. Если ввести понятие кадра, то создание дополнительного канала будет требовать времени, определяемого размером кадра. Если не предпринимать дополнительных действий, то задержка создания нового канала в среднем будет равна половине времени кадра, умноженного на число транзитных коммутаторов, что катастрофически увеличит время создания новых виртуальных каналов (и удаление старых).
Как разделить единый физический канал на произвольное число отдельных виртуальных каналов с произвольной скоростью передачи, при соблюдении правила суммы скоростей (сумма скоростей виртуальных каналов плюс расходы на администрирование каналов не должны превышать скорость первичного канала)?
Кроме того, к создаваемым каналам выдвигается требование синхронности, равенства времени между отдельными передаваемыми порциями данных, что обеспечивает минимальность размера буферов. Требование минимальности размера буферов проистекает из невозможности организовать в коммутаторе буфер за пределами кристалла коммутатора. Попробуйте буферизовать поток 100G (400G) и более, а если таких потоков десять или сотня, даже минимальная неравномерность переполнит память любого разумного размера, да и пропускная способность типичной оперативной памяти меньше скорости даже одного такого потока. Если требуется создать один виртуальный канал (или несколько каналов с одинаковой скоростью передачи), то проблем нет (SDH), но при создании двух и более каналов с разной скоростью передачи данных могут происходить конфликты, в одно и тоже время необходимо передавать данные принадлежащие различным виртуальным каналам. Для удовлетворения требований к системе передачи данных произведем модификацию алгоритма мультиплексирования SDH.
После передачи через физический канал, суммарный поток необходимо обязательно разобрать не только по причине перекомпоновки виртуальных каналов между физическими, но и из-за потенциальной необходимости добавить или удалить символы «нет данных» (возможно только в моменты записи или чтения символов в буфер). Частичное «редактирование» или замена данных особого смысла не имеют. Можно добавить возможность создания не разбираемого в промежуточных коммутаторах суммарного потока — тоннеля (он не будет разбираться в промежуточных коммутаторах на составляющие). Создание виртуального «тоннеля» возможно если создать суммарный поток используя альтернативные служебные символы (алгоритм остается тем же самым, для каждого уровня тоннеля требуется свой набор служебных символов) и далее передавать полученный суммарный поток как обычный виртуальный канал. На приемной стороне потребуется произвести дополнительную процедуру разборки такого канала на составляющие (число разборов равно уровню «тоннеля»). Создавать «тоннели» выгодно по причине уменьшения числа виртуальных каналов и соответственно требуемых буферов в промежуточных коммутаторах (да и задержка коммутации пропорциональная скорости виртуального канала будет меньше). Число буферов ограничивает число виртуальных каналов проходящих через коммутатор одновременно. Любой физический канал (на прием или передачу) может использовать любой буфер (буфера являются общим ресурсом), что увеличивает коэффициент их использования. Физически буфер представляет собой небольшое FIFO на несколько сохраняемых символов (до 10 и определяется временем на создание нового виртуального канала и максимальной неравномерностью времени передачи данных) с числом интерфейсов на чтение и запись равное числу модулей собирающих или разбирающих суммарный канал в данном коммутаторе (все физические и виртуальные каналы), при этом есть гарантия не более чем одного обращения за один такт синхронизации. Период тактовой синхронизации работы буферов совпадает с частотой приема-передачи символов. При наличии одного широкополосного канала и большого числа меньших, для быстрого канала можно назначить большие по размеру символы и в буферы записывать сразу по нескольку порций данных (либо другой вариант). Описываемая архитектура очень хорошо каскадируется. Вариантов конфигурации достаточно много и необходимо искать оптимальный компромисс.
При построении сети связи в пределах одного кристалла, модули передатчиков превратятся в два регистра (один на стороне передатчика и один на стороне приемника), сам алгоритм не поменяется. Если скорости и состав создаваемых каналов постоянны, то можно сильно оптимизировать размер аппаратуры коммутатора.
Суммарно сеть передачи данных состоит из коммутаторов и кабелей связи между их портами. Назначение сети — осуществлять доставку данных клиентов с максимально возможным качеством. Клиент подключается к сети через устройство, аналогичное обычному коммутатору, отличительной особенностью которого является возможность доступа к буферам данных аппаратурой самой вычислительной системы и их больший объем. Как только принимаемые данные создаваемого виртуального канала записываются в буфер коммутатора связанного с вычислительной системой (для приема), далее должен включиться механизм (аналогичный прерыванию в обычной вычислительной системе), ожидающий появление информации достаточной для определения вызываемой службы и для обслуживание данного буфера подключается соответствующее ПО. Отличием от современной «сетевой карты» есть возможность создания большого числа параллельных каналов (параллельный доступ к сети передачи данных), что убирает внутреннюю очередь пакетов от (к) сети к (от) большого числа вычислительных ядер (нитей). Автоматизацию запуска «обработчиков данных».
Создание канала можно разбить на два этапа: администрирование (поиск маршрута, назначение скорости, разрешение доступа и тд) и непосредственное создание виртуального канала (в момент необходимости передачи данных). Первый этап выполняется сравнительно редко (сеть относительно статична) и это возможно сделать заранее на этапе запуска приложения. Второй этап требуется производить максимально быстро, именно этот этап определяет производительность сети передачи данных и производительность всей распределенной вычислительной системы.
Непосредственно создание и удаление виртуального канала (все необходимые данные подготовлены на первом этапе) должно происходить с максимально возможной скоростью. Правильнее сказать что создание канала и передача данных должны происходить одновременно.
Алгоритм должен выглядеть примерно так: в начальный момент времени виртуального канала еще не существует (в буфер, связанный с источником данных, записана первая порция данных), мультиплексор не выделил для него части пропускной способности физического канала, есть только служебные каналы и нужно определиться в каком из физических каналов будет создаваться новый виртуальный канал. Когда в буфере появится объем данных достаточный для того что бы создать виртуальный канал (направление и требуемая скорость, они выбираются из списка альтернатив), необходимо сформировать и отправить (используя служебный канал) пакет данных с запросом создания виртуального канала в нужный физический канал. Пакет с запросом и параметрами создаваемого виртуального канала, проходя через устройство синтеза суммарного канала передатчика и разбора суммарного канала приемника выбранного физического канала, изменяет состав таблицы виртуальных каналов приемника и передатчика. Пакет с параметрами должен содержать служебный символ «добавить канал», после которого контроллер начинает передавать суммарный поток с добавленным в него новым виртуальным каналом. В момент добавления нового виртуального канала начинается выборка данных из буфера и пересылка символов созданного виртуального канала в сторону выбранного маршрутизатора. Создание нового канала происходит без уведомления удаленного коммутатора, основываясь только на свободной пропускной способности локального физического канала. Производительность создаваемого канала всегда меньше исходной производительности служебного канала (свободной части физического канала), новый канал создается путем отделения от служебного канала части ресурса. При обработке (приеме из физического канала) пакета с запросом на создание нового виртуального канала необходимо за время, оставшееся до приема символа «добавить канал», определить в какой из имеющихся (свободных) буферов начать сохранять данные нового канала. Сохранить запрос в памяти и обработать позднее нельзя, состав суммарного потока изменится сразу после приема символа «создать канал» (или с известной задержкой) и начнет приниматься суммарный поток содержащий символы создаваемого виртуального канала, что разрушит процесс декодирования суммарного потока (если список каналов в приемнике не изменится). Время вычисления номера исходящего физического канала в который необходимо начать отправлять данные из выделенного буфера, должно быть минимальным (определяется размером буфера), а значит данные о скорости и маршруте должны уже находиться в заголовке пакета с запросом на создание нового виртуального канала (времени на доступ к таблице во внешней памяти по существу нет).
Формирование пакета с запросом возможно только после получения всех необходимых данных о направлении коммутации и скорости создаваемого канала. Буферы виртуальных каналов в коммутаторе должны иметь небольшие размеры, а значит нужно что бы эти данные (скорость и номер порта в следующем коммутаторе) находились в самом начале передаваемых данных, но при этом размер текущего буфера позволял сохранить все последующие данные до момента формирования нового суммарного канала без переполнения. После формирования пакета с запросом нужно удалить символ с данными о номере физического канала, ведущего к следующему коммутатору (если маршрут задается указанием последовательности портов коммутаторов). Для закрытия виртуального канала нет необходимости пересылать пакет используя служебный канал, достаточно в передаваемые данные удаляемого канала поместить служебный символ «удалить канал». В момент приема символа «удалить канал» модулем синтеза мультиплексного канала, соответствующий виртуальный канал удаляется и далее генерируемый обновленный суммарный канал уже не содержит удаленного виртуального канала. Для автоматического удаления (очистки), предотвращения «утечки» производительности физического канала необходимо встроить в аппаратуру буферов виртуальных каналов, счетчик числа переданных символов (любых) и по достижении некоторого значения (timeout) автоматически передать символ «закрыть канал». Для продления времени жизни виртуального канала можно ввести символ «сбросить счетчик», добавляемый в данные. Локальный коммутатор может проигнорировать продление времени жизни канала, что будет ответом на дефицит пропускной способности физического канала. Если в процессе создания виртуального канала, он должен коммутироваться на физический канал с дефицитом свободной пропускной способности, скорости служебного канала не хватает для создания нового виртуального канала или нет свободных буферов или другой причиной, то пакет с запросом должен быть уничтожен. Правильнее сказать, перенаправлен на модуль заглушки, который примет все символы неудачного виртуального канала и сформирует все необходимые сообщения для передающей стороны (данные сообщения передаются используя служебный канал). Вариант с буферизацией не рассматриваю из-за сложности реализации. Такой подход оптимален для каналов с малой длинной, для них таймаут доставки минимален и не будет сильно влиять на общую производительность из-за повторов создания виртуального канала. Если канал был удачно создан, то все что может случиться — это искажение данных из-за помех в аппаратуре. В отличии существующей сети (Ethernet) необходимо не просто отправить пакет, но и удостовериться в удачном его построении на всем протяжении до адресата, уже на самом нижнем уровне сервиса. Отправка данных «в никуда» в целом не удовлетворяет никого, а проверка доставки данных путем ожидания ответного сообщения очень «неприятная» из-за неизвестности требуемого времени. Отправка уведомления о построении канала с использованием служебного канала, операция не требующая особо больших ресурсов. Можно реализовать и другой вариант — сразу создавать кольцо объединяющее источник и приемник передаваемых данных (пакет сразу пробежит по кругу целиком или сформируется ответный пакет коммутатором на принимающей стороне). Можно такое уведомление генерировать (если произошел сбой в создании канала) и на каждом промежуточном коммутаторе, что бы передатчик как можно раньше узнал о невозможности создания канала. Если очень не хочется повторно передавать данные при невозможности создать виртуальный канал с требуемой скоростью, такое оптимально для маршрутов с очень большим временем доставки (на другую сторону земного шара через спутник), то можно попробовать использовать алгоритм частичной доставки.
В момент невозможности создания канала с требуемой скоростью, создается канал с меньшей (дальше создается канал уже именно с этой скоростью) и в момент переполнения буфера коммутатора, буфер очищается и в него помещается символ обозначающий переполнение буфера и числом отброшенных символов. Принимая такой символ адресат формирует список таких понижений скорости и отправляет его передатчику. Передатчик понижает скорость первичного канала, вычисляет какие данные были пропущены (пропущенные данные можно определить и просто по списку понижений скорости и размеру буфера) и отправляет их наиболее оптимальным способом (хоть альтернативным маршрутом).
Маршрутизация в существующих сетях с пакетной коммутацией осуществляется на основе адреса в заголовке пакета, таблиц маршрутов и другими правилами в промежуточных маршрутизаторах. Такой подход хорошо работает для относительно небольшого числа определений маршрута и возможности буферизации принимаемых данных отдельного пакета, требуется относительно много времени для определения номера порта, в который необходимо направить пакет. Для высокоскоростных систем с малым временем существования виртуального канала, не хватит скорости доступа к памяти таблиц коммутации (да и сама таблица будет иметь размер в мегабайты для каждого физического канала — требуется выделить ОЗУ, равное максимально возможному числу виртуальных каналов) и выгоднее описывать маршрут методом прямого перечисления физических каналов, через которые должен быть построен виртуальный канал. Размер адресной информации не будет слишком большим, число промежуточных коммутаторов относительно небольшое и если на каждый коммутатор выделить 8 бит (номер физического порта или тоннеля), то аналог адреса IP6 позволит строить маршрут из 16 коммутаторов.
Для предлагаемого способа таблица превращается в один байт для каждого буфера (именно существующего, а не потенциально возможного виртуального канала). Кроме того необходимо учесть, что адрес передается только в момент создания канала (постепенно стирается по мере движения к приемнику), а использование виртуального тоннеля существенно сокращает затраты на маршрутизацию. Для построения цепочек физических каналов можно использовать аналог обычных поисковых систем или DNS из современных сетей, задаем параметры пункта назначения (любой набор параметров: IP адрес тоже обычный параметр) и получаем результатом набор цепочек с альтернативными маршрутами. Относительная адресация обладает повышенной защитой от несанкционированного доступа, есть полный контроль над маршрутом. Для работы сети, нет необходимости в обязательном наличии (работе) высокоуровневых компонент, маршрут может быть задан заранее (для сетей с постоянной системой связи, как пример разводка на печатной плате — соединения не изменяются).
Непосредственное управление трафиком, выделение (планирование) полосы пропускания и др невозможно из-за большой скорости создания канала и потенциально большого размера сети. Для балансирования загрузки каналов необходимо использовать опосредованные методы, такие как планирование различных маршрутов, назначение скоростей передачи с учетом накапливаемой статистики использования виртуального канала. При перегрузках физического канала не происходит отбрасывания данных уже существующих виртуальных каналов, невозможно только создать новый канал. Если учитывать характер трафика (преимущественно короткие и частые сообщения), наличие резервных маршрутов и очень быструю процедуру создания (удаления) виртуального канала, то отказ в создании канала не приведет к катастрофическому падению производительности, будет просто небольшое проседание в скорости вычислений (повторное создание канала произойдет в момент прихода сообщения об ошибки соединения или истечения заранее известного времени). При накоплении отрицательной статистики (именно статистики, а не реакция на отдельное событие) управляющее ПО коммутаторов отслеживает частоту ошибок соединения и выполняет планирование параметров каналов с учетом этих данных. С большой вероятностью перегрузка сама прекратится за время в сотни наносекунд, а ПО маршрутизатора должно заниматься вопросами именно стратегического планирования. К такому планированию можно отнести возможность редактирования уже созданных маршрутов (данные хранятся в мультиплексоре), иначе невозможно гарантированно перестроить маршрутную сеть (когда еще ПО запросит пересоздание маршрута).
Связь программ (нитей вычислительного процесса) с источниками (приемниками) передаваемых данных строится по той же схеме что и в коммутаторах.
Вычислительная система представляет собой большое число различных исполнительных модулей, объединяемых сетью связи. Сеть связи заменяет собой все локальные шины и интерфейсы от доступа в память до подключения клавиатуры.
Такая архитектура вычислительной системы коренным образом меняет всю вычислительную парадигму (данный вопрос будет впоследствии рассмотрен в статье с описанием структуры операционной системы и ПО). Существенным образом изменяется роль сетевого оборудования в вычислительной архитектуре. Если раньше сеть была способом связать отдельные вычислительные машины и функционирующие на них приложения, то сейчас понятие отдельной вычислительной машины по существу отсутствует и приложение может быть «размазано» по различным аппаратным ресурсам сети. Вопрос администрирования (управления ресурсами параметрами доступа вычислительной системы) полностью переходит в плоскость управления сетью, соединяющей отдельные исполнительные модули (нет больше центрального процессора).
Самым нижним уровнем борьбы с ошибками можно считать кодирование передаваемых символов с возможностью восстановления при появлении одной или нескольких ошибок (число зависит от канала передачи данных). Если несмотря на кодирование все же появляется ошибочный символ (или группа символов), то самым неприятным последствием будет обладать рассинхронизация списка виртуальных каналов передатчика и приемника. Соответственно запросы на изменение таблицы (создать или удалить канал), должны иметь максимальную возможность восстановления. Если запрос все же был потерян, то будут искажены данные всех виртуальных каналов, имеющих скорость меньшую чем скорость в запросе. Далее есть два варианта реагирования, полностью разорвать все виртуальные каналы или только виртуальные каналы с искаженными данными (с меньшей скоростью передачи чем у потерянного канала), в данные, подвергшиеся искажениям добавить символ «ошибка» (данный символ обрабатывается приемником). Если обнаружена рассинхронизация, то необходимо максимально быстро восстановить идентичность таблиц, а время восстановления каналов должно определяться длиной кабеля (соединяющего два коммутатора). Полная передача таблицы от передатчика к приемнику самый простой вариант, но лучше к каждому запросу редактирования таблицы добавлять циклический номер запроса. По номеру запроса определять момент рассинхронизации (номера идут не последовательно) и генерировать запрос на повторную пересылку потерянных изменений.
Предлагаемая коммуникационная парадигма, может быть использована не только для построения вычислительной системы следующего поколения, но и для улучшения уже сейчас существующей сети. Синхронность и высокое качество обслуживания создаваемых виртуальных каналов связи позволят оптимально решать все задачи передачи, голоса, видео (без замираний). Для систем реального времени или систем повышенной надежности, кроме всего прочего очень пригодится возможность создания множества альтернативных маршрутов, жесткий контроль времени создания канала и доставки данных. Пакетная коммутация может быть прозрачно эмулирована новой парадигмой, передача пакета — это просто временное создание канала, передача данных и закрытие.
Обратное эмулирование новой сети пакетной коммутацией невозможно.
Надеюсь, что статья о коммуникационной системе Вам понравилась. Если в процессе чтения были найдены ошибки и не стыковки, прошу указать на них. Надеюсь, что данный текст послужит основой для новых проектов и стартапов, которые будут выкуплены большими организациями. Если есть желание реализовать такую систему в виде HDL модели в сообществах типа OpenCores.org, буду очень рад (не забываем указывать на первоисточник).
В следующих статьях будут описываться другие стороны (части) вычислительной парадигмы. Планируется статья по механическим принципам проектирования «аватара».
Описанный алгоритм построения системы связи, может стать частью большого целого, а то и международным стандартом (очень надеюсь). Если будут вопросы — всегда готов ответить, проконсультировать и осуществить проверку «на соответствие генеральной линии партии» конкретной физической реализации.
Воспользуюсь «авторским правом» и назову создаваемую вычислительную парадигму «Rutel».
Попробуем разобраться: а есть ли вообще необходимость в чем-то радикально новом, или может старичка фон Неймана можно «подшаманить» и хватит? Японцы как раз на этом погорели: пока они пытались сделать новую архитектуру и параллельный процессор, технологии производства обычных последовательных процессоров улучшились. Улучшились настолько, что были достигнуты все ожидаемые для параллельного процессора параметры на обычном последовательном.
Вероятность повторения подобного сценария в настоящее время невелика по многим причинам:
- Имевшиеся архитектурные заделы уже исчерпаны (работы Лебедева и др.);
- Размеры транзисторов уже сопоставимы с молекулами;
- Тепловыделение практически не падает при уменьшении технологических норм;
- Повышение частоты процессора не дает повышения производительности.
У разработчиков вычислительной техники нет идей, кроме банального увеличения числа ядер в вычислительной системе. Думаю, такой подход не является продуктивным для систем, в самой основе которых нет понятия «параллельности вычислений». Да и логическое (последовательное) мышление человека (программиста) тоже параллельностью не блещет.
Учитывая обозначенные проблемы, давайте определим требования, выдвигаемые в настоящее время к перспективным вычислительным системам:
- Параллельность
- Распределенность
- Решение проблемы сложности.
- Отказоустойчивость.
Создание любого устройства производится в ответ на какую-либо потребность. Современная вычислительная техника была создана в ответ на потребность в больших объемах научных и инженерных вычислений. В настоящее время основное использование вычислительной техники — «обсчет», «оживление» различных виртуальных моделей, часть из них — упрощенные модели объектов из реального физического мира, другие вообще полностью виртуальны и при этом взаимодействуют с внешним миром посредством различных интерфейсов.
Перенос личности человека в такую систему тоже является современной потребностью.
Вычислительная парадигма фон Неймана по своей сути представляет собой продвинутый и достаточно мощный, но все же калькулятор. В основе современной вычислительной техники лежит «подражание» логическому мышлению человека (обратите внимание: только логическому мышлению, а не строению мозга целиком), а оно не предназначено моделирования окружающего мира. Логическое мышление человека является высокоуровневым психическим процессом и принципиально последовательно. Задумайтесь над словосочетанием: язык программирования. Язык программирования, основа взаимодействия с вычислительной системой логически связан с частью тела человека и наследует многие его особенности.
Как пример, попробуйте одновременно проговорить две фразы. Да и полноценно слушать одновременно двух человек (особенно с похожими голосами) не получается.
В качестве основной задачи, следует принять задачу поддержание или «оживление» объектов виртуального мира. Виртуального мира, содержащего в себе как модели объектов из реального мира вкупе со связями (через различные датчики и манипуляторы), так и модели, не имеющие аналогов в нем. «Новую вычислительную парадигму», в пределе, следует рассматривать не как очередной инструмент решения очередных задач, а как набор дополнительных измерений для нашего физического мира. Хочу заметить, человек (в целом) и является биологической системой, решающей ровно такую же задачу, соответственно для переноса личности человека потребуется система с таким же или большим функционалом.
С чего начать?
Естественно, начинать необходимо с постулирования свойств виртуального пространства. Сегодняшняя вычислительная техника представлена одномерным пространством (бесконечное адресное пространство). Но этого недостаточно для моделирования трехмерного (+ время) мира, что постоянно порождает проблемы, требующие «костылей» для своего решения.
Приведу примеры проблем, присущих современной вычислительной парадигме:
- После расположения объекта в памяти, невозможно изменить его размер без пересоздания. Приходится использовать косвенную адресацию, решать проблемы с дефрагментацией и выделением памяти. Проблемы с переполнениями стеков и различных буферов.
- В системе представления данных нет понятия отсутствия данных, любой мусор в физической памяти является легитимными данными, что порождает ошибки.
- Отсутствует понятие другой вычислительной системы (объекта), есть только одна «лента» памяти и один автомат, ее модифицирующий. Такой подход порождает проблемы с взаимодействием задач даже в пределах одного процессора (задачи исполняются последовательно), а если требуется взаимодействовать более чем одной вычислительной системе, то «костыли» достигают эпических масштабов.
Эти примеры только для понимания, что большинство больших проблем заложены в самой основе вычислительной парадигмы, в самых простых элементах-«кирпичиках». Эти «кирпичики» в какой-то момент не пожелают складываться в единую структуру и все «здание» рушится.
Постулаты (будут пополняться, а потом сводиться к нескольким базовым):
- Виртуальное пространство представляет собой многомерный «пузырь», который может сам содержать в себе один или более «пузырей» с меньшей размерностью.
- Число измерений исходного «пузыря» потенциально бесконечно. Каждое измерение отдельного «пузыря» изначально не определено (нет конкретного назначения) и определить «одинаковость» измерений можно только по наличию «касаний» или объединений различных «пузырей». Можно сказать, что конкретное виртуальное пространство состоит из частей находящихся в различных пузырях и соединяющихся в единое целое посредством «прикосновение» отдельных пузырей.
- Каждый пузырь обладает возможностью инфляции и коллапса.
- Каждый пузырь содержит в себе виртуальный объект, который может контактировать с другими объектами только в месте «касания» «своего пузыря» с «пузырем», содержащим контактирующий объект.
Если совсем кратко, то виртуальное пространство представляет собой многомерную пену из соприкасающихся между собой пузырей.
Данные постулаты позволят создавать любые системы (наборы взаимодействующих объектов) из реального (физического) или виртуального мира. Пример: доступ по адресу через объект «память» с использованием измерения «адрес» и таких адресных пространств может быть любое число. У адресуемых объектов появляются дополнительные измерения, соответствующие различным адресным пространствам. Объектов «память» в виде физических объектов может и не существовать (чисто виртуальная модель).
Важный момент: в постулатах не указывается место расположения объектов, наличие и устройство памяти, даже понятия адресного пространства нет (уж тем более единого). Все что можно сказать, это потенциальное наличие пространства («пузыря»), убедиться в наличии самого пузыря можно только по наличию «контакта». Внутри «пузыря» все что можно «пронумеровать», так это точки контакта. Если контактов нет, то это полностью независимые и теоретически никак не влияющие друг на друга системы, но при этом все они находятся в исходном «пузыре» и в будущем могут начать взаимодействовать.
Для задачи переноса личности, цифровой мозг будет выглядеть примерно как один общий пузырь, включающий 100 миллиардов пузырьков, которые содержат объект, эмулирующий нейрон или объект связи с биологическим мозгом. Визуально можно даже представить вытягивания (деформация проекции «пузырька» в трехмерном пространстве) нитей (аксонов дендритов) к местам контактов.
Реализация системы связи в создаваемой парадигме
Внимание
Все идеи и алгоритмы, описываемые в данной статье, являются результатом моей независимой и полностью самостоятельной интеллектуальной деятельности. Как автор, разрешаю свободно использовать, изменять, дополнять все идеи и алгоритмы любому человеку или организации в любых типах проектов при обязательном указании моего авторства.
Для современной парадигмы реализовать пространство, как одномерное кольцо достаточно просто: адрес, данные для «записи»-«чтения» и сигналы «читать»-«писать». Для парадигмы с многомерным «пузырем» требуется создать систему связи «всех со всеми» (в пределе), конечно в реальности такое невозможно. Связность большинства объектов будет происходить через узлы посредники. Распределение «дальности связи» будет иметь «нормальный тип», чем меньше расстояние между узлами, тем большее число таких связей (логика и здравый смысл диктуют необходимость пометить взаимодействующие объекты как можно ближе друг к другу). Основой системы связи с узлами посредниками, является алгоритм мультиплексирования (разделения) канала связи между несколькими источниками.
Вначале лучше дать упрощенное объяснение принципа работы алгоритма мультиплексирования физического канала связи.
Передаваемые данные можно представить как «россыпь» бусин (каждая бусина уникальна и последовательность менять нельзя), которые нужно передать по трубке диаметром равным диаметру бусины. Если источник бусин один, то проблемы доступа к «телекоммуникационной трубе» нет, она в монопольном владении. Если источников бусин много, то они могут сталкиваться на входе в «трубку», да еще и на выходе бусины нужно разделить по отдельным бункерам.
Предлагаемый алгоритм (на примере бус) выглядит так:
- нанизываем бусы от различных источников на эластичные нити и закрепляем (отдельная нить для каждого источника)
- равномерно растягиваем нити, растянуть нужно в число раз, равное отношению числа бус для передачи к максимально возможному (максимальная пропускная способность трубки). После растяжения все нити будут иметь одинаковую длину, с равномерным распределением бусин.
- начинаем продевать растянутые нити в трубку, в порядке убывания числа бусин на каждой нити.
- первая нить проходит в трубку без конфликтов (трубка изначально пустая)
- вторая и далее нить может получить отказ (нужно поместить две и более бусины в трубку одновременно)
- в случаях конфликта разделяем конфликтующие бусины по следующему правилу: первой проходит бусина, одетая на нить с большим суммарным числом бусин (нить эластичная и есть возможность немного подвинуть бусину назад).
- на выходе, зная порядок в котором рассортированы нити и степень растяжения нити (исходное, а не локальное растяжение), можно выполнить обратную процедуру, рассортировать суммарный поток бусин обратно по отдельным бункерам.
- дальше все повторяется пока последовательность бусин не окажется сначала в трубке, а потом в бункере принимающей стороны (возможно промежуточной).
Если в момент времени, когда необходимо помещать бусину в трубку, бусина еще не была передана по входящей трубке и бункер пуст, то чтобы обеспечить однозначность работы алгоритма сортировки, нужно вместо нее поместить специальную «пустую» бусину. На приемной стороне пустая бусина не будет помещена в бункер, а просто отбросится.
Далее будет текст, ориентированный на специалистов в области телекоммуникаций.
Из-за желания охватить все аспекты телекоммуникационной парадигмы, текст получился несколько сумбурным и раздутым. Что требует вдумчивого чтения, возможны неточности терминов и логические ошибки (буду благодарен за поправки).
Есть проблема с трудностью восприятия текста, хочется дополнить описание картинками, но умения красиво рисовать у меня нет. Если кто то хочет взвалить на себя такую нагрузку, буду очень признателен. В ответ могу предложить только пометку об авторстве на каждом рисунке.
Далее для тех, кто не испугался
Современное состояние сетей передачи данных.
Современные сети передачи данных рассчитаны на относительно небольшую интенсивность соединений (количество каналов или отдельных сообщений) и при этом предъявляются ослабленные одновременные требования к стабильности времени, скорости доставки, времени создания виртуального канала, времени задействования резервного пути передачи данных и максимального процента утилизации пропускной способности физического канала. Сеть передачи данных построенная по таким принципам критически не соответствует требованиям выдвигаемым новой вычислительной парадигмой. Для понимания масштаба ожидаемого увеличения трафика и требований к скорости можно взять объем и скорость передаваемых через стек процессора данных и связанных с ними данных в памяти (через стек чаще всего передают указатели) и умножить на число вычислительных ядер типичного суперкомпьютера. Данные требования и будут нижней планкой требований к сети передачи данных.
Распределенная вычислительная система представляет собой большое число взаимосвязанных (участвующих в совместных вычислениях) вычислительных модулей (блоков), которые порождают, в общем случае, большое число кратковременных соединений. Соединения требуют большую скорость передачи в сочетании с малой, стабильной задержкой и гарантией доставки.
Выдвигаемые требования к сети передачи данных со стороны перспективной (распределенной) вычислительной системы, от выполнения которых ультимативно зависит производительность всей системы.
- Предельно малое время создания виртуального канала. Время создания виртуального канала должно быть сопоставимо с временем заполнения локального буфера передатчика (маршрутизатора).
- Задержка передачи данных должна быть постоянной и минимально отличаться от скорости распространения электромагнитной волны от источника к приемнику в линии связи.
- Скорость передачи данных должна определяться непосредственно запрашиваемым значением или определяться сетевым ПО исходя из размера ожидаемых к передачи данных и текущей загрузки сети. Иными словами, имеющаяся пропускная способность канала должна оптимально распределяться между поданными в каждый момент времени запросами на передачу данных, если не задано конкретное значение.
- Единый протокол связи начиная от блока на кристалле и до размера планеты.
- Если канал создан, то должно наблюдаться полное отсутствие коллизий и связанных с ними потерь данных коммутаторами сети. Данные могут быть потерянными только при потере (искажении) сигнала в кабелях связи.
- Все эти требования должны исполняться даже при высоких степенях утилизации физического канала (90% и выше).
В идеале, для коммуникационной системы требуется наличие непосредственной связи каждого компонента системы с каждым, но в реальности такое невозможно и приходится производить передачу данных через промежуточные узлы. В каждом узле такой сети находится коммутатор, связанный с несколькими такими же узлами, с использованием разделяемых (на виртуальные каналы) магистралей связи. Основой такой коммуникационной системы являются алгоритмы мультиплексирования (разделения) физического канала на большое число виртуальных и передачи данных между виртуальными каналами в различных физических каналах.
Используемые (основные) в настоящее время алгоритмы (синхронная иерархия и пакетная система передачи данных) такого разделения (мультиплексирования) физического канала критически не удовлетворяют выдвигаемым требованиям.
Каналы, создаваемые методами синхронной иерархии (SDH) имеют отличные показатели по стабильности скорости передачи, отсутствию коллизий, влиянию утилизации канала на эти параметры. При этом задержка передачи оставляет желать лучшего (оперирует достаточно большими по размеру контейнерами) и нет гибкости в параметрах создаваемых каналов. Для оптимальной работы вычислительной сети требуются времена задержки (то есть времени передачи данных), которые должны определяться двумя параметрами: физическим расстоянием (длина кабеля) и быть пропорциональными затребованной скорости передачи данных. Коммутаторы должны иметь возможность одновременно поддерживать большое число виртуальных каналов (до миллионов одновременно) при постоянном времени коммутации. Кроме того, каналы (SHD) не обладают достаточной гибкостью по скорости создаваемых каналов, а по времени создания виртуального канала вообще печальная картина (нужны времена сопоставимые с временем задержки передачи).
Использование пакетной коммутации вообще не имеет смысла (при использовании в каноническом виде), не исполняется вообще ни одно требование (для достаточно большой вычислительной системы). Время создания канала частично исполняется только на стороне передатчика, работа с большим числом возможных маршрутов в реальном масштабе времени не предусмотрена, таблицу для всех вариантов соединений не построишь (слишком большой размер и расходы на администрирование). Гарантированная задержка для пакетной передачи данных невозможна принципиально. Регулирование скорости передачи данных и гарантированный доступ возможны только посредством резервирования пропускной способности, что невозможно при большом числе виртуальных каналов. Потери данных (коллизии) принципиально присутствуют в пакетной передаче (для реальных значений буферов в коммутаторе). Все проблемы пакетной передачи данных в значительной степени обостряются при приближении к максимуму физической пропускной способности канала.
Вывод: Для оптимальной работы распределенной вычислительной системы необходима новая парадигма построения системы передачи данных.
Основой системы передачи данных является способ (алгоритм) разделения одного физического канала на требуемое число виртуальных и максимально синхронных для построение сквозного виртуального канала между приемником и передатчиком. По результатам предварительного анализа ситуации наиболее оптимальным является SDH алгоритм. Для преодоления минусов, присущих SDH, необходимо произвести «редизайн» данной системы. Алгоритм SDH в значительной степени является продолжателем идей, заложенных в PDH, которая выросла из систем стационарной телефонии. Для распределенной вычислительной системы наличие кадра длительностью 125 мкс, как и разбиение на много одинаковых по производительности каналов (да и иерархия со сквозной синхронизацией тоже), является абсолютно бессмысленным ограничением (для телефонии все это было основой основ). Для вычислительной системы «ТЗ» для самого нижнего уровня системы передачи данных будет таким:
Разбить исходный поток на заданное число виртуальных каналов передачи данных, с заданной скоростью передачи для каждого канала.
Обеспечить перекладывание полезной нагрузки из входящего канала в исходящий, используя буфер данных с размером стремящимся к одному символу.
Явного требования на наличие кадра постоянного или переменного размера нет и желательно его не вводить, даже как средства определения промежутка времени, в пределах которого список виртуальных каналов (на которые разбит физический канал) постоянен. Если ввести понятие кадра, то создание дополнительного канала будет требовать времени, определяемого размером кадра. Если не предпринимать дополнительных действий, то задержка создания нового канала в среднем будет равна половине времени кадра, умноженного на число транзитных коммутаторов, что катастрофически увеличит время создания новых виртуальных каналов (и удаление старых).
Как разделить единый физический канал на произвольное число отдельных виртуальных каналов с произвольной скоростью передачи, при соблюдении правила суммы скоростей (сумма скоростей виртуальных каналов плюс расходы на администрирование каналов не должны превышать скорость первичного канала)?
Кроме того, к создаваемым каналам выдвигается требование синхронности, равенства времени между отдельными передаваемыми порциями данных, что обеспечивает минимальность размера буферов. Требование минимальности размера буферов проистекает из невозможности организовать в коммутаторе буфер за пределами кристалла коммутатора. Попробуйте буферизовать поток 100G (400G) и более, а если таких потоков десять или сотня, даже минимальная неравномерность переполнит память любого разумного размера, да и пропускная способность типичной оперативной памяти меньше скорости даже одного такого потока. Если требуется создать один виртуальный канал (или несколько каналов с одинаковой скоростью передачи), то проблем нет (SDH), но при создании двух и более каналов с разной скоростью передачи данных могут происходить конфликты, в одно и тоже время необходимо передавать данные принадлежащие различным виртуальным каналам. Для удовлетворения требований к системе передачи данных произведем модификацию алгоритма мультиплексирования SDH.
Алгоритм создания мультиплекного канала
- На входе мультиплексора имеется отсортированный по уменьшению запрашиваемой скорости список требований на создание виртуальных каналов.
- Передача данных осуществляется квантами — символами. Применение символов необходимо для обеспечения линейного кодирования, нормальной работы системы синхронизации и преобразования последовательных данных в слова (обрабатывать отдельные биты не эффективно), увеличение помехоустойчивости канала и тд. Используемые символы разделены на три группы: передаваемые данные, служебные данные и символы синхронизации (события).
Разделение набора символов данных на обычные и служебные облегчает построение служебного канала данных. Так же разделение данных на данные виртуальных каналов и данные служебного канала по разным наборам символов позволяет сильно поднять КПД использования первичного канала (без риска перегрузки канала). Служебные данные порождаются системой управления маршрутизатора для координации совместной работы (создание, удаление каналов, обмен данными загрузки каналов, различные сетевые службы и другое). Символы синхронизации предназначены для старта (выделения момента времени) различных событий, таких как начало пакета служебных данных, начало запроса на создание виртуального канала, удаления виртуального канала и других событий. Размер символа не определен и потенциально может быть любым. При малом размере символа падает КПД использования физического канала. Для символа размером 100 бит все затраты на разделение, канальное кодирование выражаются в первых процентах от физической пропускной способности. Для больших размеров символа появляется эффект выравнивания сообщения (лишние биты в сообщении) и увеличивается время передачи (задержка), оно не может быть меньше времени передачи символа умноженное на число промежуточных коммутаторов. При увеличении размера символа уменьшается частота тактирования логики коммутатора (оперируем порциями данных размером с символ), так что выбор размера символа это компромисс по многим параметрам и он индивидуален. - Изначально суммарный канал (до добавления виртуальных каналов) состоит только из служебных символов «пусто», обозначающих отсутствие данных или свободную пропускную способность. Символы синхронизации разделены на две группы, на события в виртуальном канале данных и события в служебном канале. Каждая группа обрабатывается по своим правилам. Суммарный поток символов равномерно записываются в буфер передатчика в моменты времени, определяемые скоростью физического канала.
- Суммарный поток символов «налету» собирается (согласно списку виртуальных каналов) перед передачей в физический канал и разбирается при приеме из него. В коммутаторах хранится только структура суммарных каналов (для каждого физического интерфейса) и минимальные буфера данных для информации передаваемой через виртуальные каналы.
- Виртуальные каналы добавляются в суммарный поток в порядке понижения затребованной скорости передачи. При такой последовательности сборки получается минимальный размер промежуточного буфера для передаваемых данных.
- Алгоритм раскладки символов в суммарный поток может быть любым, основное требование соблюдение указанных скоростей (для каждого виртуального канала) и максимальная равномерность передачи данных для каждого виртуального канала (уменьшает требуемый размер буфера).
- Наиболее простой раскладкой символов является пропорциональный алгоритм. На входе (при сборке канала) имеем поток состоящий только из символов «пусто». Каждый добавляемый виртуальный канал представлен блоком, состоящим из буферного регистра (в нем хранится текущий символ мультиплексного канала), мультиплексора, аккумулятора фазы и FIFO буфера передаваемых данных. Каждый такт передачи символа в физический канал, в аккумулятор фазы добавляется число, равное отношению скорости виртуального канала к скорости исходного канала (меньше единицы). Как только число в аккумуляторе превысит единицу и в буферном регистре содержится символ «пусто» (слот мультиплексного канала не занят), заменяем его символом из FIFO и из значения аккумулятора фазы вычитается единичка.
Суммарный поток, проходя через последовательность таких блоков (отсортированы в порядке убывания скорости виртуального канала), постепенно заполняется полезной нагрузкой. Небольшое число символов «пусто» все же останется из-за неполной загрузки суммарного потока. Если в буфере виртуального канала отсутствует символ для передачи, то передается символ «нет данных». Потребность в символе «нет данных», а не просто «пусто» вызвано необходимостью предотвратить зависимость структуры суммарного канала от наличия или отсутствия данных в FIFO конкретных виртуальных каналах. Минусом прямой реализации данного алгоритма является большая задержка формирования суммарного потока, равная максимальному числу виртуальных каналов (числу буферных регистров). Если не учитывать дискретность потоков, то можно утверждать, что при суммарной скорости виртуальных каналов — меньше скорости физического канала, все символы для каждого виртуального канала будут отправлены с задержкой, меньшей чем период следования символов (скорость передачи виртуального канала). (Данную гипотезу необходимо математически доказать или показать пределы ее действия) - Если данный алгоритм применить к списку из 32 (24) виртуальных каналов скоростью по 64 кб/сек, то получим суммарный поток эквивалентный E1(T1). Получается, что алгоритм мультиплексирования PHD можно считать частным случаем описанного алгоритма пропорционального мультиплексирования.
- Алгоритм пропорциональной раскладки был проверен на программной модели. Строился суммарный поток из случайного числа виртуальных каналов (максимум 100) имеющих случайную скорость (в символах). Время работы суммарного потока 10Е6 преданных символов мультиплексного канала. Число построенных вариантов суммарного канала 120 тысяч. Получено максимальное расстояние между соседними символами одного виртуального канала 2.5 периода (единица деленная на требуемую скорость) передачи символа (неравномерность передачи символов).. (Необходимо математически доказать равномерность потока после процедур мультиплексирования и демультиплексирования и влияние дискретности передачи на размер буфера.)
- После создания (все виртуальные каналы добавлены) суммарного потока, передатчик может заменить (при необходимости) все встреченные символы «пусто» и «нет данных», на символы из набора служебных данных (служебный трафик между маршрутизаторами). Такая замена позволяет эффективнее использовать пропускную способность физического канала и максимально оперативно реагировать на запросы к сети. Служебный канал состоит из всех символов «пусто» и «нет данных», оставшихся после раскладки данных виртуальных каналов.
- Приемник сразу помещает все служебные символы в отдельный буфер, заменяя их на символы «нет данных» и дальше производится раскладка принятых данных по своим буферам согласно тому же пропорциональному алгоритму (список виртуальных каналов и фазы аккумуляторов идентичны у приемника и передатчика), только производится замена принятых данных на символы «нет данных». На выходе получаем поток состоящий только из символов «нет данных», присутствие любых других символов означает рассинхронизацию списков или фаз виртуальных каналов в приемнике и передатчике. Приемник и передатчик строго синхронны между собой и не с кем более.
- После записи принятых символов в буфер (размер буфера в единицы символов) автоматически восстанавливается синхронность следования данных виртуального канала (размера буфера должно хватать для сглаживания неравномерностей и предотвращения переполнения). Относительная синхронность канала не требует создавать больших по размеру буферов. Использование символа «нет данных» и небольшой запас скорости виртуального канала относительно реально требуемой, позволяет решить все проблемы с неидентичностью тактовых генераторов различных маршрутизаторов и задержек с формированием исходных (передаваемых) данных. При этом добавление символов «нет данных» не приводит к падению общего КПД, данная пропускная способность расходуется на служебные цели. Алгоритм кодирования гарантирует, что к каждому буферу будут обращения только от двух каналов (принимающий и передающий). Такая гарантия упрощает схемотехнику интерфейсов чтения или записи, нет необходимости поддерживать одновременную запись (чтение) от нескольких источников. При любом числе физических каналов достаточно частоты, требуемой для обслуживания одного канала, да и она может быть понижена увеличением размера символа. Буфер является ресурсом, не привязанным к конкретному каналу, что уменьшает требования к их суммарному количеству и увеличивает КПД их использования.
После передачи через физический канал, суммарный поток необходимо обязательно разобрать не только по причине перекомпоновки виртуальных каналов между физическими, но и из-за потенциальной необходимости добавить или удалить символы «нет данных» (возможно только в моменты записи или чтения символов в буфер). Частичное «редактирование» или замена данных особого смысла не имеют. Можно добавить возможность создания не разбираемого в промежуточных коммутаторах суммарного потока — тоннеля (он не будет разбираться в промежуточных коммутаторах на составляющие). Создание виртуального «тоннеля» возможно если создать суммарный поток используя альтернативные служебные символы (алгоритм остается тем же самым, для каждого уровня тоннеля требуется свой набор служебных символов) и далее передавать полученный суммарный поток как обычный виртуальный канал. На приемной стороне потребуется произвести дополнительную процедуру разборки такого канала на составляющие (число разборов равно уровню «тоннеля»). Создавать «тоннели» выгодно по причине уменьшения числа виртуальных каналов и соответственно требуемых буферов в промежуточных коммутаторах (да и задержка коммутации пропорциональная скорости виртуального канала будет меньше). Число буферов ограничивает число виртуальных каналов проходящих через коммутатор одновременно. Любой физический канал (на прием или передачу) может использовать любой буфер (буфера являются общим ресурсом), что увеличивает коэффициент их использования. Физически буфер представляет собой небольшое FIFO на несколько сохраняемых символов (до 10 и определяется временем на создание нового виртуального канала и максимальной неравномерностью времени передачи данных) с числом интерфейсов на чтение и запись равное числу модулей собирающих или разбирающих суммарный канал в данном коммутаторе (все физические и виртуальные каналы), при этом есть гарантия не более чем одного обращения за один такт синхронизации. Период тактовой синхронизации работы буферов совпадает с частотой приема-передачи символов. При наличии одного широкополосного канала и большого числа меньших, для быстрого канала можно назначить большие по размеру символы и в буферы записывать сразу по нескольку порций данных (либо другой вариант). Описываемая архитектура очень хорошо каскадируется. Вариантов конфигурации достаточно много и необходимо искать оптимальный компромисс.
При построении сети связи в пределах одного кристалла, модули передатчиков превратятся в два регистра (один на стороне передатчика и один на стороне приемника), сам алгоритм не поменяется. Если скорости и состав создаваемых каналов постоянны, то можно сильно оптимизировать размер аппаратуры коммутатора.
Суммарно сеть передачи данных состоит из коммутаторов и кабелей связи между их портами. Назначение сети — осуществлять доставку данных клиентов с максимально возможным качеством. Клиент подключается к сети через устройство, аналогичное обычному коммутатору, отличительной особенностью которого является возможность доступа к буферам данных аппаратурой самой вычислительной системы и их больший объем. Как только принимаемые данные создаваемого виртуального канала записываются в буфер коммутатора связанного с вычислительной системой (для приема), далее должен включиться механизм (аналогичный прерыванию в обычной вычислительной системе), ожидающий появление информации достаточной для определения вызываемой службы и для обслуживание данного буфера подключается соответствующее ПО. Отличием от современной «сетевой карты» есть возможность создания большого числа параллельных каналов (параллельный доступ к сети передачи данных), что убирает внутреннюю очередь пакетов от (к) сети к (от) большого числа вычислительных ядер (нитей). Автоматизацию запуска «обработчиков данных».
Создание канала можно разбить на два этапа: администрирование (поиск маршрута, назначение скорости, разрешение доступа и тд) и непосредственное создание виртуального канала (в момент необходимости передачи данных). Первый этап выполняется сравнительно редко (сеть относительно статична) и это возможно сделать заранее на этапе запуска приложения. Второй этап требуется производить максимально быстро, именно этот этап определяет производительность сети передачи данных и производительность всей распределенной вычислительной системы.
Непосредственно создание и удаление виртуального канала (все необходимые данные подготовлены на первом этапе) должно происходить с максимально возможной скоростью. Правильнее сказать что создание канала и передача данных должны происходить одновременно.
Алгоритм должен выглядеть примерно так: в начальный момент времени виртуального канала еще не существует (в буфер, связанный с источником данных, записана первая порция данных), мультиплексор не выделил для него части пропускной способности физического канала, есть только служебные каналы и нужно определиться в каком из физических каналов будет создаваться новый виртуальный канал. Когда в буфере появится объем данных достаточный для того что бы создать виртуальный канал (направление и требуемая скорость, они выбираются из списка альтернатив), необходимо сформировать и отправить (используя служебный канал) пакет данных с запросом создания виртуального канала в нужный физический канал. Пакет с запросом и параметрами создаваемого виртуального канала, проходя через устройство синтеза суммарного канала передатчика и разбора суммарного канала приемника выбранного физического канала, изменяет состав таблицы виртуальных каналов приемника и передатчика. Пакет с параметрами должен содержать служебный символ «добавить канал», после которого контроллер начинает передавать суммарный поток с добавленным в него новым виртуальным каналом. В момент добавления нового виртуального канала начинается выборка данных из буфера и пересылка символов созданного виртуального канала в сторону выбранного маршрутизатора. Создание нового канала происходит без уведомления удаленного коммутатора, основываясь только на свободной пропускной способности локального физического канала. Производительность создаваемого канала всегда меньше исходной производительности служебного канала (свободной части физического канала), новый канал создается путем отделения от служебного канала части ресурса. При обработке (приеме из физического канала) пакета с запросом на создание нового виртуального канала необходимо за время, оставшееся до приема символа «добавить канал», определить в какой из имеющихся (свободных) буферов начать сохранять данные нового канала. Сохранить запрос в памяти и обработать позднее нельзя, состав суммарного потока изменится сразу после приема символа «создать канал» (или с известной задержкой) и начнет приниматься суммарный поток содержащий символы создаваемого виртуального канала, что разрушит процесс декодирования суммарного потока (если список каналов в приемнике не изменится). Время вычисления номера исходящего физического канала в который необходимо начать отправлять данные из выделенного буфера, должно быть минимальным (определяется размером буфера), а значит данные о скорости и маршруте должны уже находиться в заголовке пакета с запросом на создание нового виртуального канала (времени на доступ к таблице во внешней памяти по существу нет).
Формирование пакета с запросом возможно только после получения всех необходимых данных о направлении коммутации и скорости создаваемого канала. Буферы виртуальных каналов в коммутаторе должны иметь небольшие размеры, а значит нужно что бы эти данные (скорость и номер порта в следующем коммутаторе) находились в самом начале передаваемых данных, но при этом размер текущего буфера позволял сохранить все последующие данные до момента формирования нового суммарного канала без переполнения. После формирования пакета с запросом нужно удалить символ с данными о номере физического канала, ведущего к следующему коммутатору (если маршрут задается указанием последовательности портов коммутаторов). Для закрытия виртуального канала нет необходимости пересылать пакет используя служебный канал, достаточно в передаваемые данные удаляемого канала поместить служебный символ «удалить канал». В момент приема символа «удалить канал» модулем синтеза мультиплексного канала, соответствующий виртуальный канал удаляется и далее генерируемый обновленный суммарный канал уже не содержит удаленного виртуального канала. Для автоматического удаления (очистки), предотвращения «утечки» производительности физического канала необходимо встроить в аппаратуру буферов виртуальных каналов, счетчик числа переданных символов (любых) и по достижении некоторого значения (timeout) автоматически передать символ «закрыть канал». Для продления времени жизни виртуального канала можно ввести символ «сбросить счетчик», добавляемый в данные. Локальный коммутатор может проигнорировать продление времени жизни канала, что будет ответом на дефицит пропускной способности физического канала. Если в процессе создания виртуального канала, он должен коммутироваться на физический канал с дефицитом свободной пропускной способности, скорости служебного канала не хватает для создания нового виртуального канала или нет свободных буферов или другой причиной, то пакет с запросом должен быть уничтожен. Правильнее сказать, перенаправлен на модуль заглушки, который примет все символы неудачного виртуального канала и сформирует все необходимые сообщения для передающей стороны (данные сообщения передаются используя служебный канал). Вариант с буферизацией не рассматриваю из-за сложности реализации. Такой подход оптимален для каналов с малой длинной, для них таймаут доставки минимален и не будет сильно влиять на общую производительность из-за повторов создания виртуального канала. Если канал был удачно создан, то все что может случиться — это искажение данных из-за помех в аппаратуре. В отличии существующей сети (Ethernet) необходимо не просто отправить пакет, но и удостовериться в удачном его построении на всем протяжении до адресата, уже на самом нижнем уровне сервиса. Отправка данных «в никуда» в целом не удовлетворяет никого, а проверка доставки данных путем ожидания ответного сообщения очень «неприятная» из-за неизвестности требуемого времени. Отправка уведомления о построении канала с использованием служебного канала, операция не требующая особо больших ресурсов. Можно реализовать и другой вариант — сразу создавать кольцо объединяющее источник и приемник передаваемых данных (пакет сразу пробежит по кругу целиком или сформируется ответный пакет коммутатором на принимающей стороне). Можно такое уведомление генерировать (если произошел сбой в создании канала) и на каждом промежуточном коммутаторе, что бы передатчик как можно раньше узнал о невозможности создания канала. Если очень не хочется повторно передавать данные при невозможности создать виртуальный канал с требуемой скоростью, такое оптимально для маршрутов с очень большим временем доставки (на другую сторону земного шара через спутник), то можно попробовать использовать алгоритм частичной доставки.
В момент невозможности создания канала с требуемой скоростью, создается канал с меньшей (дальше создается канал уже именно с этой скоростью) и в момент переполнения буфера коммутатора, буфер очищается и в него помещается символ обозначающий переполнение буфера и числом отброшенных символов. Принимая такой символ адресат формирует список таких понижений скорости и отправляет его передатчику. Передатчик понижает скорость первичного канала, вычисляет какие данные были пропущены (пропущенные данные можно определить и просто по списку понижений скорости и размеру буфера) и отправляет их наиболее оптимальным способом (хоть альтернативным маршрутом).
Маршрутизация в существующих сетях с пакетной коммутацией осуществляется на основе адреса в заголовке пакета, таблиц маршрутов и другими правилами в промежуточных маршрутизаторах. Такой подход хорошо работает для относительно небольшого числа определений маршрута и возможности буферизации принимаемых данных отдельного пакета, требуется относительно много времени для определения номера порта, в который необходимо направить пакет. Для высокоскоростных систем с малым временем существования виртуального канала, не хватит скорости доступа к памяти таблиц коммутации (да и сама таблица будет иметь размер в мегабайты для каждого физического канала — требуется выделить ОЗУ, равное максимально возможному числу виртуальных каналов) и выгоднее описывать маршрут методом прямого перечисления физических каналов, через которые должен быть построен виртуальный канал. Размер адресной информации не будет слишком большим, число промежуточных коммутаторов относительно небольшое и если на каждый коммутатор выделить 8 бит (номер физического порта или тоннеля), то аналог адреса IP6 позволит строить маршрут из 16 коммутаторов.
Для предлагаемого способа таблица превращается в один байт для каждого буфера (именно существующего, а не потенциально возможного виртуального канала). Кроме того необходимо учесть, что адрес передается только в момент создания канала (постепенно стирается по мере движения к приемнику), а использование виртуального тоннеля существенно сокращает затраты на маршрутизацию. Для построения цепочек физических каналов можно использовать аналог обычных поисковых систем или DNS из современных сетей, задаем параметры пункта назначения (любой набор параметров: IP адрес тоже обычный параметр) и получаем результатом набор цепочек с альтернативными маршрутами. Относительная адресация обладает повышенной защитой от несанкционированного доступа, есть полный контроль над маршрутом. Для работы сети, нет необходимости в обязательном наличии (работе) высокоуровневых компонент, маршрут может быть задан заранее (для сетей с постоянной системой связи, как пример разводка на печатной плате — соединения не изменяются).
Непосредственное управление трафиком, выделение (планирование) полосы пропускания и др невозможно из-за большой скорости создания канала и потенциально большого размера сети. Для балансирования загрузки каналов необходимо использовать опосредованные методы, такие как планирование различных маршрутов, назначение скоростей передачи с учетом накапливаемой статистики использования виртуального канала. При перегрузках физического канала не происходит отбрасывания данных уже существующих виртуальных каналов, невозможно только создать новый канал. Если учитывать характер трафика (преимущественно короткие и частые сообщения), наличие резервных маршрутов и очень быструю процедуру создания (удаления) виртуального канала, то отказ в создании канала не приведет к катастрофическому падению производительности, будет просто небольшое проседание в скорости вычислений (повторное создание канала произойдет в момент прихода сообщения об ошибки соединения или истечения заранее известного времени). При накоплении отрицательной статистики (именно статистики, а не реакция на отдельное событие) управляющее ПО коммутаторов отслеживает частоту ошибок соединения и выполняет планирование параметров каналов с учетом этих данных. С большой вероятностью перегрузка сама прекратится за время в сотни наносекунд, а ПО маршрутизатора должно заниматься вопросами именно стратегического планирования. К такому планированию можно отнести возможность редактирования уже созданных маршрутов (данные хранятся в мультиплексоре), иначе невозможно гарантированно перестроить маршрутную сеть (когда еще ПО запросит пересоздание маршрута).
Связь программ (нитей вычислительного процесса) с источниками (приемниками) передаваемых данных строится по той же схеме что и в коммутаторах.
Вычислительная система представляет собой большое число различных исполнительных модулей, объединяемых сетью связи. Сеть связи заменяет собой все локальные шины и интерфейсы от доступа в память до подключения клавиатуры.
Такая архитектура вычислительной системы коренным образом меняет всю вычислительную парадигму (данный вопрос будет впоследствии рассмотрен в статье с описанием структуры операционной системы и ПО). Существенным образом изменяется роль сетевого оборудования в вычислительной архитектуре. Если раньше сеть была способом связать отдельные вычислительные машины и функционирующие на них приложения, то сейчас понятие отдельной вычислительной машины по существу отсутствует и приложение может быть «размазано» по различным аппаратным ресурсам сети. Вопрос администрирования (управления ресурсами параметрами доступа вычислительной системы) полностью переходит в плоскость управления сетью, соединяющей отдельные исполнительные модули (нет больше центрального процессора).
Реагирование на ошибки передачи аппаратуры
Самым нижним уровнем борьбы с ошибками можно считать кодирование передаваемых символов с возможностью восстановления при появлении одной или нескольких ошибок (число зависит от канала передачи данных). Если несмотря на кодирование все же появляется ошибочный символ (или группа символов), то самым неприятным последствием будет обладать рассинхронизация списка виртуальных каналов передатчика и приемника. Соответственно запросы на изменение таблицы (создать или удалить канал), должны иметь максимальную возможность восстановления. Если запрос все же был потерян, то будут искажены данные всех виртуальных каналов, имеющих скорость меньшую чем скорость в запросе. Далее есть два варианта реагирования, полностью разорвать все виртуальные каналы или только виртуальные каналы с искаженными данными (с меньшей скоростью передачи чем у потерянного канала), в данные, подвергшиеся искажениям добавить символ «ошибка» (данный символ обрабатывается приемником). Если обнаружена рассинхронизация, то необходимо максимально быстро восстановить идентичность таблиц, а время восстановления каналов должно определяться длиной кабеля (соединяющего два коммутатора). Полная передача таблицы от передатчика к приемнику самый простой вариант, но лучше к каждому запросу редактирования таблицы добавлять циклический номер запроса. По номеру запроса определять момент рассинхронизации (номера идут не последовательно) и генерировать запрос на повторную пересылку потерянных изменений.
Предлагаемая коммуникационная парадигма, может быть использована не только для построения вычислительной системы следующего поколения, но и для улучшения уже сейчас существующей сети. Синхронность и высокое качество обслуживания создаваемых виртуальных каналов связи позволят оптимально решать все задачи передачи, голоса, видео (без замираний). Для систем реального времени или систем повышенной надежности, кроме всего прочего очень пригодится возможность создания множества альтернативных маршрутов, жесткий контроль времени создания канала и доставки данных. Пакетная коммутация может быть прозрачно эмулирована новой парадигмой, передача пакета — это просто временное создание канала, передача данных и закрытие.
Обратное эмулирование новой сети пакетной коммутацией невозможно.
Надеюсь, что статья о коммуникационной системе Вам понравилась. Если в процессе чтения были найдены ошибки и не стыковки, прошу указать на них. Надеюсь, что данный текст послужит основой для новых проектов и стартапов, которые будут выкуплены большими организациями. Если есть желание реализовать такую систему в виде HDL модели в сообществах типа OpenCores.org, буду очень рад (не забываем указывать на первоисточник).
В следующих статьях будут описываться другие стороны (части) вычислительной парадигмы. Планируется статья по механическим принципам проектирования «аватара».
Описанный алгоритм построения системы связи, может стать частью большого целого, а то и международным стандартом (очень надеюсь). Если будут вопросы — всегда готов ответить, проконсультировать и осуществить проверку «на соответствие генеральной линии партии» конкретной физической реализации.