Виртуализация FreeBSD
Материал из ISPWiki
Виртуализация операционной системы FreeBSD, используемая в программном продукте VDSmanager, построена на базе так называемого "jail". "Jail" входит в стандартную поставку операционной системы и обеспечивает минимальные возможности виртуализации, специалистами нашей компании был сделан ряд улучшений.
Содержание |
Файловая система
- Создан дополнительный уровень дисковых квот, который позволяет выставлять ограничения на размер и количество файлов для каждого виртуального окружения (jail).
- Обычная система дисковых квот (user group) персональна для каждого виртуального окружения.
- Шаблонная файловая система позволяет экономить дисковое пространство, а также проводить централизованное обновление программного обеспечения.
Немного о том, как это работает. При создании виртуального сервера воссоздается структура каталогов дискового шаблона, а все файлы создаются путем создания жестких ссылок (hard link). Далее во время работы виртуального сервера при попытке открыть на запись файл или изменить его атрибут жесткая ссылка рвется и файл копируется в диск пользователя, т.е. теперь он становится не шаблонным, а частным файлом виртуального сервера.
Работает виртуализация VDSmanager-FreeBSD только на файловой системе UFS2.
Ограничение на память
Мы постарались максимально приблизить смысл лимитов и поведение виртуального сервера к реальному.
- Лимит на физическую память ограничивает именно физическую память, т.е. считается реально использованное количество страниц физической памяти. Т.е. библиотека libc, используемая почти всеми запущенными приложениями, посчитается один раз, а не для каждого приложения, как это считают другие системы виртуализации уровня ОС.
- Лимит на файл подкачки (swap) указывает размер, на который может быть превышен лимит физической памяти, при этом не обязательно будет использован реальный файл подкачки (плохо сознательно замедлять дисковую подсистему). В случае использования реальной памяти вместо swap работа виртуального сервера искусственно замедляется: чем больше превышение, тем больше задержка.
- Превышение всех лимитов. При превышении лимита физической памяти и swap перестают запускаться новые процессы (fork возвращает ошибку), не работает выделение памяти (malloc вернет ошибку) и убивается самый большой по использованию памяти процесс (kill -9).
Другие ограничения
- Ограничение на использование CPU
- Ограничение на количество процессов
- Ограничение на количество дескрипторов (открытых файлов и сокетов)
Другие улучшения
- Персональные данные SysV (shm sem msg)
Сетевой стек
В стандартном ядре появился полностью виртуализированный сетевой стек, и нам не пришлось ничего улучшать в данной области. Однако в данный момент эта возможность позиционируется как экспериментальная и не рекомендуется к использованию.
VDSmanager дает выбор использовать эту возможность или нет. По умолчанию используется обычный режим, на виртуальном сервере нет возможности использовать приложения, требующие низкоуровневого доступа к сети. Для включения VNET необходимо добавить в конфиг
Option vnet
и описать используемую сеть, добавив параметры
DefaultNetmask 255.255.xxx.0 DefaultGateway xxx.xxx.xxx.xxx
Мы не рекомендуем вам использовать данный режим работы сети на промышленных серверах.
В результате тестирования нами было обнаружено несколько незначительных проблем с роутингом, а также множество проблем с освобождением памяти при уничтожении виртуального сетевого стека (остановка виртуального сервера). Это грозит тем, что у вас может закончиться память ядра, и сервер перезагрузится.
