хабраиндекс
282,64

Тонкая настройка memory on demand в облаке


Новость одной строкой: теперь клиенты могут изменять параметры MOD из панели управления.

Давным-давно в нашем mod-server'е была реализована возможность управления параметрами выделения памяти. Это было реализовано на уровне самого сервера и параметров базы данных.

… Но этого не было в веб-интерфейсе. Самые настойчивые клиенты просили изменить настройки — и мы их меняли вручную. Глупо, да?

Наконец-таки, мы исправили ситуацию — настройки MOD-сервера стали доступны клиентам. Большая их часть применяется «на ходу» и не требует перезагрузки или приостановки обслуживания.

Принцип работы Memory-on-Demand

В зависимости от количества запущенных программ, требуется различный объём памяти. Поскольку память оплачивается в «гигабайто-часах» (на самом деле, в килобайто-наносекундах), то тратить лишние деньги на неиспользуемую память жалко. Но и ютиться в маленьком объёме, залезая в своп, тоже нехорошо.

Вся система MOD состоит из трёх компонент: сервера, базы данных (настройки) и агентов.

Агент — modd (mod daemon) запущен внутри гостевой машины, он записывает в xenstore (система, благодаря которой возможно взаимодействие гостевой системы и управляющей в dom0 без использования сети) информацию о текущем состоянии памяти. Точнее, он просто записывает данные из /proc/meminfo в xenstore в data/mod_meminfo.

Сервер смотрит на эти цифры и решает, добавить ли памяти, или уменьшить. Алгоритм работы MOD-сервера (в общих чертах): считается объём свободной памяти (мы правильно учитываем buffers и cached), если её больше, чем нужно, то память уменьшают. Если меньше, чем нужно — то увеличивают.

Параметры, управляющие работой MOD

MOD имеет следующие параметры:
  • жёсткие лимиты памяти — абсолютный минимум и максимум. Эти лимиты определяют границы, в пределах которых возможно изменение объёма памяти. Наличие этих границ — техническое ограничение используемого у нас гипервизора (Xen 3.4). Рекомендуемое соотношение минимума и максимума примерно 1 к 4, максимум 1 к 8. (На экстремальных значениях вида 128Мб — 48Гб можно запросто схлопотать kernel panic из-за того, что у ядра не хватает собственной памяти для обслуживания теоретического лимита). Эти лимиты не параметры MOD — мы их объединили в одну страницу просто потому, что вынос их в отдельное место увеличил бы путаницу.
  • Галка «включить»/«выключить», она всего лишь выключает (включает) MOD. Если MOD выключить, то память фиксируется на последней выставленной величине и больше никак не меняется.
  • «Мягкие лимиты» памяти. Эти лимиты определяют в каких пределах регулировать память. Заметим, это не совсем «лимиты», это, скорее, пожелание к размеру памяти. Если выставить эти числа слишком маленькими, то xen их проигнорирует, если выставить слишком большими — аналогично.
  • Границы свободной памяти. Это самая интересная пара чисел — она определяет, сколько свободной памяти должно быть в виртуальной машине. Точнее, аналогично мягкому лимиту, указывает к какому значению следует стремиться MOD-серверу.
    Эти величины не могут быть равны нулю (если у вас 0 свободной памяти, то либо вы идёте в своп, либо ядро падает). Они так же не могут быть равны друг другу — у этого есть очень довольно специфичное объяснение — если бы лимиты были равны друг другу, то могли бы возникнуть самовзбуждающиеся колебания (, допустим, нам не хватает 8кб. Алгоритм: добавить 16кб, убрать 16кб, добавить 16кб, убрать 16кб...). Поскольку при отдаче памяти в гипервизор, гостевая машина память чистит (было бы странно отдавать память вместе с содержимым), то это операция для клиента не совсем бесплатная. Единичные добавления/удаления памяти занимают незначительные ресурсы; однако, если бы память начала дёргаться туда-сюда постоянно, это создало бы паразитную нагрузку. Значения по-умолчанию — минимум — 96Мб, максимум 192Мб. Для шаблона Mini значения 24 и 32Мб соответственно.

Если в поле написан ноль (или ничего не написано), значит, используются значения по-умолчанию.

Исключения


Список приложений, для которых MOD не нужен. Если приложение является основным на сервере, лимиты памяти можно выставить одинаковыми и не мучать сервер по-понапрасну:
  • JRE, JEEE, Tomcat и прочие Java-based — java использует свой механизм распределения памяти
  • MongoDB — читает настройки памяти при запуске, не проверяет и не обрабатывает ошибки выделения памяти


P.S. Предыдущий топик по этой теме: habrahabr.ru/company/selectel/blog/99157/
+34
30 июня 2011, 18:51
4
amarao 135,5

комментарии (34)

0
TerVaN #
А на каком ПО виртуализации у вас все устроено? Оно позволяет вам переносить вирт. машину с блока на блок в реалтайме?
+4
amarao #
Гипервизор — Xen, тулстек — Xen Cloud Platform.

Я не совсем понял о каких блоках вы говорите. Можно ли переносить виртуальные машины между хостами? Да, live migration есть и используется для балансировки нагрузки.
0
easy_john #
может еще имелся ввиду перенос между разными площадками.
+1
amarao #
Между дата-центрами в обозримом времени переноса не будет (это не совсем автоматизируемый и прозрачный процесс), облако в Москве — в ближайших планах.
0
Evengard #
о, вот это хорошо. Не подскажете плз к какому примерно времени ждать?
0
amarao #
Я не могу точные сроки назвать, но это точно стоит в планах. Как получится, так получится.
+7
eakukin #
Что за авария была в облаке в понедельник? Хочется узнать подробности.
+10
amarao #
Ровно то же самое — то же самое хранилище, тот же самый adaptec. Сейчас по чуть-чуть клиентов переводим на нормальные хранилища, а с этой компанией сотрудничество заканчиваем. Если грубо «kernel panic, not synced».
0
ineedmoney #
Это какие?
–2
ineedmoney #
Хм, не ясно конечно за что минусы…
+1
gnusy #
у меня вопрос не в тему немного. чем обусловлена невозможность смены hostname на ваших VDS, хотя на виртмашине в облаке это возможно.
+6
amarao #
Ух, я по openvz постольку поскольку. Насколько я понимаю, проблема в том, что openvz делает контейнеры и по этому hostname'у их учитывает. А в xen'е потроха виртуалки — личная проблема виртуалки, они не влияют на учёт и операции с dom0. Хотя это гипотеза.
0
gnusy #
спасибо
0
smartly #
о-о-о-о
+5
Lisio #
Тоже вопрос не в тему. Можно как-нибудь убрать вырвиглазное творение пьяного дизайнера из раздела «облако» в панели управления и вернуть старое оформление?
0
amarao #
Если вы про смешное «бета-оформление», то да, его планируется выпиливать. Вы случайно ткнули в букву «бета» в заголовке, чтобы вернуться обратно — ссылка "α" рядом со словом «сеть дата-центров».

Нормальный дизайн в процессе (насколько мне сказали, уже закончили рисовать и начали верстать, а «это» — артефакты доисторического времени).

… и ещё одно доказательство, что не надо тыкать куда попало.
0
bigdogsru #
Неправда. Я никуда не тыкала. И у меня нет никаких ссылок рядом со словами «сеть дата-центров», а вырвиглазное оформление есть. Внезапно появилось.

+1
amarao #
Градиенты всегда были, но не во всех браузерах. В опере их нет.

По поводу «беты», значит, неправильно угадал, что не так.

Если вы про цвет шрифта, то это заделка на будущее — это легенда для графиков.
0
bigdogsru #
Да, я про цвет шрифта… не лучше сделать для легенды какой-нить цветной кружочек-квадратик слева от подписи? Графики — это класс! Ждем с нетерпением! На форуме клодо кто-то после падения даже говорил, что не уйдет от клодо, потому что в других облаках нет графиков :-)
Еще было бы здОрово статистику с возможностью экспорта в pdf за любой промежуток времени…
0
amarao #
Рук не хватает. Категорически.

Плюс, у меня дома сейчас навернулся кондиционер — -75% от работоспособности дома.
0
smartly #
Мне на этой странице не нравится, что буквы двоятся. Хуже читать. А раскраска разными цветами — это нормально.
0
bigdogsru #
А без тени цветные буквы станут менее читабельными, ИМХО. Другое дело, что тень можно было бы чуть подразмыть — не в IE же сидим, в CSS3 доступно размытие тени.
0
smartly #
Ну не знаю, какой у вас монитор и какое зрение, мне тень уменьшает читабельность (если сравнить с соседним текстом без тени)
0
bigdogsru #
Так соседний-то текст не цветной!
0
smartly #
хм. да. ну, можно подобрать тёмные цвета для белого фона. Но если цветов будет не хватать, то лучше забить на соответствие цвета на графике и в таблице, имхо.
0
amarao #
Пробовали без раскраски, не читаемо. В общем, это stub, до нормальной финансковой отчётности руки не дошли.
0
bigdogsru #
А можно еще подложить цветные фоны под черные буквы с белой тенью с параметрами 1px 1px 1px — тогда будет более читаемо, ИМХО…
0
bigdogsru #
Да это не претензия, а так — пожелание на будущее. Мне у вас очень нравится и так.
+2
amarao #
По здравому рассмотрению так и сделали. Спасибо.
0
bigdogsru #
Очень нужная штука! А то после сбоя одна из машинок сожрала всю мою компенсацию немереным потреблением памяти :-(
0
Evengard #
как я вас понимаю… У меня приложение загнало себя в состояние белки в колесе — падало, перезапускалось, снова падало, снова перезапускалось… За день это выжрало 150 рублей, хотя обычно по 7… Нашел в админке лимит на отключение, немного успокоился )
+5
odiszapc #
Вот что нужно делать, а не понтоваться тарифами. Красавцы.
0
seventh #
Подскажите недалёкому — это может помочь сэкономить затраты? На данный момент у меня 85-90% средств уходит на оперативку. (Debian mini, nginx даже без php и sql, пара статичных сайтов, ограничение 110-128 Мб.). Или мне всё-таки только в оптимизацию изнутри смотреть?
0
amarao #
Поставьте строгий минимум. К сожалению, меньше сделать нельзя — очень нестабильно получается.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.