Аппаратная виртуализация. Теория, реальность и поддержка в архитектурах процессоров
Виртуализация представляла интерес ещё до изобретения микропроцессора, во времена преобладания больших систем — мейэнфреймов, ресурсы которых были очень дорогими, и их простой был экономически недопустим. Виртуализация позволяла повысить степень утилизации таких систем, при этом избавив пользователей и прикладных программистов от необходимости переписывать своё ПО, так как с их точки зрения виртуальная машина была идентична физической. Пионером в этой области являлась фирма IBM с мэйнфреймами System/360, System/370, созданными в 1960-1970-х гг.
Неудивительно, что критерии возможности создания эффективного монитора виртуальных машин были получены примерно в то же время. Они сформулированы в классической работе 1974 г. Жеральда Попека и Роберта Голдберга «Formal requirements for virtualizable third generation architectures» [8]. Рассмотрим её основные предпосылки и сформулируем её основной вывод.
Модель системы
В дальнейшем используется упрощённое представление «стандартной» ЭВМ из статьи, состоящей из одного центрального процессора и линейной однородной оперативной памяти. Периферийные устройства, а также средства взаимодействия с ними опускаются. Процессор поддерживает два режима работы: режим супервизора, используемый операционной системой, и режим пользователя, в котором исполняются прикладные приложения. Память поддерживает режим сегментации, используемый для организации виртуальной памяти.
Выдвигаемые требования на монитор виртуальных машин (ВМ):
- Изоляция — каждая виртуальная машина должна иметь доступ только к тем ресурсам, которые были ей назначены. Она не должна иметь возможности повлиять на работы как монитора, так и других ВМ.
- Эквивалентность — любая программа, исполняемая под управлением ВМ, должна демонстрировать поведение, полностью идентичное её исполнению на реальной системе, за исключением эффектов, вызванных двумя обстоятельствами: различием в количестве доступных ресурсов (например, ВМ может иметь меньший объём памяти) и длительностями операций (из-за возможности разделения времени исполнения с другими ВМ).
- Эффективность — в оригинальной работе условие сформулировано следующим образом: «статистически преобладающее подмножество инструкций виртуального процессора должно исполняться напрямую хозяйским процессором, без вмешательства монитора ВМ». Другими словами, значительная часть инструкций должна симулироваться в режиме прямого исполнения. Требование эффективности является самым неоднозначным из трёх перечисленных требований, и мы ещё вернёмся к нему. В случае симуляторов, основанных на интерпретации инструкций, условие эффективности не выполняется, т.к. каждая инструкция гостя требует обработки симулятором.
Классы инструкций
- Вызванные попыткой изменить состояние процессора (ловушка потока управления).
- Обращения к содержимому памяти, выходящему за пределы диапазона, определённого в (ловушка защиты памяти).
- Привилегированные (англ. privileged). Инструкции, исполнение которых с M = u всегда вызывает ловушку потока управления. Другими словами, такая инструкция может исполняться только в режиме супервизора, иначе она обязательно вызывает исключение.
- Служебные (англ. sensitive. Установившего русского термина для этого понятия я не знаю. Иногда в литературе встречается перевод «чувствительные» инструкции). Класс состоит из двух подклассов. 1. Инструкции, исполнение которых закончилось без ловушки защиты памяти и вызвало изменение M и/или R. Они могут менять режим процессора из супервизора в пользовательский или обратно или изменять положение и размер доступного сегмента памяти. 2. Инструкции, поведение которых в случаях, когда они не вызывают ловушку защиты памяти, зависят или от режима M, или от значения R.
- Безвредные (англ. innocuous). Не являющиеся служебными. Самый широкий класс инструкций, не манипулирующие ничем, кроме указателя инструкций P и памяти E, поведение которых не зависит от того, в каком режиме или с каким адресом в памяти они расположены.
Достаточное условие построения монитора ВМ
- Изоляция обеспечивается размещением монитора в режиме супервизора, а ВМ — только в пользовательском. При этом последние не могут самовольно изменить системные ресурсы — попытка вызовет ловушку потока управления на служебной инструкции и переход в монитор, а также память из-за того, что конфигурация не допускает этого, и процессор выполнит ловушку защиты памяти.
- Эквивалентность доказывается тем, что безвредные инструкции выполняются одинаково вне зависимости от того, присутствует ли в системе монитор или нет, а служебные всегда вызывают исключение и интерпретируются. Отметим, что даже в описанной выше простой схеме проявляется первое ослабляющее условие: даже без учёта памяти, необходимой для хранения кода и данных гипервизора, объём доступной для ВМ памяти будет как минимум на две ячейки меньше, чем имеется у хозяйской системы.
- Эффективность гарантируется тем, что все безвредные инструкции внутри ВМ исполняются напрямую, без замедления. При этом подразумевается, что их множество включает в себя «статистически преобладающее подмножество инструкций виртуального процессора».
Рис. 1: Выполнение условия виртуализуемости. Множество служебных инструкций является подмножеством привилегированных
Типовая схема Супервизора «Рис.1»
По этой схеме выполнены микросхемы Супервизоров: KIA70xx Series; PST529 Series; отечественные серии К1171СП2хх, К1274хх. То есть, здесь, большинство простейших универсальных трехвыводных супервизоров питания общего назначения.
Рис.1 — Типовая схема Супервизора:
Пояснение работы схемы
На компаратор поступает два напряжения, формируемые:
(1) каскадом со стабилитроном = Vcc — dUстаб. (фиксированная аддитивная добавка)
(2) резистивным делителем = Vcc * R2/(R1+R2) (пропорциональная часть)
Изначально: (1)>(2), компаратор выдаёт «лог.0» на выходе.
При уменьшении Vcc, пропорциональная часть (2) от Vcc — уменьшается медленнее, чем целое Vcc (1)… В конце концов, потенциал (1) нагонит и сравняется с (2).
Смещение dUстаб. не влияет на скорость схождения — это лишь небольшая фора для (1), чтобы успеть нагнать напряжение (2), которое стартует при изначально более «выгодных» условиях Хотя, скорость снижения напряжения (1) быстрее. Однако, если бы не было смещения dUстаб., то (1) никогда бы не догнал (2), но они бы лишь сравнялись только в точке =0V.
Практически, процессы можно проиллюстрировать графиком «Рис.3», который облегчает настройку параметров системы и делает вещи более очевидными.
Точка равенства напряжений (1)=(2): Uпорог-dUстаб. = Uпорог*R2/(R1+R2)
Рис.3 — Точка переключения компаратора:
Примечание: Для универсальности, далее в расчётах и по тексту, будем обозначать смещение и Стабилитрона, и ИОНа одинаково: dUстаб. (номинал стабилитрона) = Uref (номинал ИОН). По сути, это одно и тоже, тождественно.
Расчёт схемы
Пусть, требуется Uпорог=3.2V
Номинал стабилитрона: Uref=3/4*Uпорог=2.4V (меньше не бывает, и в рекомендуемый диапазон попадает)
Стабилитрон BZV55-B/C2V4 имеет ток утечки Irmax=50uA.
Следовательно, в него надо загонять ток на порядок больше >500uA.
Следовательно, номинал токоограничивающего резистора должен быть менее R3 < (Uпорог-Uref)/500uA=1600R, т.е. R3=1.5k
Компаратор должен иметь «Выход с открытым коллектором»…
В модели использован Идеальный компаратор (для безглючности симуляции и чётких графиков), но входные каскады рассчитаем, для примера, на реальные компараторы общего назначения:
LMx39 (4шт. Компаратора, Питание single +2..36V, или dual +-1..18V)
у него, средний входной ток: «Input Bias Current Max.» = 250nA
плюс, для верности, дифференциал между входами: «Input Offset Current Max.» = 50nA
LMx93 (2шт. Компаратора, Питание single +2..36V, или dual +-1..18V)
у него, средний входной ток: «Input Bias Current Max.» = 500nA
плюс, для верности, дифференциал между входами: «Input Offset Current Max.» = 200nA
(хм, этот — вообще, так себе. )
Предположим, реальная схема будет построена на компараторе «LMx39». Максимальный ток по входу, при самых неблагоприятных условиях, будет = «Input Bias Current Max.» + «Input Offset Current Max.» = 300nA
Следовательно, через резистивный делитель должен протекать ток, как минимум, на порядок больше >3uA. Тогда, сумма номиналов резисторов должна быть, как минимум, меньше: (R1+R2) < Uпорог/3uA=1M
Хотя, для точности — желательно, конечно, чтобы через резистивный делитель протекал ток на два порядка больше >30uA. Тогда, сумма номиналов резисторов должна быть меньше: (R1+R2) < Uпорог/30uA=100k…
Но при таком грубоватом компараторе (со значительными утечками) — мы не будем гнаться за идеальной схемотехникой. Тем более, что «типичные» токи утечки ожидаются на порядок меньше, чем «максимальные»… Поэтому, здесь, рекомендую рассчитывать на границу: (R1+R2)
Второе уравнение системы, для расчёта резисторов:
(Uпорог-Uref)=Uпорог*R2/(R1+R2) или
R2/R1=(Uпорог/Uref-1)
а учитывая, что у нас Uref=3/4*Uпорог:
R1=3*R2.
Решив систему уравнений, получаем номиналы: R1=150k, R2=51k…
Окончательную подстройку границы срабатывания производим экспериментально…
Времена
Почти месяц назад у меня нашли узлы в щитовидке, назначили биопсию, сразу объяснили, на что они похожи (на рак). Сегодня, с результатами биопсии я была снова на приеме и мне сказали, что клетки в узлах здоровые (образованы га фоне атоимунного тиреодита). У меня нет рака (врач объяснила похожесть узлов на равковые)! Месяц назад я хотела просто кричать, а сегодня я хочу кричать каждому встречному, что у меня нет рака и я счастлива!! Столько мыслей было: а как же мечты о втором ребенке, мечты танцевать на свадьбе дочки, мечты о своем доме (у нас хрущевка двухкомнатная). Я так счастлива, что хочу поделиться этим счастьем с вами.
Контейнеры или гипервизоры
В последнее время все большую популярность приобретает технология контейнеров. Это обусловлено тем, что контейнеры, по сравнению с гипервизорами, могут развернуть большее число приложений на одном физическом хосте.
Гипервизор виртуализирует необходимые для работы ОС аппаратные ресурсы. При использовании гипервизоров возрастает потребность в наращивании аппаратных мощностей (дисковых устройств, CPU, памяти и пр.).
При этом производительность и ресурсоемкость использования той или иной технологии стоит рассматривать и в контексте безопасности. Существует мнение, что контейнеры более уязвимы, чем гипервизоры. Это обусловлено логикой рассматриваемых технологий. Гипервизор создает на физическом сервере несколько изолированных друг от друга виртуальных машин со своими ОС и приложениями. Контейнер же работает под основной ОС хоста.
Таким образом, при атаке на хост, использующий виртуализацию, есть риск потерять одну или несколько виртуальных машин и используемые на них приложения. Если на хосте развернут контейнер, то все его содержимое может быть повреждено или утеряно, поскольку вредоносное ПО получит доступ к основной ОС хоста.
Среди контейнеров наиболее популярен OpenVZ, лежащий в основе платформы Virtuozzo. Решение обладает хорошей производительностью, а также использует ресурсы физического сервера по максимуму за счет высокой плотности размещения виртуальных машин.
Также стоит обратить внимание и на Jailhouse. Решение компании Siemens работает на «железе», при этом запускается из-под работающей ОС Linux. При работе контейнер создает в ОС изолированные разделы для выполнения пользовательских приложений.
Во-вторых, установка и настройка
Это тестовая среда
Имя процессора | ip | система |
---|---|---|
auto | 10.0.0.6/24 | Centos 7.5 |
1. Установка
2. Управлять супервайзером
1) supervisord -c /etc/supervisor.conf запуск сервера
Приведенная выше команда заставит супервизор работать в фоновом режиме, а последующие команды управления будут выполняться непосредственно в интерфейсе bash.
2) Запускается клиент supervisorctl -c /etc/supervisor.conf
Эта команда войдет в интерфейс оболочки supervisorctl, а затем вы сможете выполнять различные команды:
2. Настройте супервизор для управления процессом nginx
нота! ! ! Супервизор не может управлять процессом демона, nginx — это процесс демона. Если вы хотите управлять им, вам нужно добавить демон вне тега http в файле конфигурации nginx.conf, это только для тестирования.
Настройте супервизор для управления файлами конфигурации nginx
Запустите супервизор и проверьте статус
3. Настройте супервизор для управления процессом MySQL
Файл конфигурации изменять не нужно, необходимо добавить только файл конфигурации для управления mysq в /etc/supervisord.d/. Похож на nginx
Применимая команда клиента supervisorctl для плавного увеличения управления MySQL
4. Настройте супервизор для управления процессом php
Файл конфигурации изменять не нужно, необходимо добавить только файл конфигурации для управления php в /etc/supervisord.d/. Подобно nginx, из-за процесса php-демона его необходимо изменить в файле конфигурации php-fpm.conf
Применение клиентских команд supervisorctl для плавного повышения уровня управления PHP
5. Процесс супервизора управления веб-интерфейсом
Изменить файл конфигурации
Плавный старт после сохранения
Откройте браузер и войдите в систему по адресу http://10.0.0.6:9001, войдите в систему согласно имени пользователя и паролю в файле конфигурации
Этот интерфейс может управлять всеми процессами, управляемыми супервизором, завершать работу, перезапускать и т. Д., А также может просматривать соответствующие журналы времени выполнения и ошибок запуска и другую информацию.
6. Тест
Попробуйте закрыть nginx в сети и вернуться на авто хост для просмотра.
# Найденный nginx закрыт
Попробуйте вручную остановить процесс nginx и посмотрите, будет ли супервизор перезапустить процесс nginx.
Результаты теста показывают, что супервизор перезапустится независимо от того, нормально ли завершился nginx или принудительно закрывается pkill, и проверка прошла успешно.
Home Assistant OS — установка на хост
Это официально рекомендованный способ установки. Установка очень быстрая и простая. Устанавливается Home Assistant вместе с супервизором.
Очень часто этот способ используют для того чтобы установить Home Assistant на Raspberry Pi.
Нужно скачать специальный файл. Этот файл — это образ в котором находится не только Home Assistant, но еще и операционная система.
Вот несколько популярных образов:
Полный список всех образов находится на GitHub.
Этот образ нужно залить на sd карту (в случае Raspberry Pi) или на жесткий диск (в случае Nuc).
Для заливки образа на sd карту очень удобно использовать бесплатную программу balenaEtcher (ссылка — https://www.balena.io/etcher/). Есть версии этой программы под Windows, macOS и Linux.
После того как образ залит на носитель, нужно подключить его к компьютеру, включить компьютер и через некоторое время вы получаете работающий Home Assistant.
У этого способа установки есть особенность — вы получаете «черный ящик» Home Assistant полностью работает, но доступ к операционной системе на которой он работает очень ограничен.
Особенности супервизоров и детекторов напряжения компании Microchip
Микропотребление
Компания Microchip Technology производит ряд супервизоров питания, рекомендуемых для применения в портативных и батарейных приложениях (табл. 3). Их особенностью является сверхнизкий ток потребления — единицы и доли микроампер.
Это дает возможность интегрировать супервизоры Microchip в системы, чувствительные к току потребления, экономя мощность и одновременно повышая надежность системы.
Супервизоры со входом сторожевого таймера
Microchip производит супервизоры с функцией сторожевого таймера WDT, позволяющие контролировать (рис. 5), помимо напряжения питания, время выполнения программы микроконтроллера (табл. 4).
Если заданное гарантированное время выполнения программы оказывается больше программируемого таймаута сторожевого таймера (tWD), на выходе супервизора /RST устанавливается низкий уровень, и микроконтроллер сбрасывается.
Супервизоры со входом для подключения кнопки сброса
В некоторых портативных приложениях требуется иметь кнопку ручного сброса. Microchip предлагает ряд супервизоров со входом для непосредственного подключения кнопки сброса микроконтроллера (/MR) без дополнительного проектирования внешних цепей. Время Trst, указываемое в документации на супервизоры, определяет продолжительность импульса сброса микроконтроллера.
Супервизоры со входом для подключения кнопки сброса отмечены в таблице 4 аббревиатурой MR в колонке «Другие особенности».
Использование супервизоров для организации «оконного» режима
В некоторых случаях перед сбросом контроллера при снижении напряжения питания необходимо предварительно корректно сохранить все промежуточные данные и программный контекст. Для того чтобы за время снижения напряжения питания с уровня V1 до критического уровня сброса V2 контроллер успел соответствующим образом обработать это событие и сохранить необходимые данные в энергонезависимой EEPROM или Flash-памяти, в системе ставят два супервизора. Один — для выявления факта снижения напряжения и информирования контроллера, а второй — непосредственно для сброса контроллера при достижении критического уровня значения напряжения питания. Такой прием позволяет повысить надежность системы за счет контроля напряжения питания МК, а также за счет своевременного оповещения о снижении напряжения до критического уровня.
Детекторы напряжения
Детекторы напряжения, как уже упоминалось ранее, отличаются от супервизоров отсутствием задержки на выходе сброса RST.
Microchip производит ряд детекторов в миниатюрных корпусах 3/SOT-23, 3/SOT-89, 3/TO-92, отличающихся сверхнизким собственным потреблением (табл. 5).
Режим супервизора
График работы у супервизора может быть как свободным, так и обычным нормированным. Если речь идет о работе супервизора в маркетинговом отделе, то такой специалист весь день находится на ногах, объезжает торговые точки и посещает подчинённых. Супервизор в ресторане или отеле находится на работе весь день вместе со своими подчиненными, контролируя их работу. Зарплата у супервизора должна быть выше чем у его подчиненных, так как он полностью определяет и отвечает за их работу.
С какой-то стороны, быть супервайзером проще, чем, например, торговым агентом или официантом. Ведь этот специалист не делает работу, а только наблюдает и исправляет. С другой стороны, он должен быть опытным в этой сфере, чтобы выглядеть авторитетно и действительно суметь научить, показать, знать в своей сфере все «явки и пароли». Супервизор — это старший, бригадир, прораб, который не столько даже контролирует, сколько направляет. А кроме того, именно на нём лежит вся ответственность за выполнение труда.