В модуле СтнК изначально записываются параметры сети в файл логирования, чтобы можно было проще получить эту информацию. Также предусмотрена возможность досрочного завершения работы сети в случае прекращения ее работы. Это реализовано так, что если с шины модуля топологий 10000 тактов идет повторяющийся сигнал, то работа завершается с соответствующим сообщением. Также моделирование завершится досрочно, если все пакеты сгенерированы и переданы. За минимальную единицу времени принята 1 нс, на один такт уходит 2 нс.
2.7 Автоматизация запуска модели
Для автоматизации запуска моделирования написаны bat и tcl скрипты. Bat-скрипт принимает из консоли параметры для запуска модели. Затем он очищает рабочую папку для симуляции, если она сохранилась после предыдущего запуска. Генерируется файл таблицы маршрутизации с помощью python-скрипта. Запускается tcl-скрипт, в котором создается рабочая библиотека, компилируются все исходные файлы, запускается симуляция. После ее завершения Modelsim закроется самостоятельно.
Результатом работы модели является файл с логами работы сети. Его требуется обработать отдельным скриптом-парсером, который также написан на Python. Главная функция скрипта проходит по всему файлу, собирая информацию о параметрах сети, количество отправленных и полученных флитов и пакетов, их среднее время передачи, проверяет их целостность пакетов, адреса доставки, полное время работы модели. Временем работы модели является время получения последнего флита в сети. Изначально эта статистика собирается для каждого узла, затем суммируется в общую. Подсчитываются fir и pir. При этом обрабатываются ошибки в случае, если модель отработала некорректно и файл с логами дает заведомо неправильную информацию (например, если время моделирования или количество узлов равно 0). Результаты подсчета статистики форматированно выводятся в консоль и сохраняются в файл.
Пример файла со статистикой для топологии circulant представлен на рисунке:
Рисунок 13 – Рисунок 7. Файл со статистикой работы сети.
Так как в сети 25 узлов, на рисунке приведены полная статистика работы сети и статистика для 0 узла.
3. Тестирование модели
Для тестирования работы сети проводилось моделирование с 9 узлами. Каждый узел должен был сгенерировать 11000 пакетов. Экспериментально установлено, что время задержки генерации пакетов должно составлять 150 тактов. При меньшей задержке возникает deadlock, что приводит к остановке работы сети [13]. Результаты моделирования представлены в таблице 4.
Таблица 4 – Результаты моделирования сетей с 9 узлами.
|
Топология |
mesh 3Ч3 |
torus 3Ч3 |
circulant С(9; 1, 2) |
|
|
Среднее время доставки флита (в тактах) |
47.71 |
23.25 |
23.64 |
|
|
Время моделирования (в тактах) |
2135601 |
2091808 |
2093121 |
Модель работает корректно, однако для каждой топологии требуется отдельно подбирать задержку и остальные параметры для увеличения производительности.
После отладки модели на сети с маленьким количеством узлов было проведено моделирование сети с 25 узлами. Использовалась задержка генерации пакетов в 300 тактов.
Таблица 5 – Результаты моделирования сетей с 25 узлами.
|
Топология |
mesh 5Ч5 |
torus 5Ч5 |
circulant C(25; 1, 2) |
|
|
Среднее время доставки флита (в тактах) |
56.96 |
31.9 |
29.81 |
|
|
Время моделирования (в тактах) |
3717561 |
3684439 |
3684114 |
Время моделирования, как и среднее время доставки, ожидаемо увеличилось, так как сумма пакетов для генерации стала 275000 вместо 99000.
4. Оптимизация параметров модели
4.1 Разработка вспомогательного ПО
Важнейшими показателями работы сети являются время моделирования и среднее время передачи пакета. Так как маршрутизатор в один момент времени может задействовать один порт, наибольшее влияние на пропускную способность сети оказывает параметр packet_delay, отвечающий за время задержки ввода пакета в сеть в тактах. Для анализа его влияния на сеть реализован скрипт на языке Python, строит графики зависимости времени моделирования и среднего времени передачи пакета от любого параметра. Так как Modelsim не может самостоятельно распараллеливать симуляцию, одновременно запускаются несколько симуляций с разными параметрами с помощью Pool из библиотеки multiprocessing [14].
Для оптимизации работы с моделью она запускается прямо из python-скрипта, минуя bat. Добавлен способ получения конфигураций из командной строки, параметры хранятся в json-файле. При запуске производится текстовый анализ данного файла, в результате чего генерируются конфигурации для запуска одной или нескольких моделей. Происходит проверка полученных параметров. Все результаты сохраняются в дампы, также хранящиеся в формате json. Таким образом, в случае прерывания работы скрипта или при повторном построении не требуется проводить повторные моделирования. Функция построения графиков идет по точкам в отрезке с фиксированным шагом, моделируя работу сети с данной задержкой. По полученным точкам строятся графики.
Разработан скрипт для нахождения минимальной допустимой задержки ввода пакета в сеть. Из анализа графиков на рисунках 13-17 видно, что в точках, где сеть полностью передает отправленные пакеты, есть определенная зависимость. Аппроксимировать точки удалось с помощью функции:
(3)
Для поиска условного минимума функции потребуется ее производная:
(4)
Используя ее, можно уменьшить время минимизации параметра. Для этого разработан алгоритм:
1. Высчитывается первая точка (start_delay), в которой полностью переданы отправленные пакеты. Это происходит увеличением параметра на 1, параллельно выполняется сразу jobs_num (как правило, количество ядер процессора в используемом компьютере) симуляций. В тот момент, когда одна из точек подходит, итерирование прекращается.
2. Отрезок от start_delay до start_delay + 1000 делится на jobs_num точек. В них параллельно получаются точки, по которым будет происходить аппроксимация. Важно чтобы точек было больше 3.
3. По полученным точкам происходит аппроксимация функции (3). Для этого используется функция curve_fit из библиотеки scipy [15]. После ее выполнения получаются коэффициенты a, b, c, d, используя которые можно по формуле получать примерное среднее время моделирования по задержке.
4. Происходит поиск условных минимумов функции (3) по jobs_num точкам с помощью функции opt_n_points. Границы поиска от start_delay до start_delay + 1000. Для получения новых минимумов параметр эпсилон меняется по правилу:
(5)
Параметр eps_pow устанавливается при запуске алгоритма. В данном случае он равен 8. Индекс i итерируется для получения каждой новой точки. Каждый минимум проверяется передачей в 5 раз большим количеством пакетов. В случае нахождения точки переход к пункту 5.
5. Происходит одна итерация для поиска минимума от максимальной нерабочей задержки до минимальной рабочей. Индекс i в (5) итерируется от 0 до предыдущего i в квадрате. Полученные точки проверяются, и наименьшая из них является результатом работы алгоритма.
Ниже представлен алгоритм работы функции opt_n_points:
1. Отрезок от a до b делится на n-1 одинаковых отрезков. Из них исключаются возможные повторы.
2. Для каждого значения из отрезка высчитывается значение целевой функции (в данном случае это производная (4)).
3. Выбирается 1 и 2 условные минимумы. Они инициализируются первым и вторым значениями списка. Если разница между 1 минимумом и текущим значением больше eps, и минимум больше значения, то 1 минимум становится 2, а значение функции - 1 минимумом.
4. Функция рекурсивно применяется для отрезка от 1 до 2 минимума. Это происходит до тех пор, пока разница между значениями x больше 1. Возвращается 1 минимум.
4.2 Исследование зависимостей параметров сети
Для изучения выбраны 3 неоптимальных топологии (mesh 2Ч8, torus 2Ч8 и circulant ) и 3 оптимальных (mesh 4Ч4, torus 4Ч4, ring circulant [16]). Каждый узел должен сгенерировать 11000 пакетов для передачи. Ограничение времени моделирования равно 107 тактов. Графики зависимости среднего времени передачи пакета и времени моделирования от задержки ввода пакета в сеть представлены на рисунках 14-19.
Рисунок 14 – График зависимости среднего времени передачи пакета и времени моделирования от параметра pack_delay в топологии mesh 2Ч8.
Рисунок 15 – График зависимости среднего времени передачи пакета и времени моделирования от параметра pack_delay в топологии torus 2Ч8.
Рисунок 16 – График зависимости среднего времени передачи пакета и времени моделирования от параметра pack_delay в топологии circulant C(16, 1, 2).
Рисунок 17 – График зависимости среднего времени передачи пакета и времени моделирования от параметра pack_delay в топологии mesh 4Ч4.
Рисунок 18 – График зависимости среднего времени передачи пакета и времени моделирования от параметра pack_delay в топологии torus 4Ч4.
Рисунок 19 – График зависимости среднего времени передачи пакета и времени моделирования от параметра pack_delay в топологии circulant C(16; 1, 6).
Так как среднее время передачи пакетов начинает уменьшаться слишком медленно, требуется найти такую задержку, при которой пакеты будут передаваться достаточно быстро, а время моделирования останется приемлемым.
Результаты нахождения минимальных задержек для тестовых топологий представлены в таблице 6.
Таблица 6 – Минимальные рабочие задержки.
|
Топология |
mesh 4Ч4 |
mesh 2Ч8 |
torus 4Ч4 |
torus 2Ч8 |
circulant C(16; 1, 2) |
circulant C(16; 1, 6) |
|
|
Задержка (такт) |
260 |
387 |
143 |
201 |
232 |
165 |
|
|
Среднее время передачи пакета (такт) |
44.34 |
56.78 |
40.49 |
42.64 |
42.83 |
32.06 |
Из результатов моделирования следует, что параметры топологии сильно влияют на производительность сети. Так, у топологии mesh 2Ч8 неоптимальной формы среднее время передачи пакетов значительно выше, чем у mesh 4Ч4. При этом невозможно создать топологии mesh и torus с количеством узлов, не являющимся квадратом. В этом заключается преимущество топологии circulant перед ними. Также у топологий torus и mesh большие диаметр и средняя длина пути между узлами, по сравнению с circulant. Поэтому у топологии ring circulant наименьшее время передачи пакетов среди тестируемых топологий, и этот тип топологии с оптимальными образующими будет использоваться в дальнейших экспериментах.
Для изучения влияния количества узлов на задержку была проведена оптимизация топологий C(4; 1, 2), C(9; 1, 2), C(16; 1, 6), C(25; 1, 7), C(36; 1, 8), C(49; 1, 9), C(64; 1, 14), C(81; 1, 24), C(100; 1, 18) [16]. Для передачи использовалось только 5500 пакетов, так как с увеличением количества узлов значительно возрастает время моделирования, а для проверки минимальных задержек используется в 5 раз большее количество пакетов. При попытках моделирования СтнК с большим количеством было выявлено, что это занимает слишком много времени в связи с ограничениями производительности Modelsim [17]. Результаты оптимизаций представлены на рисунке 20.
Рисунок 20 – График зависимости минимальной задержки ввода пакета в сеть от количества узлов.
Точками на графике обозначены результаты моделирований, а линией - аппроксимированная функция корня.
Для оценки зависимости среднего времени передачи пакетов от количества узлов взята минимальная задержка для сети со 100 узлами и проведено моделирование тех же параметров, что и в предыдущем опыте. Для передачи также использовалось 11000 пакетов.
Рисунок 21 – График зависимости среднего времени передачи пакетов от количества узлов при одинаковой задержке.
Выявлена линейная зависимость среднего времени передачи пакетов от количества узлов. При увеличении количества точек и узлов возможна более точная оценка, однако это займет большое количество времени.
Выводы к разделу 5
Создан набор функций для работы с моделью на языке python для автоматизации работы с ней. На основе анализа графиков удалось получить функцию общего вида для ускорения оптимизации с минимальным количеством симуляций. С данными задержками через сеть с данными маршрутизаторами возможно передать любое (или достаточно большое) количество пакетов. Выявлено большое влияние типа топологии и ее параметров на производительность СтнК. Среди тестируемых наиболее удачной топологией оказалась ring circulant с оптимальными образующими. На основе полученных результатов можно делать выводы о зависимостях и оценивать параметры и результаты работы сетей различных конфигураций без проведения моделирования. Разработанная модель не является эффективной для симуляции работы сетей с большим количеством узлов, однако дает очень точные результаты и позволяет проверять и сравнивать показатели разных топологий и маршрутизаторов.
Заключение
В результате работы разработана HDL модель сети на кристалле. В ней доступно множество параметров для изменения. Модель поддерживает 3 топологии mesh, torus и circulant 2 порядка, а также возможность добавить собственный конфигурационный файл со связями маршрутизаторов.