Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • RouterOS
  • Мобильные приложения MikroTik
  • Архив
Форум
Настройка
    info@mikrotik.moscow
    +7 495 320-55-52
    Заказать звонок
    Mikrotik.moscow
    Каталог
    • Акции
      Акции
    • Маршрутизаторы
      Маршрутизаторы
    • Коммутаторы
      Коммутаторы
    • Радиомосты и уличные точки доступа
      Радиомосты и уличные точки доступа
    • Wi-Fi для дома и офиса
      Wi-Fi для дома и офиса
    • LTE/5G
      LTE/5G
    • Powerline адаптеры
      Powerline адаптеры
    • IoT устройства
      IoT устройства
    • Оборудование 60 ГГц
      Оборудование 60 ГГц
    • Материнские платы RouterBOARD
      Материнские платы RouterBOARD
    • Корпуса
      Корпуса
    • Интерфейсы
      Интерфейсы
    • SFP/QSFP трансиверы
      SFP/QSFP трансиверы
    • Аксессуары
      Аксессуары
    • Антенны
      Антенны
    • Архив
      Архив
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Скачать WinBox Скачать Прошивки Форум > RouterOS Форум > SwOS Форум > Железо
    Mikrotik.moscow
    Каталог
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Mikrotik.moscow
    Телефоны
    +7 495 320-55-52
    Заказать звонок
    0
    0
    0
    Mikrotik.moscow
    • +7 495 320-55-52
      • Назад
      • Телефоны
      • +7 495 320-55-52
      • Заказать звонок
    • info@mikrotik.moscow
    • г. Москва, ул. Бакунинская, 84
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной


    • Кабинет
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    Форум
    RouterOS
    по-настоящему минималистичный образ MetaROUTER для обработки пакетов

    по-настоящему минималистичный образ MetaROUTER для обработки пакетов

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    по-настоящему минималистичный образ MetaROUTER для обработки пакетов, RouterOS
     
    majbthrd
    Guest
    #1
    0
    31.01.2012 19:21:00
    Интересно, пробовал ли кто-то создать действительно минимальный образ MetaROUTER? Под «действительно минимальным» я подразумеваю прошивку без Linux, которая выполняет только одну функцию — обслуживание виртуальных прерываний «VIRQ», связанных с виртуальными интерфейсами (и, опционально, с виртуальной консолью). Такой подход обеспечил бы крайне низкое потребление оперативной памяти и меньшую загрузку CPU, позволяя запускать несколько Meta-образов даже на таких небольших устройствах, как RB750.

    Нет особого смысла запускать несколько мегабайт виртуализированного Linux-кода, если нужно только обработать пакеты. Основная трудность здесь — попытка восстановить API интерфейса VIRQ и нужную аппаратно-зависимую инициализацию, разбирая патчи Mikrotik к Linux. Мне не известна никакая официальная документация, и, по моим предположениям, этот интерфейс может со временем изменяться.

    Для тех, кому это интересно, кажется, лучшие результаты можно получить, изучая исправленный исходный код ядра Linux с поиском по ключам «VIRQ_BASE» и «get_virq_nr» (разные участки кода по-разному обращаются к VIRQ). Что касается аппаратно-зависимой инициализации, сложно понять, что действительно важно, а что просто нужно для Linux.

    Образ MetaROUTER, судя по всему, представляет собой .tgz-архив с распакованным .elf-файлом ядра и файлами файловой системы. Исходя из этого, «действительно минимальный» образ — это просто .tgz с .elf-файлом под названием «kernel», содержащим чистый MIPS-код обработки VIRQ.
     
     
     
    majbthrd
    Guest
    #2
    0
    06.04.2013 00:19:00
    Я реализовал минимальный образ, о котором говорил в прошлом посте. Два самых важных вывода, которые я сделал: хотя параметр size памяти можно задать как минимум 4 МБ, НИЧЕГО не запустится при меньшем объёме, чем 8 МБ. Даже простейшая ассемблерная программа из двух команд (всего несколько байт) не запустится с памятью меньше 8 МБ. Может, Mikrotik что-то делает при инициализации, что не даёт работать с объёмом меньше 8? Даже упомянутая двухкомандная ассемблерная программа (бесконечный цикл с инструкцией “wait”) заставляет устройство Mikrotik постоянно перезагружаться из-за истечения времени watchdog. Это на RB750 без G, причём только в модели G в мануале указано, что бывают случайные зависания. Тестировал на RB750 с RouterOS 5.24.
     
     
     
    majbthrd
    Guest
    #3
    0
    07.04.2013 19:39:00
    В дальнейших тестах я заметил огромную разницу в стабильности MetaROUTER при небольшом изменении гостевого кода. RB750 сбрасывается watchdog’ом максимум через несколько минут (часто — гораздо раньше) с этой простой тестовой программой (на ассемблере):

    kernel_entry:  
    wait  
    j kernel_entry

    Но при этой тестовой программе он работает довольно стабильно:

    kernel_entry:  
    j kernel_entry

    Я проводил более сложные тесты с включением и отключением прерываний, использованием консоли и так далее. Тем не менее именно команда «wait» кажется общей причиной сброса watchdog’а.

    Обратите внимание:  
    а) «wait» — это команда, которая должна корректно освобождать процессор, когда задач нет.  
    б) В ядре Linux для MIPS «wait» используется повсеместно (включая собственные патчи Mikrotik для MetaROUTER).

    Поэтому это наблюдение, возможно, совпадает с прежними выводами, что проблема связана с частотой прерываний (поскольку «wait» в ядре MIPS 24K останавливает конвейер до следующего прерывания).

    Сложно винить конфигурацию гостевого кода при таком простом варианте. При такой примитивной программе у Mikrotik должна быть простая тестовая сборка для отладки своего кода.
     
     
     
    majbthrd
    Guest
    #4
    0
    07.04.2013 19:57:00
    Для полноты картины я прикрепил два образа MIPS MetaROUTER для тестирования (весом целых 281 и 282 байта соответственно). ИСПОЛЬЗУЙТЕ НА СВОЙ СТРАХ И РИСК. НЕ ИСПОЛЬЗУЙТЕ ИХ НА РАБОЧЕМ УСТРОЙСТВЕ. ПРЕДВАРИТЕЛЬНО ОЗНАКОМЬТЕСЬ С NETBOOT. ХОТЯ МАЛОВЕРОЯТНО, НО ВЫ МОЖЕТЕ ПОВРЕДИТЬ УСТРОЙСТВО. loop-withwait.tgz должен вызывать сбросы сторожевого таймера. loop-nowait.tgz должен работать без проблем. Как только сторожевой таймер начнёт срабатывать (loop-withwait.tgz), восстановить устройство становится сложнее. По моему опыту, устройство будет работать лишь несколько секунд, после чего перезагрузится снова, так что восстановление — это гонка, чтобы отключить экземпляр MetaROUTER до следующей перезагрузки. Обратите внимание, что эти образы ничего функционально не делают. Всё, что вы увидите — статус быстро меняется с «загрузка» на «работает». Цель проста — показать наглядный пример ограничения MetaROUTER (чтобы Mikrotik мог это исправить). loop-nowait.tgz (281 байт) loop-withwait.tgz (282 байта)
     
     
     
    janisk
    Guest
    #5
    0
    08.04.2013 13:19:00
    Как долго должен работать watchdog timer, чтобы перезагрузить роутер? Пытаюсь «потереть» RB2011 под версией 6.0rc13.
     
     
     
    majbthrd
    Guest
    #6
    0
    08.04.2013 16:23:00
    Согласно документации Mikrotik (см. «Случайные зависания»): http://wiki.mikrotik.com/wiki/Manual:Metarouter Модель RB2011 должна быть устройством без проблем. Так что, возможно, это не та модель, на которой стоит тестировать. У меня на RB750 (RouterOS 5.24) перезагрузки из-за сторожевого таймера происходят не реже, чем через минуту.
     
     
     
    janisk
    Guest
    #7
    0
    09.04.2013 07:14:00
    Все перечисленные устройства должны работать без проблем. Проверял ваш образ на RB450G — устройство постоянно перезагружалось с довольно высокой частотой. Тестовый роутер передан разработчикам. Кстати, RB2011 всё ещё держится. Тесты проводились на RouterOS 6.0rc13.
     
     
     
    majbthrd
    Guest
    #8
    0
    09.04.2013 19:47:00
    Отлично! Успокаивает, что тест удалось воспроизвести, по крайней мере на некоторых моделях.
     
     
     
    janisk
    Guest
    #9
    0
    17.04.2013 07:51:00
    Ты можешь попробовать эту сборку: http://www.mikrotik.com/download/share/routeros-mipsbe-6.0rc14.npk, а если у тебя не 6.0rc, то вот эта: http://www.mikrotik.com/download/share/routeros-mipsbe-5.25rc1.npk
     
     
     
    majbthrd
    Guest
    #10
    0
    18.04.2013 23:17:00
    Я использовал два устройства RB750 для тестирования. Одно обновил с версии 5.24 до 5.25rc1, другое — с какой-то 5.xx до 6.0rc14. RB750 с 5.25rc1 без проблем запускал MetaROUTER-образ «loop-withwait.tgz» (определённо лучше, чем в 5.24). Однако, как и в 5.24, параметр «memory-size» должен быть не меньше «8». Значения меньше «8» приводили к тому, что статус образа застревал на «booting», хотя сам образ использует памяти намного меньше 8 МБ. RB750 с 6.0rc14 сначала не запускал MetaROUTER-образ «loop-withwait.tgz» — выдавал ошибку, что памяти недостаточно. При этом параметр «memory-size» меньше «8» не принимался. Системные ресурсы показывали, что доступно 10 МБ. Через несколько минут, казалось, освободилось больше памяти, и в итоге мне удалось запустить образ. После этого всё работало без сбоев. Так что отличная работа, спасибо! Но было бы здорово (особенно если в версии 6.0 планируется использовать больше оперативной памяти), чтобы MetaROUTER-образы могли запускаться с меньшим объёмом ОЗУ.
     
     
     
    janisk
    Guest
    #11
    0
    19.04.2013 08:28:00
    Для версии 6.0 мы исправим проблему с тем, что 8 МБ — это минимальный выделяемый объем.
     
     
     
    NathanA
    Guest
    #12
    0
    23.04.2013 02:29:00
    majbthrd, отличная работа! Похоже, это особенно помогло найти довольно неприятный баг mipsbe MetaROUTER. Планируешь ли ты поделиться или опубликовать свой исходный код и инструкции по сборке для твоего действительно минимального MR-образа? Звучит как очень интересный проект. – Nathan
     
     
     
    majbthrd
    Guest
    #13
    0
    23.04.2013 03:16:00
    Спасибо, Нейтэн. Я занимаюсь примером в свободное время. Читал список запросов на новые функции Mikrotik для вдохновения. Там попался запрос на более настраиваемый DNS-сервер, который позволял бы опрашивать разные серверы для разных доменных зон верхнего уровня. Да, это можно сделать с образом Linux MetaROUTER размером 12-16 МБ, но 1 МБ должно быть более чем достаточно для кастомного минимального образа. Кастомная обработка пакетов и собственное обнаружение вторжений — еще примеры того, как можно использовать минимальный образ. В сущности, MetaROUTER можно рассматривать как лёгкий способ для RouterOS передавать пакеты в кастомный код и обратно. Поэтому я вижу MetaROUTER как способ добавить дополнительный функционал к уже существующим возможностям Mikrotik RouterOS. Но пока есть минимальное ограничение в 8 МБ памяти, интерес теряется. Концепция кажется гораздо более привлекательной, если можно выделить всего лишь, скажем, 1 или 2 МБ.
     
     
     
    NathanA
    Guest
    #14
    0
    23.04.2013 04:01:00
    Да, звучит довольно полезно, хотя я понимаю, что у каждого из подходов есть свои плюсы и минусы. Большинство людей, которые хотят использовать функцию импорта образа MetaROUTER, скорее всего, заинтересованы в том, чтобы взять уже существующий код и как-то применить его в среде RouterOS. Большинство готового кода не живёт в вакууме и не изобретает понапрасну каждый велосипед (ядро ОС, ANSI C библиотеку, сокеты/сетевые уровни и так далее), поэтому, например, он написан с использованием сторонних библиотек, некоторые из которых сами по себе могут быть довольно большими. Если вы собираетесь запускать всего один экземпляр MetaROUTER, то сделать его максимально лёгким и эффективным — отличный вариант. Но если планируется запускать несколько маленьких изолированных экземпляров MetaROUTER, то в зависимости от задач, которые выполняет каждый, это может привести к существенному дублированию кода — как на диске, так и в оперативной памяти. Если все ваши кастомные задачи работают в одном MR-экземпляре, то эти апплеты могут использовать общий код (общие библиотеки). В вашем текущем «ядре» вы уже реализовали необходимые хуки для доступа к интерфейсам VIF, которые представлены гостю, или это одно из следующих ваших заданий? – Nathan
     
     
     
    timberwolf
    Guest
    #15
    0
    23.04.2013 05:20:00
    Спасибо, NathanA, что скинул ссылку на эту тему, мне тоже кажется, что это интересный вопрос. Огромное спасибо majbthrd, ведь, похоже, твои минимальные двух-трёхстрочные инструкции действительно помогли MikroTik наконец разобраться с их кодом гипервизора MetaROUTER. Nathan, хотя я и согласен с твоим мнением, что изобретать велосипед не обязательно, возможно, это и не нужно. Существует много библиотек для довольно минимальных встроенных систем, так что они могут стать хорошей отправной точкой. Сейчас я думаю, не стоило бы ли портировать FreeRTOS и стек LwIP на MetaROUTER... majbthrd, если ты сможешь поделиться своим минимальным билд-окружением, это было бы отличным стартом. Мои навыки работы с ассемблером немного подзабылись, но, возможно, я смогу их подтянуть.
     
     
     
    janisk
    Guest
    #16
    0
    23.04.2013 07:20:00
    Минимальный объём оперативной памяти, выделяемый гостевой системе, будет уменьшен в следующих версиях RouterOS. Для импортированных образов он составит 2 МБ.
     
     
     
    majbthrd
    Guest
    #17
    0
    23.04.2013 22:42:00
    Это проект в разработке, но вот немного исходного кода: http://code.google.com/p/metarouter-apps/ Приложение «tincan» следит за созданием и удалением виртуальных интерфейсов. При нажатии клавиши в консоли оно выводит шестнадцатеричное представление битового поля, показывающего, какие интерфейсы сейчас активны.
     
     
     
    NathanA
    Guest
    #18
    0
    24.04.2013 11:41:00
    Очень круто, спасибо, что поделился. Ты собираешься реализовать свой собственный облегчённый IP-стек, ли перенести его откуда-то ещё, или пока не решил? – Натан
     
     
     
    majbthrd
    Guest
    #19
    0
    24.04.2013 18:12:00
    Пока не знаю. Есть подходящая поговорка: «Если у тебя есть молоток, всё вокруг начинает казаться гвоздём». Я профессионально занимаюсь встроенным программированием, и мне было естественно интересно попробовать запустить более «низкоуровневую» версию кода внутри гостевой системы MetaROUTER (возможно, независимо от того, насколько это практично). Единственный способ добиться этого — тщательно изучить много патчей Mikrotik к ядру Linux, чтобы понять, как гостевая виртуальная машина взаимодействует с хостом, и потом написать новый код с нуля. Это был (и есть) трудоёмкий и медленный процесс.

    В встроенной среде обычно можно переключать GPIO-пины или что-то подобное, чтобы проверить, действительно ли код работает, как ожидается. Однако виртуализация по своей сути блокирует любой доступ к памяти за пределами выделенного диапазона, поэтому никакие периферийные устройства недоступны. К тому же, обычно (хотя и не обязательно) встроенная среда имеет документированный интерфейс, а в нашем случае интерфейс пришлось выводить напрямую из исходников и с помощью множества экспериментов.

    Как сказал timberwolf, lwIP / uIP может использоваться в качестве лёгкого сетевого стека. Проблема в том, что Linux — это крутая универсальная платформа для программирования. За ней стоит огромная неподъёмная работа множества добровольцев. Хоть и с ценой в виде не самой эффективной загрузки CPU и памяти, простой код можно написать за считанные секунды, не заморачиваясь деталями настройки.

    Поэтому, когда думаешь о создании какой-то универсальной платформы для написания приложений MetaROUTER, наступает момент (возможно, очень ранний), когда просто бессмысленно изобретать велосипед заново. Тем не менее, моя «молотковая» интуиция подсказывает, что есть сферы применения, где действительно имеет смысл использовать облегчённый, упрощённый код, который даже не требует полноценного сетевого стека. Просто я пока не понимаю, где именно эти границы.
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2026 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры