Русский
Русский
English
Статистика
Реклама

Контроллеры

Морзянка сэр или обзор составных функциональных блоков в CannyLab 2

07.01.2021 22:18:40 | Автор: admin
Год назад, мне подарили мой первый контроллер Canny 3 tiny, о чем я написал статью, из которой со временем вырос целый небольшой цикл.

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

Но зайдя на сайт разработчика, чтобы полистать документацию, я обнаружил, что с момента моего последнего визита, среда разработки кардинально обновилась (на момент написания статьи до версии 2.7, если быть точным).

И если новые иконки, возможность наконец-то подвигать панельки управления, копка сброса настроек по умолчанию, на повод для обзора явно не тянут, то появление составных функциональных блоков, показалось мне по настоящему стоящим нововведением.

Так что я решил отложить обзор нового контроллера и потратить время на описание примера работы с составными функциональными блоками.

В этот раз мы запрограммируем контроллер моргать морзянкой число 2021.

Статья рассчитана в первую очередь на новичков, люди опытные легко разберутся самостоятельно прочитав документацию.





Оглавление:
Часть I: Введение
Часть II: Запускаем CannyLab 2
Часть III: Создаем составной блок
Часть IV: Применяем блок в контроллерах
Часть V: Заключение


Введение



Другие статьи цикла
  1. Раз, два, три ёлочка гори! или мой первый взгляд на контроллер CANNY 3 tiny в этой статье мы разбирали что из себя представляет контроллер, а также азы работы в среде разработки CannyLab.
  2. У Предназначения масса обличий... или автоматизируем управление автолампой с помощью CANNY 3 tiny и фоторезистора в этой статье мы разбирали работу с USB Virtual COM-port, подключение датчиков к АЦП, а также высокочастотный ШИМ на выходах контроллера.
  3. Как зеницу ока... или делаем простенькую охранную систему на базе микроконтроллера (CANNY или Arduino) и Raspberry PI в этой статье мы разбирали работу с UART, а также повторили ранее пройденное.
  4. Как зеницу ока... Каких Марин? или управляем контроллером через bluetooth с помощью мобильного приложения на Xamarin (Android).



В этой статье я буду ориентироваться на Canny 3 tiny, а также я покажу, как адаптировать код диаграммы для контроллера Canny 5 nano, но думаю, на любом другом контроллере этой фирмы принцип работы диаграммы будет аналогичен.

Прежде чем начать, два небольших дисклеймера:

  1. Я дилетант в вопросах программирования микроконтроллеров, поэтому мое мнение может где-то быть ошибочным.
  2. В данной статье представлено исключительно моё мнение на тему того, зачем нужны составные функциональные блоки и в чем их прелесть, если вдруг разработчики CannyLab 2 с ним не согласны, то всегда можно дать мне об этом знать и я подправлю статью.



Часть II: Запускаем CannyLab 2



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

Но покончим с лирическими отступлениями. Чтобы приступить к работе нам необходимо скачать среду разработки CannyLab 2.X. На момент написания статьи я использовал версию 2.7, но думаю, что диаграмма будет работать и в других версиях CannyLab 2.X. Программу можно скачать с официального сайта разработчика, ссылка на скачивание будет в разделе Поддержка -> Загрузки.

О том как работать со средой разработки и как подключать к ней контроллеры, я рассказал в самой первой статье цикла. Правда, там все применительно к версии CannyLab 1.41. Отличия конечно небольшие, но на всякий случай в этой статье я тоже дам краткие инструкции.

Порядок установки:

1. скачиваем архив;
2. распаковываем в любую папку (установка не требуется);
3. находим в папке файл cannylab.exe;
4. в Windows 10 SmartScreen может ругаться на файл, разрешите ему запуск;
5. выберите язык;
6. одобрите лицензионное соглашение;
7. если спросит про восстановление настроек из прошлой версии IDE, можете смело восстановить. В крайнем случае всегда есть кнопка сброса настроек по умолчанию.
8. Выберите контроллер, я выбирал Canny3 Tiny.

Обратите внимание! Диаграмму созданную для Canny 3 tiny, нельзя будет напрямую записать в другой редактор, об этом я расскажу чуть подробней в разделе IV.

Если все нормально, то при настройках по умолчанию на шаге 8 вы увидите примерно такую картину:




Часть III: Создаем составной блок



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

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

Эта особенность позволяет использовать составной блок как своего рода аналог программной библиотеки. Например, составной блок, который мы сделаем в этой статье, можно будет смело скопировать в диаграмму для другого контроллера, например Canny 7, не боясь каких-нибудь проблем с совместимостью.

Ну вот и всё можем создавать наш первый функциональный блок.

Создать его можно несколькими способами

  1. нажать ПКМ в рабочей области и выбрать соответствующую команду;
  2. Зажать ЛКМ и перетащить иконку блока в рабочую область




Отлично, если кликнуть ПКМ на шапку составного блока, появится контекстное меню.



Поскольку это туториал, я возьму на себя смелость пояснить кратко основные команды, связанные с составным функциональным блоком.

Команда
Описание
Войти в блок
Откроет функциональную диаграмму составного блока.
Переименовать блок
Заменит название составной блок_Х, на новое стильное, модное и молодежное.
Изменить номер
Изменит номер в правом углу блока на тот, что вы введете. Я могу ошибаться, но никакой функции кроме декоративной я в этом не обнаружил (если не прав поправьте).
Изменить ширину
Изменит ширину составного блока. Удобно если у вас очень длинное (короткое) название.
Добавить вход EN
А вот это вторая полезная фишка составных блоков. Если добавить блоку вход EN и подать на него 1, то он будет выполняться, если подать 0 то нет.
Это помогает экономить ресурсы контроллера. Блоки, которые не нужны в определенный момент времени можно выключать. Эта возможность уменьшает время выполнения цикла функциональной диаграммы. Эта функция должно быть особенно полезна на младших братьях (например, Canny 3 tiny) или в случае очень больших и сложных диаграмм, а также при необходимости энергосбережения.
Запрет изменений
Запрещает изменение начинки блока, а также добавление и удаление входов (выходов). Удобно в тех случаях, когда диаграмма разрослась, снижает риск при случайном перетаскивании блока что-то в нем изменить.


Если кликнуть правой кнопкой на надпись Вход 0 или Выход 0, то покажется контекстное меню, для управления входами и выходами составного блока.



Входы (выходы) можно:
  • переименовывать;
  • добавлять (один и несколько);
  • удалять (один и несколько);


Важно помнить, что у составного блока может не быть входов, но должен быть хотя бы 1 выход.

Как вы, наверное, уже догадались через входы мы будем внутри блока получать данные извне, а через выходы передавать результат работы в диаграмму верхнего уровня.

Увеличьте ширину блока до 320, добавьте входы / выходы и перемеривайте их, а также сам составной блок как на картинке ниже:



Перейдите внутрь функционального блока, двойным кликом ЛКМ или через контекстное меню.

И воспроизведите диаграмму, как на рисунке ниже:



Ну или просто диаграмму с GitHub.

В предыдущих статья я уже писал про общие принципы программирования и отладки функциональных диаграмм в CannyLAb, поэтому в этот раз только поясню неочевидные моменты.

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

Вот краткое описание алгоритма.

  1. На вход составного блока Цифра поступает цифра, которую мы будем в данном этапе цикла моргать светодиодом.
  2. Цифра переключает сигнал на соответствующий вход коммутатора 8:1
  3. На входах коммутатора в бинарном представлении закодированы числа в азбуке Морзе. Тире единица, точка ноль. Обрабатываться наш код будет справа налево.
  4. Конвертер 1:8 позволит нам отрабатывать каждый бит кода индивидуально во внутреннем цикле моргания светодиодом.
  5. По идее далее мы должны были бы соединить выход 0 Конвертера 1:8 со входом 0 Коммутатора 1:8. Однако той схеме, что у меня получилась, нулевой этап цикла после сброса счетчика был очень коротким. Можно было усложнить диаграмму и сделать, так чтобы нулевой цикл был положенной длины. Однако, я решил, что мы тут не ракеты в космос запускаем, поэтому не стал усложнять диаграмму и просто игнорирую ну девой цикл, его продолжительность всего доли секунды и я решил пренебречь неопределенностью, которая возникает при обнулении счетчика.
  6. Сигнал с коммутатора управляет периодом заполнения ШИМ генератора (продолжительностью включения светодиода внутри цикла ШИМ). Если на выходе коммутатора 1 (тире), то мы получим долгое время горения светодиода, если на выходе 0, то мы получим короткое моргание и большую паузу.
  7. С ШИМ генератора сигнал поступает на выход Сигнал составного блока. Этот выход мы позже подключим непосредственно к регистру управления светодиодом. Вторая ветвь уходит на счетчик. Поскольку каждая цифра в коде морзе состоит из 5 знаков, мы отсчитываем в малом цикле 5 итераций, после чего переходим к следующей цифре. Как только счетчик, связанный с выходом этап цикла превысит значение со входа Количество цифр цикл начнется по новой. Таким образом светодиод контроллера будет бесконечно моргать цифры: 2,0,2,1.


Если вы хотите потренироваться, то можете улучшить эту диаграмму. Например, добавьте поддержку всех 10 цифр из азбуки Морзе, для этого вам понадобится коммутатор 1:16 и коды оставшихся чисел.

Чтобы вернуться на уровень выше, нажмите на его название в хлебных крошках.



Часть IV: Применяем блок в контроллерах




Теперь применим наш составной блок в так сказать боевых условиях.

Начнем с Canny 3 tiny.

Воспроизведите на домашнем уровне следующую диаграмму:



Как я уже говорил раньше, выход Сигнал функционального блока мы подключим к регистру записи Регистр включения зеленого светодиода (напомню, что его легко найти с помощью фильтра).
Коммутатор 8:1 мы будем использовать для циклической подачи нужных нам цифр.

Прежде чем записывать диаграммы в контроллер, вы можете её проверить и отладить в режиме Симулятор. Это своего рода дебаггер для функциональных диаграмм.

Причем с появлением составных блогов в Cannylab в режиме симулятора появились новые команды Шаг в и Шаг через.

Команда Шаг в в процессе отладки заходить внутрь составного блога, аналогично заходу внутрь процедуры в текстовых языках программирования. Команда Шаг через не будет заходить в блок, а сразу выдаст результат его работы.



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

Также напомню, что в симуляторе есть возможность устанавливать точки останова на блоки и на сеть (красное на схеме), а также принудительно устанавливать значения (черное на схеме).



Давайте запишем программу в контроллер.

Если у вас контроллер только приехал из магазина или если вы прошивали его в старой версии Cannylab, то будет необходимо обновить прошивку.

Для этого в меню Устройство выберите команду Подключить. Далее в меню Устройство -> Системное ПО выберите команду Записать.

В открывшемся диалоговом окне в папке с программой найдите .ccx файл для вашего устройства, например как на рисунке ниже:



Теперь запишем саму диаграмму

Для этого в меню Устройство -> Диаграмма выберите команду Записать. Или найдите аналогичную кнопку на панели инструментов.

Напомню, что если вы не проводили никаких манипуляций с перемычкой для программирования, то по умолчанию при подключению к ПК, Canny 3 tiny всегда переходит в режим для программирования.

Есть три способа запустить контроллер в режиме выполнения диаграммы, мы пойдем от сложного к простому:

  1. Напаять перемычку для управления режимами (см. документацию, на сайте разработчика)
  2. Подключить контроллер не к компьютеру, а к блоку питания, ну или подключить через провод, у которого распаяны только разъемы для питания.
  3. И наконец самый простой способ в CannyLab в меню Устройство выберите команду Запустить (см. рисунок ниже). Правда, чтобы потом снова перевести контроллер в режим программирования, его надо будет повторно подключить к USB компьютера.


Убеждаемся, что всё работает:



Теперь, давайте попробуем применить наш составной блок, для контроллера Canny 5 Nano.
Как я уже говорил раньше, нельзя просто так взять и записать диаграмму.

Откройте еще одно окно CannyLab 2, создайте файл для CannyLab 5 Nano.
Затем скопируйте в буфер обмена диаграмму для Canny 3 tiny (Ctral+A, Ctrl+C) и вставьте её в окно с диаграммой для Canny 5 Nano.

Должно получиться, как на картинке ниже:



Эта диаграмма также есть на GitHub.

Обратите внимание, регистр Зеленый светодиод выделен красным.

Это потому, что у контроллера Canny 5 Nano, за моргание светодиодом отвечает совсем другой регистра.

При этом наш составной блок, перенесся без каких-либо ошибок, потому что внутри у него нет элементов, зависимых от специфики контроллера.

Поправьте диаграмму, как на картинке:

У Canny 5 Nano за управление светодиодом, отвечает канал 4, сконфигурированный определенным образом.

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

Убедимся, что и у Canny 5 Nano светодиод моргает как надо:



Часть V: Заключение




Составные функциональные CannyLab 2, на мой взгляд, одно из наиболее весомых улучшений в новой версии среды разработки. Безусловно, другие полезные мелочи, тоже хороши, работать со средой разработки стало намного приятней, но именно составные блоки, на мой взгляд это главная фича новой версии. Их применение может кардинально изменить подходы к составлению функциональных диаграмм. Можно например, сделать, мини-библиотеку с различными составными блоками для их повторного использования.

Если я что-то, недостаточно детально расписал или сделал явные ошибки, буду рад обратной связи.

P.S. Поздравляю всех со всевозможными зимними праздниками!
Подробнее..

Перевод DIY-зарядник для аккумуляторов ноутбуков на базе контроллера MP26123MP26124

18.05.2021 16:06:28 | Автор: admin

Это не первый мой проект по разработке зарядного устройства для батарей ноутбуков. Отмечу, что в первом проекте я использовал Max1873. Но для контроля заряда пришлось использовать микроконтроллер ATtiny. Все бы ничего, но здесь требовалось написать специфический код, что усложнило проект.

Второй проект работает на базе MP26123 или MP26124 от Monolithic Power Systems. Эти чипы дают возможность заряжать разряженный аккумулятор, прекращать зарядку при достижении 100% уровня заряда, разряжать уже заряженную батарею и контролировать ее температуру. Достоинством контроллеров является еще и то, что основной FET-свитч расположен внутри, что снижает сложность компоновки. Пример собранной платы в самом начале статьи. Ну а под катом обсудим подробности проекта.

Подробности проекта


Для разработки платы я изучил спецификацию контроллеров MP26123 и MP26124. Обозначения элементов, которые нужны для платы, показаны на схеме ниже. Есть и исходный файл, если вам захочется изменить дизайн платы.


Важный момент: контроллеры не понижают ток заряда, не ограничивают входной ток. Но на плате есть плавкий предохранитель на 5А. Вместо традиционного для многих плат диода Шоттки я использую PFET для снижения нагрева. PFET вместо диода также используется, чтобы не использовать падение напряжения на диоде в 0,4В. Это важно, поскольку энергии от близкой к полному разряду батареи из 3 ячеек едва хватает для подсветки экрана ноутбука. Контроллеры MP26123/MP26124 запитывают нагрузку понижающего стабилизатора LM2596 либо от батареи, либо от входных 19В. Падений напряжения при подключении или отключении блока питания нет. Контакт включения MP26123/MP26124 находится на самом краю платы, так что при необходимости Pi может отключить зарядку.

На простой SR latch всегда подается питание для того, чтобы активировать нагрузку понижающего регулятора. Это требуется в случае включения кнопочного выключателя питания. SR latch запитывается от 3,3В линейного регулятора или от входного 19В питания. Ток, потребляемый батареей при отключенной нагрузке понижающего регулятора, составляет 315 мкА. Внутренний саморазряд батареи в 2% плюс потери в 3% из-за защитной схемы приводят к полной разрядке аккумулятора за 324 дня. Если вы не планируете использовать ноутбук все это время, лучше просто вынуть аккумулятор. В этом случае саморазряд в 2% приведет к полной разрядке батареи примерно через два года (при условии, конечно, что батарея при извлечении была заряжена на 100%).

Если напряжение аккумуляторной батареи падает ниже 3В для одной ячейки, контроллеры MP26123/MP26124 выполняют предварительную зарядку в течение 30 минут, снижая ток до 10% от тока заряда. Благодаря резистору R12 я снизил полный ток заряда до 1А. Согласно спецификации, контроллеры могут выдержать и 2А, но мне не хотелось сильно нагружать систему. Как только напряжение аккумулятора достигает максимального уровня, зарядное устройство перейдет в ждущий режим (в 10% от номинального тока), а потом отключится.

Максимальное время зарядки установлено на 4,5 часа с конденсатором С6 емкостью в 0,15 мкФ. Значение времени можно менять путем изменения емкости конденсатора для этого есть таблица данных с формулой. При необходимости термистор батареи 10K NTC может быть подключен к контроллеру питания для отключения тока заряда при повышении или, наоборот, понижении температуры до заданного уровня. По дефолту отключение будет выполнено при 40 C (верхняя граница) или 11 C (нижняя). Если термистор не подключаете, то установите резистор на 10К для эмуляции комнатной температуры.

К сожалению, у контроллеров MP26123/MP26124 есть ряд недостатков. Так, их можно использовать только для заряда ячеек литиевых батарей с напряжением каждой ячейки не более 4,2В. Старые аккумуляторы, где значение было 4,1В, и новые с элементами 4,35 В заряжать при помощи этого устройства нельзя. Но если установить контроллер Max1873, то проблем нет.


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

Особенности платы


Ширина дорожек на плате рассчитана на ток не менее 3A. Было проверено несколько вариантов, в итоге было решено остановиться на минимальной ширине дорожек в 5 мм. В первом варианте платы использовалось 3,3В от MP26123 для SR latch, что активировалось лишь при подключении к розетке. Обновленная конструкция включает отдельный линейный регулятор на 3,3В, который поддерживает SR latch в рабочем состоянии хоть при подключенном питании, хоть без него. Размеры платы 62 мм * 54 мм.


Что касается цены, то три платы, изготовленные OSHPark.com, мне обошлись в $26 с доставкой силами USPS. Можно использовать и JLCPCB.com, для этого воспользуйтесь файлом архива MPS_Charge_Controller_2021-02-23.zip. Пять плат обойдется заказчику в $10 со стандартной доставкой.


На графике ниже показаны результаты тестирования MP26123, заряжающего аккумуляторную батарею 3S2P от Lenovo T61.



Также я разместил инструкцию на Instructables, где показано, как подключить плату зарядного устройства батареи к Pi, Teensy и видеокарте. В мануале рассказывается, как использовать Raspberry Pi с питанием от батареи в модифицированном ноутбуке. Там же приложен код на Си, который управляет связью с батареей по шине SMBus, отображая указатели уровня заряда и выключая ноутбук при разряде.

Подробнее..

RAID-массивы на NVMe

17.10.2020 14:04:36 | Автор: admin

В данной статье мы расскажем про разные способы организации RAID-массивов, а также покажем один из первых аппаратных RAID-контроллеров с поддержкой NVMe.

Все разнообразие применений технологии RAID встречается в серверном сегменте. В клиентском сегменте чаще всего используется исключительно программный RAID0 или RAID1 на два диска.

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

Что такое RAID?


Википедия дает исчерпывающее определение технологии RAID:
RAID (англ. Redundant Array of Independent Disks избыточный массив независимых (самостоятельных) дисков) технология виртуализации данных для объединения нескольких физических дисковых устройств в логический модуль для повышения отказоустойчивости и производительности.
Конфигурация дисковых массивов и используемые при этом технологии зависят от выбранного уровня RAID (RAID level). Уровни RAID стандартизированы в спецификации Common RAID Disk Data Format. Она описывает множество уровней RAID, однако самыми распространенными принято считать RAID0, RAID1, RAID5 и RAID6.

RAID0, или Stripes, это уровень RAID, который объединяет два или более физических диска в один логический. Объем логического диска при этом равен сумме объемов физических дисков, входящих в массив. На этом уровне RAID отсутствует избыточность, а выход из строя одного диска может привести к потере всех данных в виртуальном диске.

Уровень RAID1, или Mirror, создает идентичные копии данных на двух и более дисках. Объем виртуального диска при этом не превышает объема минимального из физических дисков. Данные на виртуальном диске RAID1 будут доступны, пока хотя бы один физический диск из массива работает. Использование RAID1 добавляет избыточности, но является достаточно дорогим решением, так как в массивах из двух и более дисков доступен объем только одного.

Уровень RAID5 решает проблему дороговизны. Для создания массива с уровнем RAID5 необходимо как минимум 3 диска, при этом массив устойчив к выходу из строя одного диска. Данные в RAID5 хранятся блоками с контрольными суммами. Нет строгого деления на диски с данными и диски с контрольными суммами. Контрольные суммы в RAID5 это результат операции XOR, примененной к N-1 блокам, каждый из которых взят со своего диска.
Хотя RAID-массивы повышают избыточность и предоставляют резервирование, они не подходят для хранения резервных копий.
После краткого экскурса по видам RAID-массивов можно переходить к устройствам и программам, которые позволяют собирать и использовать дисковые массивы.

Виды RAID-контроллеров


Существует два способа создать и использовать RAID-массивы: аппаратный и программный. Мы рассмотрим следующие решения:

  • Linux Software RAID.
  • Intel Virtual RAID On CPU.
  • LSI MegaRAID 9460-8i.

Отметим, что решение Intel работает на чипсете, из-за чего возникает вопрос, аппаратное это решение или программное. Так, например, гипервизор VMWare ESXi считает VROC программным и не поддерживает официально.

Linux Software RAID


Программные RAID-массивы в семействе ОС Linux достаточно распространенное решение как в клиентском сегменте, так и в серверном. Все, что нужно для создания массива, утилита mdadm и несколько блочных устройств. Единственное требование, которое предъявляет Linux Software RAID к используемым накопителям, быть блочным устройством, доступным системе.

Отсутствие затрат на оборудование и программное обеспечение очевидное преимущество данного способа. Linux Software RAID организует дисковые массивы ценой процессорного времени. Список поддерживаемых уровней RAID и состояние текущих дисковых массивов можно посмотреть в файле mdstat, который находится в корне procfs:

root@grindelwald:~# cat /proc/mdstat Personalities : [linear] [multipath] [raid0] [raid1] [raid10] unused devices: <none>

Поддержка уровней RAID добавляется подключением соответствующего модуля ядра, например:

root@grindelwald:~# modprobe raid456root@grindelwald:~# cat /proc/mdstat Personalities : [linear] [multipath] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] unused devices: <none>

Все операции с дисковыми массивами производятся через утилиту командной строки mdadm. Сборка дискового массива производится в одну команду:

mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/nvme1n1 /dev/nvme2n1

После выполнения этой команды в системе появится блочное устройство /dev/md0, которое представляет из тебя виртуальный диск.

Intel Virtual RAID On CPU


Intel VROC Standard Hardware Key
Intel Virtual RAID On CPU (VROC) это программно-аппаратная технология для создания RAID-массивов на базе чипсетов Intel. Данная технология доступна в основном для материнских плат с поддержкой процессоров Intel Xeon Scalable. По умолчанию VROC недоступен. Для его активации необходимо установить аппаратный лицензионный ключ VROC.

Стандартная лицензия VROC позволяет создавать дисковые массивы с 0, 1 и 10 уровнями RAID. Премиальная версия расширяет этот список поддержкой RAID5.

Технология Intel VROC в современных материнских платах работает совместно с Intel Volume Management Device (VMD), которая обеспечивает возможность горячей замены для накопителей с интерфейсов NVMe.

Intel VROC со стандартной лицензией
Настройка массивов производится через Setup Utility при загрузке сервера. На вкладке Advanced появляется пункт Intel Virtual RAID on CPU, в котором можно настроить дисковые массивы.

Создание массива RAID1 на двух накопителях
Технология Intel VROC имеет свои козыри в рукаве. Дисковые массивы, собранные с помощью VROC, совместимы с Linux Software RAID. Это означает, что состояние массивов можно отслеживать в /proc/mdstat, а администрировать через mdadm. Эта особенность официально поддерживается Intel. После сборки RAID1 в Setup Utility можно наблюдать синхронизацию накопителей в ОС:

root@grindelwald:~# cat /proc/mdstat Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] md126 : active raid1 nvme2n1[1] nvme1n1[0]      1855832064 blocks super external:/md127/0 [2/2] [UU]      [>....................]  resync =  1.3% (24207232/1855832064) finish=148.2min speed=205933K/sec      md127 : inactive nvme1n1[1](S) nvme2n1[0](S)      10402 blocks super external:imsm       unused devices: <none>

Отметим, что через mdadm нельзя собирать массивы на VROC (собранные массивы будут Linux SW RAID), но можно менять в них диски и разбирать массивы.

LSI MegaRAID 9460-8i


Внешний вид контроллера LSI MegaRAID 9460-8i
RAID-контроллер является самостоятельным аппаратным решением. Контроллер работает только с накопителями, подключенными непосредственно к нему. Данный RAID-контроллер поддерживает до 24 накопителей с интерфейсом NVMe. Именно поддержка NVMe выделяет этот контроллер из множества других.

Главное меню аппаратного контроллера
При использовании режима UEFI настройки контроллера интегрируются в Setup Utility. В сравнении с VROC меню аппаратного контроллера выглядит значительно сложнее.

Создание RAID1 на двух дисках
Объяснение настройки дисковых массивов на аппаратном контроллере является достаточно тонкой темой и может стать поводом для полноценной статьи. Здесь же мы просто ограничимся созданием RAID0 и RAID1 с настройками по умолчанию.

Диски, подключенные в аппаратный контроллер, не видны операционной системе. Вместо этого контроллер маскирует все RAID-массивы под SAS-накопители. Накопители, подключенные в контроллер, но не входящие в состав дискового массива, не будут доступны ОС.

root@grindelwald:~# smartctl -i /dev/sdasmartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.4.0-48-generic] (local build)Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org=== START OF INFORMATION SECTION ===Vendor:               AVAGOProduct:              MR9460-8iRevision:             5.14Compliance:           SPC-3User Capacity:        1,999,844,147,200 bytes [1.99 TB]Logical block size:   512 bytesRotation Rate:        Solid State DeviceLogical Unit id:      0x000000000000000000000000000000Serial number:        00000000000000000000000000000000Device type:          diskLocal Time is:        Sun Oct 11 16:27:59 2020 MSKSMART support is:     Unavailable - device lacks SMART capability.

Несмотря на маскировку под SAS-накопители, массивы с NVMe будут работать на скорости PCIe. Однако такая особенность позволяет загружаться с NVMe в Legacy.

Тестовый стенд


Каждый из способов организации дисковых массивов имеет свои физические плюсы и минусы. Но есть ли разница в производительности при работе с дисковыми массивами?

Для достижения максимальной справедливости все тесты будут проведены на одном и том же. Его конфигурация:

  • 2x Intel Xeon 6240;
  • 12x DDR4-2666 16 GB;
  • LSI MegaRAID 9460-8i;
  • Intel VROC Standard Hardware Key;
  • 4x Intel SSD DC P4510 U.2 2TB;
  • 1x Samsung 970 EVO Plus M.2 500GB.

Тестируемыми выступают P4510, из которых одна половина подключена к материнской плате, а вторая к RAID-контроллеру. На M.2 установлена операционная система Ubuntu 20.04, а тесты будут выполняться при помощи fio версии 3.16.

Тестирование


В первую очередь проверим задержки при работе с диском. Тест выполняется в один поток, размер блока 4 КБ. Каждый тест длится 5 минут. Перед началом для соответствующего блочного устройства выставляется none в качестве планировщика I/O. Команда fio выглядит следующим образом:

fio --name=test --blocksize=4k --direct=1 --buffered=0 --ioengine=libaio  --iodepth=1 --loops=1000 --runtime=300  --rw=<mode> --filename=<blkdev>

Из результатов fio мы берем clat 99.00%. Результаты приведены в таблице ниже.
Случайное чтение, мкс Случайная запись, мкс
Диск 112 78
Linux SW RAID, RAID0 113 45
VROC, RAID0 112 46
LSI, RAID0 122 63
Linux SW RAID, RAID1 113 48
VROC, RAID1 113 45
LSI, RAID1 128 89
Помимо задержек при обращении к данным, хочется увидеть производительность виртуальных накопителей и сравнить с производительностью физического диска. Команда для запуска fio:

fio --name=test --blocksize=4k --direct=1 --buffered=0 --ioengine=libaio  --loops=1000 --runtime=300  --iodepth=<threads> --rw=<mode> --filename=<blkdev>

Производительность измеряется в количестве операций ввода-вывода. Результаты представлены в таблице ниже.

Случайное чтение 1 поток, IOPS Случайная запись 1 поток, IOPS Случайное чтение 128 потоков, IOPS Случайная запись 128 потоков, IOPS
Диск 11300 40700 453000 105000
Linux SW RAID, RAID0 11200 52000 429000 232000
VROC, RAID0 11200 52300 441000 162000
LSI, RAID0 10900 44200 311000 160000
Linux SW RAID, RAID1 10000 48600 395000 147000
VROC, RAID1 10000 54400 378000 244000
LSI, RAID1 11000 34300 229000 248000
Легко заметить, что использование аппаратного контроллера дает увеличение задержек и просадку по производительности в сравнении с программными решениями.

Заключение


Использование аппаратных решений для создания дисковых массивов из двух дисков выглядит нерационально. Тем не менее, существуют задачи, где использование RAID-контроллеров оправдано. С появлением контроллеров с поддержкой интерфейса NVMe у пользователей появляется возможность использовать более быстрые SSD в своих проектах.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru