Технология контейнерной виртуализации Android (Карташов,...

37
Восьмая независимая научно-практическая конференция «Разработка ПО 2012» 1 - 2 ноября, Москва Евгений Баталов, Александр Карташов, Кирилл Кринкин Технология контейнерной виртуализации для платформы Android Санкт-Петербургский Академический университет РАН

description

Virtualization is widely used for desktop and server systems and in several years it comes into mobile world. The paper suggests approach for container virtualization for Android operating system. Analogues (like Cells, VmWare Horizon Mobile, TrustDroid, EmbeddedXen) are described, and their advantages and disadvantages are considered. Approach suggested by authors is based on linux containers (LXC) mechanism. It allows virtualization of process identifiers, network resources and also can be used for resource management on top of cgroups. For resource management in multi-container environment new supervisor (AndCont) has been developed. Also suggested solution includes modified Android binder driver for inter-process communications; components for multiplexing user input; GPU and frame buffer virtualization scheme; proxy-based solution for in-coming and out-coming messages and phone calls. Active container is introduced to define Android OS instance which is holding user input queue and able to use physical screen for output graphical content. Other (non-active) Android instances do output into virtual buffers which are not visible for users and they are able to run applications in background. Special proxy-based layer has been developed for telephony virtualization. It includes wrapper around native (proprietary) modules for radio-interface features management and set of rules which are defining calls routing scheme. Sound can be mixed from several applications from different containers but during a call audio tract will be monopolized by telephony. On the power management side in paper suggested two solutions: wake_lock() and wake_unlock() virtualization too keep sleeping state for each container; wait_for_fb_sleep event emulation for rendering interface notification to avoid user interface updating. Most of fixes in regular android drivers (e.g. Alarm, Audio etc) have been made by adding unique state context for each container and adding device wide event and data multiplexor. In paper performance testing strategy and scenarios are described; results are discussed. Adding containers has low impact on battery power consumption but approach should be improved for better memory usage. It’s possible to run two Android with traditional applications (games, players) but set of devices is limited for that. Performance tuning will be continued by authors.

Transcript of Технология контейнерной виртуализации Android (Карташов,...

Page 1: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

Восьмая независимая научно-практическая конференция «Разработка ПО 2012» 1 - 2 ноября, Москва

Евгений Баталов, Александр Карташов, Кирилл Кринкин

Технология контейнерной

виртуализации для платформы

Android

Санкт-Петербургский Академический университет РАН

Page 2: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

Рынок мобильных устройств

В 2011:

Пользователей сотовой связи -- 5,981 млн

Подписчиков мобильного интернет -- 1,186 млн

Продано мобильных телефонов – 1,775 млн

Продано смартфонов -- 491 млн (Прогноз 2012 – 686 млн)

Нежелательное ПО:

Официально зарегистрировано 2,500 mobile malware (2010, Bullguard)

Двукратный рост числа mobile malware в 2011 по отношению к 2010 (IBM X-force)

http://mobithinking.com/mobile-marketing-tools/latest-mobile-stats

Page 3: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

Ожидаемые технологии (Gartner)

http://www.gartner.com/it/page.jsp?id=2124315

Page 4: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

Задачи "мобильной виртуализации"

• Защита личных данных;

• Изоляция подозрительных программ;

• Ограничение доступа приложений к системным сервисам (SMS, WiFi, телефония,…);

• Защита корпоративных приложений на смартфонах сотрудников;

• Эффективное использование аппаратных средств;

• Создание окружения для разработки и отладки мобильных приложений.

Page 5: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

Почему Android?

Gartner Research

• Open source

• Linux based

Page 6: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

AndroidVM. Цели и задачи

Независимое исполнение нескольких Android на одном устройстве;

Защита взаимного влияния приложений и системных служб, принадлежащих разным Android;

Управление доступом к физическим и виртуальным устройствам;

Совместное использование устройств;

Эффективное использование системных ресурсов (память, CPU, GPU, аккумулятор,…)

Page 7: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

Основные варианты использования

• Запуск нескольких независимых контейнеров с Android на одном устройстве;

• Интерактивная работа пользователя с приложениями в одном (активном) Android-контейнере;

• Фоновая работа приложений в неактивных (фоновых) контейнерах;

• Возможность смены активного контейнера.

Page 8: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

Изоляция программ на мобильных

платформах

Page 9: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

Архитектура Android

http://www.techotopia.com

Page 10: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

Архитектура решения

Page 11: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

Доработанные компоненты

Ядро

Supervisor (AndCont)

Механизм межконтейнерного взаимодействия (ICC)

LXC

Периферия

Мультиплексор RIL

Мультиплексор звука

Framebuffer

GPU

Системные сервисы

Binder,

Alarm

Панель управления

Page 12: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

Доработки LXC

• Запрет инициации перезагрузки виртуальной машиной Dalvik.

• Уведомления супервизора уровня ядра о запуске нового контейнера перед запуском процесса init.

• Расширен синтаксис конфигурационных файлов LXC: добавлена возможность описания заблокированных путей sysfs и перенаправления блочных устройств.

• Устранена утечка файловых дескрипторов из демона adbd, который используется для доступа к смартфону через USB.

Page 13: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

Механизм межконтейнерного

взаимодействия (ICC)

Задача: обеспечить возможность передачи сообщений между контейнерами

Ограничения:

• сокеты не работают, т. к. привязаны к сетевому пространству имен;

• именованные каналы требуют агент в корневом пользовательском окружении – неэффективно.

Решение:

Собственный механизм и протокол IPC на базе Netlink

Page 14: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

Контроль доступа к sysfs

Задача: обеспечить возможность запрета управления физическими устройствами через интерфейс sysfs.

Решение

• Операции блокировки sysfs в фреймворке Linux Security Modules.

• Конфигурационные параметры конфигурационном файле контейнера со списком запрещенных путей в sysfs.

Page 15: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

Виртуализация блочных устройств

Задача: предоставить контейнерам персональный раздел на MMC накопителе.

Решение:

• Образ раздела MMC-карты разместить в устройстве loop.

• Перехват запроса блочного устройства (bdget), подстановка ссылки на подготовленный loop.

Page 16: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

Виртуализация системных сервисов

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

Примеры сервисов: • Binder — система межпроцессного обмена;

• Alarm — интерфейс к часам реального времени.

Решение:

Виртуализация устройств:

поддержка состояния устройства для каждого контейнера

механизм мультиплексирования

Page 17: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

Виртуализация подсистемы ввода

Page 18: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

Виртуализация сети

Page 19: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

Телефония (Radio-Interface Layer)

Page 20: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

Мультиплексирование стека RIL

Page 21: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

Маршрутизация запросов RIL

• Безусловная передача запроса проприетарной библиотеке для всех запросов, не изменяющих состояние соединения и GSM-модема.

• Передача запроса от активного контейнера проприетарной библиотеке для запросов, связанных с отправкой SMS и совершением звонков.

• Безусловное блокирование — для всех неизвестных запросов;

Page 22: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

Маршрутизация уведомлений

• Маршрутизация в активный контейнер —входящие SMS и звонки.

• Маршрутизация во все контейнеры —информационных уведомлений (например, уведомлений об изменении уровня сигнала сотовой сети)

Page 23: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

Bиртуализация графики

Задача: Отображать экране только активный Android.

Решение:

• Изменить схему отображения памяти видеоконтроллера

• Отображать на память физического экрана только видео-память активного контейнера

• Использовать MMU для реализации схемы отображения видеопамяти

Page 24: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

Отображение видеопамяти

Page 25: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

Компоненты

Android audio framework

• Java API для работы со звуком

• AudioFlinger (C++)

• Программный микшер

• Effects (возможно DSP)

• Android audio HAL

Page 26: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

Архитектура виртуализации звука

Page 27: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

Приоритезация аудио потоков

• Прокси сервер получает от каждого контейнера звуковой поток, точку назначения, режим.

• Приоритезация точек назначения звукового потока:

o Headset: 10

o Small speaker: 5

o Big speaker: 0

Page 28: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

Интеграция Audio и телефонии

1. Звонок поступает в контейнер

2. Контейнер вызывает у прокси клиента AudioHardwareInterface::setMode(IN_CALL)

3. Прокси клиент уведомляет об этом сервер

4. Сервер инициирует эмуляцию воспроизведения звука контейнеров

5. Сервер вызывает у оригинального HAL AudioHardwareInterface::setMode(IN_CALL)

6. Оригинальный HAL ответственен за интеграцию аудио и телефонии

Page 29: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

Управления питанием

• Framebuffer early suspend - уведомление userspace о

состоянии экрана (on/off)

• Без виртуализации fbearlysuspend следует

непосредственно за событием нажатия кнопки power

(on/off)

• При fbearlysuspend(off) Android выключает экран

• Многие приложения останавливаются после нажатия power.

Page 30: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

Поддерживаемое системное ПО

Ядро Linux:

• 2.6.35 — смартфоны

• 3.0.30 — эмулятор.

Userspace:

• Android 2.3 (CyanogenMod 7) — смартфоны,

• Android 4 (официальный) — эмулятор.

Page 31: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

Опорные сценарии для

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

1. Простой.

2. Проигрывание музыки с выключенной подсветкой экрана.

3. Интерактивная игра с одновременным проигрывнием музыки.

Page 32: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

Тестируемые конфигурации

1. Оригинальное окружение CyanogenMod7 для Samsung Galaxy S II.

2. Один контейнер с CyanogenMod 7.

3. Два контейнера с CyanogenMod 7: в одном контейнере проигрывалась музыка, в другом запущена игра.

Page 33: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

Потребление памяти

Сценарий 1 Сценарий 2 Сценарий 3

Page 34: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

Потребление аккумулятора

Сценарий 1 Сценарий 2 Сценарий 3

Page 35: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

Направления развития проекта

• Запрет доступа к устройствам ввода

• Автоматическая генерация начальной конфигурации контейнера

• Управление Android Low Memory Killer

• Совместное использование разделов MMC-карты

• Оптимизация использования памяти для системных библиотек и Dalvik

• Поддержка нескольких абонентских номеров в RIL

• Маршрутизация и совместное использование GPS, Bluetooth, камеры, микрофона

Page 36: Технология контейнерной виртуализации Android (Карташов, Баталов, Кринкин)

Вопросы